基于STC89C52的电子时钟说明书.docx
《基于STC89C52的电子时钟说明书.docx》由会员分享,可在线阅读,更多相关《基于STC89C52的电子时钟说明书.docx(35页珍藏版)》请在冰豆网上搜索。
基于STC89C52的电子时钟说明书
武汉工程大学
课程设计(学年论文)
说明书
课题名称:
基于单片机的时钟电路设计
专业班级:
制冷01班
学生学号:
学生姓名:
学生成绩:
指导教师:
课题工作时间:
2015.12.01至2015.12.11
绪论3
第一章设计任务与要求4
第二章设计依据2
第三章控制系统性能说明11
第四章硬件设计11
第五章软件设计12
绪论
单片微型计算机(Single-ChipMicrocomputer),简称单片机,就是将微处理器,存储器,和RAM,定时器/计数器,中断系统,输入/输出接口(I/O接口),总线和其他多种功能器件集成在一块芯片上的微型计算机。
单片机的出现是近代计算机发展史上的一个重要里程碑,单片机的诞生标志着计算机正式形成了通用计算机系统和嵌入式计算机系统两大分支。
通用计算机的主要特点是大存储容量,高数数值计算,不必兼顾控制功能,不断完成操作系统,它在数据处理,模拟仿真,人工智能,图像处理,多媒体,网络通讯中得到了广泛应用。
单片机的发展也是一段辉煌的历程!
从1974年美国仙童(Fairchild)公司研制了世界上第一台单片F8,到现在32位单片机,单片机的顶级产品,具有较高的运算速度。
同时,随着半导体工艺技术的发展及系统设计水平的提高,单片机不断产生新的变化和进步,单片机与微机系统的差距越来越小,甚至难以辨认。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机应用的市场前景是非常广阔的。
第一章、课程设计的任务与要求
1、任务
用LED数码管构成电子时钟电路。
采用24h记时方式,日期和时间用6位数码管显示。
要求设计制作出硬件电路,编制并调试出程序。
主要技术指标
显示范围:
年份99年,如2001-2099;
显示格式:
日期显示如2005年12月20日显示为051220;
时间显示如12点30分55秒显示为123055;
显示位数:
6位;
时钟误差:
24小时误差3~5秒;
8段LED数码管作正常、调时和省电(不显示LED数码管)
程序流程
程序的编制可采用查询方式,也可以采用中断方式。
2、设计最低要求
设计人员应完成说明书和主要设计图纸。
(1)设计说明书
①设计依据
摘录依据性资料中与本课程设计有关的主要内容,其它方面提供的本课程设计资料。
如芯片的功能、传感器对单片的要求、环境及抗干扰级别等等。
②设计范围
根据设计任务书的要求,说明本制冷系统的控制设计内容及与有关部件的功能。
③系统的设计
控制系统硬件方框图,控制系统程序方框图,元件编号表及参数表等。
其中,元件编号表要表明元件型号、规格、耗电、信号特点、其他所需技术数据。
被控系统的技术参数如:
风机的风量、风压、出口方向、转速及电动机功率;室内外温度控制范围、电动机功率;实现功率元件控制的方案。
(2)设计图纸
绘制控制系统原理图,图中的线路连接及元件标注必需正确无误。
(3)程序设计
图纸要求
1、原理图1~2张。
2、图标可按以下规格:
第二章设计依据
完成此次课程设计涉及到的元件:
STC879C52单片机,DS1302时钟芯片,74HC573锁存器,数码显示管,键盘。
STC89C52单片机
标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
74HC573锁存器
数据锁存功能:
当输入的数据消失时,在芯片的输出端,数据仍然保持;
74HC573是拥有八路输出的透明锁存器,输出为三态门,是一种高性能硅栅CMOS器件。
SL74HC573跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的,加上拉电阻他们能和LS/ALSTTL输出兼容。
锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,
新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。
DS1302时钟芯片
DS1302是时钟芯片,拥有计时作用。
可以对年月日、时分秒、星期计时。
可以用单片机往DS1302里面写入时间进行时间设置,也可以用单片机从DS1302中读取时间,读出来的时间也可以放在数码管上显示。
数字时钟方案一:
本方案完全用软件实现数字时钟。
原理为:
在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。
利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。
该方案具有硬件电路简单的特点。
但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。
而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
数字时钟方案二:
本方案用美国DALLAS公司推出的DS1302实时时钟芯片。
该芯片内部带有31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒,分,时,日,星期,月和年,且具有闰年自动补偿功能。
运用汇编语言来控制STC89C52单片机来实现动态数码显示,实时调时,省电模式等功能。
本方案中STC89C52单片机时整个工作过程的核心,是整个设计的控制者,它控制了脉冲时序的产生,DS1302时钟芯片的启动和停止,数码管的亮灭。
方案选择:
尽管方案一的实现,硬件电路简单,但是每次单片机执行程序,时间被重新赋同一个值,无法体现时钟实时的特点,故选择方案二作为数字时钟的最终方案
数码管显示方案一:
静态显示。
所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。
该方式每一位都需要一个8 位输出口控制。
静态显示时较小的电流能获得较高的亮度,且字符不闪烁。
但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
数码管显示方案二:
动态显示。
所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O口,降低了能耗。
方案选择:
从节省I/O口和降低能耗出发,本设计采用方案二。
最终总方案确定:
通过编写汇编程序控制STC89C52单片机,利用STC89C52单片机实现对DS1302时钟芯片初始时间的设定,计时功能的启动和停止,数码管动态显示信号的控制,对键盘的反应,来实现6位数码管实时显示时间,时间调节,省电等功能。
第三章、控制系统性能说明
STC89C52控制器
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
主要特性
8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载;AT89S52单片机:
8K字节程序存储空间;256字节数据存储空间;自带2KB的EEPROM存储空间;
器件参数
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.用户应用程序空间为8K字节
5.片上集成512字节RAM
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
第四章、硬件设计
元件编号
元件型号
1
STC89C52
2
DS1302
3
74HC573
STC89C52参数:
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[1]
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.用户应用程序空间为8K字节
5.片上集成512字节RAM
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
9.共3个16位定时器/计数器。
即定时器T0、T1、T2
10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
11.通用异步串行口(UART),还可用定时器软件实现多个UART
12.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
13.PDIP封装
引脚图:
DS1302参数:
1、可以采用双电源供电(主电源和备用电源),工作电压宽达2.0~5.5V。
可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
Vcc1:
备用电源;Vcc2:
主电源。
当Vcc2>Vcc1+0.2V时,由
Vcc2向DS1302供电,当Vcc22、SCLK:
串行时钟,输入;
3、I/O:
三线接口时的双向数据线;
4、CE:
相当于片选信号,在读、写数据期间,必须为高。
5、X1、X2:
接32.768KHz晶振
DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。
在主电源关闭的情况下,也能保持时钟的连续运行。
DS1302由Vcc1或Vcc2两者中的较大者供电。
当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。
当Vcc2小于Vcc1时,DS1302由Vcc1供电。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据传送的方法。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
I/O为串行数据输入输出端(双向),后面有详细说明。
SCLK为时钟输入端。
引脚图:
74HC573参数:
输出能直接接到CMOS,NMOS和TTL接口上
操作电压范围:
2.0V~6.0V
低输入电流:
1.0uA
CMOS器件的高噪声抵抗特性
引脚图:
总体硬件图:
第五章、软件设计
主程序流程图
程序设计依据:
指定50H,51H,52H作为时,分,秒数据缓冲区;
指定53H,54H,55H作为年,月,日数据缓冲区
指定40H,41H,42H,43H,44H,45H为6位数码管数据显示缓冲区;
定义三个按键key0,key1,key2,实现显示日期,调时,省电功能;
DS1302寄存器地址:
读:
0x8d,0x8b,0x89,0x87,0x85,0x83,0x81(年,周,月,日,时,分,秒)
写:
0x8c,0x8a,0x88,0x86,0x84,0x82,0x80(年,周,月,日,时,分,秒)
数码管数字显示码:
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
程序说明:
当KEY0键第一次按下,进入设定时间程序,且默认为调时,再次按下KEY0,进入调分程序,第三次按下key0返回主程序。
Key1按键,每按下一次,相应时(分)加一。
长按KEY1键显示日期年,月,日。
按下KEY2进入省电模式,再次按下回复正常,省电,正常模式轮流翻转。
程序如下:
DULAEQUP2.6
WELAEQUP2.7
CEEQUP1.6
SCLKEQUP1.7
IOEQUP2.4
KEY0EQUP3.4
KEY1EQUP3.5
KEY2EQUP3.6
KEY3EQUP3.7
YEARDATA55H
MONTHDATA54H
DAYDATA53H
HOURDATA52H
MINTUEDATA51H
SECONDDATA50H;时,分,秒缓存区
ADDRDATA32H
MESSDATA31H;初始定义
INIT:
CLRCE
MOVADDR,#8EH
MOVMESS,#00H
LCALLWRITE;去除写保护
MOVADDR,#80H
MOVMESS,#00H
LCALLWRITE
MOVADDR,#82H
MOVMESS,#30H
LCALLWRITE
MOVADDR,#84H
MOVMESS,#21H
LCALLWRITE;时分秒赋初值:
21:
30:
00
MOVADDR,#86H
MOVMESS,#11H
LCALLWRITE
MOVADDR,#88H
MOVMESS,#12H
LCALLWRITE
MOVADDR,#8cH
MOVMESS,#15H;年月日赋值:
15.12.11
LCALLWRITE
CLRF0
MAIN:
JBKEY1,DISTIME;当一直按下key3时,显示日期;否则显示时间
DISDATE:
MOVADDR,#8DH
LCALLREAD
MOVYEAR,MESS;读年
MOVR0,YEAR
LCALLDIVIDE
MOV40H,R1;年的个位
MOV41H,R2;年的十位
MOVADDR,#89H
LCALLREAD
MOVMONTH,MESS;读月
MOVR0,MONTH
LCALLDIVIDE
MOV42H,R1;月的个位
MOV43H,R2;月的十位
MOVADDR,#87H
LCALLREAD
MOVDAY,MESS;读日
MOVR0,DAY
LCALLDIVIDE
MOV44H,R1;日的个位
MOV45H,R2;日的十位
LCALLDISPLAY
SJMPCHECK
DISTIME:
MOVADDR,#85H
LCALLREAD
MOVHOUR,MESS;读时
MOVR0,HOUR
LCALLDIVIDE
MOV40H,R1;时的个位
MOV41H,R2;时的十位
MOVADDR,#83H
LCALLREAD
MOVMINTUE,MESS;读分
MOVR0,MINTUE
LCALLDIVIDE
MOV42H,R1;分的个位
MOV43H,R2;分的十位
MOVADDR,#81H
LCALLREAD
MOVSECOND,MESS;读秒
MOVR0,SECOND
LCALLDIVIDE
MOV44H,R1;秒的个位
MOV45H,R2;秒的十位
LCALLDISPLAY
CHECK:
JNBKEY0,CHANGE;按键key0启动调时功能
JNBKEY2,OFFORON;按键key2转换省电/正常模式
LJMPMAIN
省电/正常模式转换程序
OFFORON:
LCALLDELAY
;JBKEY2,MAIN
CPLF0
WAIT2:
LCALLDISPLAY
JNBKEY2,WAIT2
LJMPMAIN
时间设定程序
CHANGE:
LCALLDELAY
;JBKEY0,MAIN;消抖
WAIT0:
LCALLDISPLAY
JNBKEY0,WAIT0
MOV44H,#00H
MOV45H,#00H;秒归零
MOVADDR,#8EH
MOVMESS,#00H;去除写保护
LCALLWRITE
MOVADDR,#80H
MOVMESS,#80H;时钟停止
LCALLWRITE;调时之前的初始化设置
SETG1:
LCALLDISPLAY
JNBKEY0,SETG2;第二次按下key0进入调分程序
JNBKEY1,CHANGEHOUR
AJMPSETG1;等待按键按下
CHANGEHOUR:
LCALLDELAY
JBKEY1,SETG1
MOVR7,HOUR
LCALLADD1;小时加1
MOVHOUR,A
CJNEA,#24H,CHANGEHOUR11
CHANGEHOUR11:
JCCHANGEHOUR1
MOVHOUR,#00H
CHANGEHOUR1:
MOVADDR,#84H
MOVMESS,HOUR
LCALLWRITE
MOVR0,HOUR
LCALLDIVIDE
MOV40H,R1;时送入缓存
MOV41H,R2
WAIT1:
LCALLDISPLAY
JNBKEY1,WAIT1
AJMPSETG1;等待key1按键释放
SETG2:
LCALLDELAY
JBKEY0,SETG1;消抖
WAIT00:
LCALLDISPLAY;等待key0释放
JNBKEY0,WAIT00
SETG3:
LCALLDISPLAY
JNBKEY0,OUT;第三次按下key0进入结束调时程序
JNBKEY1,CHANGEMINTUE
AJMPSETG3
;
CHANGEMINTUE:
LCALLDELAY
JBKEY1,SETG3;消抖
MOVR7,MINTUE
LCALLADD1;分钟加一
MOVMINTUE,A
CJNEA,#60H,CHANGEMINTUE11
CHANGEMINTUE11:
JCCHANGEMINTUE1
MOVMINTUE,#00H
CHANGEMINTUE1:
MOVADDR,#82H
MOVMESS,MINTUE
LCALLWRITE
MOVR0,MINTUE
LCALLDIVIDE
MOV42H,R1
MOV43H,R2
WAIT111:
LCALLDISPLAY
JNBKEY1,WAIT111;等待key1释放
AJMPSETG3
OUT:
LCALLDELAY
JBKEY0,SETG3
MOVADDR,#80H
MOVMESS,#00H
LCALLWRITE
MOVADDR,#8EH
MOVMESS,#80H;写保护
LCALLWRITE
WAIT000:
LCALLDISPLAY
JNBKEY0,WAIT000
LJMPMAIN;返回主程序
WRITE:
CLRSCLK
NOP
SETBCE
NOP
MOVA,ADDR
MOVR4,#8
数据写入程序
WRITE1:
RRCA
NOP
NOP
CLRSCLK
NOP
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR4,WRITE1
CLRSCLK
NOP
MOVA,MESS
MOVR4,#8
WRITE2:
RRCA
NOP
CLRSCLK
NOP
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
DJNZR4,WRITE2
CLRCE
RET
数据读出程序
READ:
CLRSCLK
NOP
NOP
SETBCE
NOP
MOVA,ADDR
MOVR4,#8
READ1:
RRCA
NOP
MOVIO,C
NOP
NOP
NOP
SETBSCLK
NOP
NOP
NOP
CLRSCLK
NOP
NOP
DJNZR4,READ1
MOVR4,#8
READ2:
CLRSCLK
NOP
NOP
NOP
MOVC,IO
NOP
NOP
NOP
NOP
NOP
RRCA
NOP
NOP
NOP
NOP
SETBSCLK
NOP
D