- #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, 下载次数: 0)