【摘要】众所周知闹钟对我们日常生活来讲是一个很重要的工具,因而我利用单片机AT89C52制作一个简单的倒计时定时闹钟。
本设计利用单片机的内部中断资源和按键的基本使用方法构思而成。
利用按键设定需要定时的时间长短,利用中断设置20次中断定义一秒,然后利用程序设计时间倒数。
并使用4个8段数码管显示分和秒,并且定时结束后使用电铃警示。
硬件系统利用proteus仿真,在仿真中就能观察到系统的实际运行情况。
【关键字】单片机AT89C51 倒计时定时中断 protues仿真一、设计项目简介基于51单片机进行简单闹钟设计。
四位数码管从左往右分别代表十分位,分位,十秒位,秒位。
按动对应按键能增加各个位的数值,按动开始计时按键能开始倒计时。
二、硬件设计1.总体设计思路控制芯片使用比较熟悉的AT89C52单片机芯片,数码管使用四位相连的8段共阴数码管,并且使用74HC573锁存器控制数码管的显示。
在定时过程使用s1控制十分位,s2控制分位,s3控制十秒位,s4控制秒位,s5开始倒计时。
基本思路设计如下:2. AT89C52芯片介绍80C52是INTEL 公司MCS-51系列单片机中基本的产品,它采用INTEL 公司可靠的CHMOS 工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS 产品。
它结合了HMOS 的高速和高密度技术及CHMOS 的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
80C52内置8位中央处理单元、256字节内部数据存储器RAM 、8k 片内程序存储器(ROM )32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡控制按键AT89C52控制芯片74HC573锁存器段位数码管电路。
此外,80C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。
80C52有PDIP(40pin)和PLCC(44pin)两种封装形式。
8051片内有 ROM,无须外接外存储器和373,更能体现“单片”的简练。
3.74HC573芯片介绍74HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q 输出将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。
数据锁存当输入的数据消失时,在芯片的输出端,数据仍然保持;这个概念在并行数据扩展中经常使用到。
锁存器接单片机芯片如下:4.单片机内部中断原理内部中断是指单片机内部的功能模块产生中断信号,只要是单片机内部在CPU外围能独立工作的功能模块都会提供中断功能,常见的内部中断类型有时钟Timer、串口UART、模数转换ADC等。
内部中断的工作流程和外部中断没太多区别,只是中断请求信号是在单片机内部进行传输,中断信号不是管脚上的电平状态,而是一个寄存器里面的相应标志位,通常当某个内部中断产生中断请求时就会将相应标志位置为1,CPU响应中断时将这个标志位清0。
5.设计原理图三、软件设计C语言源程序#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit dula=P2^6; //段码和位码设置。
sbit wela=P2^7;sbit s1=P3^0; //设置按键,s1代表十分位,s2分位,s3十秒位,s4秒位。
sbit s2=P3^1;sbit s3=P3^2;sbit s4=P3^3;sbit s5=P3^4;sbit beep=P2^3; //设置电铃uchar code seg_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 共阴极8位段码表,带点和不带点。
uchar code seg_table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void delay(uint t); //各个子函数的申明。
int display1();void display2(uint k);void init_t0();uint NUM;uint SEC;uint S;uint M;uint k1;uint k2;uint k3;uint k4;void main(){NUM=0,SEC=0 ,S=0,M=0,k1=0,k2=0,k3=0,k4=0,wela=0,dula=0,wela=1,P1=0x00,wela=0,dula=1,P1=seg_table[NUM],dula=0;while(1){display1(); //运行开始设置时间函数if(s5==0){goto start; //当s5按键按下,开始倒计时。
}}start: init_t0();while(1){ display2(M); //显示函数}}int display1()//按动按键开始设置时间{if(s1==0){delay(150);if(s1==0) //设置十分位{k1++;if(k1==6){ k1=0;}wela=1;P1=0xf7;wela=0;dula=1;P1=seg_table[k1];dula=0;delay(1);}}if(s2==0) //设置分位{delay(150);if(s2==0){k2++;if(k2==10){k2=0;}wela=1;P1=0xfb;wela=0;dula=1;P1=seg_table[k2];dula=0;delay(1);}}if(s3==0) //设置十秒位{delay(150);if(s3==0){k3++;if(k3==6){k3=0;}wela=1;P1=0xfd;wela=0;dula=1;P1=seg_table[k3];dula=0;delay(1);}}if(s4==0) //设置秒位{delay(150);if(s4==0){k4++;if(k4==10){k4=0;}wela=1;P1=0xfe;wela=0;dula=1;P1=seg_table[k4];dula=0;delay(1);}}S=k1*600+k2*60+k3*10+k4;return S; //返回全局变量}void delay(uint t) //延时函数{uint x,y;for(x=t;x>0;x--){for(y=120;y>0;y--){}}}void display2(uint k) //倒计时时间显示函数{uint miao,shimiao,fen,shifen;shifen=k/600;fen=k%600/60;shimiao=k%60/10;miao=k/10;wela=1;P1=0xfe;wela=0;dula=1;P1=seg_table[miao];dula=0;delay(1);wela=1;P1=0xf7;wela=0;dula=1;P1=seg_table[shifen];dula=0;delay(1);wela=1;P1=0xfb;wela=0;dula=1;P1=seg_table1[fen];dula=0;delay(1);wela=1;P1=0xfd;wela=0;dula=1;P1=seg_table[shimiao];dula=0;delay(1);}void init_t0() //内部中断T0初始化{TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void t0() interrupt 1 //中断函数,使用方式一中断{TH0=(65536-50000)/256;TL0=(65536-50000)%256;NUM++;if(NUM==20){NUM=0;SEC++;M=S-SEC;if(M==0){TR0=0;beep=0;delay(1000);beep=1;}}}四、调试1、调试方法本设计使用Proteus软件绘制电路图,装载keil软件编写编译完成的源程序生成的hex文件,进行仿真测试检查系统运行情况,观察实验现象是否与理论一致。
2、调试步骤打开已经画好的Proteus DSN文件,双击图中的AT89S52芯片,就弹出一个窗口,在program file项中通过路径选择在keil中生成hex 文件,双击选中后确定,这样仿真图中的AT89S52芯片就已经读取了本设计中的hex文件。
然后进行仿真。
3、调试问题在调试过程中发现定时完成以后,按动开始定时按键s5发现数码管显示不正常,秒位显示不正常。
但功能使用正常,初步判断是延时出现问题,通过改变数码管显示延迟的长久,问题仍未解决。
调试图:五、心得体会本设计的数字秒表是由AT89S52单片机、共阴极数码管和控制按键等器件组成的,设有四位计时显示。
系统设计合理,线路简单,性能稳定、程序简单。
给出了较为详尽的电路设计方法。
本系统以单片机为核心,但仅单片机方面的知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软硬件结合,以作完善。
单片机应用的越来越广泛,也要求了我们对单片机知识要有更深的体会,更好的掌握单片机的相关应用。
不仅掌握理论知识,还要有相应的动手能力。
这次的课程设计便是对我们平时学习的一次很好的检测,同时也是一种复习与巩固。
通过这次的设计,我发现对单片机的认识仅仅停留在课本上的知识还是远远不够的。
那只是帮助我们认识单片机,更多的知识还要靠我们自己去发现在不断地尝试设计和实验中领悟。
这次设计在实际生活中可能切实的用处不是很大,但对我们来说却是非常有用的,不管是学习知识还是对以后的就业工作都会有很大的价值。
【参考文献】百度百科(74HC573,AT89C52管脚资料)高显生《我和单片机的21天之旅》视频资料李全利.《单片机原理及接口技术(第2版)》。
北京:高等教育出版社。