51单片机驱动1602液晶的C程序文档格式.docx
《51单片机驱动1602液晶的C程序文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机驱动1602液晶的C程序文档格式.docx(5页珍藏版)》请在冰豆网上搜索。
![51单片机驱动1602液晶的C程序文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/24/be1648f7-68d0-4643-aa8f-87d51b60f7ea/be1648f7-68d0-4643-aa8f-87d51b60f7ea1.gif)
P1
sbitLCD_RS=P2^0;
sbitLCD_RW=P2^1;
sbitLCD_E=P2^2;
/******定义函数****************/
#defineucharunsignedchar
#defineuintunsignedint
voidLCD_init(void);
//声明初始化函数
voidLCD_write_command(ucharcommand);
//写指令函数
voidLCD_write_data(uchardat);
//写数据函数
voidLCD_disp_char(ucharx,uchary,uchardat);
//在某个屏幕位置上显示一
个字符,X(0-16),y(1-2)
//voidLCD_check_busy(void);
//检查忙函数。
我没用到此函数,因为通过率极
低。
voiddelay_n40us(uintn);
//延时函数
//********************************
//*******初始化函数***************
voidLCD_init(void)
{
LCD_write_command(0x38);
//设置8位格式,2行,5x7
LCD_write_command(0x0c);
//整体显示,关光标,不闪烁
//LCD_write_command(0x06);
//设定输入方式,增量不移位
//LCD_write_command(0x01);
//清除屏幕显示
delay_n40us(100);
//实践证明,我的LCD1602上,用for循环200次就能可靠
完成清屏指令。
}
//********写指令函数***********设置先向1602写入的数据为地址*
void
LCD_write_command(uchardat)
LCD_DB=dat;
LCD_RS=0;
//指令
LCD_RW=0;
//写入
LCD_E=1;
//允许
LCD_E=0;
//产生下降沿
delay_n40us
(1);
//实践证明,我的LCD1602上,用for循环1次就能完成普通
写指令。
//*******************************
//********再写数据函数*****向1602中写入数据********
LCD_write_data(uchardat)
LCD_RS=1;
//数据
//*******显示一个字符函数*********
voidLCD_disp_char(ucharx,uchary,uchardat)
ucharaddress;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
LCD_write_command(address);
LCD_write_data(dat);
/*******检查忙函数*************
voidLCD_check_busy()
//实践证明,在我的LCD1602上,检查忙指令通
{LCD_E=0;
//for循环作延时,普通指令只要1次循就可完成。
清屏指令
//要用200次循环便能完成。
LCD_RW=1;
LCD_DB=0xff;
while(LCD_DB^7==1);
}
******************************/
//********延时函数***************
voiddelay_n40us(uintn)
{uinti;
ucharj;
for(i=n;
i>
;
0;
i--)
for(j=0;
j<
2;
j++);
//在这个延时循环函数中我只做了
2次循环,
}//实践证明我的LCD1602上普
通的指令只需1次循环就能可靠完成。
//*********主函数*****************
voidmain(void)
LCD_init();
LCD_disp_char(0,1,&
quot;
A&
);
while
(1);
过率极低,以至于不能正常使用LCD。
因此我没有再用检查忙函数。
而使
do//用了延时的方法,延时还是非常好用的。
我试了一下,用//