你可以作為參考,可以任意,只要下方對應定義
//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);
|