51單片機的1602驅動(dòng)程序
/*************************************
函數名:lcdwcmd
函數功能:向1602中寫(xiě)指令
參數:cmd(命令)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdwcmd(uchar cmd)
{
while(lcdbusy());
RSlcd=0;
RWlcd=0;
EPlcd=0;
_nop_();
_nop_();
P0=cmd;
delaynop();
EPlcd = 1;
delaynop();
EPlcd = 0;
}
/*************************************
函數名:lcdwdat
函數功能:向1602中寫(xiě)數據
參數:dat(數據)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdwdat(uchar dat)
{
while(lcdbusy());
RSlcd=1;
RWlcd=0;
EPlcd=0;
P0=dat;
delaynop();
EPlcd=1;
delaynop();
EPlcd=0;
}
/*************************************
函數名:lcdprc
函數功能:寫(xiě)一個(gè)字符
參數:zifu(字符)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdprc(uchar zifu)
{
lcdwdat(zifu);
}
/*************************************
函數名:lcdprs
函數功能:寫(xiě)字符串
參數:zifu(字符)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdprs(uchar *string)
{
while(*string)
{lcdwdat(*string);string++;}
}
/*************************************
函數名:lcdclear
函數功能:清屏
參數:無(wú)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdclear(void)
{
lcdwcmd(0x01);
}
/*************************************
函數名:lcdenter
函數功能:軟復位
參數:無(wú)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdenter(void)
{
lcdwcmd(0x2);
}
/*************************************
函數名:lcdsetxs
函數功能:顯示設置
參數:d(顯示)c(光標)b(閃爍)
返回:無(wú)
備注:d=1(開(kāi)顯示),d=0(關(guān)顯示)
c=1(顯示光標),c=0(不顯示光標)
b=1(光標閃爍),b=0(不閃爍)
*************************************/
void lcdsetxs(bit D,bit C,bit B)
{
unsigned char order;
order=0x8;
if(D)
order=order+0x4;
if(C)
order=order+0x2;
if(B)
order=order+0x1;
lcdwcmd(order);
}
/*************************************
函數名:lcdsetim
函數功能:左右移動(dòng)
參數:I_D(地址指針), S(整行移動(dòng))
返回:無(wú)
備注:I_D=1(光標右移),I_D=0(光標左移)
S=1(整行左右移),S=0(整行不動(dòng))
*************************************/
void lcdsetim(bit I_D,bit S)
{
unsigned char order;
order=0x4;
if(I_D)
order=order+0x2;
if(S)
order=order+0x1;
lcdwcmd(order);
}本文引用地址:http://dyxdggzs.com/article/201612/324086.htm
/*************************************
函數名:lcdinit
函數功能:初始化
參數:無(wú)
返回:無(wú)
備注:無(wú)
*************************************/
void lcdinit()
{
lcdwcmd(0x38);
_nop_();
_nop_();
_nop_();
_nop_();
lcdwcmd(0x38);
_nop_();
_nop_();
_nop_();
_nop_();
lcdwcmd(0x38);
_nop_();
_nop_();
_nop_();
_nop_();
lcdsetxs(1,0,0);//設置輸入模式,默認增量方式,畫(huà)面不動(dòng),光標向右邊移動(dòng)
lcdsetim(1,0);
lcdwcmd(0x01);//清屏
}
/*************************************
函數名:lcdsetxy
函數功能:坐標設置
參數:x(列數),y(行數)
返回:無(wú)
備注:配合lcdxyprc,lcdxyprs函數使用
列數小于39,行數小于2
*************************************/
void lcdsetxy(uchar X,uchar Y)
{
uchar Address;
if(X>39)
X=39;
if (Y == 0)
{
Address = 0x80 + X;
}
else
{
Address = 0xc0 + X;
}
lcdwcmd(Address);
}
評論