/////LCM_start/////
/*============================================================
1602LCD四位數據接口驅動程序 馬文壘 2004/12/13
==============================================================
感謝:本程序參考 明皓的1602LCM液晶顯示屏的驅動函數和實例
連接線圖:
----------------------------------
| LCM-----51 | LCM-----51 |
----------------------------------
|RS-----P2.1 | DB4-----P1.4 |
|RW-----P2.0 | DB5-----P1.5 |
|E -----P2.2 | DB6-----P1.6 |
|VLCD接1K電阻到GND| DB7-----P1.7 |
---------------------------------------------------
[注:AT89S51使用12M晶振]
=============================================================*/
void writelcd(bit command,unsigned char ddata)
{
ReadStatusLCM(); //檢測忙
LCM_Data = (ddata&0xf0)|(P1&0x0f);
LCM_RW = 0;
if(command==0) LCM_RS = 0; else LCM_RS=1;
LCM_E = 1;
LCM_E = 0;
LCM_E = 0;
LCM_Data = ((ddata<<4)&0xf0)|(P1&0x0f);
if(command==0) LCM_RS = 0; else LCM_RS=1;
LCM_E = 1;
LCM_E = 0;
LCM_E = 0;
}
//讀狀態
unsigned char ReadStatusLCM(void)
{
P1_7=1;
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
while(P1_7&0x01);//檢測忙信號
return(P1_7);
}
void LCMInit(void) //LCM初始化
{
LCM_Data=0xff;
writelcd(0,0x28); //三次顯示模式設置,不檢測忙信號
Delay5Ms();
writelcd(0,0x28);
Delay5Ms();
writelcd(0,0x28);
Delay5Ms();
writelcd(0,0x28); //顯示模式設置,開始要求每次檢測忙信號
writelcd(0,0x0c); // 顯示開及光標設置
writelcd(0,0x01); //顯示清屏
writelcd(0,0x06); // 顯示光標移動設置
}
//按指定位置顯示一個字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
Y &= 0x1; X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //當要顯示第二行時地址碼+0x40;
X |= 0x80; //算出指令碼
writelcd(0,X);
writelcd(1,DData);
}
//按指定位置顯示一串字符 ***原來的遇到空格0x20就不顯示***
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength,j;
ListLength = strlen(DData);
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (X <= 0xF) //X坐標應小于0xF
{
for(j=0;j<ListLength;j++)
{
DisplayOneChar(X, Y, DData[j]); //顯示單個字符
X++;
}
}
}
//5ms延時
void Delay5Ms(void)
{
unsigned int TempCyc = 5552;
while(TempCyc--);
}
//400ms延時
void Delay400Ms(void)
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
/////LCM_end///////
1602LCD四位數據接口驅動1602LCD四位數據接口驅動程序
更新時間: 2006-03-23 16:18:39來源: 粵嵌教育瀏覽量:4268