《单片机LED倒计时设计.doc》由会员分享,可在线阅读,更多相关《单片机LED倒计时设计.doc(23页珍藏版)》请在三一办公上搜索。
1、目 录1. 功能的需求分析.22. 总体方案说明.23. 系统硬件部分设计.2 3.1 6位LED数码管显示.2 3.2 LED倒计时器元件清单.3 3.3 主要元器件分析.4 3.3.1 单片机AT89C51.4 3.3.2 集成块74LS373.4 3.4 基本硬件电路分析.4 3.4.1 复位电路.4 3.4.2 按键电路.5 3.4.3 晶振电路.5 3.4.4 6位数码管显示电路.6 3.4.5 蜂鸣器电路.7 3.5 LED倒计时原理图.84. 系统软件部分设计.9 4.1 软件总体设计.9 4.2 主程序说明.10 4.3 子程序说明.11 4.3.1 延时子程序.11 4.3.
2、2 数码管显示时分秒子程序.11 4.3.3 数码管显示时子程序.12 4.3.4 数码管显示时分子程序.12 4.3.5 数码管时间显示子程序.13 4.3.6 秒信号子程序.13 4.3.7 键盘扫描子程序.145. 调试过程.15 5.1整体电路仿真以及仿真结果分析.15 5.2数码管显示功能的调试.156.总结与体会.15参考文献.16附录1.功能的需求分析 随着社会的不断进步,单片机的应用逐渐渗入我们的生活,特别是计数方面对单片机的依赖越来越高,在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面的知识是不够的,还应根据具体硬件结构,针对具体应用特点
3、与软件结合。本项目讨论了LED数字倒计时器的设计与制作,任务与要求是,使基于AT89S51单片机的LED数字倒计时器主要具有如下功能:1. 采用MCS51作为主控芯片;2. 采用LED数码管显示倒计时,倒计时范围24:00:00;3. 可调任意设定定时时间,要具有定时提醒功能,定时到2s报警功能。2. 总体方案说明电源电路LED数字倒计时器以AT89S51单片机为核心,系统包括六位数码管显示电路,按键电路,电源电路,复位电路,晶振电路以及蜂鸣器电路几部分,LED数字倒计时器设计框图如下:晶振电路6位LED显示电路AT89C51 单片机复位电路蜂鸣器电路按键电路图1 LED数字倒计时器设计框图3
4、.系统硬件部分设计3.1 6位LED数码管显示本项目设计采用了6位数码管显示电路,在设计6位LED显示时,为了简化电路,降低成本,采用动态显示方式,6个LED显示器共用一个8位的I/O,6位LED数码管的位选线分别由相应的P2.0p2.5控制,而将相应的段选线并联在一起,由一个8位的I/O口控制,即p0口。译码显示电路将“时”、“分”、“秒”显示数字进行校对调整。3.2 LED倒计时器元件清单表1 LED数字倒计时器元件清单元件名称型号数量/个用途单片机AT89C511控制核心晶振12MHz1晶振电路电容30pF2晶振电路电解电容10u1复位电路电阻5002复位电路按键4按键电路数码管共阳6显
5、示器三极管PNP1蜂鸣器蜂鸣器 1蜂鸣器电阻1.5k1蜂鸣器电阻2.7k3上拉电阻电阻3308上拉电阻电源+5V/0.5A1提供+5V集成块74LS3731驱动3.3 主要元器件分析3.3.1 单片机AT89C51 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM-Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术
6、制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数
7、器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。3.3.2 集成块74LS37374ls373是常用的地址锁存器芯片,它实质是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。 74LS373的工作原理: (1) .1脚是输出使能(OE),是低电平有效,当1脚是高电平时,不管输入3、4、7、8、 13、14、17、18如何,也不管11脚(锁存控制端,G)如何,输出2(Q0)、5(Q1)、6(Q2)、 9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现
8、高阻状态(或者叫浮空状态);(2).当1脚是低电平时,只要11脚(锁存控制端,G)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3、4、7、8、13、14、17、18的状态.锁存端LE 由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态门使能信号OE为低电平时,三态门导通,允许Q0Q7输出,OE为高电平时,输出悬空。3.4 基本硬件电路分析3.4.1复位电路复位是单片机的初始化操作,只需给AT89C51的复位引脚RST加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位,
9、复位时,PC初始化为0000H,使单片机从OUT单元开始执行程序。除了进入系统的正常初始化之外由于程序运行出错或操作错误而使系统处于死锁状态,为摆脱死锁状态,也需按复位键使得RST脚为高电平,使单片机重新启动。3.4.2 按键电路按键电路的按键功能说明:(1)设置切换开关用于改变调定时间的模式,按第一下是开始设定小时,按第二下是开始设定分钟,按第三下是开始设定秒,按第四下是开始倒计时;(2)在设定时分秒时,按此按钮使设定的时间增加;(3)在设定时分秒时,按此按钮使设定的时间减小;在此按键电路上还设有上拉电阻,用于保护电路。(按键电路图见下)3.4.3 晶振电路 单片机晶振的作用是为系统提供基本
10、的时钟信号。通常一个系统共用一 个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。个机器周期包括12个时钟周期。如果一个单片机选择了12MHZ晶振,它的时钟周期是112us,它的一
11、个机器周期是12(112)us,也就是1us。 按键电路图 晶振电路图3.4.4 6位数码管显示电路 采用动态显示,所谓动态显示就是一位一位的轮流点亮各点,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也与点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。 利用AT89C51单片机内部的定时/计数器进行中断时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能在定时/计数器的使用、中断及程序设计方面得到锻炼与提高,对单片机的指令系
12、统能有更深的了解。用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。(其电路图见下) 6位数码管显示电路3.4.5 蜂鸣器电路 直流蜂鸣器的驱动是非常简单的,只要在两端施加额定工作电压,蜂鸣器就发声。以NPN三极管驱动电路,在三极管基极接入高电平,蜂鸣器就能发声。3.5 LED倒计时原理图4. 系统软件部分设计4.1 软件总体设计 显示的效果为动态显示,利用CPU控制数码管显示的选通和停止,通过定时器中断不断扫描,从而实现数据的动态显示。 在编程上,首先进行了初始化,定义程序的入口地址以及中断的入口地址,在主程序开始定义了一组固定单元用来储存计数的时分秒,在显示初值之后,进入主循环
13、。在主程序中,对不同的按键进行扫描,实现秒表,时间调整,复位清零等功能,系统总流程图如下: 初始化时分变化? 显示初值NY 刷新显示设置时间? 1秒到有关变量初始化启动走时切换倒计时显示设置闹铃时间Y 结束 蜂鸣器闹铃时间? 秒指示 N NYNY 4.2 主程序说明int main(void)mode=0; /开机模式0倒计时模式Timer2_S();/秒END=0;while(1) KEY_SCAN(); /键盘扫描if(mode=0) KEY_SCAN();/键盘扫描TIM_DIS();/时间数据处理DIS_SEG();/显示 if(END=1)END=0;TR2=0;BUZZ=0; De
14、layMS(2000);BUZZ=1;shi=24;miao=0;fen=0;TR2=1;/时间结束 停止if(mode=1)KEY_SCAN();/键盘扫描TR2=0; /关定时器2TIM_DIS();/时间数据处理DIS_SEG_SHI();/只显示 -时 if(mode=2)KEY_SCAN();/键盘扫描TIM_DIS();/时间数据处理DIS_SEG_FEN();/只显示-时-分 if(mode=3)KEY_SCAN();/键盘扫描TIM_DIS();/时间数据处理DIS_SEG();/显示时-分-秒 /定时器2void Timer2() interrupt 5 /调用定时器2,自动
15、重装载模式static uchar i=0; /定义静态变量iTF2=0; /定时器2的中断标志要软件清0i+; /计数标志自加1if(i=16) /判断是否到1si=0; /将静态变量清0if (miao0)miao-; /秒倒计时else if(fen0) fen-;miao=59;/分倒计时 else if(shi0)shi-;fen=59;miao=59;/时倒计时elseEND=1;/ 倒计时结束 4.3 子程序说明4.3.1延时子程序void DelayMS(unsigned int t)/延时N msunsigned int i,j;for(i=0;it;i+)for(j=0;j
16、23)shi=23; /最大值23if(mode=2) / fen+; if(fen59)fen=59; /最大值59if(mode=3)/ miao+;if(miao59)miao=59; /最大值59void S3_SUB(void) if(mode=1) if(shi1)shi=1;shi-; /最小减到0if(mode=2) if(fen1)fen=1;fen-; /最小减到0if(mode=3) if(miao3)mode=0;TR2=1; /在0 1 2 3中切换 while(!S1);/等待按键释放 if(S2=0) /加DelayMS(10); /延时去抖动 S2_ADD();
17、 while(!S2);/等待按键释放 if(S3=0)/减DelayMS(10); /延时去抖动 S3_SUB();while(!S3);/等待按键释放5.调试过程 5.1整体电路仿真以及仿真结果分析 系统仿真用的是Protues软件,可通过仿真显示出所设计系统的功能,对于程序的调试等有很大帮助。 系统仿真时如果使用c语言编程或c语言与汇编语言联合编程,一般使用Keil C译码器,把所写的程序进行编译,同时在仿真器里设置生成HEX文件,编译无错进行Protues仿真。等所有的元件都连接完成后可以把Keil C生成的无错误文件编译加载到AT89C51中,然后点击运行。 启动Protues软件的
18、运行按钮,用按键设定倒计时初值,数码管上从左到右依次显示6个数字从而设定初值,当按下开始键时,数码管上的数字减1,也就是1s计时时间到了,如果中间按暂停则暂停倒计时,当之后第二遍再按暂停键则继续开始倒计时,若按停止键则停止倒计时。 5.2数码管显示功能的调试 数码管显示功能正常,按运行键时,单片机和各处高低电平显示正常。但按键功能功能有点异常,致使数据无法显示。在复位电路时,由于电阻选用过大,致使复位功能不能实现。6. 总结与体会这次单片机的课程设计,我做的是LED倒计时,在学习单片机的课程时我们曾经做过一些其他的东西,这次做这个题目,我在此将课本与实践联系起来,从中学到不少的知识。(1) 在
19、本次课程设计中,我对AT89C51、74LS373、7SEG系列显示器等都加深了了解,巩固了对它们的使用,对于硬件和软件综合运用有了更深一步的理解,为以后的电路分析和设计奠定了一定的基础。(2) 在本次课程设计中,我们将课本理论知识与实际应用联系起来,加深了对课本知识的认识理解,也加深了对电路设计方法和实际电路联系的实践知识。拿到课程设计的题目后,我们按照书本上的知识和老师讲授的方法,首先和同学一起分析此次电路设计任务和要求,然后按照分析的结果进行实际连接操作,检测和校正,再进一步完善电路。(3) 在本次课程设计中,我感到不仅电路设计能力有所提高,更重要的是通过对电路设计的学习和了解,进一步激
20、发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。 这次课程设计持续的时间比较充裕,从接到任务书,然后去分析找资料,进行初步设计,编程,仿真调试,最终完成任务,这一轮下来我们获益良多,不仅仅在知识方面有所收获,在实际遇到问题,然后去解决问题的方面我们得到很大的提升,当然也得到了老师和同学的一些帮助,这些经历都是我们在这里面的巨大收获。7. 参考文献1 李光弟 朱月秀 冷祖祁单片机基础(第3版)北京北京航空航天大学出版社2007 2 李凤霞 刘桂山 陈朔鹰 薛庆.C语言程序设计(第二版).北京. 北京理工大学出版社,2008. 3 楼然苗 李光飞.单片机课程设计指导
21、. 北京.北京航空航天大学出版,2007附录(源程序)#include #include #define uint unsigned int#define uchar unsigned charsbit SEG1=P20; /段码位1sbit SEG2=P21; /段码位2 sbit SEG3=P22; /段码位3sbit SEG4=P23; /段码位4sbit SEG5=P24; /段码位5sbit SEG6=P25; /段码位6sbit S1=P10; /设置 上下限sbit S2=P11; /加sbit S3=P12; /减sbit BUZZ=P30; /蜂鸣器 /* 0 1 2 3 4
22、 5 6 7 8 9 a b c d e f - 关*/uchar code tab=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00; uchar Display_Digit=0,0,0,0,0,0,0,0;/待显示的各温度数位uchar key; /键值/-时间-/uchar shi=1,fen=1,miao=5;/ 时分秒计时 测试1/uchar shi=0,fen=1,miao=5;/ 时分秒计时 测试2uchar shi=0,fen=0,miao=8;/
23、时分秒计时 测试3 开机倒计时时间 可自由设置/-时间-uchar END;uchar mode; /模式 0 1 2 3void DelayMS(unsigned int t)/延时N msunsigned int i,j;for(i=0;it;i+)for(j=0;j120;j+);/-显示数码管-void DIS_SEG(void) /显示时 分 秒P0=tabDisplay_Digit5; / 数码管显示SEG1=0; DelayMS(1); /延时 SEG1=1; P0=tabDisplay_Digit4; / 数码管显示 SEG2=0;DelayMS(1); /延时 SEG2=1; P0=tabDisplay_Digit3; / 数码管显示SEG3=0;DelayMS(1);/延时 SEG3=1; P0=tabDisplay_Digit2; / 数码管显示SEG4=0;DelayMS(1);/延时 SEG4=1; P0=tabDisplay_Digit1; / 数码管显示SEG5=0; DelayMS(1);