基于单片机的可调电子钟的设计.docx
- 文档编号:208139
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:27
- 大小:499.37KB
基于单片机的可调电子钟的设计.docx
《基于单片机的可调电子钟的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的可调电子钟的设计.docx(27页珍藏版)》请在冰点文库上搜索。
基于单片机的可调电子钟的设计
编号:
基础工程设计
题目:
基于单片机设计的可调电子时钟
院(系):
信息与通信学院
专业:
微电子科学与工程
*****************
学号:
1*********
*******
2016年1月6日
摘要
本人设计的是一个以单片机STC89C52为核心部件的电子钟,结合LCD液晶显示屏。
可以在液晶屏上显示时间和字符,并可任意调整时间。
本来想用数码管来显示,但是想到数码管仅能显示数字,所以采用了液晶显示屏。
它不仅能显示数字,还能显示字符。
它的计时周期为24小时,显满刻度为“23时59分59秒”。
文中详细论述了可调电子钟设计原理、使用的各芯片的介绍,阐明了本实例所使用的设计方案、详细的电路图以及程序。
本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。
本系统以单片机的C语言进行软件设计,并着重介绍了所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程,并且还进行了软件仿真调试和硬件调试。
关键词:
单片机STC89C52;可调电子钟;液晶显示;仿真
前言
电子时钟是现代电子技术在时钟领域的具体实现方式。
时钟,自从它发明的那天起,就成为我们的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。
这就要求人们不断设计出新型时钟。
现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子时钟采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子时钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替指针显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时、分、秒的校对。
电子时钟广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们常生活中不可缺少的必需品,给人们的生活带来极大的方便。
随着社会不断的发展,科学技术不断的进步,单片机的问世和飞速发展掀起了计算机工程应用的一场新革命,使计算机技术冲破了实验室和机房的界限,广泛地应用于工业控制系统、数据采集系统、自动测试系统、智能仪表和接口以及各类功能模块等广阔的领域。
单片机应用系统已经成为实现许多控制系统的常规性工具。
我们说,单片机开辟了计算机应用的一个新时代是并不过分的。
单片机的发展历史虽然只有短短20年,但由于计算机科学和微电子集成技术的飞速发展,单片机自身也在不断地向更高层次和更大规模发展。
世界各大半导体厂商纷至沓来争先挤入这一市场,激烈的市场竞争也促进了单片机迅速更新换代,带来了它们更为广泛的应用。
由于单片机应用系统的高可靠性,硬、软件的高利用系数,优异的性能价格比,使它的应用范围由开始传统的过程控制,逐步进入数值处理、数字信号处理以及图像处理等高技术领域。
我们在本次的设计中广泛用到了单片机的应用系统。
本文提出了一种基于STC89C52单片机的可调电子钟设计方案,本方案以STC89C52单片机作为主控核心,按键、LCD液晶显示等模块组成硬件系统。
在硬件系统中设有独立按键和LCD显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进行校准、选择时间等,综上所述此电子钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的市场前景。
第一章设计说明
1.1设计目的和内容
本系统开机时液晶屏显示00:
O0:
O0开始计时,用三个电位按键来实现对电子时钟的调试工作,当按第一下总控键时进入时钟的调整状态,有两个电位按键分别来调整时钟的时、分、秒加一减一,它的计时周期为24小时,显满刻度为“23时59分59秒”。
本课题所研究的电子钟是单片机控制技术的一个具体应用,主要研究内容包括以下几个方面:
(1)选用电子钟芯片时,应重点考虑功能实在、使用方便、单片存储、低功耗、抗断电的器件。
(2)根据选用的芯片设计外围电路。
(3)在硬件设计时,结构要尽量简单实用、易于实现,使系统电路尽量简单。
(4)根据设计的硬件电路,编写控制STC89C52芯片的单片机程序。
(5)通过编程、编译、调试,把程序下载到单片机上运行,并实现本设计的功能。
(6)在硬件电路和软件程序设计时,主要考虑提高人机界面的友好性,方便用户操作等因素。
(7)软件设计时必须要有完善的思路,要做到程序简单,调试方便。
1.2设计方案选择
单片机电子钟的制作有多种方法,可供选择的器件和运用的技术也有很多种。
所以,系统的总体设计方案应在满足系统功能的前提下,充分考虑系统使用的环境,所选的结构要简单使用、易于实现,器件的选用着眼于合适的参数、稳定的性能、较低的功耗以及低廉的成本。
单片机模块的选择:
由于STC89C52单片机片内有8K字节的在线编程Flash存储器,可多次擦写,具有掉电模式,而且具有掉电状态下的中断恢复功能,对设计开发非常实用。
所以选用STC89C52单片机作为可调电子钟芯片的控制单片机。
时钟模块的选择:
直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数。
采用此种方案减少芯片的使用,节约成本。
显示模块的选择:
数码管亮度高、体积小、重量轻,但其显示信息简单、有限,需要驱动,使用复杂,在本题目中应用受到很大的限制。
液晶显示功耗低,轻便防震。
采用液晶显示界面友好清晰,操作方便,显示信息丰富。
按键模块的选择:
为了使系统电路更简单,按键只设计了3个,分别是“设置”、“+”、“-”,用来设置及调整系统的时钟。
1.3设计总体框图
数字电子钟设计框图如图1-1所示:
AT
图1-1系统总统框图
第二章系统主要硬件设计
2.单片机主控模块
2.1.1STC89C52芯片简介
单片机是微型机的一个主要分支,在结构上的最大特点是把CPU、存储器、定时器和多种输入/输出接口电路集成在一块超大规模集成电路芯片上。
就其组成和功能而言,一块单片机芯片就是一台计算机。
它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。
8KBFlashROM,可以擦除1000次以上,数据保存10年。
2.1.2封装和引脚说明
STC89C52单片机为双列直插式(DIP)芯片,是最常用的有总线扩展引脚的DIP40封装。
如图2-1所示。
(1).电源及时钟引脚
Vcc:
接入电源
Vss:
接地
XTAL1和XTAL2:
时钟引脚,外接晶体引线端。
当使用芯片内部时钟时,此两引脚端用于外接晶振和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
(2).控制线引脚
RST:
RST是复位信号输入端。
ALE/PROG:
地址锁存允许信号输入端。
在存取外存储器时,用于锁存低8位地址信号。
当单片机正常工作后,ALE端就周期性地以时钟振荡频率的1/6固定频率向外输出正脉冲信号。
此引脚的第2功能PROG是作为编程脉冲输入端。
PSEN:
程序存储器允许输出端。
CPU从外部程序存储器取指令时,PSEN信号会自动产生负脉冲,作为外部程序存储器的选通信号。
EA/Vpp:
程序存储器地址允许输入端。
当EA为高电平时,CPU执行片内程序存储器指令,但当PC中的值超过0FFFH时,将自动转向执行片外程序存储器指令;当EA为低电平时,CPU只执行片外程序存储器指令。
(3).并行I/O引脚
P0.0~P0.7:
P0口为8位双向I/O口或地位地址/数据总线复用引脚。
P1.0~P1.7:
P1口为8位双向I/O口。
P2.0~P2.7:
P2口为8位双向I/O口或高位地址总线引脚。
P3.0~P3.7:
P3口为8位双向I/O口或第二功能引脚。
P3口也可以作为一些特殊功能口,如表1所示。
如图2-1是单片机的功能引脚。
图2-1是STC89C52单片机引脚封装
口管脚
备选功能
P3.0RXD
串行输入口
P3.1TXD
串行输出口
P3.2/INT0
外部中断0
P3.3/INT1
外部中断1
P3.4T0
记时器0外部输入
P3.5T1
记时器1外部输入
P3.6/WR
外部数据存储器写选通
P3.7/RD
外部数据存储器读选通
表1P3特殊功能口
2.2液晶显示模块
液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富,价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专用于显示字母、数字、符号等点阵式液晶显示模块。
针对目前电子钟常采用LED作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;本系统设计采用字符型液晶显示模块1602作为显示器件,这样不仅简化了电路的硬件设计,而且极大地提高了系统的可靠性。
2.2.1LCD1602模块简介
LCD1602可以显示2行16个字符,具有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光设置。
引脚介绍如下:
第1脚:
VSS为电源地,接GND。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10欧的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写控制信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能信号端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
BLA背光电源正极(+5V)输入引脚。
第16脚:
BLK背光电源负极,接GND。
2.2.2LCD1602的控制指令及操作流程
1602液晶模块内部的控制器共有11条控制指令,。
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平),控制命令如表2所示。
表211条控制指令
指令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:
读数据
LCD1602可以在8根I/O线上读写数据,因此LCD的控制器接口有严格的通信协议来保证读写数据传输的正确性和完整性。
1602字符LCD基本操作有以下四种:
1.读状态:
输入信号:
RS=0,RW=1,E=1输出信号:
D0~D7=状态字
2.读数据:
输入信号:
RS=1,RW=1,E=1 输出信号:
D0~D7=数据
3.写指令:
输入信号:
RS=0,RW=0,E=1->0输出信号:
D0~D7=指令
4.写数据:
输入信号:
RS=1,RW=0,E=1->0输出信号:
D0~D7=数据
2.3时钟电路及按键电路
2.3.1时钟电路
时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。
因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
常用的时钟电路有两种方式:
一种是内部时钟方式,另一种为外部时钟方式。
如图2-2为内部时钟方式的电路图。
图2-2内部时钟方式
本文用的是内部时钟方式(如图2-4所示)。
内部时钟方式只要在单片机的XTAL1和XTAL2引脚外接即可。
图中电容C1和C2的作用是稳定频率和快速起振,电容值为5~30pF,典型值为30pF。
晶振CYS的振荡频率要小于12MHz,典型值为6MHz,12MHz或11.0592MHz。
实际应用中一般采用外接晶振的内接电路。
2.3.2按键电路
按键的开关状态通过一定的电路转换为高、低电平状态。
按键闭合过程在相应的I/O端口形成一个负脉冲。
闭合和释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电平之间的一种不稳定状态,称为抖动。
抖动持续时间的常长短与开关的机械特性有关,一般在5-10ms之间。
为了避免CPU多次处理按键的一次闭合,应采用措施消除抖动。
本文采用的是独立式按键,直接用I/O口线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状态不会产生互相影响。
它是整个系统中最简单的部分,根据功能要求,本系统共需三个按键:
功能移位键、功能加键、功能减键(如图2-3所示)。
P1.0口表示功能移位键,按键选择要调整的时、分﹑秒。
P1.1口表示数字“+“键,按一下则对应的数字加1。
P1.2口表示数字“-”键,按一下则对应的数字减1。
图2-3三个按键的电路图
第三章系统软件设计
3.1系统程序流程图
用51单片机(STC89C52)通过程序控制来产生时间信号,利用P0端口使之显示于LCD1602液晶显示屏上,程序开始进行标识位初始化,对时钟单元进行初始化,开始读取时间信息,通过读取程序,液晶显示器显示时间,当有按键按下时进行键值的处理,没有按键按下时则程序重新读取时间信息。
系统程序流程图如图3-1所示。
图3-1系统程序流程图
3.2程序设计电子时钟清单:
设计电路所用的原件如图3-2所示。
图3-2原件清单
第四章系统调试
一般调试都是在编写代码完之后用来验证电路的准确与否,通过反复修改程序代码来来使电路尽可能完善,但是单单依靠软件来仿真并不能保证电路能实现想要的功能,因为软件仿真并不像现实的一样。
所以还要依靠硬件电路来实现,不断修改。
4.1软件调试部分
使用ISIS和uVision4软件来仿真,ISIS软件是用来仿真电路图,而uVision4用来编译代码和编写代码的。
调试软件:
用软件来调试查找编程上的错误,可以比较好的修改电路和程序,使得电路能尽可能完善和正确。
如图4-1为电路连接图在Proteus的接法。
图4-1Proteus电路原理图
而uVision4用来检查语法和编译上的错误,用起来比较方便,它是和Proteus软件相结合的,只有编译没有问题、正确后才能导入Proteus中得到正确的结果。
如图4-2是编译检查正确后的结果。
图4-2Uvision4编写程序
其次,用Uvision4编写程序,编译无误后生成HEX文件,通过在网上买的最小系统来烧录程序,最小系统烧录程序很简单,只需插到电脑的USB接口,在网上下载烧录STC系列的单片机的烧录软件,找到生成HEX文件,即可下载。
如图4-3为Proteus仿真出来后正确的结果。
图4-3Proteus仿真结果
4.2源代码:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitlcdrs=P2^0;//液晶数据命令选择端
sbitlcswr=P2^1;//设置写入端口
sbitlcden=P2^2;//液晶使能端
sbits1=P1^0;
sbits2=P1^1;
sbits3=P1^2;
ucharcount,s1num;
charmiao,shi,fen;
ucharcodetable[]="1300240119time";//第一行写入
ucharcodetable1[]="00:
00:
00";//第二行写入
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
lcswr=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()
{
ucharnum;
lcden=0;
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//设置开显示,不显示光标
write_com(0x06);//写一个字符后的地址指针加1
write_com(0x01);//显示清零,数据指针清零
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidwrite_sfm(ucharadd,uchardate)
{
ucharshi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+0x40+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
voidkeyscan()
{
rd=0;
if(s1==0)
{
delay(5);
if(s1==0)
{s1num++;
while(!
s1);
if(s1num==1)
{
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
}
}
if(s1num==2)
{
write_com(0x80+0x40+7);
}
if(s1num==3)
{
write_com(0x80+0x40+4);
}
if(s1num==4)
{
s1num=0;
write_com(0x0c);
TR0=1;
}
}
if(s1num!
=0)
{
if(s2==0)
{
delay(5);
if(s2==0)
{
while(!
s2);
if(s1num==1)
{
miao++;
if(miao==60)
miao=0;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen++;
if(fen==60)
fen=0;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
if(s3==0)
{
delay(5);
if(s3==0)
{
while(!
s3);
if(s1num==1)
miao--;
if(miao==-1)
miao=59;
write_sfm(10,miao);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
fen--;
if(fen==-1)
fen=59;
write_sfm(7,fen);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
shi--;
if(shi==-1)
shi=24;
write_sfm(4,shi);
write_com(0x80+0x40+4);
}
}
}
}
voidmain()
{
init();
while
(1)
{
keyscan();
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==18)
{
count=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
write_sfm(4,shi);
}
write_sfm(7,fen);
}
write_sfm(10,miao);
}
}
4.3硬件调试
因为PCB用起来比较好看而且好连线,所以选择用PCB来做,不过由于太久不使用DXP来做PCB了。
4.3.1原理图
因为使用PCB板来焊接电路,所以还会用DXP软件,这个软件里面必须先画原理图,如图4-1为所设计的电路在原理图中。
图4-1原理图
4.3.2PCB图
在原理图编译没有错误后就可以直接导入到PCB工程中,生成设计电路的PCB图,然后进行布线排版,调到合适的位置后可以进行自动布
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 可调 电子钟 设计