单片机数字时钟张斌Word文档下载推荐.docx
《单片机数字时钟张斌Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟张斌Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
![单片机数字时钟张斌Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-11/23/ae79078e-e30a-4f09-9528-ee4ab2ccbbd5/ae79078e-e30a-4f09-9528-ee4ab2ccbbd51.gif)
附录程序清单22
第1章绪论
1.1数字时钟的发展史
电子钟有着很长的历史,从民国19年的电钟,研制始於60年代中期的国内电晶体、半导体管钟,到研制始於70年代末的石英电子钟,再到今天我们所用的智能电子钟。
以前的电子钟存在着很多缺点,其外观体积庞大,在功能上有死摆、走时时间不长、走时精确度不高等缺点。
如今无论是外观,还是在功能上,电子钟都有了很大的改进。
虽然世界绝大多数钟表都是中国制造,但钟表对于国内市场来说只是个小行业,2003年总盘子不过才100多亿,但不是没有前景。
近年来,市场在急剧膨胀。
根据国外的统计数据显示,发达国家人均一生拥有手表23块,发展中国家12块,而目前中国的城镇人口人均拥有量不多于6块,空间很大。
比如彩电一般是一个家庭一台,手表则是每人一块,但从销售量来看,光TCL一家公司两个月的彩电销量可以接近300万台,而我们手表每年总共才卖200多万只。
所以绝对不是市场潜力不够的问题,而是我们应该如何去做的问题。
1.2设计的目的与意义
人类的生活包括:
工作、学习、休息以及参与社会的多种实践活动,环环有条理,更加丰富多彩。
应该说时钟的计时功能与人类的各种行为和活动有着密切的联系,于是时钟的作用便体现出来,生活中有许多人,因为只顾工作而忘记时间,从而耽误了重要的安排或者计划,造成不可挽回的损失,使之后悔莫及。
我们要养成良好的时间观念,就需要电子钟时刻提醒我们。
因此,电子钟已成为人们日常生活中必不可少,它的应用非常广泛,应用于家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。
现在投入生产的大多是智能时钟,它的功能很全面,但价格有点昂贵,大多数学生或者经济条件较差的人,想要拥有它,都有点困难。
因此,在这里设计一个较简单的电子钟,它能完成计时和校时的功能。
这个时钟系统很简单,投入生产的成本很低,因此,它的价格比较便宜,对于学生很实用。
1.3设计的基本思路与主要内容
设计一个电子产品,首先了解它能实现的功能,时钟系统最基本的功能就是实现计时,在这里设计的数字电子时钟,它能实现计时和校时的功能,给电子钟加上电自动计时,设计三个按键对时间进行调整。
硬件设计很简单,主要包括:
单片机、按键电路、驱动显示电路,以及LED显示器四个部分。
单片机选用AT89C51芯片,它无须外扩程序存储器,设计电路很简单。
由于只用了三个按键,所以采用独立式按键使设计更简单。
显示时、分、秒加两个分隔符,采用两个四位的数码管,用上拉电阻来驱动LED数码管显示字符。
简易数字时钟可实现校时功能,该软件采用汇编语言来实现,主要包括主程序、键输入程序、显示程序、定时程序和中断程序等软件模块。
把源程序加入原理图,做出电子钟的仿真,以秒计数并显示时、分、秒。
其中秒和分为60进制,小时为24进制计数。
可通过按键实现时钟时、分、秒的校正。
第2章数字时钟系统的整体设计
2.1系统功能要求
以单片机技术为核心,充分应用各种外围电路元器件,设计一个通过数码管显示时间(时、分、秒)的电子钟。
要求如下:
1、系统初次上电,显示00时、00分、00秒,并以秒为单位开始计时;
2、运行状态下,按动控制按扭S-SET,对秒进行调整;
3、运行状态下,按动控制按扭M-SET,对分进行调整;
4、运行状态下,按动控制按扭H-SET,对小时进行调整。
2.2整体方案
电子钟的电路图主要由单片机(AT89C51)、键盘电路、驱动显示电路和LED显示器四部分组成,它主要实现时钟的显示,以及对时、分、秒进行调整,即实现调时的功能。
其数字钟系统整体结构如图2-1所示。
图2-1电子钟系统整体结构
(1)显示方案
方案一:
静态显示就是当CPU将要显示的字或字段码送到输出口,显示器就可以显示出所要显示的字符,如果CPU不去改写它,它将一直保持下去;
静态显示硬件开销大,电路复杂,信息刷新速度慢。
方案二:
动态显示则是一位一位地轮流点亮显示器地各个位(扫描)。
对于显示器的每一位而言,每隔一段时间点亮一次;
动态显示耗能较小,但编写程序较复杂。
动态显示硬件连接简单,信息刷新速度快。
由于本次设计是对时间进行显示,如采用静态显示,则所占用的I/O口较多,电路较复杂,所以在此选择的是方案二,采用动态显示。
(2)键盘方案
独立式键盘。
独立式键盘的各个按键相互独立,每个按键独立地与一根数据输入线(单片机并行接口或其他芯片的并行接口)连接。
独立式键盘配置灵活,软件结构简单,但每个按键必须占用一根接口线,在按键数量不多时,接口线占用多。
所以,独立式按键常用于按键数量不多的场合。
矩阵式键盘。
矩阵式键盘采用的是行列式结构,按键设置在行列的交点上.(当接口线数量为8时,可以将4根接口线定义为行线,另4根接口线定义为列线,形成4*4键盘,可以配置16个按键。
)
由于本设计只用了三个按键,不需要采用矩阵式键盘,所以选用第一种方案,采用独立式键盘。
(3)计时方案
采用软件控制:
利用单片机内部的定时/计数器进行定时,配合软件定时实现时、分、秒的计时。
该方案能够使设计者,在设计的过程中容易实现,且节省硬件成本,因此本系统将采用软件方法实现计时。
第3章硬件设计与分析
3.1硬件设计原理
时钟电路的核心是AT89C51单片机,其内部带有2KB的可反复擦写的只读Flash程序存储器和128bytes的随机存取数据存储器(RAM),无须外扩程序存储器。
电脑时钟没有大量的运算和暂存数据,现有的128B片内RAM已能满足要求,也不必外扩片RAM。
系统配备两个四位LED数码管显示和3个独立式按键,用P0口作为键盘接口电路,P1口和P3口作为段码和位码输出口,并在字段码输出口接上拉电阻来驱动LED数码管显示。
利用P0.0、P0.1和P0.2作为功能按键输入口。
3.2各单元电路介绍
3.2.1AT89C51单片机介绍
AT89C51是一个低电压,高性能CMOS8位单片机,片内含2kbytes的可反复擦写的只读Flash程序存储器和128bytes的随机存取数据存储器(RAM),器件采用STCMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,所以说AT89C51是一个功能强大的单片机。
AT89C51是一个低功耗高性能单片机,它有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
同时AT89C51的时钟频率可以为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入继续工作状态。
省电模式中,片内RAM将被冻结,时钟停止振荡,所有功能停止工作,直至系统被硬件复位方可继续运行。
3.2.2单片机最小应用系统
时钟电路和复位电路是单片机最小应用系统中必不可少的。
单片机时钟电路图,如图3-1所示:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
图3-1单片机时钟电路图
复位是使单片机或系统中的其他部件处于某种确定的初始状态。
单片机的工作就是从复位开始的,当在单片机的RST引脚引入高电平并保持2个机器周期时,单片机内部就执复位操作(若该引脚持续保持高电平,单片机就处于循环复位状态)。
实际应用中,复位操作有两种基本的形式:
一种是上电复位,另一种是上电与按键均有效的复位。
由于本次设计采用的是上电复位,所以这里只介绍上电复位,如下图3-3所示:
图3-3上电复位电路
上电复位要求接通电源后,单片机自动实现复位操作。
常用的上电复位如上图所示。
上电瞬间RST引脚获得高电平,随着电容C1的充电,RST引脚的高电平将逐渐下降。
3.2.3显示电路
一、七段LED显示器的原理
显示器是单片机应用系统常用的设备,包括LED、LCD等。
LED显示器由若干个发光二极管组成。
七段LED通常构成字型“8”,还有一个发光二极管用来显示小数点。
每段LED分别引出一个电极,电极的名为A、B、C、D、E、F、G、DP,其中DP是小数点段的引出电极。
当发光二极管导通时,相应的一个笔画或一个点就发光。
控制相应的二极管导通,就能显示出对应字符。
说明:
在该设计中,没有用到电极(DP),而是用单位的数码管来显示分隔符,其
七段LED显示器如图3-4所示
图3-4七段LED显示器
二、动态显示
本设计共用了两个四位LED显示器,因此采用动态显示方式。
所谓动态显示就是一位一位的轮流点亮显示器的各个位。
对于显示器的每一位而言,每隔一段时间点亮一次。
虽然在同一时刻只有一位显示器在工作,但由于人眼的视觉暂留效应和发光二极管熄灭时的余晖,我们看到的却是多个字符“同时“显示。
显示器亮度既与点亮时的导通电流有关,也与点亮时间长短和时间间隔有关。
显示器的位数不大于8位,则控制显示器公共极电位只需要一个I/O接口,称为扫描口或字位口,控制各位LED显示器所显示的字型也需要一个8位接口,称为段数据口或字型口。
3.2.4键盘及其接口
键盘是由若干个按键组成的,它是单片机最简单的输入设备。
通过键盘输入数据或命令,就可实现简单的人机对话。
一、按键的抖动现象
按键就是一个简单的开关。
当按键按下时,相当于开关闭合;
当按键松开时,相当于开关断开。
按键在闭合和断开时,触点会存在抖动现象。
按键抖动时间一般为5ms~10ms,抖动可能造成一次按键的多次处理问题。
应采取措施消除抖动的影响。
消除的方法很多,本设计采用软件延时的方法来消除抖动。
当单片机检测到有按键按下时先定时,然后再检测按键的状态,若仍是闭合状态则认为真的有键按下。
当检测到按键释放时,亦需要做同样的处理。
二、按键电路
独立式键盘的各个按键相互独立,每个按键独立地与一根数据输入线(单片机并行接口或其他芯片的并行接口)连接。
该设计只用了三个按键,来实现功能控制。
在运行状态下,按动控制按扭S-SET,可对秒进行调整;
按动控制按扭M-SET,可对分进行调整;
按动控制按扭H-SET,可对时进行调整;
因此采用独立式键盘方式,设计起来比较简单。
如图3-5所示
图3-5键盘电路
3.3系统原理图
AT89C51的P1口接入三个按键,对时、分、秒进行调整。
P0口输出字段码,控制要显示的字符,外接上拉电阻,驱动LED显示。
P3口输出字位码,去控制要显示的位,其原理图如图3-6所示。
图3-6电子钟原理图
当接入电源时,数字电子钟以秒为单位开始计时。
运行状态下,按下控制按键S-SET,对秒进行调整;
按下M-SET调整分钟;
按下H-SET对小时进行调整。
这样通过三个按键,分别对时、分、秒进行调整,从而实现调时。
第4章软件设计
在软件设计中,整个程序的主框架是以定时1s计算的方式来实现电子钟。
定时1s的程序段,使用动态显示程序实现延时,既完成了延时,也完成了数字的显示。
在计算程序中,使对应于时、分、秒的变化量按照60进制和24进制进行计算,动态显示程序直接引用这些变量,达到显示的数字也随之不断变化,即完成了电子钟的功能。
其软件功能模块主要有键输入程序、中断程序、显示程序,以及延时程序。
需要说明的是,这里设计的是简易的电子钟,主要是用程序运行来计算时间,这样用程序来确定出1s的时间精度是很有限的,所以整个时钟的精度不太高。
4.1主程序的设计
初始化将时、分、秒各单元的内容清空,置T0为计数器方式1,分别给计数器的高8位和低8位赋计数初值,启动T0工作。
键入一个按键,如执行此动作,秒值加1,否则重新键如按键。
主程序模块:
主程序流程图,如图4-1所示
图4-1主程序流程图
4.2键输入程序
键输入程序用于调整时间。
以秒为例,按下按键S-SET,判断S-SET是否真的被按下,若没有键按下,转到A1程序段,再次键入按键,重新判断。
若按键按下了,则调用延时程序,消除抖动现象秒值加1,当秒值大于60时,秒清零,进行下一次计时,同时分加一,并转到J0显示。
此过程循环执行,其程序流程图如图4-2所示:
图4-2键输入程序流程图
按键子程序如下:
if(k1==0){_delay_ms(40);
if(k1==0)h=(h+1)%24;
}
if(k2==0){_delay_ms(40);
if(k2==0)min=(min+1)%60;
if(k3==0){_delay_ms(40);
if(k3==0)miao=(miao+1)%60;
4.3显示程序
显示其时、分、秒的数值,和两个分隔符。
以显示秒为例,当P3.7输入高电
平时,秒的个位所对应的字段码点亮,显示其秒的个位;
当秒有十位输入时,P3.6输入高电平,秒所十位对应的字段码点亮,显示其秒十位。
其程序流程图如图4-3所示:
图4-3显示程序流程图
数码管显示子程序如下:
voiddispaly()
{
//------------------------------------------
//显示时间
//载入第12345678个数码管显示缓冲-
num[0]=SEG7[h%100/10];
num[1]=SEG7[h%10];
num[2]=dian;
num[3]=SEG7[min%100/10];
num[4]=SEG7[min%10];
num[5]=dian;
num[6]=SEG7[miao%100/10];
num[7]=SEG7[miao%10];
PP=~num[0];
//送位码
q1=0;
//延时后关闭位码
_delay_ms
(2);
q1=1;
//送段码---------------
PP=~num[1];
q2=0;
q2=1;
PP=~num[2];
q3=0;
q3=1;
PP=~num[3];
q4=0;
q4=1;
PP=~num[4];
q5=0;
q5=1;
PP=~num[5];
q6=0;
q6=1;
PP=~num[6];
q7=0;
q7=1;
PP=~num[7];
q8=0;
q8=1;
4.4中断程序
中断程序主要用于控制显示的字符。
当秒值大于60时,秒清零,重新计数,分值加1,秒、分同时显示;
当分值大于60时,分清零,重新计数,小时加1,秒、分、时同时显示,当小时大于23时,一天的计时完毕,秒、分、时均清零,进行第二天的计时。
此任务循环执行。
其程序流程图如图4-5所示:
图4-5中断程序流程图
子程序如下:
voidTime0()interrupt1
{
//重装初值50ms;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//时间缓冲+1;
jishu1=jishu1+1;
if(jishu1>
=20)
{
jishu1=0;
miao++;
if(miao>
59)
min++;
miao=0;
if(min>
59){h=h+1;
min=0;
if(h==24)h=0;
}
}
第5章调试与运行
5.1电路仿真
本设计的电路在单片机仿真软件Proteus中进行仿真,仿真电路如图5-1所示:
图5-1电子钟仿真电路图
5.2调试和运行
在KEIL(单片机编程软件)C51软件中编写好程序,将程序放入单片机仿真软件中,结合硬件电路进行调试与运行。
通过按键对时间进行调整。
如显示时间为05-02-12,既是05点02分12秒,通过以下调整则可实现。
(1)按动S-SET键,将秒调到12;
(2)按动M-SET键,将分调到02;
(3)按动H-SET键,将时调到05。
则将时间调到了所要显示的时间05-02-12,通过此方法可将时间调整到任何需要显示的时间。
结束语
因为单片机的种类多,而型号杂,也是我们学习中的困难,所以就MCS—51系列的产品来说,就是一个典型的学习方法。
对于类似c语言的单片机编程过程,也是一个十分有趣的过程。
为了更好的说明,我以上介绍先从应用电路切入,同时介绍它们的使用方法,以便能快速掌握它们的应用。
通过本次的课程设计,我学会了单片机的一般设计过程,通常都要进行系统扩展与配置,因此,要完成一个单片机的设计工作,必须依次做到下述工作:
1、硬件电路的设计、组装与调试;
2、应用软件的编写、调试;
3、完整应用软件的调试、固化和脱机运行。
而在进行硬件系统设计时我们应当尽量做到:
1、尽可能的选择典型电路,并符合单片机的常规使用方法;
2、在充分满足系统功能要求前提下,留余地以便于二次开发;
3、硬件结构设计应与软件设计方案一并考虑;
4、整个系统相关器件要力求性能的匹配;
5、硬件上要有可靠性与抗干扰设计;
6、充分考虑单片机的带载驱动能力。
所以我用单片机编写了上面的程序,因为基础知识学的不怎么好,如有错误之处,还望老师理解,并加以批改。
通过这次设计使我对单片机有了更深入的了解。
培养了我的动手实践能力。
参考文献
[1].朱永金等主编,《单片机应用技术》,中国劳动社会保障出版社。
[2].彭冬明.韦友春主编,《单片机实验教程》,理工大学出版社。
[3].朱家建主编,《单片机原理及应用》,机械工业出版社。
[4].胡汉才主编,《单片机原理及接口技术》,清华大学出版社。
[5].张伟主编,《单片机原理及应用》,机械工业出版社。
致谢
本文从拟定题目到定稿,经历了很长一段时间。
在本论文完成之际,首先要向我的导师*老师致以诚挚的谢意。
在论文的写作过程中,老师不厌其烦地为我讲解毕业设计中繁琐的问题,并且多次提出宝贵意见,使我的毕业设计能够更完整,更充实。
同时,还要感谢这几年中孜孜不倦的为我们讲课的老师们,是他们毫无保留地将他们的知识传授给我们,才使得今天的我能够顺利的完成我的毕业设计,感谢揭阳职业技术学院,是这里给我提供了良好的学习环境和生活环境,让我的大学生活丰富多彩,让我对今后的生活更加充满了信心。
另外,衷心感谢我的同窗同学们,在我毕业论文写作中,与他们的探讨交流使我受益颇多;
同时,他们也给了我很多无私的帮助和支持,我在此深表谢意!
最后,向我亲爱的家人和朋友表示深深的谢意,他们给予我的爱、理解、关心和支持是我不断前进的动力。
附录程序清单
#include<
reg51.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#definePPP0
ucharcodeSEG7[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//显示缓冲
ucharnum[]={1,2,3,4,5,6,7,8};
uchardian=0xbf;
//定义数码管显示位码的端口P20--P25
sbitq1=P2^7;
sbitq2=P2^6;
sbitq3=P2^5;
sbitq4=P2^4;
sbitq5=P2^3;
sbitq6=P2^2;
sbitq7=P2^1;
sbitq8=P2^0;
//按键123456
sbitk1=P1^3;
sbitk2=P1^2;
sbitk3=P1^0;
//显示时间
uinth=0;
uintmin=0;
uintmiao=0;
//计数器计时变量
uintjishu1=0;
//时分秒变量
uinth1=18;
//
uintm1=0;
//
uints1=20;
//延时函数ms
void_delay_ms(uintt)
uinti,j;
for(i=0;
i<
t;
i++)
for(j=0;
j<
250;
j++);
//延时函数us
void_delay_us(uchart)
while(t>
0)t--;
//显示子函数