51单片机驱动1602液晶的C程序.docx
- 文档编号:3645630
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:5
- 大小:15.04KB
51单片机驱动1602液晶的C程序.docx
《51单片机驱动1602液晶的C程序.docx》由会员分享,可在线阅读,更多相关《51单片机驱动1602液晶的C程序.docx(5页珍藏版)》请在冰豆网上搜索。
51单片机驱动1602液晶的C程序
51单片机驱动1602液晶的C程序
#include;
/*****************************************
电路连接
P1------DB0~DB7
P2.0------RS
P2.1------RW
P2.2------E
*****************************************/
#defineLCD_DB
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中写入数据********
void
LCD_write_data(uchardat)
{
LCD_DB=dat;
LCD_RS=1;//数据
LCD_RW=0;//写入
LCD_E=1;//允许
LCD_E=0;//产生下降沿
delay_n40us
(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次循就可完成。
清屏指令
LCD_RS=0;
//要用200次循环便能完成。
LCD_RW=1;
LCD_DB=0xff;
LCD_E=1;
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,"A");
while
(1);
}
过率极低,以至于不能正常使用LCD。
因此我没有再用检查忙函数。
而使
do//用了延时的方法,延时还是非常好用的。
我试了一下,用//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 驱动 1602 液晶 程序