《电子线路设计》课程设计说明书
基于单片机数字电子钟
系 、 部: 电气与信息工程学院 指导教师: 职称 讲师 组 长: 成 员:
专 业: 电子信息工程 班 级: 电子1004班 完成时间: 2013-06-07
摘 要
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。
关键词 电子钟;AT89S52;硬件设计;软件设计
1
ABSTRACT
Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.
Key words Electronic clock;AT89S52;Hardware Design;Software Design
II
目 录
1 数字电子钟设计任务、功能要求说明及方案介绍 ......................................................................... 1
1.1 设计课题设计任务 .................................................................................................................. 1 1.2 设计课题的功能要求说明 ...................................................................................................... 1 1.3 设计课的设计总体方案介绍及工作原理说明 ...................................................................... 1 2 设计课题的硬件系统的设计 ............................................................................................................. 2
2.1硬件系统各模块功能简要介绍 ................................................................................................. 2
2.1.1 AT89S52简介 .................................................................................................................. 2 2.1.2 按键电路 ......................................................................................................................... 3 2.1.2 复位电路 ......................................................................................................................... 3 2.2设计课题的硬件系统设计图 ..................................................................................................... 3
2.2.1电路原理图 ...................................................................................................................... 3 2.2.2电路PCB图 .................................................................................................................... 4 2.2.3元件清单 .......................................................................................................................... 4
3 设计课题的软件系统的设计 ............................................................................................................. 5
3.1 使用单片机资源的情况 ......................................................................................................... 5 3.2 软件系统个模块功能简要介绍 .............................................................................................. 5 3.3 软件系统程序流程框图 .......................................................................................................... 6 3.4 软件系统程序清单 .................................................................................................................. 8 4 设计课题的设计结论、仿真结果、误差分析 ................................................................................. 9
4.1 设计结论及使用说明 .............................................................................................................. 9 4.2 仿真结果 .................................................................................................................................. 9 结 束 语................................................................................................................................................. 11 参考文献................................................................................................................................................. 12 致 谢 .................................................................................................................................................... 13 附 录 .................................................................................................................................................... 14
附录A:实物图 ............................................................................................................................. 14 附录B: 原理图 .............................................................................................................................. 15 附录C:PCB图 ............................................................................................................................ 16 附录E:PCB布局图 ..................................................................................................................... 17 附录F:元件清单表 ..................................................................................................................... 19 附录G:程序清单 ............................................................................................................................ 20
1 数字电子钟设计任务、功能要求说明及方案介绍
1.1 设计课题设计任务
设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整 功能。
1.2 设计课题的功能要求说明
设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。
1.3 设计课的设计总体方案介绍及工作原理说明
本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:
键盘复位电路AT89S52晶振电路数码管显示 下载 图1-1总体设计方案图
本电子钟的所有的软件、参数均存放在AT89S52的Flash ROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
1
2 设计课题的硬件系统的设计
2.1硬件系统各模块功能简要介绍
2.1.1 AT89S52简介
(1) 与MCS-51产品相兼容;
(2) 具有8KB可改写的Flash 内部程序存储器,可写/擦1000次; (5) 256字节内部RAM; (6) 32根可编程I/O口; (7)3个16位定时器/计数器。 (8) 8个中断源; (9)可编程中串行口; (10) 低功耗空闲和掉电方式。
它的价格便宜,功能强大,能耗低。很大程度上减少总电路的复杂性,提高了所设计系统的稳定性。其芯片引脚图如图2-1所示。
图2-1 单片机AT89S52引脚图
2
2.1.2 按键电路
图2-2按键图
2.1.2 复位电路
图2-3复位图
2.2设计课题的硬件系统设计图
2.2.1电路原理图
此处电路原理图以及PCB原理图的绘制均使用protel99软件完成, Protel99提供了一个集成的设计环境,包括了原理图设计和PCB布线工具,集成的设计文档管理,支持通过网络进行工作组协同设计功能。根据硬件接线要求设计绘制电路原理图及PCB。具体电路原理图见附录B。
3
2.2.2电路PCB图
PCB图设计时,首先要使元器件尽量少,这样既可以节约材料,又可以是布线更加短,减少干扰,同时还应注意尽量减少线路之间的寄生电容和电感, 布线时需要将线宽设置得比较宽这样可以提高腐蚀电路板时的成功率,焊盘大小也要设置的比较大,这样在腐蚀环节和焊接环节比较容易成功。不易出现短线的现象和焊盘剥离的现象。双面布线时芯片和针脚多的元件需将焊接点置于底层,这样才能比较方便的焊接。电路PCB图见附录C 和PCB布局图见附录E。
2.2.3元件清单
元件清表见附录G
4
3 设计课题的软件系统的设计
3.1 使用单片机资源的情况
设计课题使用单片机资源的情况如下:
P0口输出数码管段选信号,P2口输出数码管位选信号;晶振12MHz;调整选择键KEY1:P1.0;通过选择键选择调整位,选中位闪烁;增加键KEY2:P1.1;按一次使选中位加1;减少键KEY3:P1.2;按一次使选中位减1;此数字钟可实现基本的走时和显示时间时、分、秒;时间的调整;闹钟的设定和调整;闹钟的开启和关闭功能,具体如下:
(1)实现基本的走时和显示时间的时、分、秒,上电自动显示初始时间12-59-00,且控制闹钟状态的的红色led灯为亮的状态。
(2)当第一次按下第一个弹性按键时进入时间的调节状态,此时实现对显示时间的小时调节,按下第二个按键时实现小时的加一调节,按下第三个按键时实现小时的减一调节。
(3)当第二次按下第一个弹性按键时进入显示时间的分钟调节状态,按下第二个按键时实现分钟的加一调节,按下第三个按键时实现分钟的减一调节。
(4)当第三次按下第一个弹性按键时进入闹钟的小时调节状态,按下第二个按键时实现闹钟小时的加一调节,按下第三个按键时实现闹钟小时的减一调节。 (5)当第四次按下第一个弹性按键时进入闹钟的分钟调节状态,按下第二个按键时实现闹钟分钟的加一调节,按下第三个按键时实现闹钟分钟的减一调节。 (6)当第五次按下第一个弹性按键时返回正常的显示时间走时状态。
(7)当同时按下第二和第三个弹性按键时,关闭闹钟,且此时蓝色led灯为灭,及定时时间到蜂鸣器并不响,若再次同时按下第二和第三个弹性按键,则开启闹钟,且此时红色led灯为亮,定时时间到蜂鸣器发出滴滴的闹铃声,同时按下第二和第三个弹性按键即可关闭闹铃。闹铃状态默认为开启。
3.2 软件系统个模块功能简要介绍
本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。
主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。
5
中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。 键盘输入程序模块:主要是用于确定按键并得到特定的键码值。 数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。 延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。
3.3 软件系统程序流程框图
系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。
开始显示初始化d.1004-22循环扫描检测按键状态KEY1是否按下标志位加一,进入调整状态KEY2是否按下Y分时加1调整NKEY3是否按下Y分时减1调整KEY2,KEY3是否同时按下
控制闹钟开关
图3-1主程序流程框图
6
图3-2显示时钟数组子程序 图3-3中断服务程序程序
7
3.4 软件系统程序清单
项目名称:数字电子钟
项目功能:本电子钟实现24小时制,8位数码管显示时分秒,显示格式:12-59-00 通过4只按键来调整时间,调整选择键KEY1:P1.0;通过选择键选
择调整位,选中位闪烁,增加键KEY2:P1.1;按一次使选中位加1。
减少键KEY3:P1.2;按一次使选中位减1,bear:P3.1;到了整点和 闹钟就会响,
如果长按KEY1第一次切换到正常时钟显示,按第二次切换到时的调 整,按第三次切换到分的调整,同时led:P1.2就会闪烁,
按第四次和第五次分别切换到闹钟的时分的调整 ,可进行调 时、调分快进快减,并停止闪烁。如果选中位是秒,
则按增加键或减少键可实现,但无调时快进和快减功能。P0口输出数 码管段选信号,P2口输出数码管位选信号;晶振12MHz。 编程作者: 林炽逸
完成时间: 2013年06月8日 程序清单见附录H
8
4 设计课题的设计结论、仿真结果、误差分析
4.1 设计结论及使用说明
本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中KEY1为启动键,KEY2为加控制键 KEY3为减控制键 。
图4-1调试结果图
4.2 仿真结果
在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图所
示。
实现功能:
可调整运行的电子钟具有三种工作状态:“d.1004-22”状态、运行状态、调整状态。
9
图4-2“d.1004-22”上电初始化运行状态仿真结果
图4-3时钟正常运行状态仿真结果
图4-4闹钟定时调整状态仿真结果
图4-5小时调整状态仿真结果
图4-6分钟调整状态仿真结果
10
结 束 语
单片机课程设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。
完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。可是当我动手开始做的时候,才发现其中的算法,设计是那么繁琐。经过一天的努力,毫无结果。失落的心情油然而生。于是,再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有点眉目了。埋头苦干的过程是痛苦的,尤其是在思考算法和程序框架时,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。在痛苦中挣扎,建立,推翻,参考别人的思路,建立,再次在推翻,在这不断循环中,终于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我学到了知识, 学到了做人的道理。
通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。最少很多元器件根本不知道有什么功效,在仿真仪器中是什么代码。有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。我遇到了不少问题,花费了很多的时间。这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。理论不经过实践考验,是没法实施的,就像我们编的程序,很多方面考虑的都不够,几乎没有涉及到实际应用时的防范方法措施。这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。最大的收获是:对键盘,显示器,C51语言的应用有了深刻的了解。
11
参考文献
[1] 阎石,数字电子技术基础[M],湖南:高等教育出版社,2007.
Yan shi,Digital electronic technology foundation[M],The fifth edition. Hhunan:Higher education press,2007.
[2] 李广第.单片机基础[M],北京航空航天大学出版社,2006.7.
Li Guangdi. Microcontroller based on [M], Beijing Aerospace University Press, 2006.7.
[3]李光飞.单片机课程设计实例指导[M].北京:北京航空航天大学出版社,2004.9 Li Guangfei. SCM curriculum design guide [M]. Beijing: Beihang University press, 2004.9.
12
致 谢
通过不断努力,终于完成了此次单片机的课程设计。在此,首先感谢老师,正是他在万忙之中还抽出宝贵的时间对我们进行精心的指导,才使我顺利完成了此次单片机课程设计。同时也感谢各位同学和老师对我提供的帮助。使我在此次设计中学到了许多宝贵的知识和经验。通过本次课程设计我学到了许多在书本上没有的知识,也认识到理论联系实际的重要,理论学得再好,但一味的纸上谈兵,不去实践,那是极不可取的。另一方面,也暴露出我们在理论学习方面所存在的问题,有些理论知识还处于半知半解状态,通过此次课程设计进一步加深了我们对知识的理解。至此,我衷心地对老师表示感谢。同时我还要感谢在这次课程设计过程中帮助过我的同学,朋友,他们多次帮助我分析思路,开拓视角,感谢他们的大力协助才能较快完成这次课程设计,再次致谢!在此,衷心地感谢你们!!
13
附 录
附录A:实物图
14
附录B: 原理图
15
附录C:PCB图
16
附录E:PCB布局图
17
18
附录F:元件清单表
类型 1K 1K 1K 4.7K 10K 10K 12MHZ 22uF 33pF 33pF 200 470 470 470 470 470 470 名称 RF2 R13 R12 Rk J2 J5 Y1 C3 C2 C1 RF1 R21 R24 R25 R22 R23 R26 类型 470 470 BELL CON2 CON2 CON2 CON2 CON8 CON8 CON8 CON8 LED LED LED LED LED USB 名称 RP7 RP6 LS1 JX1 J1 JX2 JP5 JP2 JP1 JP4 JP3 D3 D4 D2 D1 D9 J3
类型 470 470 470 470 470 470 470 470 470 470 470 470 470 470 470 470 80C52 名称 R02 R03 R00 R01 R20 R05 R04 R06 RP3 RP4 RP5 RP0 RP1 RP2 R27 R07 U1 类型 LED LED LED LED LEDS LEDS PNP2 PNP PNP PNP PNP PNP PNP PNP PNP SW-PB 名称 D5 D8 D7 D6 LED2 LED1 Q9 Q6 Q7 Q8 Q2 Q1 Q3 Q5 Q4 S1
19
附录G:程序清单
#include sbit KEY2=P1^2; //minute ,hour调整加1定义 sbit KEY3=P1^7; //minute ,hour调整减1定义 sbit bear=P3^1; //闹铃 sbit led=P1^2; //闹钟,整时灯闪烁 code unsigned char tab[]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xc8,0x8e,0xff,0x21}; //段码控制 char code weikong_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar ms[8]={2,2,10,4,0,0,1,14}; uchar StrTab[8]; uchar minute=59,hour=12,second=0; // 正常 时钟秒,分,时 定义 uchar minute1=00,hour1=00; second1=00; // 闹钟 时钟秒,分,时 定义 uchar flag=0, flag1=0; //切换标志 uchar num=0; uint count=0; //定时器计数,定时50ms,count满20,秒加1 /***********子函数声明*******************************************/ void xianshishuzu(); // 显示数组子程序 void alarm(); //闹钟子程序 /********************** 延时子程序*****************************/ void delay(uint z) { uint x,y; for(x=0;x aa=0xfe; //位选初值1111 1110 for(i=0;i<8;i++) //依次将数组w中八个数取出,并显示 { P2=aa; //位选 j=w[i]; //取出要显示的数码 P0=tab[j]; //取出段选编码 aa=_crol_(aa,1); //位选信号循环右移? delay(1); //显示延时 20 P0=0xff; //消影 } } /***********************显示时钟数组子程序***********************/ void xianshishuzu() { StrTab[1]=second/10; //秒个位 StrTab[0]=second%10; //秒十位 StrTab[2]=10; //间隔符 - StrTab[4]=minute/10; //分个位 StrTab[3]=minute%10; //分十位 StrTab[5]=10; //间隔符 - StrTab[7]=hour/10; //时个位 StrTab[6]=hour%10; //时十位 } /**********************键盘扫描子程序*************************/ void keycan() { if(KEY1==0) //按一次,正常显示,按第二次,时调整,按第三次,分调这整, { delay(10); //按键1去抖以及动作 if(KEY1==0) //确认按键是否按下 {flag++;} //切换标志 while(!KEY1);} //释放按键 if(flag==1) { if(KEY2==0) { delay(10); if(KEY2==0) { hour++;if(hour==24)hour=0; } //正常时间 小时 加1 while(!KEY2) //释放按键 {dispaly(StrTab); } } if(KEY3==0) {delay(10); if(KEY3==0) { hour--;if(hour==0)hour=23; dispaly(StrTab);} //正常时间小时 减1 while(!KEY3) { dispaly(StrTab);} } } if(flag==2) {if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) 21 { minute++;if(minute==60)minute=0;} //分加1 while(!KEY2) { dispaly(StrTab); } } if(flag==3) /// 秒表的加1 { if(KEY3==0) { delay(10); if(KEY3==0) { second++;if(second==0)second=59; //秒加1 } while(!KEY3){ dispaly(StrTab);} } } } if(flag==3) //闹钟对时 { if(KEY2==0) { delay(10); if(KEY2==0) { hour1++;if(hour1==24)hour1=0; } //闹钟时间 小时 加1 while(!KEY2){ alarm(); } } if(KEY3==0) { delay(10); if(KEY3==0) { hour1--;if(hour1==0)hour1=23; } //闹钟时间 小时 减 while(!KEY3) { alarm();} } } if(flag==4) { if(KEY2==0) //按键去抖以及动作 { delay(10); if(KEY2==0) { minute1++;if(minute1==60)minute1=0; / /闹钟分加1 }while(!KEY2){ alarm(); } } if(KEY3==0) //按键去抖以及动作 { delay(10); if(KEY3==0) { minute1--;if(minute1==0)minute1=59; } //闹钟分减1 }while(!KEY3) {alarm();} 22 } } /*******************蜂鸣器子程序****************************/ void beng() { bear=1; P3=0xfd; delay(100); bear=0; P3=0XFf; delay(100); } /*****************整点报警子程序***************************/ void zhengdian (void) { uchar i=0; if((second==0)&(minute==0)) //整点报时 { for(i=0;i<10;i++) { TR0=1; beng();dispaly(ms); } } } /********************************定时闹钟*******************************/ void alarm() { uint i; if((hour==hour1&&second1==minute1&&(second>=second1&&second /**************************中断子程序*********************************/ void time_() interrupt 1 //中断程序 { count++; TH0=(65536-50000)/256; //0.5ms重新送初值 TL0=(65536-50000)%256; if(count==20) //定时器计数,定时50ms,count满20,秒加1 { second++; count=0; if(second==60) //秒值等于60,秒清零,分加1 { second=0;minute++; if(minute==60) //分值等于60,分清零,时加1 { minute=0; hour++; if(hour==24) //时值等于24,时清零,返回,全部归零 {hour=0;} } } } xianshishuzu(); } /***********************数字电子钟主函数***************************/ void main() { P1=0XFF; TMOD = 0x11; //time0为定时器,方式1 TH0=(65536-50000)/256; //预置计数初值,50ms TL0=(65536-50000)%256; EA=1; //总中断开 ET0=1; //允许定时器0中断 TR0=1; //开启定时器0 while(1) //主循环 { if(flag==0) { TR0=0; dispaly(ms);} //上电初始化就显示班级学号bad.1004-22 if(P1!=0XFF) { keycan(); } //按键提前扫描 if(flag>0) { if(flag==1||flag==2) /KEY1按第二次或第二次定时器开始,电子钟和整点报时正常显示 { TR0=1; dispaly(StrTab); zhengdian ();} if(flag==3||flag==4) { TR0=0;alarm(); } //按KEY1第三或第四次闹钟开始显示,分时的调整 if(flag==5) { dispaly(StrTab); } //按KEY1第五次返回电子钟正常显示 if(flag==6) { TR0=0; flag=0; dispaly(ms); }} //按KEY1第六次定时器关闭,切换标志请零,返回班级学号d.1004-22 }} 24 25 因篇幅问题不能全部显示,请点此查看更多更全内容