郑州交通学院基于单片机的电子钟设计系部:信息工程系学生姓名:朱珂锋指导教师:姜海专业:电子信息工程技术应用班级:电信二班学号:243摘要51系列单片机是各单片机中最为典型和最有代表性的一种。
由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。
本次设计的数字电子钟采用了AT89C51芯片进行,由8位8段数码管进行动态刷新显示,有四个独立按键。
可以进行秒、分、时的调整,且操作简单,计时误差小,显示亮度高,具有良好的实用价值。
这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
应用Proteus软件实现了单片机电子时钟系统的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
关键词数字电子钟;单片机;C语言目录1 设计课题题目、目的要求及总体方案介绍 (4)1.1 设计课题题目 (4)1.2 设计课题目的 (4)1.3 设计课题要求及工作原理说明 (4)2 数字电子钟硬件系统的设计 (5)2.1 硬件总体设计 (5)2.2 数字电子钟硬件系统主要模块功能简要介绍 (5)2.3 数字电子钟电路原理图、PCB图、元器件布局图 (6)2.4 数字电子钟元器件清单 (7)3 数字电子钟软件系统的设计 (8)3.1 数字电子钟软件系统主要模块功能简要介绍 (8)3.2 数字电子钟软件系统程序流程框图 (8)3.3 数字电子钟软件系统程序清单 (9)4 设计结论、仿真结果、误差分析 (12)4.1 数字电子钟的仿真结果 (12)4.2 数字电子钟的误差分析 (13)4.3 设计重点、难点,体会及不足之处 (13)参考文献 (14)致谢 (15)附录 (16)1 设计课题题目、目的要求及总体方案介绍1.1 设计课题题目基于单片机的电子钟设计。
1.2 设计课题目的巩固《单片机技术》课程所学的有关知识。
通过硬件设计、软件设计,使学生掌握用单片机组成应用系统的方法,提高软件设计能力。
掌握单片机的定时计数器的编程和使用方法。
进一步熟悉单片机功能部件的应用。
1.3 设计课题要求及工作原理说明要求自己做出原理图设计。
并且要扩展一片8255芯片作显示接口,分别输出段码和位码;用P1口中的两根口线作功能键。
可利用四个LED 分时显示当前时间和日历。
两个按键的功能:A键用于调时,范围0~23,0为24点,每按一次时加1;B键用于调分,范围0~59,0为60分,每按一次分加1。
单片机程序设计、调试。
本课题采用单片机内部定时器,用软件对其进行秒、分、时的计数,单片机无法产生1s的定时时间,但是可以用硬件定时和软件计数相结合的方法实现,采用中断方式,即通过中断服务程序进行计数器溢出次数的累计,把定时器计数器设定为62.5ms,计数溢出16次就可以得到1s,计60次为1分,60分计60次则为1小时,然后通过数码管动态刷新显示出来,再设四个按键进行时间的调整,一个键用作启动调整键,其余三个分别用于时、分、秒的调整。
通过理论设计和实物制作解决相应的实际问题,巩固和运用在《单片机C语言应用程序技术》中所学的理论知识和实验技能,掌握单片机应用系统的一般设计方法,提高设计能力和实践动手能力,为以后从事电子电路设计、研发电子产品打下良好的基础。
2 数字电子钟硬件系统的设计2.1 硬件总体设计硬件系统总体设计如图2.1所示。
图2.1 硬件系统总体设计2.2 数字电子钟硬件系统主要模块功能简要介绍(1)功能芯片:本次设计采用AT89C51芯片,低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
256字节RAM, 32 位IO 口线,与工业80C51 产品指令和引脚完全兼容。
价格较低,能满足本次设计的要求。
(2)电源和复位模块:AT89C51需5V电压,所以可以采用USB接口的5V电源对其供电,复位电路可采用上电复位、按键电平复位、按键脉冲复位3种,本次采用按键电平复位。
如电路原理图中的电源和复位模块。
(3)显示模块:该模块由8位8段共阳极数码管组成,由8个PNP型三极管分别驱动其发光,从左至右位控分别接于单片机的P2.7-P2.0中上,段控a-dP接于单片机的P0.0-P0.7口上,使用动态显示从右向左循环点亮每一位数码管。
如电路原理图中的数码管电路。
(4)键盘模块:键盘由8个独立式按键组成,S0-S7键分别接在单片机的P1.0-P1.7口,并由上拉电阻上拉使其成为电位为高。
如电路原理图中的独立键盘模块。
(5)时钟模块:为了保证同步工作方式的思想,单片机必须有时钟信号,以使其系统在时钟信号的控制下按时序协调工作。
如电路原理图中的晶振电路。
2.3 数字电子钟电路原理图、PCB 图、元器件布局图Q015Q11Q22Q33Q44Q55Q66Q77Q7'9SH_CP11ST_CP 12DS 14MR10OE 13U174HC595Q015Q11Q22Q33Q44Q55Q66Q77Q7'9SH_CP 11ST_CP12DS 14MR 10OE 13U274HC595XTAL24RST 1P1.012P1.113P1.214P1.315P1.416P1.517P1.618P1.719P3.2/INT06P3.3/INT17P3.4/T08P3.5/T19P3.0/RXD 2P3.1/TXD3P3.711XTAL15U3AT89C2051X1CRYSTALC130pFC230pFR110kC310u5 V5 V5 VRST5SCLK 7I/O 6X12X23VCC18VCC21U4DS1302X2CRYSTAL5 V3 V2.31数字电子钟电路原理图2.4 数字电子钟元器件清单元器件名称 规格 数量 STC11F02 1 DS1302 1 晶振 12MHz 2 数码管 874HC5951 三极管90129蜂鸣器 1小按键 4 下载口座子十芯 1 18b20温度传感器 1六脚开关 1 USB电源线加接口 1电阻 200 1电阻 4.7K 1电阻1K 3电阻 470 24 电解电容220μF 1瓷片电容33pF 2排阻10K 2短路帽 3杜邦线8p 1PCB板子 1底座 3数字电子钟元器件清单3 数字电子钟软件系统的设计3.1 数字电子钟软件系统主要模块功能简要介绍(1)主程序:主程序的主要功能是进行定时器计数器,显示缓冲区的初始化,显示,以及判断是否有功能键按下,判断按下的键并调相应的键功能程序。
(2)键功能程序:键功能程序的主要功能是执行对应的功能,Menu键为启动调整键,第一次按下则由待机状态进入运行状态启动时钟,从开始显示,然后按下为奇数则暂停,进入调时状态,按下Sec键则秒加1,按下Min键则分加1,按下Hour键则时加1;若按下为偶数则进入时钟运行状态。
(3)中断服务程序:中断服务程序的主要功能是进行计时操作,程序开始先判断计数溢出是否满了16次,若不满16次则表明没有达到最小计时单位秒,则中断返回;若满16次表明已达到最小计时单位秒,则程序断续向下执行,进行分和时的计时。
(4)显示子程序:显示程序的主要功能是将显示缓冲区的段控码正确的显示在数码管上,采用动态显示,从右向左循环点亮每一位数码管。
(5)键扫子程序:键扫子程序的主要功能是判断是否有键按下,是哪个键按下,并将键值保存在20H中。
3.2 数字电子钟软件系统程序流程框图图3.1 计时1秒子程序流程框图图3.2 显示子程序流程框图3.3 数字电子钟软件系统程序清单#include<reg52.(ucdat);}void write_ds1302(uchar addr,uchar dat) 给DS1302写指令{DS1302_RST=0;_nop_();DS1302_CLK=0;_nop_();DS1302_RST=1;writeshuju(addr);_nop_();writeshuju(dat);DS1302_CLK=1;_nop_();DS1302_RST=0;}uchar read_ds1302(uchar addr) {uchar time;DS1302_RST=0;_nop_();DS1302_CLK=0;_nop_();DS1302_RST=1;writeshuju(addr);time=readshuju();DS1302_CLK=1;_nop_();DS1302_RST=0;return(time);}void chushi_ds1302(){write_ds1302(0x84,0x12); 时write_ds1302(0x82,0x00); 分write_ds1302(0x80,0x00); 秒write_ds1302(0x8e,0x80); wp为1关闭写操作保存写的数据}void read_time() 读时间{second=read_ds1302(0x81);second=((second16)*10+second%16);minute=read_ds1302(0x83);minute=((minute16)*10+minute%16);(){if(s3==0){delayms(5);if(s3==0){while(!s3)display();if(num==1){();wr595(table[7]);wr595(tab[second%10]);rck=1;rck=0;}for(i=0;i<30;i++){wr595(table[0]);wr595(tab[10]);rck=1;delayms(1);rck=0;wr595(table[1]);wr595(tab[10]);rck=1;delayms(1);rck=0;sheding();wr595(table[2]);wr595(table[8]);rck=1;delayms(1);rck=0;wr595(table[3]);wr595(tab[minute10]);rck=1;rck=0;wr595(table[4]);wr595(tab[minute%10]); rck=1;delayms(1);rck=0;wr595(table[5]);wr595(table[8]);rck=1;delayms(1);rck=0;jiajia();wr595(table[6]);wr595(tab[second10]); rck=1;delayms(1);rck=0;wr595(table[7]);wr595(tab[second%10]); rck=1;delayms(1);rck=0;jianjian();}}**********************while(num==2){for(i=0;i<30;i++){wr595(table[0]);wr595(tab[();}for(i=0;i<30;i++){wr595(table[0]);wr595(tab[();}}*********************************** while(num==3){for(i=0;i<30;i++){wr595(table[0]);wr595(tab[();}for(i=0;i<30;i++){wr595(table[0]);wr595(tab[();}}write_ds1302(0x8e,0x00);write_ds1302(0x80,((second10)<<4|second%10));write_ds1302(0x8e,0x80);}}}########################################################## 主函数########################################################## void main(void){chushi_ds1302();while(1){read_time();display();key();}}4 设计结论、仿真结果、误差分析4.1 数字电子钟的仿真结果本次设计的数字电子钟有三种状态:开始状态,时钟运行状态,时钟调整状态。