基于51单片机的1602LCD显示文档格式.docx
- 文档编号:19124424
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:8
- 大小:156.07KB
基于51单片机的1602LCD显示文档格式.docx
《基于51单片机的1602LCD显示文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的1602LCD显示文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
1602液晶显示器LM016L一只
若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。
在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标
,在对象选择器中单击POWER和GROUND放置电源和地。
放置好元件后,布好线。
左键双击各元件,设置相应元件参数,完成电路图的设计。
2软件设计
用1602LCD显示两行字符的流程图如下所示。
用1602LCD显示“WelcomtoChina”和“Hi!
Goodmorning!
”的详细C51程序如下。
//用LCD循环显示"
WelcometoChina"
和"
Hi!
"
#include<
reg51.h>
//包含单片机的头文件
intrins.h>
//包含_nop_()函数定义的头文件
sbitRS="
P2"
^0;
//寄存器选择位,将RS位定义为P2.0引脚
sbitRW="
^1;
//读写选择位,将RW位定义为P2.1引脚
sbitE="
^2;
//使能信号位,将E位定义为P2.2引脚
sbitBF="
P0"
^7;
//忙碌标志位,,将BF位定义为P0.7引脚
unsignedcharcodestring[]={"
};
unsignedcharcodestring1[]={"
/*************************************************
函数功能:
延时1ms
(3j+2)*i=(3×
33+2)×
10=1010(微秒),可以认为是1毫秒
*************************************************/
voiddelay1ms()
{
unsignedchari,j;
for(i=0;
i<
10;
i++)
for(j=0;
j<
33;
j++)
;
}
/*****************************
延时若干毫秒
入口参数:
n
******************************/
voiddelay(unsignedcharn)
unsignedchari;
n;
delay1ms();
}
/*******************************************
判断液晶模块的忙碌状态
返回值:
result。
result=1,忙碌;
result=0,不忙
*******************************************/
unsignedcharBusyTest(void)
bitresult;
RS=0;
//根据规定,RS为低电平,RW为高电平时,可以读状态
RW=1;
E=1;
//E=1,才允许读写
_nop_();
//空操作
//空操作四个机器周期,给硬件反应时间
result=BF;
//将忙碌标志电平赋给result
E=0;
returnresult;
/**************************************************
将模式设置指令或显示地址写入液晶模块
dictate
**************************************************/
voidWriteInstruction(unsignedchardictate)
{
while(BusyTest()==1);
//如果忙就等待
//根据规定,RS和R/W同时为低电平时,可以写入指令
RW=0;
//E置低电平
//空操作两个机器周期,给硬件反应时间
P0=dictate;
//将数据送入P0口,即写入指令或地址
//空操作四个机器周期,给硬件反应时间
//E置高电平(正跳变)
//当E由高电平跳变成低电平时,液晶模块开始执行命令
将数据(字符的标准ASCII码)写入液晶模块
y(为字符常量)
voidWriteData(unsignedchary)
RS=1;
//RS为高电平,RW为低电平时,可以写入数据
P0=y;
//将数据送入P0口,即将数据写入液晶模块
_nop_();
/******************************************
对LCD的显示模式进行初始化设置
******************************************/
voidLcdInitiate(void)
delay(15);
//延时15ms,首次写指令时应给LCD一段较长的反应时间
WriteInstruction(0x38);
//显示模式设置:
8位数据,16×
2显示,5×
7点阵,delay(5);
//延时5ms
WriteInstruction(0x38);
delay(5);
WriteInstruction(0x0f);
显示开,有光标,光标闪烁
WriteInstruction(0x06);
光标右移,字符不移
WriteInstruction(0x01);
//清屏幕指令,将以前的显示内容清除
voidmain(void)//主函数
LcdInitiate();
//调用LCD初始化函数
delay(10);
while
(1)
{
WriteInstruction(0x01);
//清显示:
清屏幕指令
WriteInstruction(0x80);
//第一行显示地址
i=0;
while(string[i]!
='
\0'
)
{//显示字符
WriteData(string[i]);
i++;
delay(150);
}
4;
delay(250);
WriteInstruction(0xc0);
//第二行显示地址
while(string1[i]!
WriteData(string1[i]);
打开Keil程序(本人使用的是Keil8.05中文版),执行菜单命令“工程”→“新建工程”创建“LCD”项目,并选择单片机型号为AT89C51。
执行菜单命令“文件”→“新建”创建文件,输入C语言源程序,保存为“LCD.C”。
在ProjectWorkspace窗口中右击源代码组1,选择“添加文件到组‘源代码组l’”将源程序“LCD.C”添加到项目中。
在Keil中执行执行菜单命令“工程”→“创建目标”(或点击“创建目标”快捷按钮),编译源程序。
如果编译成功,则在“OutputWindow”的“创建”窗口中显示没有错误,并创建了“LCD.HEX”文件。
3仿真与调试
关于Proteus与Keil的联合仿真调试,可参见我以前所写的博文或其它参考资料。
启动Proteus的ISIS,并将其放在屏幕的右上角(可将原理图放大到合适大小);
再启动Keil的μVision3,并将其放在屏幕的左下角。
在Keil中执行菜单命令“调试”→“启动/停止调试”,或直接单击图标
,进入Keil调试环境。
同时,在ProteusISIS的窗口中可看出Proteus也进入了程序调试状态。
在Keil代码编辑窗口中设置相应断点,断点的设置方法:
在需要设置断点语句前双击鼠标左键,可设置断点;
再次双击,可取消该断点。
在Keil中按F5键(或点击“运行”快捷按钮)运行程序。
1602LCD循环显示“WelcomtoChina”和“Hi!
”,如下图所示。
或可以点击单步、运行到光标处、全速运行等快捷按钮,以及同时观察工程窗口寄存器页面、存储器窗口等,来进行仿真调试。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 1602 LCD 显示
![提示](https://static.bdocx.com/images/bang_tan.gif)