1、电子闹钟毕业设计摘要:本设计是以89C51单片机作为控制核心的闹铃系统。 本文大致可以分为三个章节,第一章节讲了用单片机来制作电子闹钟所带来的优势,还有电子闹钟在电子产品中未来的趋势以及本次设计所要实现的课题目标。第二章节讲了设计的一些思路和该产品包含的一些硬件电路组成。第三章节讲了各个软件模块之间的设计以及该产品的程序代码。最后是一些结论体会部分和附录图。关键词:PC机;单片机89C51;串行通信;数码显示目 录第一章 绪论11.1 引言11.2 闹钟的发展趋势11.3 本次设计所要实现的目标1第二章 系统总体设计22.1 系统总体设计思路22.2 总体硬件组成框图22.3 AT89C51的
2、简介32.4 系统功能的确定42.5 时钟电路52.6 复位电路52.7 键盘电路62.8 数码显示电路7第三章 系统软件设计83.1 数据单元分配83.2 时钟程序设计步骤83.3 计时子程序模块的实现93.4 时钟设定子程序模块的实现103.5 程序说明113.6 实现方式123.7 源程序设计12结论与体会20主要参考材料:21附录1:系统原理图22附录2:PCB图23II第一章 绪论1.1 引言电子闹钟是一种应用非常广泛的日常计时工具,数字显示的日历钟已经越来越流行,特别是适合在家庭居室、办公室、大厅、会议室、车站和广场等使用,壁挂式LED数码管显示的日历钟逐渐受到人们的欢迎。 单片机
3、电子闹钟是集电子技术、数字显示技术为一体的高产品,具有按时闹铃,显示清晰直观、走时准确等优点。 首先介绍设计电子闹钟所涉及的主要硬件和特性,然后说明软件设计的思路,程序结构及流程,并在测试软件上进行调试和修改,以完成电子闹钟的基本要求,即可以随意设定起始时间,有秒显示功能,有12/24世制选择,可以设定闹钟,停电时由电池供电等功能。 现代社会电子闹钟发挥着很大的作用,也是它存在和发展的一个重要方面,尤其是在代表集成电路技术的发展方面,通过不断提高电子闹钟的计时的精确度可以极大促进定时技术芯片的发展。同时电子闹钟与其他嵌入式电子产品一样是微处理器的应用,通过电子闹钟的设计可以很好的掌握电子设计技
4、术。1.2 闹钟的发展趋势 随着电子技术的飞速发展,家用电器和办公电子设备逐渐增多,不同的设备都有自己的控制器,使用起来很不方便。这些具有人们所需要的智能化特性的产品减轻了人的劳动,扩大了数字化的范围,为家庭数字化提供了可能。基于单片机的电子闹钟就是新一代的产品,能够实现远程控制等功能。它功能强大、体积小、质量轻、灵活好用。1.3 本次设计所要实现的目标 设计一个电子闹钟1)能随意设定走时起始时间2)螚指示秒节奏,即秒指示3)能通过PC机实现远程控制4)时间预设,定时关机的功能第二章 系统总体设计2.1 系统总体设计思路先进行系统的整体规划确定整个系统的功能,然后按照每个功能的具体要求,进行各
5、个模块的实物设计并逐个调试,待全部通过后,进行整个系统的联调,最终实现一个完整的系统,并制成印刷线路板。 整个系统的设计步骤如下: 在单片机最小系统的基础上,完成按键电路和复位电路的设计。 完成显示电路、数字按键、复位电路。 具有3个功能按键: 1)在复位后的待机状态下,用于启动设定时间参数(对时或定闹);2)在设定时间参数状态而且不是设定最低位(即分个位)的状态下,用于结束当前位的设定,当前设定位下移; 3)在设定最低位(分个位)的状态下,用于结束本次时间设定。 2)键,用于对当前设定位(编辑位)进行加1操作,根据正在编辑的当前位的含义(时十位、时个位、分十位、分个位)自动进行数据的上限和下
6、限判断。例如,对12小时制,小时的十位只能是0、1,如果当前值为0,则按1键后为1,再按1键则又回复到0。 把以上各个模块联结起来,整体调试功能。2.2 总体硬件组成框图整个系统的原理框图如图2.1所示图2.1 系统原理框图2.3 AT89C51的简介2.3.1 AT89C51简介 AT89C51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理
7、器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。2.3.2 引脚介绍AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。图2.2为AT89C51引脚图图2.2 AT89C51引脚图此外,AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数
8、器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 主要功能特性: 兼容MCS-51指令系统 32个双向I/O口 2个16位可编程定时/计数器 全双工UART串行中断口线 2个外部中断源 中断唤醒省电模式 看门狗(WDT)电路 灵活的ISP字节和分页编程 4k可反复擦写(1000次)ISP Flash ROM 4.5-5.5V工作电压 时钟频率0-33MHz128x8bit内部RAM 低功耗空闲和省电模式 3级加密位 软件设置空闲和省电功能 双数据寄
9、存器指针2.4 系统功能的确定2.4.1 基本功能系统具有时间、日期、三路定时功能,并可以对时间、日期、定时进行设定,有定时提示音。要求计时精度尽量提高。显示格式为:时间:“时”(第1、2位)、“分”(第3、4位)、“秒”(第5、6位);日期:“年”(第1、2位,如2007年显示为07)、“月”(第3、4位)、“日” (第5、6位);定时:“时”(第1、2位)、“分”(第3、4位)、“状态标志”(第5、6位)。键盘及数码管排列如图2.3所示。2.4.2 扩展功能该系统可以增加温度传感器,实现温度测量,以实时显示温度,用1、2位数码管显示;还可以增加湿度传感器,实现湿度测量,以实时显示湿度,用5
10、、6位数码管显示。多路定时器功能也可扩展为对多种家电等电气产品的自动控制,比如电饭煲等;也可利用温度对某些电气产品进行自动控制,比如空调等;还可利用湿度传感器对湿度进行调节。如图2.3所示。图2.3 系统功能图2.5 时钟电路实验板的时钟振荡源电路如图2.4所示。其中JT 为11.0592MHz 的晶振,改变两电容CB的值即可对此晶振频率进行调节。该电路提供单片机工作所需的振荡频率,计算定时器初值即需此晶振频率,在通信时也需知道晶振频率,以对波特率进行计算。图2.4 时钟电路2.6 复位电路如图2.5所示为实验板的复位电路,当RESET 信号为低电平时,实验板为工作状态,当RESET信号为高电
11、平时,实验板为复位或下载程序状态。由于AT89S52具有ISP 的功能,即可以通过并口线直接将程序下载到单片机内,因此, AT89S52 具有两种状态,下载程序状态和运行状态。该复位电路能实现上电自动复位,也能手动复位,一般复位时RESET应保持20毫秒以上高电平,此复位时间由接地电容控制。图2.5 复位电路2.7 键盘电路如图2.6所示为阵列按键电路,各设置及转换信号由此电路输入,实验板提供了16个按键,由P1口经SN74F244(驱动芯片)输出扩展成44的阵列按键,P1.0P1.3为行线,P1.4P1.7为列线。SN74F244有一片选信号线,当此口线为低电平时,A1A4与Y1Y4接通,反
12、之,A1A4与Y1Y4断开。此键盘用扫描工作方式,若有键按下,则相应位端口被拉低为低电平,由于本系统只用了4个按键,所以只需对4个按键进行扫描。扫描时,先置P3.3口为高电平,向P1口送0EFH(MOV P1,#0EFH),再置P3.3口为低电平,读P1口(MOV A,P1),最后判断P1口低4位哪位是低电平,若某位为低电平,则相应按键被按下,如P1.0为低电平(ACC.0=0),则K1键被按下。图2.6 阵列按键2.8 数码显示电路如图2.7所示为数码显示电路,实验板使用了6个共阳数码管,P0口为段码信号线,B1B6为位控线,是P1口经SN74F573(反向驱动芯片,即输入为高电平,则输出为
13、低电平,反之则输出为高电平,该芯片也有一片选信号C,当此信号为高电平时有效)反向得到,再由B1B6控制晶体管Q1Q6,以达到控制每位数码管的目的。系统采用动态显示,先向P0口送第一位数码管需要显示的段码值,再给P1口送0FEH,延时1毫秒使第一位数码管显示,又向P0口送第二位数码管需要显示的段码值,P1口送0FDH,延时1毫秒,使第二位数码管显示。依次递推,直到最后一位数码管,然后再循环。改变延时时长可以调节数码管显示的亮度,由于单片机执行速度很快(微秒级),所以看上去数码管一直亮着。图2.7 数码显示电路第三章 系统软件设计3.1 数据单元分配数据存储单元分配如表3.1所示:表3.1 数据存
14、储单元分配项目秒分时日月年存储单元30H31H32H33H34H35H项目定时1:开关定时1:分定时1:时定时2:开关定时2:分定时2:时存储单元36H37H38H39H3AH3BH项目定时3:开关定时3:分定时3:时存显示首地址堆栈起始单元存储单元3CH3DH3EH3FH50H标志位单元(20H)分配如表3.2所示:表3.2 标志位单元(20H)分配位单元项目位单元项目01H1、2位数码管闪烁标志位08H定时1显示标志位02H09H定时2显示标志位03H3、4位数码管闪烁标志位0AH定时3显示标志位04H0BH定时1响铃标志位05H5、6位数码管显示标志位0CH定时2响铃标志位06H0DH定
15、时3响铃标志位07H日期显示标志位0EH总响铃标志位3.2 时钟程序设计步骤系统采用模块化结构,主程序只需调用各个子程序模块即可实现相应功能。其模块结构图如图3.1所示。图3.1 模块结构图3.3 计时子程序模块的实现当T0中断时,执行本程序,因T0设为50毫秒中断,故中断20次为1秒。中断程序分别有20次计数(1秒),60次计数(1分),60次计数(1小时),24次计数(1天),28、29、30、31次计数(1个月),12次计数(1年)。当前位到设定数值时写0或1,下一位加1。由于本世纪是21世纪,年位前两位是4的倍数,故判断闰年时只需对年的后两位进行计算,能被4整除为闰年,否则为平年,年位
16、只进行加1,大于99时又重新开始。计时中断流程图如图3.2所示。 图3.2 计时子程序流程图 图3.3 显示子程序流程图3.4 时钟设定子程序模块的实现 当设定时间时,断开T0中断,秒单元清0,进入时、分单元设定。设定好后重装T0初值,开T0中断。流程图如图3.4所示。图3.4 时钟设定子程序流程图3.5 程序说明3.5.1 定时器初值计算因定时器工作于方式1,需要50ms的中断,所以计数初值:=216 - tfosc12=65536 - 5010-311.059210612=19456表示成十六进制为=4C00H,故(TH0)=4CH,(TL0)=00H。3.5.2 程序初始化程序初始化时,
17、清相应内存单元(20H4FH共48个单元),送时间(00时00分00秒)、日期(07年10月01日)初值,送定时器T0、T1初值,TH0= TH1=4CH,TL0= TL1=00H,特殊寄存器(SP=50H、TMOD=11H)值等。3.5.3 误差分析及校正当T0中断时,需重装定时初值,且要加上从断开T0中断到允许T0中断共有13个周期,以减小误差,故理论重装定时初值为(TH0)=4CH,(TL0)=13H。但该外接晶振电路的晶振频率可调,可能出现误差,所以实际不是这个值。经调试,当定时初值为(TH0)=4CH,(TL0)=06H时,24小时约慢2秒,所以每当计时24小时之后,给秒单元(30H
18、)送02H,使秒累加时从2加起,24小时就少加2秒,即可使时间得到校正。3.5.4 实现闪动设定闪动可选用段码送00H实现,也可禁止当前位显示,选通位送0实现。本设计选用后者实现闪动,用定时器T1进行控制。3.5.5 实现连续加1先判断键是否松开,若松开,则只执行一次加1程序段,进行单次加1;若未松开则连续执行加1程序段,实现连续加1。每执行一次加1程序段就调用显示子程序进行延时,以对调节速度进行控制。本系统以5Hz的速度连续加1,这样能快速对时间、日期、定时进行设定。3.6 实现方式该时钟程序的功能模块先后实现的顺序为:主程序时间模块显示模块键盘模块时间设定及其显示模块日期及其显示模块日期设
19、定及其显示模块定时及其显示模块定时设定及其显示模块定时提示音及与显示相冲突的协调模块。每完成一个模块就与前一个已完成的模块结合起来调试,直至实现相应功能,再编写下一模块程序。在与主程序衔接时,主程序和各子程序也需作相应的改动,以便与子程序更好的衔接,特别是显示子程序需作较大改动,以便对不同内容进行显示。3.7 源程序设计#include#include#define uchar unsigned char#define uint unsigned intsbit dula=P10;sbit wela=P11;sbit key1=P20;sbit key2=P21;sbit key3=P23;s
20、bit key4=P23;sbit key5=P24;uchar temp,tt,sec,min,hour;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void init();void keyscan();void counter();void delay(uint z);void main()init();wela=1;P0=0xfe;temp=P0;wela=0;dula=1;P0=0x3f;dula=0;while(1)wela=1;P0=
21、temp;wela=0;if(temp=0xfe)/1111 1110dula=1;P0=tablesec%10;dula=0;if(temp=0xfd)/1111 1101dula=1;P0=tablesec/10;dula=0; if(temp=0xfb)/1111 1011dula=1;P0=0x40;dula=0;if(temp=0xf7)/1111 0111 dula=1;P0=tablemin%10;dula=0;if(temp=0xef)/1110 1111dula=1;P0=tablemin/10;dula=0; if(temp=0xdf)/1101 1111dula=1;P0
22、=0x40;dula=0;if(temp=0xbf)/1011 1111dula=1;P0=tablehour%10;dula=0;if(temp=0x7f)/0111 1111dula=1;P0=tablehour/10;dula=0;delay(2);temp=_crol_(temp,1);if(temp=0xff)temp=0xfe;keyscan(); counter(); void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void init()/系统初始化tt=0; wela=0;dula=0; EA=1
23、;ET0=1;TR0=1;TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256;void timer0() interrupt 1 /定时器0中断TH0=(65536-50000)/256;TL0=(65536-50000)%256;tt+;void counter() /计时子函数if(tt=20) tt=0; sec+; if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;void keyscan()/键盘扫描 if(key1=1)delay(5);if(key1=
24、1) TR0=0; while(key1);delay(5);while(key1); if(key2=1)delay(5);if(key2=1) sec+; while(key2);delay(5);while(key2); if(key3=1)delay(5);if(key3=1) min+; while(key3);delay(5);while(key3); if(key4=1)delay(5);if(key4=1) hour+; while(key4);delay(5);while(key4); if(key5=1)delay(5);if(key5=1) TR0=1; while(ke
25、y5);delay(5);while(key5); 结论与体会在此次电子闹钟设计过程中,在学习新知识的同时,把在课程中学到的理论知识运用到实际作品设计、操作中更进一步地熟悉了单片机芯片的结构及掌握了其工作原理和具体的使用方法与相关元器件的参数计算方法、使用方法,了解了电路的开发和制作及课程设计报告的编写。加深了对相关理论知识及专业知识的掌握度,增强了自身的动手能力,锻炼及提高了理解问题、分析问题、解决问题的能力,更深刻的体会到了理论联系实际的重要性。最后,我通过此次单片机课程设计不仅仅将我们一学期在单片机课程上的所学很好的应用到了实际设计中,更是将理论知识应用到了实践中,这才是真正的学习,不仅
26、仅是读万卷书更要行万里路,讲知识与实践有机的结合。十分感谢指导老师为我们提供了这次单片机课程设计的机会,他在我们设计期间给了我们很多帮助。我也通过此次毕业设计,更清晰更实际的接触到了单片机,以后如果再次利用单片机来做程序,估计已不在像第一次那样陌生了。再次感谢所有帮助过我并给我鼓励的老师和同学,谢谢你们!主要参考材料:1蒋辉平.单片机原理与应用设计.北京:北京航空航天大学出版社,20072李鸿等.单片机原理及应用.长沙:湖南大学出版社,2004 3楼然苗,李光飞.单片机课程设计指导.北京:北京航空航天出版社,2007 4Kenneth A.Reek.C和指针.北京:人民邮电出版社,20085 李捷,陈典涛等.一种应用单片机电子闹钟的设计与制作设计J,农机化研究,20056 陈明荧.8051单片机课程设计实训教材.北京:清华大学出版社,2004 7 胡汉才.单片机原理及其接口技术. 北京:清华大学出版社,1995 8 徐淑华,程退安,姚万生.单片机微型机原理及应用. 哈尔滨工业大学出版,1994 9 丁元杰.单片机原理与应用.机械工业出版社出版,200310 朱定华.单片机原理及接口技术.电子工业出版社出版,2004附录1:系统原理图附录2:PCB图23