带字库LCD12864操作源代码(二)

2014-11-23 22:19:41 ? 作者: ? 浏览: 8
***************************** // 函数名称:写数据 // 函数功能:写数据到12864 // 入口参数:要写的数据 // 出口参数:无 // 返回值 :无 //*************************************** void WriteDataLCD(uint8 Dat) { CheckLcdBusy(); //检测忙 LCD_RS_HIGH ; LCD_RW_LOW ; WriteLcdIo(Dat) ;//写数据到IO LCD_EN_HIGH ; DelayLcdMs(DLY100US) ; LCD_EN_LOW ; } //************************************* // 函数名称:ReadDataLCD // 函数功能:读12864的数据 // 入口参数:无 // 出口参数:无 // 返回值 :所读的数据 //*************************************** uint8 ReadDataLCD(void) { uint8 Tmp ; SetLcdIo() ; //把IO置高 LCD_RS_HIGH ; LCD_RW_HIGH ; LCD_EN_LOW ; DelayLcdMs(DLY100US) ; LCD_EN_HIGH ; Tmp = ReadLcdIo() ; return(Tmp); } //************************************* // 函数名称:LCDInit // 函数功能:12864初始化设置 // 入口参数:无 // 出口参数:无 // 返回值 :无 //*************************************** void LCDInit(void) //LCM初始化 { WriteCommandLCD(0x30); //显示模式设置,开始要求每次检测忙信号 WriteCommandLCD(0x01); //显示清屏 WriteCommandLCD(0x06); // 显示光标移动设置 WriteCommandLCD(0x0C); // 显示开及光标设置 } //************************************* // 函数名称:LCDClear // 函数功能:12864清屏设置 // 入口参数:无 // 出口参数:无 // 返回值 :无 //*************************************** void LCDClear(void) //清屏 { WriteCommandLCD(0x01); //显示清屏 WriteCommandLCD(0x34); // 显示光标移动设置 WriteCommandLCD(0x30); // 显示开及光标设置 } //************************************* // 函数名称:DisplayOneChar // 函数功能:按指定位置显示一个字符 // 入口参数:显示位置 数据 // 出口参数:无 // 返回值 :无 //*************************************** void DisplayOneChar(uint8 X, uint8 Y, uint8 Dat) { if(Y<1)Y=1; else if(Y>4)Y=4; X &= 0x0F; //限制X不能大于16,Y不能大于1 switch(Y) { case 1:X|=0X80;break; case 2:X|=0X90;break; case 3:X|=0X88;break; case 4:X|=0X98;break; } WriteCommandLCD(X); //这里不检测忙信号,发送地址码 WriteDataLCD(Dat); } //************************************* // 函数名称:DisplayOneChar // 函数功能:按指定位置显示一串字符 // 入口参数:显示位置 数据 // 出口参数:无 // 返回值 :无 //*************************************** void DisplayListChar(uint8 X, uint8 Y, uint8 *DData) { uint8 ListLength=0; if(Y<1)Y=1; else if(Y>4)Y=4; X &= 0x0F; //限制X不能大于16,Y在1-4之内//+++++ x --> x2 switch(Y) { case 1:X |= 0X80; break; //根据行数来选择相应地址 case 2:X |= 0X90; break; case 3:X |= 0X88; break; case 4:X |= 0X98; break; } WriteCommandLCD(X); //发送地址码 while (DData[ListLength] > 0)// '\0'=0若到达字串尾则退出 { WriteDataLCD(DData[ListLength]); // ListLength++; } } //************************************* // 函数名称:DisplayImage // 函数功能:图形显示122*32 // 入口参数:显示位置 数据 // 出口参数:无 // 返回值 :无 //*************************************** void DisplayImage(uint8 *DData) { uint8 x,y,i; uint16 tmp=0; for(i=0;i<9;i+=8) { //分两屏,上半屏和下半屏,因为起始地址不同,需要分开 for(x=0;x<32;x++)//32行 { WriteCommandLCD(0x34); WriteCommandLCD((0x80+x));//列地址 WriteCommandLCD((0x80+i));//行地址 下半屏 即第三行地址0X88 WriteCommandLCD(0x30); for(y=0;y<16;y++) { WriteDataLCD(DData[tmp+y]);//读取数据写入LCD } tmp+=16; } } WriteCommandLCD(0x36); //扩充功能设定 WriteCommandLCD(0x30); }

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: