LCD1602显示模块.docx
《LCD1602显示模块.docx》由会员分享,可在线阅读,更多相关《LCD1602显示模块.docx(8页珍藏版)》请在冰豆网上搜索。
![LCD1602显示模块.docx](https://file1.bdocx.com/fileroot1/2023-2/1/c76aed73-715a-470e-8f14-fa5deaf980e1/c76aed73-715a-470e-8f14-fa5deaf980e11.gif)
LCD1602显示模块
单片机C语言
程序设计报告
题目:
基于LCD1602的时间显示
姓名:
佚名
学号:
080211999
班级:
2011级电信2班
指导老师:
佚名
一、设计目的
1、学习单片机开发环境Keil的使用;
2、学习使用Proteus仿真软件进行仿真;
3、了解LCD1602的具体功能并会使用其实现一定功能.
二、设计内容
设计一个基于LCD1602的时间显示模块、要求显示出当前时间。
三、所需器件
硬件:
XP86型兼容机软件:
Proteus和Keil
四、关于LCD1602介绍
1、简介
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形.
2、主要引脚功能介绍
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端.
3、其他引脚功能简介:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
五、Proteus仿真
LCD1602显示模块
时钟显示Proteus仿真结果
六、参考程序
#includeh〉
#include
#include〈absacc。
h〉
#definecom8155XBYTE[0xfd00]
#definePAP2
sbitRS=P3^0;
sbitRW=P3^1;
sbitEN=P3^2;
unsignedinthour=10,min=20,sec=2,cnt=0;
unsignedchartime[10]={’—','—',’:
',’—',’—',':
’,'—’,’—'};
unsignedcharcdoe[10]={’0’,'1’,'2’,’3','4','5',’6’,’7’,'8’,’9'};
voidtrans();
voiddelayms(unsignedint);
bitLCDBusy();
voidLCDWriteCMD(unsignedchar);
voidLCDWriteDAT(unsignedchar);
voidLCDInit();
voidLCDShowString(unsignedchar*,unsignedchar,unsignedchar);
voidmain()
{
IE=0X82;
TMOD&=0xf1;TMOD|=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
com8155=0x0f;
delayms(500);
LCDInit();
delayms(500);
TR0=1;
while
(1)
{
trans();
LCDShowString(time,4,1);
}
}
voidtrans()
{
if(sec〉59)
{
sec=0;
min+=1;
}
time[1]=cdoe[hour%10];
time[0]=cdoe[hour/10];
time[7]=cdoe[sec%10];
time[6]=cdoe[sec/10];
time[4]=cdoe[min%10];
time[3]=cdoe[min/10];
}
bitLCDBusy()
{
bitbusy;
EN=0;
RS=0;
RW=1;
PA=0xff;
_nop_();_nop_();_nop_();
EN=1;
_nop_();_nop_();_nop_();
busy=(bit)(PA&0x80);
EN=0;
returnbusy;
}
voidLCDWriteCMD(unsignedcharcmd)//向1602写指令函数
{
unsignedchari=0xff;//定义i
while(LCDBusy()&&i—-);//检测1602是否忙
EN=0;//EN脚送0
RS=0;//RS脚送0
RW=0;//RW脚送0
PA=cmd;//向1602送命令
_nop_();_nop_();_nop_();//nop延时
EN=1;//EN脚送1
_nop_();_nop_();_nop_();//nop延时
EN=0;//EN脚送0
}
voidLCDWriteDAT(unsignedchardat)//向1602写数据函数
{
unsignedchari=0xFF;//定义i
while(LCDBusy()&&i—-);//检测1602是否忙
EN=0;//EN脚送0
RS=1;//RS脚送1
RW=0;//RW脚送0
PA=dat;//向1602送数据dat
_nop_();_nop_();_nop_();//nop延时
EN=1;//EN脚送1
_nop_();_nop_();_nop_();//nop延时
EN=0;//EN脚送0
}
voidLCDInit()
{
LCDWriteCMD(0x38);//设置两行显示、字形5X7
LCDWriteCMD(0x08);//关闭显示功能
LCDWriteCMD(0x01);//清屏指令
LCDWriteCMD(0x06);//设置输入模式
LCDWriteCMD(0x0C);//开启显示功能
}
voidLCDShowString(unsignedchar*dat,unsignedcharx,unsignedchary)//让1602显示一个字符串的函数的声明
{
unsignedchar*p=dat;//定义指针变量,并指向要显示的字符串
x|=y?
0xc0:
0x80;//将写第y行第x列转换为1602的指令