7.1.5 模拟8080驱动程序

/**

* @brief 初始化8080用到的引脚.

* @param none

* @retval none

*/

void lcd_port_8080_init(void)

{

gpio_init_type gpio_init_struct = {0};

crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);//使能时钟

crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);

crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);

crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);

 

gpio_init_struct.gpio_pins = GPIO_PINS_13 | GPIO_PINS_5 | GPIO_PINS_7 |GPIO_PINS_4;//配置DC、WR、CS、RD、引脚

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;//输出模式

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;//推挽

gpio_init_struct.gpio_pull = GPIO_PULL_UP;//上拉

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init(GPIOD, &gpio_init_struct);

gpio_bits_set(GPIOD,GPIO_PINS_4|GPIO_PINS_5);//拉高RD、WR脚

 

gpio_init_struct.gpio_pins = GPIO_PINS_0 | GPIO_PINS_1 | GPIO_PINS_14 | GPIO_PINS_15;//配置D0、D1、D2、D3

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init(GPIOD, &gpio_init_struct);

 

gpio_init_struct.gpio_pins = GPIO_PINS_7 | GPIO_PINS_8 | GPIO_PINS_9 | GPIO_PINS_10;//配置D4、D5、D6、D7

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init(GPIOE, &gpio_init_struct);

 

/* lcd reset lines configuration */

gpio_init_struct.gpio_pins = GPIO_PINS_7;//配置RESER引脚

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_pull = GPIO_PULL_UP;

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init(GPIOC, &gpio_init_struct);

 

/* lcd BL lines configuration */

gpio_init_struct.gpio_pins = GPIO_PINS_6;

gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;

gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

gpio_init_struct.gpio_pull = GPIO_PULL_UP;

gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;

gpio_init(GPIOA, &gpio_init_struct);

LCD_BL_HIGH;

}

 

/**

* @brief 8080模拟发送一个字节数据函数.

* @param dat:发送的字节

* @retval none

*/

void SendData(unsigned char dat)

{

if((dat&0x01)==0x01) LCD_D0_HIGH;//一个引脚发送一位数据

else LCD_D0_LOW;

if( (dat&0x02)==0x02) LCD_D1_HIGH;

else LCD_D1_LOW;

if((dat&0x04)==0x04) LCD_D2_HIGH;

else LCD_D2_LOW;

if( (dat&0x08)==0x08 ) LCD_D3_HIGH;

else LCD_D3_LOW;

if((dat&0x10)==0x10) LCD_D4_HIGH;

else LCD_D4_LOW;

if( (dat&0x20)==0x20 ) LCD_D5_HIGH;

else LCD_D5_LOW;

if( (dat&0x40)==0x40) LCD_D6_HIGH;

else LCD_D6_LOW;

if( (dat&0x80)==0x80) LCD_D7_HIGH;

else LCD_D7_LOW;

}

/**

* @brief 写命令函数.

* @param i:要发送的命令

* @retval none

*/

void WriteComm(unsigned int i)

{

LCD_CS_LOW;//片选引脚拉低

LCD_DC_LOW; //DC脚拉低,发送命令

 

SendData(i);//发送命令

LCD_WR_LOW;//WR脚拉低

LCD_WR_HIGH;//WR脚拉高上升沿写使能

LCD_CS_HIGH;

}

void WriteData(unsigned int i)

{

LCD_CS_LOW;//片选引脚拉低

LCD_DC_HIGH;//DC脚拉高,发送数据

 

SendData(i);//发送数据

LCD_WR_LOW;//WR脚拉上升沿写使能

LCD_WR_HIGH;

LCD_CS_HIGH;

}

 

void lcd_8080_init(void)

{

lcd_port_8080_init();//初始化8080引脚

 

LCD_RESET_HIGH; //复位引脚拉高

delay_ms(200);

LCD_RESET_LOW;

delay_ms(200);

LCD_RESET_HIGH;

WriteComm( 0x11); //退出睡眠

 

delay_ms(120); //Delay 120ms

 

WriteComm( 0x36); //行列扫描顺序及RGB/BGR,横放/竖放控制

WriteData(0x00);

 

WriteComm(0x3A); //定义RGB图像数据格式

WriteData( 0x55);

 

WriteComm( 0xB2); //Porch Setting

WriteData(0x1F);

WriteData(0x1F);

WriteData(0x00);

WriteData( 0x33);

WriteData( 0x33);

 

WriteComm( 0xB7); //Gate Control

WriteData(0x73);

 

WriteComm( 0xBB); //VCOM Setting

WriteData( 0x1E);

 

WriteComm(0xC0); //LCM Control

WriteData( 0x2C);

 

WriteComm(0xC2); //VDV and VRH Command Enable

WriteData( 0x01);

 

WriteComm(0xC3); //VRH Set

WriteData(0x13);

 

WriteComm(0xC4); //VDV Set

WriteData(0x20);

 

WriteComm( 0xC6);//Frame Rate Control in Normal Mode

WriteData( 0x0F);

 

WriteComm( 0xD0); //Power Control

WriteData( 0xA4);

WriteData(0xA1);

 

WriteComm(0xE0); //Positive Voltage Gamma Control

WriteData(0xF0);

WriteData(0x0C);

WriteData(0x15);

WriteData(0x09);

WriteData(0x09);

 

WriteData(0x07);

WriteData(0x44);

WriteData(0x50);

WriteData(0x36);

WriteData(0x11);

WriteData(0x10);

WriteData(0x2F);

WriteData(0x35);

 

WriteComm(0xE1); //Negative Voltage Gamma Control

WriteData(0xF0);

WriteData(0x17);

WriteData(0x1A);

WriteData(0x0C);

WriteData(0x0B);

WriteData(0x25);

WriteData(0x3A);

WriteData(0x43);

WriteData(0x4F);

WriteData(0x19);

WriteData(0x15);

WriteData(0x16);

WriteData(0x30);

WriteData(0x37);

 

WriteComm( 0xe9); //Equalize time control

WriteData(0x07);

WriteData(0x07);

WriteData(0x03);

WriteComm(0xE7); //SPI2 Enable

WriteData(0x10);

WriteComm(0x21); //Display Inversion On颜色翻转

 

WriteComm(0x29); //Display on开启显示

 

lcd_clear(WHITE); //清屏为白色

LCD_BL_LOW; //点亮背光

}

下一页
上一页
    • 联系电话

    • 0755—83453881
    • 服务时间

    • 周一至周五 9:00-18:00
    • 高通GT-HMI交流群