一.前言 接上回,测试完IO的程序后,准备驱动手头现有的液晶进行显示。 使用IO模拟SPI驱动液晶屏的芯片 ST7567A,进行显示。 把屏幕通过杜邦线和开发板相连接,使用板上的电源给屏幕供电。 二.初始化相关IO口和屏幕驱动 GPIO_SetFunc(GPIOB, GPIO_PIN0, GPIO_FUN0);/*功能复用选择.*/ GPIO_SetFunc(GPIOA, GPIO_PIN0, GPIO_FUN0); GPIO_SetFunc(GPIOA, GPIO_PIN1, GPIO_FUN0); GPIO_SetFunc(GPIOA, GPIO_PIN9, GPIO_FUN0); GPIO_SetFunc(GPIOB, GPIO_PIN6, GPIO_FUN0);//液晶驱动IO初始化 GPIO_SetDir(GPIOB, GPIO_PIN0, GPIO_OUT); GPIO_SetDir(GPIOA, GPIO_PIN0, GPIO_OUT); GPIO_SetDir(GPIOA, GPIO_PIN1, GPIO_OUT); GPIO_SetDir(GPIOA, GPIO_PIN9, GPIO_OUT); GPIO_SetDir(GPIOB, GPIO_PIN6, GPIO_OUT);//液晶驱动IO初始化 #define LEDCS_UP do{GPIO_SetPinLevel(GPIOB, GPIO_PIN0, GPIO_LEVEL_HIGH);}while(0) // write 1 PB0 #define LEDCS_DOWN do{GPIO_SetPinLevel(GPIOB, GPIO_PIN0, GPIO_LEVEL_LOW);}while(0) // write 0 #define LEDRST_UP do{GPIO_SetPinLevel(GPIOA, GPIO_PIN0, GPIO_LEVEL_HIGH);}while(0) // write 1 PA0 #define LEDRST_DOWN do{GPIO_SetPinLevel(GPIOA, GPIO_PIN0, GPIO_LEVEL_LOW);}while(0) // write 0 #define LEDRS_UP do{GPIO_SetPinLevel(GPIOA, GPIO_PIN1, GPIO_LEVEL_HIGH);}while(0) // write 1 PA1 #define LEDRS_DOWN do{GPIO_SetPinLevel(GPIOA, GPIO_PIN1, GPIO_LEVEL_LOW);}while(0) // write 0 #define LEDSCK_UP do{GPIO_SetPinLevel(GPIOA, GPIO_PIN9, GPIO_LEVEL_HIGH);}while(0) // write 1 PA9 #define LEDSCK_DOWN do{GPIO_SetPinLevel(GPIOA, GPIO_PIN9, GPIO_LEVEL_LOW);}while(0) // write 0 #define LEDSDA_UP do{GPIO_SetPinLevel(GPIOB, GPIO_PIN6, GPIO_LEVEL_HIGH);}while(0) // write 1 PB6 #define LEDSDA_DOWN do{GPIO_SetPinLevel(GPIOB, GPIO_PIN6, GPIO_LEVEL_LOW);}while(0) // write 0 void transfer_command(int data1) { char i; LEDCS_DOWN; // cs1=0; LEDRS_DOWN; // rs=0; for (i=0; i<8; i++) { LEDSCK_DOWN; // sclk=0; lcd_delay_us(2); if (data1&0x80) { LEDSDA_UP; // sid=1; } else { LEDSDA_DOWN; // sid=0; } LEDSCK_UP; // sclk=1; lcd_delay_us(2); data1 <<= 1; } LEDCS_UP; // cs1=1; } /*写数据到LCD模块*/ void transfer_data(int data1) { char i; LEDCS_DOWN; // cs1=0; LEDRS_UP; // rs=1; for (i=0; i<8; i++) { LEDSCK_DOWN; // sclk=0; lcd_delay_us(1); if (data1&0x80) { LEDSDA_UP; // sid=1; } else { LEDSDA_DOWN; // sid=0; } LEDSCK_UP; // sclk=1; lcd_delay_us(1); data1 <<= 1; } LEDCS_UP; // cs1=1; } /*LCD模块初始化*/ void Init_Lcd(void) { //DISPLAY_ON; lcd_delay(100); F_Inverse = 0; LEDRST_DOWN; // reset=0; /*低电平复位*/ lcd_delay(100); LEDRST_UP; // reset=1; /*复位完毕*/ lcd_delay(100); transfer_command(0xe2); /*软复位*/ lcd_delay(5); transfer_command(0x2c); /*升压步聚1*/ lcd_delay(5); transfer_command(0x2e); /*升压步聚2*/ lcd_delay(5); transfer_command(0x2f); /*升压步聚3*/ lcd_delay(5); transfer_command(0x24); /*粗调对比度,可设置范围0x20~0x27*/ transfer_command(0x81); /*微调对比度*/ transfer_command(0x1C); /*0x1b,微调对比度的值,可设置范围0x00~0x3f*/ transfer_command(0xa2); /*1/9偏压比(bias)*/ transfer_command(0xc0); /*行扫描顺序:从上到下C8 C0反方向*/ transfer_command(0xa1); /*列扫描顺序:从左到右A0 A1反方向*/ transfer_command(0x40); /*起始行:第一行开始*/ transfer_command(0xaf); /*开显示*/ } 三.屏幕显示展示 把程序更新到开发板,进行验证。
显示杰发科技。
接下来准备使用ADC功能采集芯片内的温度传感器进行显示。
|