frank_tw 发表于 2022-7-3 13:26 还可以这样任意io组合,长见识了 |
你可以作为参考,可以任意,只要下方对应定义 //MCU : STM32F0 //X=Portt 0=Pin number #define LCD_D0 X, 0 #define LCD_D1 X, 0 #define LCD_D2 X, 0 #define LCD_D3 X, 0 #define LCD_D4 X, 0 #define LCD_D5 X, 0 #define LCD_D6 X, 0 #define LCD_D7 X, 0 #define LCD_WR C, 1 //<---PC1 example #define STM_F0_GPIO_SET_(a, b) GPIO ## a ->BSRR = 1 << b #define STM_F0_GPIO_SET(a) STM_F0_GPIO_SET_(a) #define STM_F0_GPIO_CLR_(a, b) GPIO ## a ->BSRR = 1 << (b + 16) #define STM_F0_GPIO_CLR(a) STM_F0_GPIO_CLR_(a) #define LCD_WRITE(data) {; \ if(data & 0x01) STM_F0_GPIO_SET(LCD_D0); else STM_F0_GPIO_CLR(LCD_D0); \ if(data & 0x02) STM_F0_GPIO_SET(LCD_D1); else STM_F0_GPIO_CLR(LCD_D1); \ if(data & 0x04) STM_F0_GPIO_SET(LCD_D2); else STM_F0_GPIO_CLR(LCD_D2); \ if(data & 0x08) STM_F0_GPIO_SET(LCD_D3); else STM_F0_GPIO_CLR(LCD_D3); \ if(data & 0x10) STM_F0_GPIO_SET(LCD_D4); else STM_F0_GPIO_CLR(LCD_D4); \ if(data & 0x20) STM_F0_GPIO_SET(LCD_D5); else STM_F0_GPIO_CLR(LCD_D5); \ if(data & 0x40) STM_F0_GPIO_SET(LCD_D6); else STM_F0_GPIO_CLR(LCD_D6); \ if(data & 0x80) STM_F0_GPIO_SET(LCD_D7); else STM_F0_GPIO_CLR(LCD_D7); } #endif #define LCD_DATA8BITS_WRITE(data) { lcd_data8 = data; LCD_WRITE(lcd_data8); STM_F0_GPIO_CLR(LCD_WR); LCD_DELAY; STM_F0_GPIO_CLR(LCD_WR); } Example: LCD_DATA8BITS_WRITE(*pOutData); |
Hephaestus 发表于 2022-6-26 22:38 一个数组搞定了,这种没什么难 |
by64214 发表于 2022-6-27 10:38 已上传,请查阅 |
谢谢楼主分享 能分享一下程序吗 谢谢 |
LCD数据并口不仅可以倒序接,任意接、不同组IO口接都行。只要软件与其对应即可。 |
这又不是RAM的地址线可以随便接。数据线如果交换顺序,单片机软件也要把数据转换,更麻烦! |