3.5寸ST7796屏I8080-16bit接口,P2=D8-D15,P0=D0-D7,使用STC32G12K128的LCM接口刷屏未能成功,用I/O口驱动可以正常显示。参考了例程没能找到原因请高手帮忙看看啥问题。
下述程序中被用被注释掉的代码驱动是正常的,用没有注释掉的代码没反应,代码如下:
- sbit LCD_RS = P4^5;
- sbit LCD_RD = P4^4;
- sbit LCD_WR = P4^2;
-
- sbit LCD_CS = P1^1;
- sbit LCD_RST = P1^0;
-
- sfr LCD_BUS_H = 0xA0; //P0--0x80,P1=0x90,P2=0xA0,P3=0x0B0, P6= 0xE8
- sfr LCD_BUS_L = 0x80; //P0--0x80,P1=0x90,P2=0xA0,P3=0x0B0, P6= 0xE8
复制代码
- /***
- //----写指令函数-------------------------------------------
- void LCD_WR_REG(u8 cmd)
- {
- LCD_RS_CLR(); //point to ID register
- LCD_CS_CLR();
- LCD_BUS_H = 0;
- LCD_BUS_L = cmd;
- LCD_WR_PULSE();
- LCD_RS_SET(); //point to GRAM
- LCD_CS_SET();
- }
- //----写8bit数据函数---------------------------------------
- void LCD_WR_DATA(u8 dat)
- {
- LCD_CS_CLR();
- LCD_BUS_H = 0;
- LCD_BUS_L = dat;
- LCD_WR_PULSE();
- LCD_CS_SET();
- }
- //----写入16bit显示数据函数--------------------------------
- //输出R-5BIT,G-6BIT,B-5BIT
- void LCD_RGB_DATA(u16 dat)
- {
- LCD_CS_CLR();
- LCD_BUS_H = (u8)(dat >> 8);
- LCD_BUS_L = (u8)(dat & 0xFF);
- LCD_WR_PULSE();
- LCD_CS_SET();
- }
- ***/
- //----16BIT-8080-LCM总线初始化-----------------------------
- void LCM_Config(void)
- {
- LCMIFCFG = 0x82;//BD7=1 (使能LCM接口中断),B3、B2=00 (16bit总线时P2=高8位、P0=低8位),B1=1 (16bit接口),B0=0 (I8080接口模式)
- LCMIFCFG2 = 0x09; //RS:P45,RD:P44,WR:P42; Setup Time=2,HOLD Time=1
- LCMIFSTA = 0x00;//清除LCM中断标志
- }
- //----写指令函数-------------------------------------------
- void LCD_WR_REG(u8 cmd)
- {
- LCMIFDATL = cmd; //(低8位=cmd)
- LCD_CS_CLR();
- LCMIFCR = 0x84; //使能LCM接口、发送"写命令"脉冲
- LCD_CS_SET();
- }
- //----写8bit数据函数---------------------------------------
- void LCD_WR_DATA(u8 dat)
- {
- LCMIFDATL = dat; //(低8位=dat)
- LCD_CS_CLR();
- LCMIFCR = 0x85; //使能LCM接口、发送"写数据"脉冲
- LCD_CS_SET();
- }
- //----写入16bit颜色数据函数--------------------------------
- //输出R-5BIT,G-6BIT,B-5BIT
- void LCD_RGB_DATA(u16 dat)
- {
- LCD_WR_DATA((u8)(dat>>8));
- LCD_WR_DATA((u8)dat);
- }
复制代码
|