完整word版基于单片机和PROTEUS的液晶显示屏LCD1602的使用.docx
- 文档编号:9652303
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:38
- 大小:392.45KB
完整word版基于单片机和PROTEUS的液晶显示屏LCD1602的使用.docx
《完整word版基于单片机和PROTEUS的液晶显示屏LCD1602的使用.docx》由会员分享,可在线阅读,更多相关《完整word版基于单片机和PROTEUS的液晶显示屏LCD1602的使用.docx(38页珍藏版)》请在冰点文库上搜索。
完整word版基于单片机和PROTEUS的液晶显示屏LCD1602的使用
液晶显示屏1602的使用
LCD1602显示字符‘A'
斧头帮2010-05-10
Proteus仿真图
■■■r■■■
*■■■■11■
■1--1■IF
___「1F_
■I■■I■■■
・・・・■』・
■■■I■■■
■1--1■IF
■■
r1
r■
r■
■■
r■
A
J:
■■・
r1I
■,、r
L■J
L■J
■■・
rFF
r■
rr
p■
b■
bL
■■
P■
i;4:
--I
1
I
■
--1
■1--1
■
I-
-■
-■
.■■
-■
.■■
--■
r-■丁J
--■
-■■
■a
11
a
-a
1.
.启
-B
■1
■■
I■!
1
■I
■1
■:
R2|R3R4|R5RQ|R7|R3|R9叱I
■U1
lOk
LCDIieO?
--■
■■+5V■'
,一A一:
■1
'1
R1
10k
.-tAL-
GND
列・
JUT
■0'-
^:
S:
00
P_
零史s富出sossa呂fife
-B
Pl-7
PIS
PI.5
Pl.4
Pk3
PI-2
Pl.l
P1.0
AT89C51
P艮TW
P3em/R
P35/npj迥pj.o/uniP3.2/1WTOpa.imoP3.C;RXD
EA
ALE
PSB4
Rsr
XTAL2
P2.7//M5
P26/A14
P25//M3P24/A12P2.3/^1
P2.2//i)D
P2一“旳
P2.0/>Je
P07ZWpo.&r心叩,5屈
Po.4yyw
PD.3/An
PD.2Z^
PO.IASOI
叩』呦
-33™1
•74
PMI
■35
■JC
■3?
PE1
-3B
—rar~1
pia1
■1)R吐尺日为
-"n繡晶關汩•:
斧头帮--1期;2010:
0510
;的弓》3
*接他
#include
#include
sbitRS=PSO;
sbitRW=P2人1;
sbitE=P2人2;
sbitBF=POT;
C程序:
/******************************************
实例81:
用LCD显示字符A
*******************************************/
//包含单片机寄存器的头文件
〃包含_nop_()函数定义的头文件
II寄存器选择位,将RS位定义为P2.0引脚
〃读写选择位,将RW位定义为P2.1引脚
II使能信号位,将E位定义为P2.2引脚
II忙碌标志位,,将BF位定义为P0.7引脚
I*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3X33+2)X10=1010(微秒),可以认为是1毫秒
***************************************************/voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)for(j=0;j<33;j++)
}
/*****************************************************
函数功能:
延时若干毫秒
入口参数:
n***************************************************/
voiddelay(unsignedcharn){
unsignedchari;
for(i=0;i } /*****************************************************函数功能: 判断液晶模块的忙碌状态 返回值: result。 result=1,忙碌;result=O,不忙 ***************************************************/ returnresult; }/*****************************************************函数功能: 将模式设置指令或显示地址写入液晶模块入口参数: dictate***************************************************/voidWriteInstruction(unsignedchardictate) {while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 //E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置 /*****************************************************函数功能: 指定字符显示的实际地址 入口参数: x ***************************************************/ voidWriteAddress(unsignedcharx) { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x"} /*****************************************************函数功能: 将数据(字符的标准ASCII码)写入液晶模块入口参数: y(为字符常量) ***************************************************/ voidWriteData(unsignedchary){ while(BusyTest()==1); RS=1; RW=0; E=0; //RS为高电平,RW为低电平时,可以写入数据 P0=y; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); //E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置 //将数据送入P0口,即将数据写入液晶模块 //空操作四个机器周期,给硬件反应时间 //E置高电平 "0" _nop_(); _nop_();E=0; } //空操作四个机器周期,给硬件反应时间 //当E由高电平跳变成低电平时,液晶模块开始执行命令 I*****************************************************函数功能: 对LCD的显示模式进行初始化设置 ***************************************************/ voidLcdInitiate(void) { delay(15); WriteInstruction(0x38); delay(5);II延时5ms WriteInstruction(0x38); delay(5); WriteInstruction(0x38); delay(5); WriteInstruction(0x0f); delay(5); WriteInstruction(0x06); delay(5); WriteInstruction(0x01); delay(5); }voidmain(void) { LcdInitiate(); WriteAddress(0x07); WriteData('A'); II延时15ms,首次写指令时应给LCD—段较长的反应时间〃显示模式设置: 16X2显示,5X7点阵,8位数据接口 //显示模式设置: 显示开,有光标,光标闪烁 //显示模式设置: 光标右移,字符不移 //清屏幕指令,将以前的显示内容清除 //主函数 //调用LCD初始化函数 //将显示地址指定为第1行第8列//将字符常量'A'写入液晶模块 //字符的字形点阵读出和显示由液晶模块自动完成 while (1); } 、LCD1602循环右移显示字符串 斧头帮2010-05-10 Proteus仿真图: LCD1602' //包含单片机寄存器的头文件 〃包含_nop_()函数定义的头文件 //寄存器选择位,将RS位定义为P2.0引脚 〃读写选择位,将RW位定义为P2.1引脚 //使能信号位,将E位定义为P2.2引脚 II忙碌标志位,,将BF位定义为P0.7引脚 ■■(1>R2・Rg为土拉电阻;-■ : : : (2)液晶檯块的引脚谗龜 GND 设计1賢头帮 -日期: 2010^5.10 C程序: II用LCD循环右移显示"WelcometoChina" #include #include sbitRS=P"。 ; sbitRW=P2人1; sbitE=P2人2; sbitBF=P0A7; unsignedcharcodestring[]={"WelcometoChina"}; I***************************************************** 函数功能: 延时1ms (3j+2)*i=(3X33+2)X10=1010(微秒),可以认为是1毫秒 ***************************************************Ivoiddelay1ms() { unsignedchari,j; for(i=0;i<10;i++)for(j=0;j<33;j++) } /***************************************************** 函数功能: 延时若干毫秒 入口参数: n***************************************************/ voiddelay(unsignedcharn){ unsignedchari; for(i=0;i } /*****************************************************函数功能: 判断液晶模块的忙碌状态 返回值: result。 result=1,忙碌;result=O,不忙***************************************************/ returnresult; }/*****************************************************函数功能: 将模式设置指令或显示地址写入液晶模块入口参数: dictate***************************************************/ voidWriteInstruction(unsignedchardictate) {while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, E=0; _nop_(); _nop_(); P0=dictate; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); E=0; } //空操作两个机器周期,给硬件反应时间 〃将数据送入P0口,即写入指令或地址 //空操作四个机器周期,给硬件反应时间 //E置高电平 //空操作四个机器周期,给硬件反应时间 //当E由高电平跳变成低电平时,液晶模块开始执行命令 /*****************************************************函数功能: 指定字符显示的实际地址 入口参数: x ***************************************************/ voidWriteAddress(unsignedcharx){ WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x"} /*****************************************************函数功能: 将数据(字符的标准ASCII码)写入液晶模块入口参数: y(为字符常量) ***************************************************/ voidWriteData(unsignedchary){ while(BusyTest()==1); RS=1; RW=0; E=0; //RS为高电平,RW为低电平时,可以写入数据 P0=y; _nop_(); _nop_(); _nop_(); _nop_(); E=1; _nop_(); _nop_(); _nop_(); _nop_(); //E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置〃将数据送入P0口,即将数据写入液晶模块 //空操作四个机器周期,给硬件反应时间 //E置高电平 //空操作四个机器周期,给硬件反应时间 "0" } /*****************************************************函数功能: 对LCD的显示模式进行初始化设置***************************************************/ voidLcdInitiate(void) { delay(15); WriteInstruction(0x38);delay(5);//延时5ms WriteInstruction(0x38);delay(5); WriteInstruction(0x38);delay(5); WriteInstruction(0x0f);delay(5); WriteInstruction(0x06);delay(5); WriteInstruction(0x01); delay(5); } voidmain(void) { unsignedchari; LcdInitiate(); delay(10); while (1) { WriteInstruction(0x01);// WriteAddress(0x00); i=0; while(string[i]! ='\0') { //延时15ms,首次写指令时应给LCD—段较长的反应时间〃显示模式设置: 16X2显示,5X7点阵,8位数据接口 //显示模式设置: 显示开,有光标,光标闪烁 //显示模式设置: 光标右移,字符不移 //清屏幕指令,将以前的显示内容清除 //主函数 //调用 LCD初始化函数 清显示: 清屏幕指令 //设置显示位置为第一行的第5个字 //显示字符 WriteData(string[i]); i++; delay(150); while (1); for(i=0;i<4;i++) delay(250); +5V -el-■! ■-si--■ I—■-! _..J■L■ R6R7\]RenR9■ 日占 、LCD1602显示随机数检测结果 斧头帮2010-05-10 Proteus仿真图: LCD1602 C程序: 〃用LCD显示适时检测随机数结果 #include //包含单片机寄存器的头文件 #include #include sbitRS=P"。 ; sbitRW=P2人1; sbitE=P2人2; 〃包含随机函数rand()的定义文件 〃包含_nop_()函数定义的头文件 //寄存器选择位,将RS位定义为P2.0引脚 〃读写选择位,将RW位定义为P2.1引脚 //使能信号位,将E位定义为P2.2引脚 II忙碌标志位,,将BF位定义为P0.7引脚 sbitBF=P0A7; unsignedcharcodedigit[]={"0123456789"};II定义字符数组显示数字unsignedcharcodestring[]={"TestResult"};II定义字符数组显示提示信息I***************************************************** 函数功能: 延时1ms (3j+2)*i=(3X33+2)X10=1010(微秒),可以认为是1毫秒 ***************************************************/voiddelay1ms() { unsignedchari,j; for(i=0;i<10;i++)for(j=0;j<33;j++) } /*****************************************************函数功能: 延时若干毫秒 入口参数: n***************************************************/ voiddelay(unsignedcharn){ unsignedchari; for(i=0;i } /*****************************************************函数功能: 判断液晶模块的忙碌状态 返回值: result。 result=1,忙碌;result=O,不忙***************************************************/ returnresult; }/*****************************************************函数功能: 将模式设置指令或显示地址写入液晶模块入口参数: dictate***************************************************/ voidWriteInstruction(unsignedchardictate) {while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置 /*****************************************************函数功能: 指定字符显示的实际地址 入口参数: x ***************************************************/ voidWriteAddress(unsignedcharx) { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x"} /*****************************************************函数功能: 将数据(字符的标准ASCII码)写入液晶模块入口参数: y(为字符常量) ***************************************************/ _nop_(); _nop_();E=0; } voidmain(void) { unsignedchari; unsignedintx; unsignedcharD1,D2,D3,D4,D5; LcdInitiate(); delay(10); WriteAddress(0x02); i=0; while(string[i]! ='\0') { //无限循环 //模拟数据采集 //空操作四个机器周期,给硬件反应时间 //当E由高电平跳变成低电平时,液晶模块开始执行命令 I*****************************************************函数功能: 对LCD的显示模式进行初始化设置 ***************************************************/ II延时15ms,首次写指令时应给LCD—段较长的反应时间〃显示模式设置: 16X2显示,5X7点阵,8位数据接口 II延时5ms,给硬件一点反应时间 WriteInstruction(0x06);II显示模式设置: 光标右移,字符不移 delay(5); Writelnstruction(0x01);〃清屏幕指令,将以前的显示内容清除 delay(5); } I***************************************************** 函数功能: 主函数 ***************************************************/ 〃定义变量i指向字符串数组元素〃定义变量,储存检测结果 II分别储存采集的个位、十位、百位、千位和万位数字II调用LCD初始化函数 II延时10ms,给硬件一点反应时间 II从第1行第3列开始显示 II指向字符数组的第1个元素 WriteData(string[i]); //指向下
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 基于 单片机 PROTEUS 液晶显示屏 LCD1602 使用
![提示](https://static.bingdoc.com/images/bang_tan.gif)