《单片机定时闹钟设计.doc》由会员分享,可在线阅读,更多相关《单片机定时闹钟设计.doc(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、- -Proteus课程定时闹钟的设计专业:电子信息科学与技术学号:0908050106:宇摘要本次课程设计是在单片机授课完毕的情况下,通过教师的指导和小组同学的协助,独立自主的完成工程设计,我们小组选定的是定时闹钟的设计,下面简单阐述一下该工程的设计思路。利用动态数码管作为显示器,K20-K27作为输入按键,蜂鸣器作为声音输出制作一个定时闹钟。最后结果要求做到:1、正确显示时分。2、可以利用按钮调整时间和设定闹钟时间。3、当时间到达设定的闹钟时间时,蜂鸣器发出嘀、嘀、嘀的报警声。4、通过串口在PC上设定时间和闹钟。关键字:定时闹钟 目录1. 设计思想2. STC89C52RC单片机简要介绍3
2、. 部定时器计数器中断系统简介4. 键盘和LED数码管显示器简介5. 程序流程图及设计相关事宜6. 课程设计感悟总结附录:7. 参考文献8. Proteus软件仿真图9. 基于C语言的程序设计STC89C52RC单片机简要介绍单片机应用系统由硬件系统和软件系统两局部组成。硬件系统是指单片机以及扩展的存储器、IO接口、外围扩展的功能芯片以及接口电路。软件系统包括监控程序和各种应用程序。 在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进展控制。与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和IO接口,使单片机应用系统能够运行。 在一个单片机应用系统中,往
3、往都会输入信息和显示信息,这就涉及键盘和显示器。在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED指示灯就可以进展处理了。在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。单片机应用系统中键盘一般用的比拟多是矩阵键盘,显示器用的比拟多的是LED数码管还LCD显示器。部定时器计数器中断系统1、MCS-
4、51系列中51子系列有两个16位的可编程定时计数器可:定时计数器T0和定时计数器T1。它由加法计数器、方式存放器TMOD、控制存放器TCON等组成。方式存放器用于设定定时计数器T0和T1的工作方式,控制存放器用于对定时计数器启动、停顿进展控制。 2、每个定时计数器既可以对系统时钟计数实现定时,也可以外部信号计数实现计数功能通过编程设定来实现。 3、每个定时计数器都有多种工作方式,其中T0有四种工作方式,T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。四种工作方式为:13位定时计数器、16位定时计数器、8位自动重置定时计数器、两个8位定时计数器只有T0有 4、每一个定时计数
5、器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。中断系统:1、MCS-51单片机提供5个硬件中断源,2个外部中断源,2个定时计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。2、MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由部的中断允许存放器IE的各位来控制的。中断允许存放器IE的字节地址为A8H,可以进展位寻址。系统复位时,中断允许存放器IE的容为00H,如果要开放某个中断源,那么必须使IE中的总控置位和对应的中断允许位置“1”。3、MCS-51单片机有5个中断源,为了处理方便,每个中断源有两级控制,高优
6、先级和低优先级。通过由部的中断优先级存放器IP来设置,中断优先级存放器IP的字节地址为B8H,可以进展位寻址。如果某位被置“1”,那么对应的中断源被设为高优先级;如果某位被清零,那么对应的中断源被设为低优先级。对于同级中断源,系统有默认的优先权顺序,从高到低优先权顺序为外部中断0、定时计数器T0中断、外部中断1、定时计数器T1中断、串行口中断。通过设置中断优先级存放器IP能够改变系统默认的优先级顺序。4、MCS-51单片机响应中断的条件为:中断源有请求且中断允许。键盘和LED数码管显示器简介键盘是单片机应用系统中最常用的输入设备,在单片机应用系统中,操作人员一般都是通过键盘向单片机系统输入指令
7、、地址和数据,实现简单的人机通信。键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。键盘的构造形式一般有两种:独立式键盘和矩阵式键盘。矩阵式键盘的工作方式有3种:查询工作方式、定时扫描工作方式和中断工作方式。LED数码管显示器在单片机应用系统中,经常用到LED数码管作为显示输出设备,LED数码管显示器虽然显示信息简单,但它具有显示清晰、亮度高、使用电压低、寿命长、与单片机接口方便等特点,根本上能够满足单片机应用系统的需要,所以在单片机应用系统中经常用到。LED数码管显示器是由发光二极管按一定的构造组合起来的显示器件。在单片机应用系统常使用的是8段式LED数码管显
8、示器,它有共阴极和共阳极两种。所谓译码方式是指由显示字符转换得到对应的字段码的方式。对于LED数码管显示器,通常的译码方式有两种:硬件译码方式和软件译码方式。LED数码管在显示时,通常有两种显示方式:静态显示方式和动态显示方式。在使用时可以把它们组合起来。在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,那么通常用软件译码动态显示。主程序流程图定时器/计数器T0用于时间计时。选择方式1,重复定时,定时时间设为50ms,定时时间到那么中断,在中断效劳程序中用一个计数器对50ms计数,计20次那么对秒单元加1,秒单元加到60那么对分单元加1,同时秒单元清0;分单元加到6
9、0那么对时单元加1,同时分单元清0;时单元加到24那么对时单元清0,标志一天时间计满。在对各单元计数的同时,把它们的值放到存储单元的指定位置。定时器/计数器T0中断效劳程序流程图,如图,见下页开场现场保护,重置初值启动下一个50ms50ms 计数器加1秒单元加1,50ms计数器清0,秒写入秒个位和秒十位50ms 计数器=20?是分单元加1,秒单元清0,分写入分个位和分十位秒单元=60?分单元=60?中断返回否否否是是设计思想及操作用定时计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进展定时计数,设初值。形成定时时间为50ms。用片RAM的7BH单元对50ms计数,计20次产生秒计数
10、器78H单元加1,秒计数器加到60那么分计数器79H单元加1,。然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。显示格式为分十位、分个位-秒十位、秒个位。在处理过程中加上了按键判断程序,能对按键处理。按键处理设置为:如没有按键,那么时钟正常走时。当按下K0按键时,进入调分状态,时钟停顿走动;按K1可K2按键可进展加1或减1操作;继续按K0键可分别进展分的调整;最后按K0键将退出调整状态,时钟开场计时运行。1、在PROTEUS中设计硬件PROTEUS软件使用过程如下:1选择元器件2放置元器件3连线4添加程序5运行仿真2、在KEIL51中编写程序,编译、连接形成
11、HEX文件。3、在PROTEUS中把HEX文件加载到单片机芯片上。4、运行仿真看结果。参考程序#include #define uint unsigned int#define uchar unsigned charuchar code segcode=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /09uchar code segcode2=0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /带小数点09uchar buffer=0,0,0,0;uchar buffer2=0,0,0,
12、0; /闹钟uint hou,min,sec;uint hou2,min2=0; /闹钟uint i,status,num;bit flag,flag1,keyrelease;sbit alarm=P37;uchar buf,keyinput;void display();void keyscan();void keyprocess(unsigned char key);void delayMS(uint t)uint i;while(t-)for(i=0;i125;i+);void init() /初始keyrelease=1;buf=0x0f;min2=2; /防止翻开就鸣叫,设闹钟分=2
13、flag=0;TMOD=0x21;TH0=(65536-5000)/256;TL0=(65536-5000)%256;TH1=0xfd;TL1=0xfd;SCON=0x50;PCON=0x00;TR1=1;IP=0x10;TR0=0;IE=0x92; /开总、定时器0,串口中断void main()init();while(1)keyscan();display();if(hou=hou2&min=min2&sec5) /仿真使用alarm=alarm;/ if(hou=hou2&min=min2&sec=3) status = 0;break;case 0x0b:switch(status)
14、 /按下K3 加1 键,2 种模式下加1case 1:if(flag1=0) if(min59) min+;else min=0;if(flag1=1)if(min259) min2+;else min2=0;break;break;case 2:if(flag1=0) if(hou23) hou+;else hou=0;if(flag1=1)if(hou20) min-;else min=59;if(flag1=1)if(min20) min2-;else min2=59;break;case 2:if(flag1=0) if(hou0) hou-;else hou=23;if(flag1=
15、1)if(hou20) hou2-;else hou2=23;break;default:break; /case 0break;default:break;void display()if(flag1=0)buffer0=hou/10; / 显示时的十位buffer1=hou%10; / 显示时的个位buffer2=min/10; / 显示分的十位buffer3=min%10; / 显示分的个位P2=0xef;/位选第1 个管P0=segcodebuffer0;delayMS(1);P2=0xdf;/位选第2 个管if(flag=1)P0=segcodebuffer1;elseP0=segc
16、ode2buffer1;delayMS(1);P2=0xbf;/位选第3 个管P0=segcodebuffer2;delayMS(1);P2=0x7f;/位选第4 个管P0=segcodebuffer3;delayMS(1);if(flag1=1)buffer20=hou2/10; / 显示时的十位buffer21=hou2%10; / 显示时的个位buffer22=min2/10; / 显示分的十位buffer23=min2%10; / 显示分的个位P2=0xef;/位选第1 个管P0=segcodebuffer20;delayMS(1);P2=0xdf;/位选第2 个管P0=segcode
17、2buffer21; /便于区别,闹钟时间都带有小数点delayMS(1);P2=0xbf;/位选第3 个管P0=segcodebuffer22;delayMS(1);P2=0x7f;/位选第4 个管P0=segcodebuffer23;delayMS(1);void timer0() interrupt 1static uint count;TH0=(65536-5000)/256; / 定时器0 设置初始值1ms 中断初始值TL0=(65536-5000)%256;TR0=1;count+; /正常计时if(count=100) / 定时1S 到,以下为时钟的正常走钟逻辑flag=1;if(count=200)flag=0;count=0;sec+;if(sec= 60)sec=0; min+;if(min= 60)min=0; hou+;if(hou= 24)hou=0;void sint()interrupt 4i=+i%4;if(RI&i=1)RI=0;hou=SBUF;if(RI&i=2)RI=0;min=SBUF;if(RI&i=3)RI=0;hou2=SBUF;if(RI&i=0)RI=0;min2=SBUF;- word.zl
限制150内