- void LCD_config(void)
- {
- gpio_init_type gpio_init_struct;
- crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
- gpio_default_para_init(&gpio_init_struct);
- gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
- gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
- gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
- gpio_init_struct.gpio_pins = GPIO_PINS_5|GPIO_PINS_6|GPIO_PINS_7|GPIO_PINS_15;
- gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
- gpio_init(GPIOA, &gpio_init_struct);
-
- crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
- gpio_init_struct.gpio_pins = GPIO_PINS_8|GPIO_PINS_9;
- gpio_init(GPIOB, &gpio_init_struct);
- }
实现相关引脚输出高低电平的定义语句为:
#define LCD_SCLK_Set gpio_bits_write(GPIOB,GPIO_PINS_8,TRUE)
#define LCD _SCLK_Clr gpio_bits_write(GPIOB,GPIO_PINS_8,FALSE)
#define LCD _SDIN_Set gpio_bits_write(GPIOB,GPIO_PINS_9,TRUE)
#define LCD _SDIN_Clr gpio_bits_write(GPIOB,GPIO_PINS_9,FALSE)
#define LCD _RST_Set gpio_bits_write(GPIOA,GPIO_PINS_5,TRUE)
#define LCD D_RST_Clr gpio_bits_write(GPIOA,GPIO_PINS_5,FALSE)
#define LCD _DC_Set gpio_bits_write(GPIOA,GPIO_PINS_6,TRUE)
#define LCD_DC_Clr gpio_bits_write(GPIOA,GPIO_PINS_6,FALSE)
#define LCD _CS_Set gpio_bits_write(GPIOA,GPIO_PINS_7,TRUE)
#define LCD _CS_Clr gpio_bits_write(GPIOA,GPIO_PINS_7,FALSE)
#define LCD _BLK_Set gpio_bits_write(GPIOA,GPIO_PINS_15,TRUE)
#define LCD _BLK_Clr gpio_bits_write(GPIOA,GPIO_PINS_15,FALSE)
在所用软件模拟SPI发送字节数据的情况下,其发送数据的函数为:
- void LCD_Writ_Bus(u8 dat)
- {
- u8 i;
- LCD_CS_Clr;
- for(i=0;i<8;i++)
- {
- LCD_SCLK_Clr;
- if(dat&0x80)
- LCD_SDIN_Set;
- else
- LCD_SDIN_Clr;
- LCD_SCLK_Set;
- dat<<=1;
- }
- LCD_CS_Set;
- }
对LCD屏进行初始化的函数为:
- void LCD_Init(void)
- {
- LCD_RST_Clr;
- delay_ms(200);
- LCD_RST_Set;
- delay_ms(200);
- LCD_WR_REG(0x11);
- delay_ms(100);
- LCD_WR_REG(0x21);
- LCD_WR_REG(0xB1);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB2);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB3);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x05);
- LCD_WR_DATA8(0x3A);
- LCD_WR_DATA8(0x3A);
- LCD_WR_REG(0xB4);
- LCD_WR_DATA8(0x03);
- LCD_WR_REG(0xC0);
- LCD_WR_DATA8(0x62);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x04);
- LCD_WR_REG(0xC1);
- LCD_WR_DATA8(0xC0);
- LCD_WR_REG(0xC2);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x00);
- LCD_WR_REG(0xC3);
- LCD_WR_DATA8(0x8D);
- LCD_WR_DATA8(0x6A);
- LCD_WR_REG(0xC4);
- LCD_WR_DATA8(0x8D);
- LCD_WR_DATA8(0xEE);
- LCD_WR_REG(0xC5);
- LCD_WR_DATA8(0x0E);
- LCD_WR_REG(0xE0);
- LCD_WR_DATA8(0x10);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x07);
- LCD_WR_DATA8(0x0A);
- LCD_WR_DATA8(0x12);
- LCD_WR_DATA8(0x27);
- LCD_WR_DATA8(0x37);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x10);
- LCD_WR_REG(0xE1);
- LCD_WR_DATA8(0x10);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x03);
- LCD_WR_DATA8(0x0F);
- LCD_WR_DATA8(0x06);
- LCD_WR_DATA8(0x02);
- LCD_WR_DATA8(0x08);
- LCD_WR_DATA8(0x0A);
- LCD_WR_DATA8(0x13);
- LCD_WR_DATA8(0x26);
- LCD_WR_DATA8(0x36);
- LCD_WR_DATA8(0x00);
- LCD_WR_DATA8(0x0D);
- LCD_WR_DATA8(0x0E);
- LCD_WR_DATA8(0x10);
- LCD_WR_REG(0x3A);
- LCD_WR_DATA8(0x05);
- LCD_WR_REG(0x36);
- LCD_WR_DATA8(0x78);
- LCD_WR_REG(0x29);
- LCD_BLK_Set;
- }
以指定色彩进行清屏的函数为:
- void LCD_Clear(u16 Color)
- {
- u16 i,j;
- LCD_Address_Set(0,0,LCD_W-1,LCD_H-1);
- for(i=0;i<LCD_W;i++)
- {
- for (j=0;j<LCD_H;j++)
- {
- LCD_WR_DATA(Color);
- }
- }
- }
实现字符串显示的函数为:
- void LCD_ShowString(u16 x,u16 y,const u8 *p,u16 color)
- {
- while(*p!='\0')
- {
- if(x>LCD_W-16){x=0;y+=16;}
- if(y>LCD_H-16){y=x=0;LCD_Clear(RED);}
- LCD_ShowChar(x,y,*p,1,color);
- x+=8;
- p++;
- }
- }
进行LCD屏测试的主程序为:
- int main(void)
- {
- system_clock_config();
- at32_board_init();
- LCD_config();
- LCD_Init();
- LCD_Clear(RED);
- LCD_ShowString(10,10,"AT32L021",YELLOW);
- LCD_ShowString(10,30,"jinglixixi",YELLOW);
- while(1)
- {
- at32_led_toggle(LED2);
- delay_ms(200);
- at32_led_toggle(LED3);
- delay_ms(200);
- at32_led_toggle(LED4);
- delay_ms(200);
- }
- }
经程序的编译和下载,其测试效果如图1所示。
图1 测试效果图
在添加图片显示函数的情况下,其显示效果如图2所示。
相应的图片显示函数为:
- void LCD_ShowPicture(u16 x1,u16 y1,u16 x2,u16 y2)
- {
- int i;
- LCD_Address_Set(x1,y1,x2,y2);
- for(i=0;i<12800;i++)
- {
- LCD_WR_DATA8(gImage_fj[i*2]);
- LCD_WR_DATA8(gImage_fj[i*2+1]);
- }
- }
图2 显示效果
图3 显示内容