lcd显示的秒表单片机课程设计Word文档下载推荐.docx
- 文档编号:16493346
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:35
- 大小:359.64KB
lcd显示的秒表单片机课程设计Word文档下载推荐.docx
《lcd显示的秒表单片机课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《lcd显示的秒表单片机课程设计Word文档下载推荐.docx(35页珍藏版)》请在冰豆网上搜索。
AT89C51是128字节内部RAM,4KB可编程Flash存储器(可擦写1000次),三级程序存储器保密,静态工作频率:
0Hz-24MHz,2个16位定时/计数器,一个串行通讯口,6个中断源,32条I/O引线,有片内时种振荡器。
输入输出引脚资料:
(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
(3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向I/0端口。
其它控制或复用引脚:
(1)ALE/PROG30访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。
即使不访问外部存储器,ALE端仍以不变的频率输出脉冲信号(此频率是振荡器频率的1/6)。
在访问外部数据存储器时,出现一个ALE脉冲。
(2)PSEN29该引是外部程序存储器的选通信号输出端。
当AT89C51由外部程序存储器取指令或常数时,每个机器周期输出2个脉冲即两次有效。
但访问外部数据存储器时,将不会有脉冲输出。
(3)EA/Vpp31外部访问允许端。
当该引脚访问外部程序存储器时,应输入低电平。
要使AT89C51只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。
AT89C51特殊功能寄存器列表(适用于同一架构的芯片)
符 号
地 址
注 释
*ACC
E0H
累加器
*B
F0H
乘法寄存器
*PSW
D0H
程序状态字
SP
81H
堆栈指针
DPL
82H
数据存储器指针低8位
DPH
83H
数据存储器指针高8位
*IE
A8H
中断允许控制器
*IP
D8H
中断优先控制器
*P0
80H
端口0
*P1
90H
端口1
*P2
A0H
端口2
*P3
B0H
端口3
PCON
87H
电源控制及波特率选择
*SCON
98H
串行口控制器
SBUF
99H
串行数据缓冲器
*TCON
88H
定时器控制
TMOD
89H
定时器方式选择
TL0
8AH
定时器0低8位
TL1
8BH
定时器1低8位
TH0
8CH
TH1
8DH
定时器1高8位
带*号的特殊功能寄存器都是可以位寻址的寄存器
4.11602LCD
1602字符型LCD简介:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780.
1602LCD主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
引脚功能说明:
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表1所示:
编号
符号
引脚说明
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
背光源负极
表1:
引脚接口说明
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
1602LCD的指令说明及时序:
1602液晶模块内部的控制器共有11条控制指令,如下表2所示:
序号
指令
清显示
光标返回
*
置输入模式
I/D
S
显示开/关控制
D
C
B
光标或字符移位
S/C
R/L
置功能
DL
N
F
置字符发生存贮器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志或地址
BF
计数器地址
写数到CGRAM或DDRAM)
要写的数据内容
从CGRAM或DDRAM读数
读出的数据内容
表2:
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片时序下表3如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
无
读数据
RS=H,R/W=H,E=H
D0—D7=数据
写数据
RS=H,R/W=L,D0—D7=数据,E=高脉冲
表3:
基本操作时序表
读写操作时序如图2和3所示:
图2读操作时序
图3写操作时序
1602LCD的RAM地址映射及标准字库表:
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,图4是1602的内部显示地址。
图41602LCD内部显示地址
例如第二行第一个字符的地址是40H,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图5所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码
图5字符代码与图形对应图
1602LCD的一般初始化(复位)过程:
延时15mS
写指令38H(不检测忙信号)
延时5mS
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
五、电路分析
总体设计分析
本系统中,硬件电路主要有电源电路,晶振电路,复位电路,显示电路以及一些按键电路等,本系统采用AT89C51单片机为中心器件,利用定时器计数器定时和记数的原理,结合硬件电路如电源电路,晶振电路,复位电路,显示电路,蜂鸣器电路以及一些按键电路等来设计计数器,将软、硬件有机地结合起来。
硬件系统采用PROTEUS功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。
5.1电源电路
电源电路是系统最基本的部分,任何电路都离不开电源部分,
随着半导体工艺的发展,稳压电路也采用集成电路器件来制成。
可采用独立的稳压电源。
这种供电方式的优点是稳压可靠,且有各种成熟电路可供选择。
由集成稳压器具有体积小,外界线路简单,使用方便,工作可靠等优点。
因此,在各种电子设备中应用十分普遍,为了跟上时代的发展,可采用W7800系列三端稳压器,主要利用它的输出电压是固定的在使用中不能进行调整等优点。
5.2晶振电路
AT89C51内部的振荡电路是一个高增益反相放大器,引脚RXD和TXD分别是此反向振荡放大器的输入端和输出端。
该反向放大器可以配置为内部方式的片内振荡器。
如图所示,这里选用12MHE的内部振荡方式,电路如下:
电容器C1,C2起稳定振荡频率,快速起振的作用,C1,C2可在20~100PF之间取,这里取30PF,接线时要使晶振振荡器尽可能接近单片机。
5.3复位电路
采用上电+按键复位电路,上电后,由于电容充电,使RST持续一段时间高电平时间。
当单片机已在运行之中时,按下复位按键也能使RST持续一段时间的高电平,从而实现上电加开关复位的操作。
这不仅能时单片机复位,而且还能使单片机的外围芯片也同时复位,当程序出现错误时,可以随时使电路复位。
复位是单片机的初始化操作。
其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。
除PC之外,复位操作还对其他一些寄存器有影响,它们的复位状态如表1所示。
寄存器
复位状态
PC
0000H
TCON
00H
ACC
TL0
PSW
TH0
SP
07H
TL1
DPTR
TH1
P0-P3
FFH
SCON
IP
XX000000B
SBUF
不定
IE
0X000000B
PCON
0XXX0000B
TMOD
表1一些寄存器的复位状态
因STC89C52单片机需高电平(3.7~5.5V)复位,且复位时流入单片机的电流不能超过10mA。
具体参数:
根据所需要的复位参数可得当按下SW键时出现两个机器周期的高电平在单片机REST端产生的压降等于:
=
图复位电路
5.4显示电路
显示电路既可以选用液晶显示器,也可以选用数码管显示,我们采用液晶显示电路
1602LCD引脚接口说明
DataI/O
液晶显示偏压信号
数据命令选择端口(H/L)
读/写选择端(H/L)
显示电路部分引脚分析:
3脚:
VL,液晶显示偏压信号,用于调整LCD1602的显示对比度,一般会外接电位器用以调整偏压信号,此脚电压为0时可以得到最强的对比度。
4脚:
RS,数据/命令选择端,当此脚为高电平时,可以对1602进行数据字节的传输操作,而为低电平时,则是进行命令字节的传输操作。
命令字节,即是用来对LCD1602的一些工作方式作设置的字节;
数据字节,即使用以在1602上显示字节。
5脚:
R/W,读写选择端。
当此脚为高电平可对LCD1602进行读数据操作,反之进
行写数据操作。
6脚:
E,使能信号,其实是LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。
7~14脚:
8位并行数据口,使得对LCD1602的数据读写大为方便。
基本操作时序:
(1)读状态:
输入:
RS=L,RW=H,E=H;
输出:
D0~D7=状态字
(2)写指令:
RS=L,RW=L,D0~D7=指令码,E=高脉冲;
(3)读数据:
RS=H,RW=H,E=H;
D0~D7=数据
(4)写数据:
RS=H,RW=L,D0~D7=数据,E=高脉冲;
需要两个写时序:
①当我们要写指令字,设置LCD1602的工作方式时:
需要把RS置为低电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
②当我们要写入数据字,在1602上实现显示时:
需要把RS置为高电平,RW置为低电平,然后将数据送到数据口D0~D7,最后E引脚一个高脉冲将数据写入。
6、代码分析
#include<
reg51.h>
#include<
intrins.h>
皆属于头文件,前者是定义51单片机特殊功能寄存器和位寄存器的,后者包含特殊指令例如:
crol(),cror()。
#defineucharunsignedchar,#defineuintunsignedint,definedelayNOP(){nop();
nop();
nop()}皆属于宏定义,后者是将三个延时周期定义在一起,用一个delayNOP()表示。
VoidLCD_intialize,voidLCD_Set_POS(uchar),voidDisplay_String(char*,char);
皆为调用函数,第一个是调用LCD初始化函数;
第二个是调用LCD的显示位置函数;
第三个是调用LCD写数据函数;
第四个是调用LCD指定行上显示字符串函数。
SbitK1=P1^0,sbitK2=P2^1,sbitBEEP=3^0,sbitLCD_RS=P2^0,sbitLCD_RW=P2^1,sbitLCD_EN=P2^2;
皆为个函数接口声明,定义K1、K2为两个控制开关;
定义BEEP为扬声器接口;
RS为寄存器选择高电平
(1)时选择数据寄存器、低电平(0)时选择指令寄存器;
RS为读写信号,高电平
(1)时惊醒读操作,低电平(0)时进行写操作;
E(或EN)端为使能端(enable),将单片机与LCD1602显示器连接。
UcharKeyCount=0;
KeyCount为按键计数变量,用于累计按键的次数。
定义其为无符号整型,并且付初值为0.
ucharcodemsg1[]={"
SecondWatch0"
},ucharcodemsg2[]={"
>
"
};
定义两个一维数组,在protues仿真软件中,当按下play键后,1602LCD显示屏是会出现这两个数组中的字符。
ucharcodePrompts[][16]=
{
{"
:
1---->
},
2---->
:
2"
1->
2:
3-->
4"
}
}
定义一个二维数组,将其中的一维显示于1602LCD上。
K1为启停控制按钮,第一次按下时开始计数,显示“:
:
1--”;
当第二次按下时停止计数,显示"
;
……
ucharTime_Buffer[]={0,0,0,0},ucharLCD_Display_Buffer[]={"
00:
00"
};
定义两个数组,一个用于计时缓冲,一个用于显示时间缓冲。
voidBeeP()
uchari,j=70;
for(i=0;
i<
180;
i++)
{
while(--j);
BEEP=~BEEP;
}
BEEP=0;
}定义一个调用蜂鸣器的子函数。
For(i=0;
i++)用于控制蜂鸣器响的时间,BEEP=~BEEP用于使蜂鸣器进行短暂的响一下又不响的效果。
因为蜂鸣器接地,只有当P3.0接入高电平(即1)时,蜂鸣器才工作。
所以在响了一声过后,级(执行完成之后)将BEEP赋值为0,让它处于不导通状态,蜂鸣器不响。
voidDelayX(uintms)
uchari;
while(ms--)for(i=0;
120;
i++);
}定义一个延时子函数
voidShow_Second()
LCD_Set_POS(0X45);
设置LCD显示起点
for(i=3;
i!
=0xff;
i--)
{
将两位整数的1、100s,秒,分,时转换为8位数字字符
LCD_Display_Buffer[2*i+1]=Time_Buffer[i]/10+'
0'
;
LCD_Display_Buffer[2*i]=Time_Buffer[i]%10+'
在i=3,2,1,0时分别显示时,分,秒,1/100s
LCD_Write_Data(LCD_Display_Buffer[2*i+1]);
LCD_Write_Data(LCD_Display_Buffer[2*i]);
LCD_Write_Data('
'
);
}定义显示计时函数
}LCD_Set_POS(0X45),调用函数,用于调用设置显示位置函数,在此子函数中又嵌套了一个函数调用,LCD_Write_Command(Position|0X80)(即LCD_Write_Command(0X45|0X80))函数。
进行或操作:
45
80
C5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- lcd 显示 秒表 单片机 课程设计