最近在EASY2200上调液晶,用自带得液晶跑得通,项目需要,换了款基于1335控制器得液晶,用得是总线方式,调了好久也没弄通,程序如下: 程序说明:程序中有些中间调试过程,看了不少帖子,说是加延时或读忙状态,都还是不行
其中BCFG3 = 0x1000FFEF都不行
还有个很奇怪得问题:把CS直接接地,液晶就能初始化成功,但显示得乱七八糟得,想想可能和RAM访问有关(程序在RAM中运行得) 还有接线得时候偷懒了一下,直接就基本上接在以前得液晶接口上得,只是调节了一下线得位置,兼容性好像还不赖
各位帮帮忙哈~~~~~
#include "config.h"
TCOLOR gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8]; // 声明GUI显示缓冲区
/* 定义LCM地址 */ #define TG240128_COM (*((volatile unsigned short *) 0x83000002)) #define TG240128_DAT (*((volatile unsigned short *) 0x83000000))
#define Busy 0x40
#define Wait_For_Busy() while (LCD_ReadState()& Busy); #define delay(x) {unsigned char i=x; while(i--);} /********************************************************************** * 名称:LCD_ReadState() * 功能:读取状态字子程序。 * 入口参数:无 * 出口参数:返回值即为读出的状态字 * 说明:函数会设置LCD数据总线为输入方式 ***********************************************************************/ #define LCD_ReadState() TG240128_COM /********************************************************************** * 名称:LCD_WriteCommand() * 功能:写命令子程序。(发送命令前,不检查液晶模块的状态) * 入口参数:command 要写入LCD的命令字 * 出口参数:无 * 说明:函数会设置LCD数据总线为输出方式 ***********************************************************************/ #define LCD_WriteCommand(command) {/*Wait_For_Busy();*/TG240128_COM = (unsigned short)(command);/* delay(15);*/ } /********************************************************************** * 名称:LCD_WriteData() * 功能:写数据子程序。(发送数据前,不检查液晶模块的状态) * 入口参数:dat 要写入LCD的数据 * 出口参数:无 * 说明:函数会设置LCD数据总线为输出方式 ***********************************************************************/ #define LCD_WriteData(dat) {/*Wait_For_Busy();*/TG240128_DAT = (unsigned short)(dat);/*delay(100);*/}
/* SED1335 命令定义 */ #define LCD_SYS_SET 0x40 /* 初始化,显示窗口设置 参数8个 */ #define LCD_SLEEP_IN 0x53 /* 空闲操作 参数0个 */
#define LCD_DIS_ON 0x59 /* 显示开 参数1个 */ #define LCD_DIS_OFF 0x58 /* 显示关 参数1个 */ #define LCD_SCR_OLL 0x44 /* 设置显示区域,卷动 参数10个 */ #define LCD_CSR_FOM 0x5D /* 设置光标形状 参数2个 */ #define LCD_CGR_ADD 0x50 /* 设置CGRAM起始地址 参数2个 */ #define LCD_CSR_DIR 0x4C /* 设置光标移动方向 参数0个 */ #define LCD_DOT_DIR 0x5A /* 设置点单元卷动位置 参数1个 */ #define LCD_DIS_OVR 0x5B /* 设置合成显示方式 参数1个 */
#define LCD_CSR_WR 0x46 /* 设置光标位置 参数2个 */ #define LCD_CSR_RD 0x47 /* 读出光标位置 参数2个 */
#define LCD_MEM_WR 0x42 /* 写入显示缓冲区 */ #define LCD_MEM_RD 0x43 /* 从显示缓冲区读出 */
#define GET_LOW_BYTE(DAT) ((unsigned short)((DAT)&0xff)) /*取DAT的低8位*/ #define GET_HIG_BYTE(DAT) ((unsigned short)((DAT)>>8)) /*取DAT的高8位*/
unsigned char DCB_HEX_TAB[8] = {0x80, 0x40, 0x20, 0x10, 0x08,0x04, 0x02, 0x01}; unsigned char SYS_INIT_DAT[8] = {0x30, 0x87, 0x07, 0x27, 0x42,0xef, 0x28, 0x00};//{0x30, 0x87, 0x07, 0x27, 0x2F,0xef, 0x28, 0x00}; unsigned char SCROLL_DAT[10] = {0x00, 0x00, 0xf0, 0x80, 0x25, 0xF0, 0x80, 0x50,0x00,0x60};//{0x00, 0x00, 0xF0, 0xb0, 0x04, 0xf0, 0x80, 0x50,0x00,0x60};
/**************************************************************************** * 名称:DelayNS() * 功能:长软件延时 * 入口参数:dly 延时参数,值越大,延时越久 * 出口参数:无 ****************************************************************************/ void DelayS(uint16 dly) { uint32 ii; for(ii=0; ii<dly; ii++); }
void GUI_Initialize(void) { unsigned char i; LCD_WriteCommand(LCD_SYS_SET); // DelayS(15); for(i=0 ; i < 8 ; i++) {LCD_WriteData(SYS_INIT_DAT); DelayS(15); }
LCD_WriteCommand(LCD_SCR_OLL); DelayS(15); // for(i=0 ; i < 10 ; i++) {LCD_WriteData(SCROLL_DAT);DelayS(15);} LCD_WriteCommand(LCD_DOT_DIR);DelayS(15); // LCD_WriteData(0x00); DelayS(15); LCD_WriteCommand(LCD_DIS_OVR); DelayS(15); // LCD_WriteData(0x0C); DelayS(15); LCD_WriteCommand(LCD_DIS_ON); DelayS(15); // LCD_WriteData(0x04);DelayS(15); LCD_WriteCommand(LCD_CSR_WR); // LCD_WriteData(0x00); LCD_WriteData(0x00); LCD_WriteCommand(LCD_CSR_DIR); // LCD_FillAll(0); }
|