打印
[开发工具]

【新定义MCU开发板测评】arduino LCD

[复制链接]
273|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
51xlf|  楼主 | 2022-12-2 14:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这个板子的NBK-RD8x3x 已经提供了ARDUINO的接口,可以很方便的操作一些arduino的模块。
之前购买过一块跟arduino 对应的LCD
[size=0.83em]
1.jpg (118.58 KB )
下载附件
[color=rgb(153, 153, 153) !important]2022-6-1 22:31 上传




NBK-RD8x3x 核心开发板上面也是集成了这个接口的,不过,对于操作这个端口,还是有点费事的,因为IO都不是连贯的。
需要单独对IO口进行操作的 。查看原理找打对应的引脚。

在这里是看到不到D5和D6的

需要在看这里,用短路帽进行短接才能使用。

为了方便移植,这里使用的是宏定义实现每一个引脚的操作代码。
#define LCD_RD_GPIO_Port GPIO1
#define LCD_RD_Pin GPIO_PIN_4

#define LCD_WR_GPIO_Port GPIO1
#define LCD_WR_Pin  GPIO_PIN_5

#define LCD_RS_GPIO_Port GPIO1
#define LCD_RS_Pin   GPIO_PIN_6

#define LCD_CS_GPIO_Port GPIO1
#define LCD_CS_Pin GPIO_PIN_7

#define LCD_RST_GPIO_Port GPIO3
#define LCD_RST_Pin GPIO_PIN_4

#define LCD_D0_GPIO_Port  GPIO0
#define LCD_D0_Pin   GPIO_PIN_6
#define LCD_D1_GPIO_Port  GPIO5
#define LCD_D1_Pin   GPIO_PIN_3
#define LCD_D2_GPIO_Port  GPIO3
#define LCD_D2_Pin   GPIO_PIN_7
#define LCD_D3_GPIO_Port  GPIO4
#define LCD_D3_Pin   GPIO_PIN_0
#define LCD_D4_GPIO_Port GPIO0
#define LCD_D4_Pin   GPIO_PIN_2
#define LCD_D5_GPIO_Port GPIO5
#define LCD_D5_Pin   GPIO_PIN_4
#define LCD_D6_GPIO_Port GPIO5
#define LCD_D6_Pin   GPIO_PIN_5
#define LCD_D7_GPIO_Port   GPIO2
#define LCD_D7_Pin   GPIO_PIN_2
然后对每一个IO口 初始化,使用宏定义的好处就是需要再去关心那个IO了,只需要对应的修改端口就行了。
void lcd_gpio_init()
{
GPIO_Init(LCD_RD_GPIO_Port, LCD_RD_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_WR_GPIO_Port, LCD_WR_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D0_GPIO_Port, LCD_D0_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D1_GPIO_Port, LCD_D1_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D2_GPIO_Port, LCD_D2_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D3_GPIO_Port, LCD_D3_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D4_GPIO_Port, LCD_D4_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D5_GPIO_Port, LCD_D5_Pin, GPIO_MODE_OUT_PP); //
                GPIO_Init(LCD_D6_GPIO_Port, LCD_D6_Pin, GPIO_MODE_OUT_PP); //
        GPIO_Init(LCD_D7_GPIO_Port, LCD_D7_Pin, GPIO_MODE_OUT_PP); //

}
对端口的操作也是使用的是宏定义的方式。
#define                LCD_CS_LOW()                GPIO_WriteLow(LCD_CS_GPIO_Port,LCD_CS_Pin)         //
#define                LCD_CS_HIGH()                GPIO_WriteHigh(LCD_CS_GPIO_Port,LCD_CS_Pin)                //

#define                LCD_RST_LOW()                GPIO_WriteLow(LCD_RST_GPIO_Port,LCD_RST_Pin)          //
#define                LCD_RST_HIGH()        GPIO_WriteHigh(LCD_RST_GPIO_Port,LCD_RST_Pin)                //


#define                LCD_WR_LOW()                GPIO_WriteLow(LCD_WR_GPIO_Port,LCD_WR_Pin)         //
#define                LCD_WR_HIGH()                GPIO_WriteHigh(LCD_WR_GPIO_Port,LCD_WR_Pin)                //

#define                LCD_RS_LOW()                GPIO_WriteLow(LCD_RS_GPIO_Port,LCD_RS_Pin)         //
#define                LCD_RS_HIGH()                GPIO_WriteHigh(LCD_RS_GPIO_Port,LCD_RS_Pin)                //

#define                LCD_RD_LOW()                GPIO_WriteLow(LCD_RD_GPIO_Port,LCD_CS_Pin)         //
#define                LCD_RD_HIGH()                GPIO_WriteHigh(LCD_RD_GPIO_Port,LCD_RD_Pin)                //
这里最复杂的就是对数据口写入的操作,因为8个口不能直接写入,所以得分别操作才行。
根据每一个bit,分别操作一个口,所以不要指望有太高的刷屏速度了。
后期可以放置在P1-P4上,进行连续操作,这个速度就快多了。
void Lcd_Writ_Bus(uint8_t dat)
{
    GPIO_WriteLow(LCD_WR_GPIO_Port,LCD_WR_Pin) ;       
    if(dat&0x01)        GPIO_WriteHigh(LCD_D0_GPIO_Port,LCD_D0_Pin);       
    else                GPIO_WriteLow(LCD_D0_GPIO_Port,LCD_D0_Pin) ;       
    if(dat&0x02)        GPIO_WriteHigh(LCD_D1_GPIO_Port,LCD_D1_Pin);               
    else                GPIO_WriteLow(LCD_D1_GPIO_Port,LCD_D1_Pin) ;       
    if(dat&0x04)        GPIO_WriteHigh(LCD_D2_GPIO_Port,LCD_D2_Pin);       
    else                GPIO_WriteLow(LCD_D2_GPIO_Port,LCD_D2_Pin);       
    if(dat&0x08)        GPIO_WriteHigh(LCD_D3_GPIO_Port,LCD_D3_Pin);       
    else                GPIO_WriteLow(LCD_D3_GPIO_Port,LCD_D3_Pin);       
    if(dat&0x10)        GPIO_WriteHigh(LCD_D4_GPIO_Port,LCD_D4_Pin);               
    else                GPIO_WriteLow(LCD_D4_GPIO_Port,LCD_D4_Pin) ;       
    if(dat&0x20)        GPIO_WriteHigh(LCD_D5_GPIO_Port,LCD_D5_Pin);               
    else                GPIO_WriteLow(LCD_D5_GPIO_Port,LCD_D5_Pin );
    if(dat&0x40)        GPIO_WriteHigh(LCD_D6_GPIO_Port,LCD_D6_Pin);       
    else                GPIO_WriteLow(LCD_D6_GPIO_Port,LCD_D6_Pin) ;       
    if(dat&0x80)        GPIO_WriteHigh(LCD_D7_GPIO_Port,LCD_D7_Pin);               
    else                GPIO_WriteLow(LCD_D7_GPIO_Port,LCD_D7_Pin) ;       
    GPIO_WriteHigh(LCD_WR_GPIO_Port,LCD_WR_Pin);       
}
在main函数中对LCD初始化,然后显示字符就行了。
  lcd_init();
        lcd_clear(BLACK);
        OLED_ShowStringCN(0,20,"bbs.21ic.com",16,GREEN,BLACK);
        OLED_ShowStringCN(0,40,"新定义 RDSMCU",16,RED,BLACK);
        OLED_ShowString(0,60,"RDS MCU",16,BLUE,BLACK);
        OLED_ShowString(0,80,"RDS MCU",24,YELLOW,BLACK);
        OLED_ShowString(0,110,"RDS MCU",8,WHITE,BLACK);
        lcd_fill_rect(10, 170, 50, 50, YELLOW);
lcd_draw_circle(180, 150, 40, 0xF000);
        lcd_draw_rect(120, 240, 50, 50, BLUE);
先看看效果吧。



最后附上源代码
lcd.rar (4.4 KB)

使用特权

评论回复
沙发
chenjun89| | 2022-12-2 18:33 | 只看该作者
Arduino开发确实很方便,不用花大量时间在底层学习和操作上了。

使用特权

评论回复
板凳
51xlf|  楼主 | 2022-12-2 19:09 | 只看该作者
chenjun89 发表于 2022-12-2 18:33
Arduino开发确实很方便,不用花大量时间在底层学习和操作上了。

这个只是借用的接口而已,没有使用arduino的库。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

531

主题

9335

帖子

19

粉丝