带字库LCD12864操作源代码(二)
*****************************
// 函数名称:写数据
// 函数功能:写数据到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);
}
| 评论 |
|
|