....代码,大家帮忙查查...先谢过了.
/*-------------------------------------------Includes-----------------------------------------*/ #include "sys_config.h" #include "hw_config.h" #include "hw_gpiodrv.h"
#ifdef LCD #include "font.h"
/*--------------------------------------------Macros------------------------------------------*/ /*-----------------------------------------Local types----------------------------------------*/ /*-------------------------------------Exported variables-------------------------------------*/ volatile u1_t xdata ghwlcm_fontBuf[4][16]; //显示英文时存放ASCII,4行16列,显示中文时存放汉字内码,4行8列
/*---------------------------------------Local variables--------------------------------------*/ void hwlcm_LCMWriteCMD(u1_t CMD) ; static void _hwlcm_LCMWriteData(u1_t dat) ; static void _hwlcm_LCMWriteColAddr(u1_t addr) ; static u1_t _hwlcm_DichotomyFindISN(u2_t dat) ;
/*===================================================================================== 函数: hwlcm_LCMWriteCMD 功能: 写命令 参数: CMD:命令 返回: 无 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ void hwlcm_LCMWriteCMD(u1_t CMD) //指令 { bool_t __bea ;
__bea = _testbit_(EA) ; hwgpio_ClearPin(LCDEN_PORT, LCDEN_PIN) ; _nop_() ; _nop_() ; hwgpio_ClearPin(LCDDI_PORT, LCDDI_PIN) ; _nop_() ; _nop_() ; hwgpio_ClearPin(LCDCS_PORT, LCDCS_PIN) ; _nop_() ; _nop_() ; hwgpio_WritePort(P0, CMD) ; _nop_(); _nop_(); _nop_() ; hwgpio_SetPin(LCDEN_PORT, LCDEN_PIN) ; _nop_() ; _nop_() ; hwgpio_SetPin(LCDCS_PORT, LCDCS_PIN) ; _nop_() ; _nop_() ;
EA = __bea ; }
/*===================================================================================== 函数: _hwlcm_LCMWriteData 功能: 写数据 参数: dat:数据 返回: 无 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ static void _hwlcm_LCMWriteData(u1_t dat) { bool_t __bea ;
__bea = _testbit_(EA) ; //数据 hwgpio_ClearPin(LCDEN_PORT, LCDEN_PIN) ; _nop_() ; _nop_() ; hwgpio_SetPin(LCDDI_PORT, LCDDI_PIN) ; _nop_() ; _nop_() ; hwgpio_ClearPin(LCDCS_PORT, LCDCS_PIN) ; _nop_() ; _nop_() ; hwgpio_WritePort(P0, dat) ; _nop_(); _nop_(); _nop_(); hwgpio_SetPin(LCDEN_PORT, LCDEN_PIN) ; _nop_() ; _nop_() ; hwgpio_SetPin(LCDCS_PORT, LCDCS_PIN) ; _nop_() ; _nop_() ;
EA = __bea ; }
/*===================================================================================== 函数: _hwlcm_LCMWriteColAddr 功能: 写列地址 参数: addr:列地址 返回: 无 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ static void _hwlcm_LCMWriteColAddr(u1_t addr) { u1_t __temp; bool_t __bea ;
__bea = _testbit_(EA) ;
__temp = addr + 2 ; hwlcm_LCMWriteCMD(__temp & 0x0f); hwlcm_LCMWriteCMD(((__temp & 0xf0) >> 4) | 0x10);
EA = __bea ; }
/*===================================================================================== 函数: _hwlcm_DichotomyFindISN 功能: 二分法查找查找数据(汉字内码) 参数: dat:待查数 返回: dat在数组(cSymbLattGB16)中位置 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ static u1_t _hwlcm_DichotomyFindISN(u2_t dat) { u2_t __StationA, __StationB; u2_t __TemData; u2_t __StationMid;
__StationA = 0; __StationB = AMOUNT_OF_CHINESE_FONT - 1; __StationMid = 0; __TemData = 0;
while (__StationA <= __StationB) { __StationMid = (__StationA + __StationB) / 2; __TemData = cSymbLattGB16[__StationMid].Index.Index16;
if (__TemData > dat) { __StationB = __StationMid - 1 ; } else { if (__TemData < dat) { __StationA = __StationMid + 1 ; } else { return __StationMid ; } }
} return (0); }
/*===================================================================================== 函数: hwlcm_RefreshDisplayRAM 功能: 显示ghwlcm_fontBuf的内容 参数: RefRow:待显示行 返回: 英文8*16点阵,中文16*16点阵 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ void hwlcm_RefreshDisplayRAM(u1_t RefRow) { volatile u1_t idata __i; volatile u1_t idata __j; volatile u1_t idata __k; //行 列 volatile u2_t idata __TempPosit; volatile Uint2_u idata __tempISN; bool_t __bea ;
__bea = _testbit_(EA) ; __j = 0 ; __k = 0 ; __TempPosit = 0 ;
__i = RefRow ; //for (__i=0; __i<4; __i++) { for (__j=0; __j<16; __j++) { //显示中文 if (ghwlcm_fontBuf[__i][__j] > 0x7f) //汉字内码头一个字节是大于0x7f { __tempISN.U_2byte.Hbyte = ghwlcm_fontBuf[__i][__j]; __tempISN.U_2byte.Lbyte = ghwlcm_fontBuf[__i][__j + 1]; __TempPosit = _hwlcm_DichotomyFindISN(__tempISN.U_word); //查找汉字内码对应的点阵数据地址
hwlcm_LCMWriteCMD(LCM_PAGE|(__i * 2)); //第i*2页 _hwlcm_LCMWriteColAddr(__j * 8); //第_hwlcm_LCMWriteData for (__k = 0; __k < 16; __k++) { _hwlcm_LCMWriteData(cSymbLattGB16[__TempPosit].Msk[__k]); _nop_() ; } hwlcm_LCMWriteCMD(LCM_PAGE|(__i * 2 + 1)); _hwlcm_LCMWriteColAddr(__j * 8); for (__k = 16; __k < 32; __k++) { _hwlcm_LCMWriteData(cSymbLattGB16[__TempPosit].Msk[__k]); _nop_() ; } __j = __j + 1; } //显示英文 else { hwlcm_LCMWriteCMD(LCM_PAGE|(__i * 2));//第i*2页 _hwlcm_LCMWriteColAddr(__j * 8);//第j*8列 for (__k = 0; __k < 8; __k++) { _hwlcm_LCMWriteData(c_ASCII[ghwlcm_fontBuf][__i][__j] - ASCII_OFFSET_ADDRESS][__k]); _nop_() ; } hwlcm_LCMWriteCMD(LCM_PAGE|(__i * 2 + 1)); _hwlcm_LCMWriteColAddr(__j * 8); for (__k = 8; __k < 16; __k++) { _hwlcm_LCMWriteData(c_ASCII[ghwlcm_fontBuf][__i][__j] - ASCII_OFFSET_ADDRESS][__k]); _nop_() ; } }
_nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; _nop_() ; } }
EA = __bea ; }
#if 1 /*===================================================================================== 函数: hwlcm_DisplayFromMemo 功能: 读点阵数据显示 参数: pDataMem:点阵数据存储位置 RowPlace:显示行位置 ColsPalce:显示列位置 DisType:显示类型,0:E文,1:中文 返回: 无 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ // 数据空间 行 列 E/汉字 void hwlcm_DisplayFromMemo(u1_t *pDataMem, u1_t RowPlace, u1_t ColsPalce, u1_t DisType) //行列位置 { u1_t __k;
if(DisType) {//显示中文 hwlcm_LCMWriteCMD(LCM_PAGE|(RowPlace * 2)); //第i*2页 _hwlcm_LCMWriteColAddr(ColsPalce * 8); //第_hwlcm_LCMWriteData for (__k = 0; __k < 16; __k++) { _hwlcm_LCMWriteData(pDataMem[__k]); } if(DisType == 1) {//显示汉字后一半 hwlcm_LCMWriteCMD(LCM_PAGE|(RowPlace * 2 + 1)); _hwlcm_LCMWriteColAddr(ColsPalce * 8); for (__k = 16; __k < 32; __k++) { _hwlcm_LCMWriteData(pDataMem[__k]); } } } else {//显示英文 hwlcm_LCMWriteCMD(LCM_PAGE|(RowPlace * 2));//第i*2页 _hwlcm_LCMWriteColAddr(ColsPalce * 8);//第j*8列 for (__k = 0; __k < 8; __k++) { _hwlcm_LCMWriteData(pDataMem[__k]); } hwlcm_LCMWriteCMD(LCM_PAGE|(RowPlace * 2 + 1)); _hwlcm_LCMWriteColAddr(ColsPalce * 8); for (__k = 8; __k < 16; __k++) { _hwlcm_LCMWriteData(pDataMem[__k]); } } } #endif /*===================================================================================== 函数: hwlcm_LCMInit 功能: 初始化 参数: 无 返回: 无 备注: 创建: whs-07-11-23 修改: ========================================================================================*/ void hwlcm_LCMInit(void) { hwgpio_SetPin(LCDRST_PORT, LCDRST_PIN) ; //不能clear了,就复位了。 hwgpio_ClearPin(LCDEN_PORT, LCDEN_PIN) ; hwgpio_SetPin(LCDCS_PORT, LCDCS_PIN) ; hwgpio_ClearPin(LCDDI_PORT, LCDDI_PIN) ;
memset(ghwlcm_fontBuf, ASCII_OFFSET_ADDRESS, sizeof(ghwlcm_fontBuf)) ; //填充空格 }
/*===================================================================================== 函数: syslcm_LCMInit 功能: 初始化 参数: 无 返回: 无 备注:包括模式设置的初始化 创建: whs-07-11-23 修改: ========================================================================================*/ void syslcm_LCMInit(void) { hwlcm_LCMInit() ;
_timerlcm = LCMRESET_TIME ;
hwlcm_LCMWriteCMD(LCM_RESET); //复位 不能随便复位,一复位那些设置全没了。
hwlcm_LCMWriteCMD(LCM_MAPPINGCONTROL); hwlcm_LCMWriteCMD(LCM_PUMPCONTROL); hwlcm_LCMWriteCMD(LCM_BAISRATIO); hwlcm_LCMWriteCMD(LCM_VP1); hwlcm_LCMWriteCMD(LCM_VP2); hwlcm_LCMWriteCMD(LCM_TC); hwlcm_LCMWriteCMD(LCM_RAMADDR); hwlcm_LCMWriteCMD(LCM_FRAMERATE); hwlcm_LCMWriteCMD(LCM_PANELLOADING); hwlcm_LCMWriteCMD(LCM_MA);
hwlcm_LCMWriteCMD(LCM_COMMONDISP); //0xa7为反色显示 hwlcm_LCMWriteCMD(LCM_DISPWHITE); //0xa5为全黑 hwlcm_LCMWriteCMD(LCM_STARTLINE0); //设起始行为0
syslcm_SetLCMStartLine(0) ; syslcm_SetLCMDisplayType(0) ; hwlcm_LCMWriteCMD(LCM_DISPLAYON); //开启LCM }
|
|