12864带字库程序.docx
《12864带字库程序.docx》由会员分享,可在线阅读,更多相关《12864带字库程序.docx(8页珍藏版)》请在冰豆网上搜索。
12864带字库程序
12864带字库程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/*TS12864A-3端口定义*/
#defineLCD_dataP0//数据口
sbitLCD_RS=P1^0;//寄存器选择输入
sbitLCD_RW=P1^1;//液晶读/写控制
sbitLCD_EN=P2^5;//液晶使能控制
sbitLCD_PSB=P1^2;//串/并方式控制
sbitwela=P2^6;
sbitdula=P2^7;
ucharcodedis1[]={"欢迎指导工作"};
ucharcodedis2[]={"淮南师范学院"};
ucharcodedis3[]={"罗雷雷"};
ucharcodedis4[]={"胡伟伟"};
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
ucharIRDIS[2];
ucharIRCOM[4];
voiddelay0(ucharx);//x*0.14MS
voidbeep();
voiddataconv();
voidlcd_pos(ucharX,ucharY);//确定显示位置
/*******************************************************************/
/**/
/*延时函数*/
/**/
/*******************************************************************/
voiddelay(intms)
{
while(ms--)
{
uchari;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/**/
/*检查LCD忙状态*/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据。
*/
/**/
/*******************************************************************/
bitlcd_busy()
{
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
/*******************************************************************/
/**/
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。
*/
/**/
/*******************************************************************/
voidlcd_wcmd(ucharcmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。
*/
/**/
/*******************************************************************/
voidlcd_wdat(uchardat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*******************************************************************/
/**/
/*LCD初始化设定*/
/**/
/*******************************************************************/
voidlcd_init()
{
LCD_PSB=1;//并口方式
lcd_wcmd(0x34);//扩充指令操作
delay(5);
lcd_wcmd(0x30);//基本指令操作
delay(5);
lcd_wcmd(0x0C);//显示开,关光标
delay(5);
lcd_wcmd(0x01);//清除LCD的显示内容
delay(5);
}
/*********************************************************/
/**/
/*主程序*/
/**/
/*********************************************************/
main()
{
uchari;
delay(10);//延时
wela=0;
dula=0;
lcd_init();//初始化LCD
lcd_pos(0,0);//设置显示位置为第一行的第1个字符
i=0;
while(dis1[i]!
='\0')
{//显示字符
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(1,0);//设置显示位置为第二行的第1个字符
i=0;
while(dis2[i]!
='\0')
{
lcd_wdat(dis2[i]);//显示字符
i++;
}
lcd_pos(2,0);//设置显示位置为第三行的第1个字符
i=0;
while(dis3[i]!
='\0')
{
lcd_wdat(dis3[i]);//显示字符
i++;
}
lcd_pos(3,0);//设置显示位置为第四行的第1个字符
i=0;
while(dis4[i]!
='\0')
{
lcd_wdat(dis4[i]);//显示字符
i++;
}
while
(1);
}
/*********************************************************/
/**/
/*延时x*0.14ms子程序*/
/**/
/*********************************************************/
voiddelay0(ucharx)//x*0.14MS
{
uchari;
while(x--)
{
for(i=0;i<13;i++){}
}
}
/*********************************************************/
/**/
/*设定显示位置*/
/**/
/*********************************************************/
voidlcd_pos(ucharX,ucharY)
{
ucharpos;
if(X==0)
{X=0x80;}
elseif(X==1)
{X=0x90;}
elseif(X==2)
{X=0x88;}
elseif(X==3)
{X=0x98;}
pos=X+Y;
lcd_wcmd(pos);//显示地址
}