[开发工具] 【新定义MCU开发板测评】arduino LCD

[复制链接]
 楼主| 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口进行操作的 。查看原理找打对应的引脚。
搜狗截图22年12月02日1436_6.jpg
在这里是看到不到D5和D6的
搜狗截图22年12月02日1436_8.jpg
需要在看这里,用短路帽进行短接才能使用。
搜狗截图22年12月02日1436_7.jpg
为了方便移植,这里使用的是宏定义实现每一个引脚的操作代码。
  1. #define LCD_RD_GPIO_Port GPIO1
  2. #define LCD_RD_Pin GPIO_PIN_4

  3. #define LCD_WR_GPIO_Port GPIO1
  4. #define LCD_WR_Pin  GPIO_PIN_5

  5. #define LCD_RS_GPIO_Port GPIO1
  6. #define LCD_RS_Pin   GPIO_PIN_6

  7. #define LCD_CS_GPIO_Port GPIO1
  8. #define LCD_CS_Pin GPIO_PIN_7

  9. #define LCD_RST_GPIO_Port GPIO3
  10. #define LCD_RST_Pin GPIO_PIN_4

  11. #define LCD_D0_GPIO_Port  GPIO0
  12. #define LCD_D0_Pin   GPIO_PIN_6
  13. #define LCD_D1_GPIO_Port  GPIO5
  14. #define LCD_D1_Pin   GPIO_PIN_3
  15. #define LCD_D2_GPIO_Port  GPIO3
  16. #define LCD_D2_Pin   GPIO_PIN_7
  17. #define LCD_D3_GPIO_Port  GPIO4
  18. #define LCD_D3_Pin   GPIO_PIN_0
  19. #define LCD_D4_GPIO_Port GPIO0
  20. #define LCD_D4_Pin   GPIO_PIN_2
  21. #define LCD_D5_GPIO_Port GPIO5
  22. #define LCD_D5_Pin   GPIO_PIN_4
  23. #define LCD_D6_GPIO_Port GPIO5
  24. #define LCD_D6_Pin   GPIO_PIN_5
  25. #define LCD_D7_GPIO_Port   GPIO2
  26. #define LCD_D7_Pin   GPIO_PIN_2
然后对每一个IO口 初始化,使用宏定义的好处就是需要再去关心那个IO了,只需要对应的修改端口就行了。
  1. void lcd_gpio_init()
  2. {
  3. GPIO_Init(LCD_RD_GPIO_Port, LCD_RD_Pin, GPIO_MODE_OUT_PP); //
  4.         GPIO_Init(LCD_WR_GPIO_Port, LCD_WR_Pin, GPIO_MODE_OUT_PP); //
  5.         GPIO_Init(LCD_RS_GPIO_Port, LCD_RS_Pin, GPIO_MODE_OUT_PP); //
  6.         GPIO_Init(LCD_CS_GPIO_Port, LCD_CS_Pin, GPIO_MODE_OUT_PP); //
  7.         GPIO_Init(LCD_RST_GPIO_Port, LCD_RST_Pin, GPIO_MODE_OUT_PP); //
  8.         GPIO_Init(LCD_D0_GPIO_Port, LCD_D0_Pin, GPIO_MODE_OUT_PP); //
  9.         GPIO_Init(LCD_D1_GPIO_Port, LCD_D1_Pin, GPIO_MODE_OUT_PP); //
  10.         GPIO_Init(LCD_D2_GPIO_Port, LCD_D2_Pin, GPIO_MODE_OUT_PP); //
  11.         GPIO_Init(LCD_D3_GPIO_Port, LCD_D3_Pin, GPIO_MODE_OUT_PP); //
  12.         GPIO_Init(LCD_D4_GPIO_Port, LCD_D4_Pin, GPIO_MODE_OUT_PP); //
  13.         GPIO_Init(LCD_D5_GPIO_Port, LCD_D5_Pin, GPIO_MODE_OUT_PP); //
  14.                 GPIO_Init(LCD_D6_GPIO_Port, LCD_D6_Pin, GPIO_MODE_OUT_PP); //
  15.         GPIO_Init(LCD_D7_GPIO_Port, LCD_D7_Pin, GPIO_MODE_OUT_PP); //

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

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


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

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

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


最后附上源代码
lcd.rar (4.4 KB, 下载次数: 0)
chenjun89 发表于 2022-12-2 18:33 来自手机 | 显示全部楼层
Arduino开发确实很方便,不用花大量时间在底层学习和操作上了。
 楼主| 51xlf 发表于 2022-12-2 19:09 | 显示全部楼层
chenjun89 发表于 2022-12-2 18:33
Arduino开发确实很方便,不用花大量时间在底层学习和操作上了。

这个只是借用的接口而已,没有使用arduino的库。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

547

主题

9919

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部

547

主题

9919

帖子

24

粉丝
快速回复 在线客服 返回列表 返回顶部