基于单片机电子时钟设计毕业设计论文Word文档格式.docx
《基于单片机电子时钟设计毕业设计论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机电子时钟设计毕业设计论文Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。
然而市场上的时钟便宜的比较笨重,简单实用的又比较昂贵。
那么,有没有一款既简单实用价格又便宜的时钟呢?
我经过反复琢磨设想出:
可不可以利用单片机功能集成化高,价格又便宜的特点设计一款结构既简单,价格又便宜的数字电子时钟呢?
基于这种情况,我经过多方查阅资料,反复论证设计出了这款既简单实用,又价格便宜的——数字电子时钟。
关键词:
数字时钟计时
第一章系统设计要求
1.1基本要求
(1)时间计数电路采用24进制,从00开始到23后再回到00。
(2)各用2位数码管显示时,分,秒。
(3)为了保证计时的稳定及准确,由晶体振荡器提供时间基准信号
1.2基本功能
(1)能够显示时分秒
(2)能够调整时分秒
1.3扩展功能
(1)能够任意设置定时时间
(3)实现了秒表计时功能
(2)定时时间到闹铃能够报警
(4)闹铃电路经过扩展能够实现音乐闹铃功能
第二章硬件总体设计方案
本次设计时钟电路,使用了AT89C52单片机芯片控制电路,单片机的全称是单片微型计算机(SingleChipMicrocomputer)。
为了使用方便,它把组成计算机的主要功能部件:
中央处理器(CPU)、数据存储器(RAM)、程序存储器(ROM、EPROM、E2PROM或FLASH)、定时/计数器和各种输入/输出接口电路等都集成在一块半导体芯片上,构成了一个完整的计算机系统。
与通用的计算机不同,单片机的指令功能是按照工业控制的要求设计,因此它又被称为微控制器(Microcontroller)。
51系列单片机是美国Intel公司于1980年推出的一种8位单片机系列。
该系列的基本型产品是8051、8031和8751。
这3种产品之间的区别只是在片内程序存储器方面。
8051的片内程序存储器(ROM)是掩膜型的,即在制造芯片时已将应用程序固化进去;
8031片内没有程序存储器;
8751内部包含有用作程序存储器的4KB的EPROM。
由于8051的编程需要制造商的支持,8751的价格昂贵,因此8031获得了更为广泛的使用。
MCS51系列单片机优异的性能/价格比使得它从面世以来就获得用户的认可。
Intel公司把这种单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如Atmel、Philips、ADI等。
这些公司的这类产品也被称为8051兼容芯片,这些8051兼容芯片在原来的基础上增加了许多特性。
本书应用电路中采用了Atmel公司的AT89c52芯片,它与51单片机指令集兼容,同时它的内部包含用作程序存储器的4KB的基于FLASH技术的只读存储器。
采用这款芯片既克服了采用8031需要添加外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点。
1系统功能实现总体设计思路
另外AT89C52单片机的特性:
(1)指令集和芯片引脚与Intel公司的8051兼容;
(2)4KB片内在系统可编程Flash程序存储器;
(3)时钟频率为0~33MHz;
(4)128字节片内随机读写存储器(RAM);
(5)32个可编程输入/输出引脚;
(6)2个16位定时/计数器;
(7)6个中断源,2级优先级;
(8)全双工串行通信接口;
(9)监视定时器;
(10)2个数据指针。
利用单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的时、分、秒,用一扬声器来进行定时提醒,同时使用C语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:
键盘、芯片、扬声器、显示屏即可满足设计要求。
2.1设计原理框图
此设计原理框图如图2-1所示,此电路包括以下四个部分:
单片机,键盘,闹铃电路及显示电路。
经多方论证硬件我决心采用AT89c52单片机和7SED八位共阳极数码管等来实现单片机电子时钟的功能。
详细元器件列表如表2.1所示:
表2.1详细元器件列表
AT89c52
1片
7SED八位共阳极数码管
NPN三极管
1个
104p电容
6个
30p电容
2个
10K电阻
560欧姆电阻
8个
200欧姆电阻
100欧姆电阻
晶体振荡器
2.2各部分功能实现
(1)单片机发送的信号通过程序控制最终在数码管上显示出来。
(2)单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
(3)为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。
(4)单片机通过控制闹铃电路来完成定时闹钟的功能。
2.3系统工作原理
设计的电路主要由四模块构成:
单片机控制电路,显示电路、闹铃电路以及校正电路。
详细电路功能图如图2-2:
本设计采用C语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。
时、分、秒的计数结果经过数据处理可直接送显示器显示。
当计时发生误差的时候可以用校时电路进行校正。
设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示。
图2-2详细电路功能图
2.4时钟各功能分析及图解
2.4.1电路各功能图解分析
(1)时钟运行图
仿真开始运行时,或按下key4键时,时钟从00:
00:
00开始运行,其中key2键对时进行调整,key3对分进行调整,key6可以让时钟暂停。
图2-3时钟运行图
(2)秒表计时图
当按下key1键进入秒表计时状态,key6是秒表暂停键,可按key4键跳出秒表计时状态。
如图2-4:
图2-4秒表计时图
(3)闹铃设置图及运行图
当按下key5,开始定时,分别按key2调分,key3调时设置闹铃时间,然后按下key4键恢复时钟运行状态(图2-5)当闹铃设置时间到时,蜂鸣器将发出10秒中蜂鸣声(图2-6)。
图2-5闹铃时间设置图
图2-6闹铃运行图
该数字钟是用一片AT89C52单片机通过编程去驱动8个数码管实现的。
通过6个开关控制,从上到下6个开关KEY1-KEY6的功能分别为:
KEY1,切换至秒表;
KEY2,调节时间,每调一次时加1;
KEY3,调节时间,每调一次分加1;
KEY4,从其它状态切换至时钟状态;
KEY5,切换至闹钟设置状态,也可以对秒表清零;
KEY6,秒表暂停.控制键分别与P1.0~P1.5口连接.其中:
A通过P2口和P3口去控制数码管的显示如图所示P2口接数码管的a——g端,是控制输出编码,P3口接数码管的1——8端,是控制动态扫描输出.
B从P0.0输出一个信号使二极管发光,二极管在设置的闹钟时间到了时候发光,若有乐曲可以去驱动扬声器实现。
2.4.2电路功能使用说明
(1各个控制键的功能:
可对时间进行校准调节(只能加1);
按下设置键数字时钟进入闹钟设置状态,设置闹钟的时间;
时加1、分加1键是在校准时间时或设置闹钟时间对小时数或分钟数调节而设置的;
按下秒切换键就可以进入秒表模式,同时秒表也开始计时,按下秒表暂停、复位键就暂停、归零,如果要重新对秒计时则可以按秒表开始、复位;
清零键可以对闹钟清零。
(2)AT89C52单片机,通过编写程序对数码显示进行控
(3)八个7段数码管显示时钟和秒表信号。
第三章软件总体设计方案
软件程序从开始执行,先通过初始化各个寄存器,经过扫描按键来决定是否设定参数来执行相应功能的程序,进而在数码管上显示。
如图3-1:
图3-1主程序流程
3-2.1秒表中断程序流程
秒表功能通过另一个程序来实现。
通过保护主程序的数据来进行秒表功能。
程序中需要设置秒表的具体显示方法。
如图3-2:
图3-2秒表中断程序流程图
3-2.2中断和清零流程图
图3-3为进入中断和清零图,程序中通过扫描来判断按键是否按下进行执行相应的中断来事实现相应的功能。
图3-3中断和清零程序流程图
3.3控制电路的C语言源程序
#include<
reg52.h>
#defineucharunsignedchar
sbitaddr0=P2^5;
sbitaddr1=P2^6;
sbitaddr2=P2^7;
//行扫描数组
ucharcodescan[6]={0x01,0x02,0x04,0x08,0x10,0x20};
//{0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//L1--L6
//数码管显示的段码表
ucharcodescan1[4]={0xef,0xdf,0xbf,0x7f};
ucharcodetable[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
0xc6,0xa1,0x86,0x8e,0xbf,0xff};
//c,d,e,f,-,空格
uchardispbuf[6];
//显示缓冲区
ucharsecond,minute,hour,count,flag,keyvalue,keybit;
voiddelay(unsignedintloop)
{
unsignedinti;
for(i=0;
i<
loop;
i++);
}
keyscan()
uchari,temp;
keyvalue=0;
4;
i++)
{
P3=scan1[i];
temp=~P3;
temp=temp&
0x0f;
if(temp&
&
keybit==0)
{
keybit=1;
while(temp)
{
keyvalue++;
temp/=2;
}
keyvalue=keyvalue-1+4*i;
}
}
}
main()
uchari=0,temp;
TMOD=0x11;
//T0T1工作于方式1
TL1=0x00;
TH1=0x4C;
//50ms定时初值
ET1=1;
//允许T1中断
PT1=1;
//T1中断优先级高
EA=1;
//开中断
TR1=1;
//T1开始计时
second=minute=hour=count=keybit=0;
P0=0x00;
addr0=1;
addr0=0;
while
(1)
keyscan();
switch(keyvalue)
case1:
if(hour==23)
hour=0;
else
hour++;
break;
case2:
if(minute==59)
minute=0;
minute++;
case3:
if(second==59)
second=0;
second++;
case5:
if(hour==0)
hour=23;
hour--;
case6:
if(minute==0)
minute=59;
minute--;
case7:
if(second==0)
second=59;
second--;
default:
break;
temp=second%10;
dispbuf[5]=temp;
temp=second/10;
dispbuf[4]=temp;
temp=minute%10;
dispbuf[3]=temp;
temp=minute/10;
dispbuf[2]=temp;
temp=hour%10;
dispbuf[1]=temp;
temp=hour/10;
dispbuf[0]=temp;
for(i=0;
6;
P0=scan[i];
addr2=1;
addr2=0;
temp=table[dispbuf[i]];
if((i==2|i==3)&
flag)
temp^=0x80;
P0=temp;
addr1=1;
addr1=0;
delay(20);
P0=0xff;
if(second==60)
minute++;
second=0;
if(minute==60)
hour++;
minute=0;
if(hour==24)
hour=0;
voidint50ms()interrupt3
TR1=0;
//关定时器T0
TL1=0x00;
TH1=0x4C;
//赋定时初值
TR1=1;
//开定时器T0
count++;
//50ms计数减1
if(count==2)
keybit=0;
if(count==10)
flag=0;
if(count==20)//1秒定时到
count=0;
//重赋50ms计数值
flag=1;
second++;
结果图展示:
第四章毕业设计结果分析
此时钟设计是利用protel仿真软件进行仿真,基本上实现了毕业设计要求实现的功能。
硬件部分设置了的六个按键。
当按键一按下时,进入秒表显示状态,秒表开始计时,当按键六按下时,秒表暂停;
当按键四按下时恢复到时间显示功能;
当按键二按下时,进入调分状态,按一次,分加一,60一循环;
按键三按下时,进入调时状态,按一次,时加一,60一循环;
按键五按下时,进入闹铃设置功能,紧接着按下按键二和按键三进行时和分的设置,再按下按键4恢复显示时间,当显示的时间和定时设置的时间一致时,蜂鸣器发出蜂鸣声,蜂鸣时间我们设置为10秒。
另外,闹铃电路有音乐闹钟的扩展的功能(可以将蜂鸣器换成扬声器再加一段音乐程序即可实现)。
调试阶段,出现一些问题。
比如,实际小时显示到29才归零,分钟显示到60才进一……经过软件调试,以上问题均一一排除,结果达到预期目标。
但时间有限,部分扩展功能不能及时实现,比如音乐闹铃。
参考文献
51单片机C语言应用与开发胡杰吴磊赵鸣编著北京航天航空大学出版社