河北工程大学单片机系统设计项目数字钟讲述.docx
《河北工程大学单片机系统设计项目数字钟讲述.docx》由会员分享,可在线阅读,更多相关《河北工程大学单片机系统设计项目数字钟讲述.docx(28页珍藏版)》请在冰豆网上搜索。
河北工程大学单片机系统设计项目数字钟讲述
科信学院
信息与电气工程学院
单片机系统设计项目(三级项目)
设计说明书
(2012/2013学年第二学期)
题目:
数字钟
专业班级:
通信工程10级2班
学生姓名:
学号:
指导教师:
设计周数:
2周
设计成绩:
2013年6月21日
摘要2
4.2实现时钟计时的基本方法3
4.3总体方案介绍4
5.2最小系统5
5.3LCD1602显示模块设计7
5.4时钟显示校正电路8
6.1软件设计分析9
6.2源程序清单10
摘要:
该电子时钟由89C51,BUTTON,液晶屏等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为
一分钟,六十分钟为一小时,满二十四小时为一天。
关键词:
单片机;电子时钟;键盘控制
一、课程设计目的
通过《单片机原理与应用》课程设计,使学生掌握单片机及其扩展系统设计的方法和设计原则及相应的硬件调试的方法。
进一步加深单片机及其扩展系统设计和应用的理解。
二、设计要求
1、准确计时,以数字形式显示时、分、秒的时间。
2、年以12个月计时形成,月以28(或29或30或31)日计时形成,日以24小时计时形式,分秒计时为60进位。
3、校正时间功能,即能随意设定走时时间。
4、闹钟功能,一旦走时到该时间,能以声形式告警提示。
5、设计5V直流电源,系统时钟电路、复位电路。
6、带有秒表功能,按键控制启动、暂停、清零。
三、单片机数字钟的基本原理
它是利用单片机的内部的定时/计数器工作与定时方式,对机器周期计数形成基准时间(如10ms)然后用另外一个计数器或软件计数的形式对基准时间进行计数形成秒(如对10ms计数100次),“秒”计数60次“分”,“分”计数60次形成“时”,“时”计数24次形成“日”,“日”计数为28(或29或30或31)次形成“月”,“月”计数12次形成“年”,年计数999次就清零,然后通过译码器,数码管把他们的内容在相应的位置显示出来。
在具体的设计时定时器采用中断方式工作,对时钟的形成在终中断序中实现,在主程序只是对定时/计数器的定义初始化,调用显示程序和控制程序的初始化。
另外为了使用的方便,也设计了按键,可以通过按键对时分秒进行调整,这样程序就加了按键程序。
四、总体方案设计
4.1电路的总体原理框图
本次设计时钟电路,使用了ATC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的年、月、日、时、分、秒,用一扬声器来进行定时提醒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:
键盘、芯片、扬声器、LCD液晶屏显示即可满足设计要求。
总设计原理框图如下图所示:
图1原理框图
4.2实现时钟计时的基本方法
利用STC系列单片机的可编程定时/计数器、中断系统来实现时钟计数。
(1)计数初值计算:
把定时器设为工作方式1,定时时间为50ms,则计数溢出20次即得时钟计时最小单位秒,而100次计数可用软件方法实现。
假设使用T/C0,方式1,50ms定时,fosc=12MHz。
则初值X满足(216-X)×1/12MHz×12μs=50000μs
X=15536→0011110010110000→3CB0H
(2)采用中断方式进行溢出次数累计,计满20次为秒计时(1秒);
(3)从秒到分、从分到时、从时到日、从日到月、从月到年的计时是通过累加和数值比较实现。
4.3总体方案介绍
4.3.1计时方案
利用STC89C51单片机内部的定时/计数器进行中断时,配合软件延时实现年、月、日、时、分、秒的计时。
该方案节省硬件成本,且能使读者在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系统能有更深入的了解,从而对学好单片机技术这门课程起到一定的作用。
4.3.2控制方案
STC89C51的P0口和P1口外接由八个LED数码管(LED8~LED1)构成的显示器,用P0口作LED的段码输出口,P1口作八个LED数码管的位控输出线,P3口外接四个按键A、B、C构成键盘电路。
STC89C51是一种低功耗,高性能的CMOS8位微型计算机。
它带有8KFlash可编程和擦除的只读存储器(EPROM),该器件采用ATMEL的高密度非易失性存储器技术制造,与工业上标准的80C51和80C52的指令系统及引脚兼容,片内Flash集成在一个芯片上,可用与解决复杂的问题,且成本较低。
简易电子钟的功能不复杂,采用其现有的I/O便可完成,所以本设计中采用此的设计方案。
五、数字钟的硬件设计
5.1硬件电路的设计原则
在性价比满足应用系统要求的情况下,选择更可靠,更熟悉的单片机缩短研制周期。
尽可能选择自己较为熟悉的应用电路,以提高系统的可靠性。
单片机内部的资源与外部的扩展资源应在满足系统设计的基础上留有余地,为进一步的升级和扩展提供方便。
应充分的结合软件方案考虑硬件的结构,通常硬件功能较完善,其相应的软件程序就简单,但硬件的成本较高,而功能较低,其相应的软件就复杂,其实际常用软件代替硬件来降低成本。
整个系统相关的器件尽可能的做到性能相匹配。
充分的考虑系统的抗干扰性,如具有抗干扰的单片机并充分的帅选芯片与器件,在电路中采取隔离或屏蔽的措施等。
5.2最小系统
5.2.1芯片分析
STC89C51单片机引脚图如下:
图2STC89C51引脚图
MCS-51单片机是标准的40引脚双列直插式集成电路芯片,其各引脚功能如下:
VCC:
+5V电源。
VSS:
接地。
RST:
复位信号。
当输入的复位信号延续两个机器周期以上的高电平时即为有效,用完成单片机的复位初始化操作。
XTAL1和XTAL2:
外接晶体引线端。
当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
P0口:
P0口为一个8位漏极开路双向I/O口,当作输出口使用时,必须接上拉电阻才能有高电平输出;当作输入口使用时,必须先向电路中的锁存器写入“1”,使FET截止,以避免锁存器为“0”状态时对引脚读入的干扰。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,它不再需要多路转接电路MUX;因此它作为输出口使用时,无需再外接上拉电阻,当作为输入口使用时,同样也需先向其锁存器写“1”,使输出驱动电路的FET截止。
P2口:
P2口电路比P1口电路多了一个多路转接电路MUX,这又正好与P0口一样。
P2口可以作为通用的I/O口使用,这时多路转接电路开关倒向锁丰存器Q端。
P3口:
P3口特点在于,为适应引脚信号第二功能的需要,增加了第二功能控制逻辑。
当作为I/O口使用时,第二功能信号引线应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。
当输出第二功能信号时,该位应应置“1”,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出,具体第二功能如表1所示。
表1P3端口引脚兼用功能表
P3引脚
兼用功能
P3.0
串行通讯输入(RXD)
P3.1
串行通讯输出(TXD)
P3.2
外部中断0(INT0)
P3.3
外部中断1(INT1)
P3.4
定时器0输入(T0)
P3.5
定时器1输入(T1)
P3.6
外部数据存储器写选通WR
P3.7
外部数据存储器写选通RD
5.2.2晶振电路
下图所示为时钟电路原理图,在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图3晶振电路
5.3LCD1602显示模块设计
5.3.1LCD1602主要技术参数
显示容量:
16×2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×4.35(W×H)mm
图4LCD1602引脚图
5.3.2引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明下所示:
编号符号引脚说明编号符号引脚说明
1VSS电源地9D2数据
2VDD电源正极10D3数据
3VL液晶显示偏压11D4数据
4RS数据/命令选择12D5数据
5R/W读/写选择13D6数据
6E使能信号14D7数据
7D0数据15BLA背光源正极
8D1数据16BLK背光源负极
5.3.3LCD寄存器的选择
E
R/W
RS
功能说明
1
0
0
写入命令寄存器
1
0
1
写入数据寄存器
1
1
0
读取忙碌标志及RAM地址
1
1
1
读取RAM数据
0
X
不动作
5.4时钟显示校正电路
本设计利用按键开关来校正时钟显示的数字。
当按钮按下时,将在相应的端口输入一个低电平,通过相应的程序来改变时钟显示。
其中菜单按键开关用来选
择要修改的数字;下调按键用来增加所选数字的数值;上调按键用来减小所选数字的数值;退出按键是退出校正电路。
图5时钟校正电路图
六、系统软件设计
6.1软件设计分析
在编程上,首先进行了初始化,定义程序的的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时.分.秒,在显示初值之后,进入主循环。
在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下图:
图6系统总流程图
6.2源程序清单
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
ucharcodetable[]="2013:
06:
19000";
ucharcodetable1[]="22:
22:
1021:
48";
ucharcodetable2[]="0123456789";
sbitlcd_rs=P2^5;//定义LCD端口
sbitlcd_rw=P2^6;
sbitlcd_en=P2^7;
sbitS1=P3^4;//菜单键
sbitS2=P3^5;//加键
sbitS3=P3^6;//减键
sbitS4=P3^7;//退出菜单键
sbitss=P3^3;//秒表键,第一次启动,第二次暂停,第三次清零
sbitFMQ=P2^0;
voidyue31();//31天的月份函数
voidyue30();//30天的月份函数
voidyue29();//29天的月份函数
voidyue28();//28天的月份函数
voidTiming();//闹钟设置
voidmiaobiao();//秒表函数
ucharcount,k1num;//声明秒的变量
charshi,fen,miao;//声明时分秒
uintnian,yue,ri,ji=0,mm=0;//声明年月日,秒表计数,和秒表按键次数
ucharf,s;//定时器/
voiddelay(ucharz)//延时函数
{
u