根据51单片机能实现任意时间倒计时
基于51单片机的9999秒倒计时器毕业设计
编号:审定成绩:重庆邮电大学毕业设计(论文)设计题目:基于51单片机的9999秒倒计时器设计学院名称:通信与信息工程学院学生姓名:X正伟专业:电子信息工程班级:0120XXX学号:060201XX指导教师:刘XX答辩组负责人:填表时间:2010 年 6 月重庆邮电大学教务处摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。
由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。
但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。
倒计时系统需要用到锁存器、矩阵键盘、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。
对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即采用Keil uVision3软件程序进行译码。
本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确调用,完成了可以随时设置初值的基于51单片机控制的9999秒倒计时系统。
【关键词】倒计时器单片机矩阵键盘Keil uVision3 LED数码显示器ABSTRACTIn recent years, with the penetration of computers in the social sphere, SCM applications are continually deepening, and the traditional control test is driving the rapid update. The size of SCM is very small, and it is easy to be producted. for control, high integration, functionality, high reliability, and so on. So it has been widely used in the area of industrial control, mechatronics, intelligent instruments and communications.In real-time detection and control of the microcomputer application system, the microcontroller is often used as a core component. But if only have the knowledge of SCM is not enough.It should be based on specific hardware architecture, and if the application-specific features of the software objects are combined will be perfect.This paper focuses on the needs of the countdown system design, introduced the MCS-51 MCU of some of the basic principles.Such as the 51 single-chip interface functions, interrupt, timer and so on. Countdown system needs to use latch, matrix keyboard, LED digital display and other major modules, through interaction between different modules to complete the Countdown to the initial hardware. The countdown device in the LED digital display, In order to simplify the circuit, reduce costs, we adopt a software-based interface method, namely using Keil uVision3 software program for decoding.C language programming was used in the design , we completed the initial value can be set at any time based on 51 single-chip control of the 9999 seconds countdown system by making use of the countdown subroutine modules, matrix keyboard scanning module, interrupt, and also the correct subroutine calls.【Key words】Counter-down SCM Matrix keyboard Keil uVision3 LED digital display目录前言 (1)第一章倒计时系统简介 (2)第一节功能说明 (2)一、设计要求 (2)二、方案说明 (2)三、系统功能 (3)第二节开发作用和意义 (3)第三节本章小结 (4)第二章MCS-51单片机基本原理 (5)第一节单片机概述 (5)一、单片机基础 (5)二、单片机应用领域 (7)三、单片机的生产厂家和机型 (8)第二节MCS-51单片机的组成原理 (8)一、80C51芯片介绍 (8)二、8051 与80C51 (10)第三节MCS-51单片机的引脚功能 (10)一、主电源引脚Vss和Vcc (11)二、外接晶体引脚XTAL1和XTAL2 (11)三、控制引脚RST/VPD、ALE/PROG、PSEN、EA/Vpp (11)四、输出输入引脚 (12)第四节中断 (14)一、中断的概念 (14)二、8051中断系统结构 (15)三、中断响应条件 (18)第五节定时器与计数器 (18)一、定时器概述 (18)二、定时器控制字 (18)第六节本章小结 (20)第三章倒计时器系统设计与调试 (21)第一节硬件电路设计 (21)一、中央处理器模块 (21)二、锁存器 (23)三、矩阵键盘 (25)四、LED数码显示模块 (26)第二节软件设计 (28)一、程序准备 (29)二、键盘扫描程序设计 (30)三、倒计时初值设置 (31)四、倒计时模块子程序设计 (32)五、其他子程序设计 (33)第三节系统调试 (34)一、系统调试工具Keil uVision3 (34)二、调试的主要方法 (34)结论 (38)致谢 (39)参考文献 (40)附录 (41)一、英文原文 (41)二、英文翻译 (51)三、源程序 (61)前言51系列单片机属于总线型单片机,具有硬件架构完整、功能强大、技术成熟、通用性强、可外部扩展、配套芯片齐全、集成开发环境好、实用子程序丰富以及价格低廉等一系列优点,无论是实际工程应用,还是学习单片机原理及其应用技术,51系列单片机都是理想的选择。
单片机:手动设定倒计时时间,0报警
单⽚机:⼿动设定倒计时时间,0报警⾸先显⽰”时.分“,K1时增加,K2分增加(如果不修改时分默认5分钟:300秒倒计时)K3开始倒计时,显⽰秒倒计时,到时报警BEEPK4停⽌报警,并返回到”时分“状态,⼜可以设置倒计时时间,来回循环#include<reg51.h>#define uchar unsigned char;#define uint unsigned int;uchar position;uchar tt,bz=0,bza=1;uint second;uchar minute;uchar hour;uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0--9sbit smg_q = P2^0;sbit smg_b = P2^1;sbit smg_s = P2^2;sbit smg_g = P2^3;sbit key1=P3^2;sbit key2=P3^3;sbit key3=P3^4;sbit key4=P3^5;sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;sbit led6=P1^5;sbit beep=P2^5;void keyscan();void display(unsigned char hour,unsigned char minute);void displaym(unsigned int second);void delay(unsigned int timer);void init();void main(){init();while(1){if(tt==20){ led1=~led1;led2=~led2;tt=0;if(second==0 && bz==1){while (bza==1){beep=0;delay(100);beep=1;break;}}elsesecond--;}keyscan();if (bz==0)display(hour,minute);elsedisplaym(second);delay(1);}}void keyscan(){ if(key1==0){TR0=0;hour++;if(hour==24)hour=0;delay(200) ;}if(key2==0){TR0=0;minute++;}if(key3==0){bz=1;bza=1;TR0=0;second=hour*3600+minute*60;if (second==0)second=300;delay(200) ;TR0=1;}if(key4==0){beep=1;bz=0;bza=0;minute=0;TR0=0;led1=1;led2=1;second=0;hour=0;minute=0;}}void init(){tt=0;bza=1;position=0;second=0;minute=0;hour=0;smg_q=1;smg_b=1;smg_s=1;smg_g=1;key1=1;key2=1;TMOD=0X01;TH0=0x4c;TL0=0x00;EA=1;ET0=1;TR0=0;}void t0() interrupt 1{TH0=0x4c;TL0=0x00;tt++;}void display(unsigned char hour,unsigned char minute){ P0=0XFF;switch(position){case0: smg_g=1;smg_q=0;P0=table[hour/10]; break;case1: smg_q=1;smg_b=0; P0=table[hour%10];if(tt>=10) P0&=0x7f; break;case2: smg_b=1;smg_s=0;P0=table[minute/10];break;case3: smg_s=1;smg_g=0;P0=table[minute%10];break;}position++;if(position>3)position=0;}void displaym(unsigned int second){ P0=0XFF;switch(position){case0: smg_g=1;smg_q=0;P0=table[second/1000]; break;case1: smg_q=1;smg_b=0; P0=table[second/100%10]; break;case2: smg_b=1;smg_s=0;P0=table[second/10%10];break;case3: smg_s=1;smg_g=0;P0=table[second%10];if(tt>=10) P0&=0x7f;break; }position++;if(position>3)position=0;}for(x=time;x>0;x--)for(y=110;y>0;y--);}更新:显⽰四位以上的秒时:显⽰最后四位的秒数,第⼀位数码管右侧的点亮。
51单片机倒计时报警器程序
MOV HOUR,#0 ;时初始化
MOV MSEC,#0 ;毫秒初始化
MOV TH0,#0DAH ;T0置初值
MOV TL0,#64H
MOV TMOD,#01H
SETB ET0 ;允许T0申请中断
JZ MM ; 为零则继续判断分钟
LJMP CLOCK2 ;不为零则继续计时
MM: MOV A,MIN ;判断分钟是否为零
JZ SS ; 为零则继续判断秒
CJNE A,#01,CLOCK2 ;判断分位是否为1,不为1则蜂鸣器流水灯工作在模式一
SETB P2.7
CLR P2.7
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
LCALL DELAY
CLR P2.6
MOV A,B
CLR P2.7
MOV P0,#0F7H
MOV P0,A
SETB P2.6
LCALL DELAY
CLR P2.6
;显示秒
MOV A,SEC
MOV B,#10
DIV AB
CLR P2.7
MOV P0,#0FBH
SETB P2.7
CLR P2.7
CLR P2.3
MOV A,MIN;
CJNE A,#60,J3 ;分满60清0
MOV MIN,#0
LJMP J3
J3: JB K3,A1
LCALL DISPLAY1
LJMP J3
S4: LCALL DELAY
JB K4,A1
AK4:INC HOUR
基于AT89C51单片机的倒计时
单片机课程设计题目:基于AT89C51单片机的倒计时学院:机械与电气工程学院专业:电气工程及其自动化学号:101401010205目录1、设计要求 (3)2. 工作原理 (3)2.1硬件设计 (4)2.1.1 单片机AT89S51 (4)2.1.2 显示器件选择 (5)2.1.3复位电路 (7)2.1.4 时钟电路 (7)2.1.6 蜂鸣器 (9)3、软件设计 (10)3.1 按键流程图: (10)3.2 定时器流程图: (11)3.3蜂鸣器发出音乐流程图: (12)3.4主程序流程图: (13)4、电路仿真 (14)参考文献 (15)附录1 电路图 (16)附录2 程序 (16)附录3 元件清单 (21)1、设计要求利用AT89C51单片机结合LED显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,红色LED灯闪烁,通知倒计数终了,该做应当做的事。
定时闹钟的基本功能如下。
●显示格式为“分分:秒秒”。
用4个按键操作来设置当前想要倒计数的时间。
一旦按下键则开始倒计数,当计数为0时,发出一阵利用AT89C51单片机结合LED显示器设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,红色LED灯闪烁,通知倒计数终了,该做应当做的事。
音乐声。
程序执行后工作指示灯LED闪动,表示程序开始执行,按下操作键K1~K4动作如下。
●K1—可调整倒计数的时间1~60分钟。
●K2—设置倒计数的时间为5分钟,显示“0500”。
●K3—设置倒计数的时间为10分钟,显示“1000”。
●K4—设置倒计数的时间为20分钟,显示“2000”。
按K1键则在LED上显示出设置画面。
此时,若:a. 按操作键K2—增加倒计数的时间1分钟。
b. 按操作键K3—减少倒计数的时间1分钟。
c. 按操作键K4—设置完成。
附加功能:K5—计数开始按钮。
51单片BST-M51机编程300秒倒计时
51单片BST-M51机编程300秒倒计时倒计时器在生活非常有用,用单片机自制,不但电路简单,而且功能可根据需要自行设计。
由74系列、40系列小规模数字芯片设计的倒计时器非常多,但有显示不直观(无LED数码管);调整参数不灵活;计时精度低(采用RC振荡)等缺点。
51单片机做的电子钟在很多地方都有介绍,对于单片机学习者来说这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。
常见的电子钟程序由显示部分、计算部分、时钟调整部分构成,本产品硬件上完全支持倒计时器,客户只要自己修改程序就能实现倒计时功能。
“双单片机控制的万年历倒计时牌”等。
实践证明:PROTEUS 是单片机应用产品研发的灵活、高效、正确的设计与仿真平台,它明显提高了研发效率、缩短了研发周期,节约了研发成本。
基于51单片机的9999秒倒计时器方案书
西京学院毕业设计(论文)题目: 基于51单片机倒计时器姓名:系别: 机电工程系专业: 机电一体化技术班级: 机电0809班学号: 0812090901指导老师: 张永超日期: 2011年1月20日教务处制摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。
由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。
但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。
倒计时系统需要用到锁存器、矩阵键盘、LED数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。
对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即采用Keil uVision3软件程序进行译码。
本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确调用,完成了可以随时设置初值的基于51单片机控制的9999秒倒计时系统。
【关键词】倒计时器单片机矩阵键盘Keil uVision3 LED数码显示器目录前言 (1)第一章倒计时系统简介 (2)1.1设计要求 (2)1.2方案说明 (2)1.3系统功能 (3)第二章MCS-51单片机基本原理 (4)2.1 MCS-51单片机的组成原理 (4)2.1.1 80C51芯片介绍 (4)2.2 MCS-51单片机的引脚功能 (5)2.3 中断 (6)2.4 定时器与计数器 (9)第三章倒计时器系统设计与调试 (11)3.1 硬件电路设计 (11)3.2中央处理器模块 (11)3.3锁存器 (13)3.4 矩阵键盘 (15)3.5 LED数码显示模块 (16)3.6 软件设计 (18)3.7 倒计时模块子程序设计 (22)3.8 其他子程序设计 (23)结论 (25)致谢 (26)参考文献 (27)附录 (28)前言51系列单片机属于总线型单片机,具有硬件架构完整、功能强大、技术成熟、通用性强、可外部扩展、配套芯片齐全、集成开发环境好、实用子程序丰富以及价格低廉等一系列优点,无论是实际工程应用,还是学习单片机原理及其应用技术,51系列单片机都是理想的选择。
基于51单片机数码管100天倒计时程序
基于51单片机数码管100天倒计时程序(动态显示)#include <reg51.h>Unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f };unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j;void delay(unsigned char i);signed int time1=100,time0=0;void sm();void time2();void hms1 ();void timej ();void timez ();/***********************按键脚定义*////////////////// sbit ks=P1^4;sbit hms=P1^5;sbit add=P1^6;sbit bat=P1^7;void sm(){/****************************数码管显示位*///////////////////////e3=time1/100;f3=time1%100/10;g3=time1%100%10;P2=0x01;P0=s[f3];delay(2);P0=0;P2=0x02;P0=s[g3];delay(2);P0=0;P2=0x04;P0=s[e3];delay(2);P0=0;}void main(){TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;while(1){sm();time2();hms1();timej();timez();}}void time2() //计时开始{if(ks==0){delay(10);}if(ks==0){flag0=1;}if(flag0==1&&ks==1){flag0=0;TR0=1;}}void hms1 () //按键变量j {if (hms==0){delay (10);}if(hms==0){flag2=1;}if(flag2==1&&hms==1){ flag2=0;j++;TR0=0;if (j==3) j=0;}}void timez () //按键加{if (add==0){delay (10);}if(add==0){flag4=1;}if(flag4==1&&add==1){flag4=0;switch(j){case 0x00:break;case 0x01:time1++; break;case 0x02:time1=time1+10;break; default:break;}}}void timej () //按键减{if (bat==0){delay (10);}if(bat==0){flag3=1;}if(flag3==1&&bat==1){flag3=0;switch(j){case 0x00:break;case 0x01:time1--;break;case 0x02:time1=time1-10;break; default:break;}}}void int1()interrupt 1{count++;if(count==12){count=0;time0++;}if(time0==8640){time1--;time0=0;}if(time1==-1){time1=100;}}void delay(unsigned char i ){unsigned char j,k;for (k=0;k<i;k++)for (j=0;j<10;j++);}(注:可编辑下载,若有不当之处,请指正,谢谢!)。
基于51单片机100天倒计时数码管显示(共阴) (附加时分秒显示)
基于51单片机100天倒计时数码管显示(共阴)(附加时分秒显示)#include <reg51.h>unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char e3,f3,g3,h3,count,flag0,flag2,flag3,flag4,j,a1,a2,a3,a4,b1,b2;void delay(unsigned char i);signed int time1=100,time0=59,time3=59,time4=23;void sm();void time2();void hms1 ();void timej ();void timez ();sbit ks=P1^4;sbit hms=P1^5;sbit add=P1^6;sbit bat=P1^7;void sm() //100天数码管显示{e3=time1/100;f3=time1%100/10;g3=time1%100%10;P2=0x00;P0=s[e3];delay(2);P2=0x01;P0=s[f3];delay(2);P2=0x02;P0=s[g3];delay(2);a1=time4%60/10; //时显示a2=time4%60%10;a3=time3%60/10; //分显示a4=time3%60%10;P2=0x03;P0=s[a1];delay(2);P2=0x04;delay(2);P2=0x05;P0=s[a3];delay(2);P2=0x06;P0=s[a4];delay(2);b1=time0%60/10; 秒显示b2=time0%60%10;P2=0x07;P0=s[b1];delay(2);P2=0x08;P0=s[b2];delay(2);}void main(){TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;ET0=1;while(1){sm();time2();hms1();timej();timez();}}void time2() //计时开始{if(ks==0){delay(10);}if(ks==0){flag0=1;}if(flag0==1&&ks==1)TR0=1;}}void hms1 () //按键变量j {if (hms==0){delay (10);}if(hms==0){flag2=1;}if(flag2==1&&hms==1){ flag2=0;j++;TR0=0;if (j==3) j=0;}}void timez () //分按键减{if (add==0){delay (10);}if(add==0){flag4=1;}if(flag4==1&&add==1){flag4=0;switch(j){case 0x00:break;case 0x01:time3--; break;case 0x02:time3=time3-10;break; default:break;}}}void timej () //时按键减{if (bat==0){delay (10);}if(bat==0){flag3=1;}if(flag3==1&&bat==1){flag3=0;switch(j){case 0x00:break;case 0x01:time4--;break;case 0x02:time4=time4-10;break;default:break;}}}void int1()interrupt 1{count++;if(count==16){count=0;time0--;}if(time0==-1) // 如果秒到了0等于59{time0=59;time3--; //分自减}if(time3==-1){time3=59;time4--; //时自减}if(time4==-1){time4=23;12点过后time1--;//100天减}if(time1==-1){time1=100;//到达100天恢复}}void delay(unsigned char i ){unsigned char j,k;for (k=0;k<i;k++)for (j=0;j<10;j++);}。
根据51单片机的厨房定时器(可预置分秒倒计时装置)
基于51单片机的厨房定时器设计报告学院:信息光电子科技学院专业:光电信息科学与工程年级:姓名:学号:一、设计报告概述日常生活中熬个汤、煮个蛋……都需要预定一定的时间,设计一个厨房定时器,用户预设倒计时的时长,启动后系统开始倒计时,当时间为0后,启动蜂鸣器报警。
本设计报告中的厨房定时器,是以单片机(STC89C52),四位七段数码管、按键开关和蜂鸣器等组成的综合设计系统电路。
上电,电源指示灯点亮,数码管显示为0000,用户可以通过按键开关预设定时时间,启动后系统开始倒计时,当时间为0后,蜂鸣器报警。
数码管显示分、秒,计时时间上限为99分钟,按键开关以10分钟或1分钟单位调整时间。
图1 系统设计结构图本系统组成如图1 系统设计结构图所示,主要由五个部分组成。
报警电路 (蜂鸣器)1.AT89C52单片机——控制芯片AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
图2 AT98C52引脚图2.时钟震荡电路AT89C52中有一个用于构成内部振荡器的高增益反相放大器,与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
如果使用石英晶体,电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF,可以使系统更稳定,避免噪音干扰而死机。
此设计采用的是12MHz的石英晶振。
51单片机倒计时源程序
51单片机倒计时源程序#include<reg52.h> //51头文件//#include<472405468.h>//51头文件#define uchar unsigned char //宏定义#define uint unsigned int //宏定义#define s0 P2^0 // 时加键#define s1 P2^1 // 分加键#define s2 P2^2 // 倒时加键//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6F #define s3 P2^3 // 倒分加键#define s4 P2^4 // 倒秒加键#define s5 P2^5 // 开始倒计时键总共6个按键uint tt1,tt0;uchar num=0;uchar biaozhi=11;uchar up;uchar z,han,jun,qiang,cishu,count,num1; //函数变量声明char shi,fen,miao,pao_miao; //定义有符号变量声明chardao_shi=23,dao_miao=59,dao_fen=59,dao_paomiao=99;sbit sky1=P1^0; //断控sbit sky2=P1^1; //位控sbit feng=P1^2; //控蜂鸣器const uchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极显示代码//****************** 函数声明 *****************************void feng_ming_qi(uchar); //报时函数void init(); //定时器的初始化(T1)void fenjie(); //函数声明void delay(uchar); //延时函数声明void dao_fenjie(); //倒计时显示函数uchar key_scan(); //按键调试函数//************************************************************void delay(uchar z) //一毫秒延时函数{uchar x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void init()//TR1初始化{TMOD=0x22; // TMOD=0x20; 开定时 1TH1=0x06; //T1 250微妙TL1=0x06; //装初值EA=1; //打开总中断TR1=1; ////初始化先打开定时器1ET1=1;feng=0;///////////////////////////////////////////////TH0=0x06; //T0 也是 250 微妙中断一次TL0=0x06; //装初值//EA=1; //打开总中断TR0=0; //初始化先关闭定时器0ET0=1; // IEIP=0x20;}/////////////////////////////////////////////////////////////////// /////////////////////////void dao_fenjie() //分解倒秒,倒分,倒时。
基于51单片机能实现任意时间倒计时。
倒计时器只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。
比如30分钟倒计时修改分钟十位和各位即可。
一、设计要求:由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。
倒计时到,由蜂鸣器发出报警。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
二、设计的作用目的:此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
三、具体设计:1.问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
51单片机100天倒计时牌完整程序
51单片机100天倒计时牌完整程序/************************************************************** *******///用于一百天之内的倒计时//可调具体定时时间/************************************************************** *******///使用12MHZ晶振,P1口输出段码P3口口作列扫描,用共阳LED数码管#include#include#define uchar unsigned char#define uint unsigned intuchar code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0xff};// 共阳LED段码表//涉及到减1小于0的问题,timedata[8] 使用符号数据char data timedata[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共8个//0.1.2.3.4.5分别表示秒低,秒高,分低,分高,时低,时高位,天数//////uchar data con1s=0x00; //1秒定时用?uchar n;//记录按键次数sbit led1=P0^5;sbit led2=P0^6;sbit led3=P0^7;sbit key0=P2^1; //大键盘sbit key4=P2^5; //从左到右4.3.2.1号键盘sbit key3=P2^4; //4高位加,3高位减,2低位加,1低位减sbit key2=P2^3; //sbit key1=P2^2; ////延时x毫秒void delay1ms(uint x){uint i,j;for (i=x;i>0;i--)for(j=110;j>0;j--); //延时一毫秒,j取110}/****************/// 键扫描子程序 ///****************/void keyscan(){ uint a;uint tiaojie=1;n=0;while(tiaojie){if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(5);if(key0==0){while(!key0);n=n+1; //记录按键次数//按键第二次N=1,调节天数;N=2,调节小时;N=3,调节分钟;N=4,调节秒数;//按键从左到右依次高位加减,低位加减if(n==5){n=0;tiaojie=0;}}}if(n!=0){if(n==1) //天数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]+1; if(timedata[7]>9) {timedata[7]=0;}}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);timedata[7]=timedata[7]-1; if(timedata[7]<0) {timedata[7]=9;}}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[6]=timedata[6]+1; if(timedata[6]>9) {timedata[6]=0;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[6]=timedata[6]-1; if(timedata[6]<0) {timedata[6]=9;}P1=dis_7[timedata[6]];//天数P3=0Xbf;a=110;while(a--);}} //温度的第一位加1}if(n==2) //小时调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[5]=timedata[5]+1; if(timedata[5]>2) {timedata[5]=0;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[5]=timedata[5]-1; if(timedata[5]<0) {timedata[5]=2;}P1=dis_7[timedata[5]];//P3=0Xdf;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);if(timedata[5]==2){timedata[4]=timedata[4]+1; if(timedata[4]>3) {timedata[4]=0;}}else{timedata[4]=timedata[4]+1; if(timedata[4]>9) {timedata[4]=0;}}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[4]=timedata[4]-1;if(timedata[4]<0)if(timedata[5]==2) {timedata[4]=3;}else{timedata[4]=9;}P1=dis_7[timedata[4]];//P3=0Xef;a=110;while(a--);}} //温度的第一位加1}if(n==3) //分钟调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[3]=timedata[3]+1; if(timedata[3]>5) {timedata[3]=0;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[3]=timedata[3]-1; if(timedata[3]<0) {timedata[3]=5;}P1=dis_7[timedata[3]];//P3=0Xf7;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[2]=timedata[2]+1; if(timedata[2]>9) {timedata[2]=0;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[2]=timedata[2]-1; if(timedata[2]<0) {timedata[2]=9;}P1=dis_7[timedata[2]];//P3=0Xfb;a=110;while(a--);}} //温度的第一位加1}if(n==4) //秒数调节{if(key4==0) //高位加1 {delay1ms(5);if(key4==0){while(!key4);timedata[1]=timedata[1]+1; if(timedata[1]>5) {timedata[1]=0;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key3==0) //高位减1 {delay1ms(5);if(key3==0){while(!key3);timedata[1]=timedata[1]-1; if(timedata[1]<0) {timedata[1]=5;}P1=dis_7[timedata[1]];//天数P3=0Xfd;a=110;while(a--);}}if(key2==0) //低位加1 {delay1ms(5);if(key2==0){while(!key2);timedata[0]=timedata[0]+1; if(timedata[0]>9) {timedata[0]=0;}P1=dis_7[timedata[0]];P3=0Xfe;a=110;while(a--);}}if(key1==0) //低位减1 {delay1ms(5);if(key1==0){while(!key1);timedata[0]=timedata[0]-1; if(timedata[0]<0) {timedata[0]=9;}P1=dis_7[timedata[0]];//天数P3=0Xfe;a=110;while(a--);} //温度的第一位加1}}}EA=1;//退出调节过程,开中断}/***********///扫描程序///**********/scan(){uint a;P1=dis_7[timedata[7]];//天数P3=0X7f;a=110;while(a--);P1=dis_7[timedata[6]];P3=0Xbf;a=110;while(a--);P1=dis_7[timedata[5]];//小时数P3=0Xdf;a=110;while(a--);P1=dis_7[timedata[4]];P3=0xef;a=110;while(a--);P1=dis_7[timedata[3]];//分钟数P3=0xf7;a=110;while(a--);P1=dis_7[timedata[2]];P3=0xfb;a=110;while(a--);P1=dis_7[timedata[1]];//秒数P3=0xfd;a=110;while(a--);P1=dis_7[timedata[0]];P3=0xfe;a=110;while(a--);}/*************///初始化程序//clearmen(){TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用)TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用)TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//设置定时器工作方式,开定时器led1=0;led2=0;led3=0;delay1ms(1000);led1=1;led2=1;led3=1;timedata[0]=9;timedata[1]=5;timedata[2]=9;timedata[3]=5;timedata[4]=3;timedata[5]=2;timedata[6]=9;timedata[7]=9;}//主程序///*********/void main(){clearmen();while (1){scan();if(key0==0) // 按下调整按键,进入键盘扫描程序{delay1ms(200);if(key0==0){while(!key0);led1=0;//进入键盘扫描之后,三个指示灯点亮led2=0;led3=0;EA=0;P1=0x8E;/*F*/P3=0xfe; //最后一位数码管显示 0x8E,/*F*/,表示等待按键检测keyscan();}}}}/********************///1秒中断处理程序 ///*******************/void time_intt0(void) interrupt 1{ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;con1s++;if(con1s==20){con1s=0x00;timedata[0]--;led1=~led1;led2=~led2;led3=~led3;//正常倒计时三个指示灯每隔1秒钟点亮if(timedata[0]<0){timedata[0]=9;timedata[1]--;if(timedata[1]<0){timedata[1]=5;timedata[2]--;if(timedata[2]<0){timedata[2]=9;timedata[3]--;if(timedata[3]<0){timedata[3]=5;timedata[4]--;if(timedata[4]<0){timedata[4]=9;timedata[5]--;}if(timedata[5]<0 ) {timedata[5]=2; timedata[4]=3; timedata[6]--;if(timedata[6]<0 ) {timedata[6]=9; timedata[7]--;if(timedata[7]<0 ) {timedata[7]=9; }}}}}}}}ET0=1;}。
基于51单片机的倒计时程序
kk1 bit b.1kk2 bit b.2ORG 0000HLJMP STARTORG 000BHLJMP CTC0TT1 EQU 37H ;50msTT2 EQU 38H ;秒TT3 EQU 39H ;分TT4 EQU 3AH ;时YUESHI EQU 40HYUEFEN EQU 41HORG 42HVIEW0:DB 0C0H, 0F9H, 0A4H, 0B0H, 99H , 92H , 82H, 0F8HDB 80H , 90H, 88H , 83H , 0C6H, 0A1H, 86H, 84HORG 0A0HTEMP_TAB: DB 00H,01H,02H,03H,04H,05H,06H,07H DB 08H,09H,10H,11H,12H,13H,14H,15HDB 16H,17H,18H,19H,20H,21H,22H,23HDB 24H,25H,26H,27H,28H,29H,30H,31HDB 32H,33H,34H,35H,36H,37H,38H,39HDB 40H,41H,42H,43H,44H,45H,46H,47HDB 48H,49H,50H,51H,52H,53H,54H,55HDB 56H,57H,58H,59H,60HORG 100HSTART: MOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHSETB EASETB ET0SETB TR0SETB P2.4 ;SETB P2.5JB P1.6,NEXT;JMP ZHUNEXT: MOV A,#00HMOV R2,#17H ;24小时MOV YUESHI,#00HMOV YUEFEN,#00HMOV R3,#3BH ;60SETB KK1SETB KK2mainline:JB P1.3,KEY1CLR KK1KEY1: JNB p1.3,KEY2 ;当p1.3高电平时就往下执行,但是只要执行一次后,kk1就为1,往后就不再执行JB KK1,KEY2INC YUESHISETB KK1 ;这以段的任务是不用延时也能消除按键抖动的程序KEY2: JB P1.4,KEY3CLR KK2KEY3: JNB P1.4,RESJB KK2, RESSETB KK2INC YUEFENRES:MOV A,YUESHISUBB A,R2JNZ BUDAOSHIMOV YUESHI,#00HBUDAOSHI:MOV A,YUEFENSUBB A,R3JNZ BUDAOFENMOV YUEFEN,#00HBUDAOFEN:MOV A,YUESHIMOV DPTR,#TEMP_TABMOVC A,@A+DPTRMOV R0,AANL A,#0FH;送小时的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRMOV P0,ASETB P2.0SETB P2.1CLR P2.2SETB P2.3LCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRMOV P0,A ;显示时的十位SETB P2.0SETB P2.1SETB P2.2CLR P2.3LCALL DELAYMOV A,YUEFENMOV DPTR,#TEMP_TABMOVC A,@A+DPTRMOV R0,AANL A,#0FH;送分的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRMOV P0,ACLR P2.0SETB P2.1SETB P2.2SETB P2.3LCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRMOV P0,A ;显示分的十位SETB P2.0CLR P2.1SETB P2.2SETB P2.3LCALL DELAYJNB P2.2, NEXT2;按下就进入定时煮饭的阶段LJMP mainlineDELAY: MOV R5,#08H ;40ms延时子程序L7: MOV R6,#0FAHL8: DJNZ R6,L8DJNZ R5,L7RETNEXT2: MOV A,#00HMOV TT1,A ;让TT1重新清零这一步是必须的 MOV TT2,#00HMOV A,YUEFENMOV TT3,AMOV A,YUESHILOOP1: MOV A,TT4JZ AINI1LCALL TIMEING1AINI1: MOV A,TT4JNZ AINI2LCALL TIMEING2;-------------定时程序:--------------------AINI2: MOV A,TT1;CJNE A,#14H,RET001SUBB A,#14H ;20×50ms=1sJNZ RET001MOV TT1,A ;TT1清零DEC TT2MOV A,TT2SUBB A,#0FFH ;到零?JNZ RET001MOV TT2,#3BH ;重新送数DEC TT3MOV A,TT3SUBB A,#0FFHJNZ RET001MOV TT3,#3BHDEC TT4MOV A,TT4SUBB A,0FFHJNZ RET001HERE: CLR P1.5;定时中止SJMP HERE;RET001: LJMP LOOP1;-----------显示倒计时1:-------------- TIMEING1:MOV A,TT4MOV DPTR,#TEMP_TABMOVC A,@A+DPTRMOV R0,AANL A,#0FH;送小时的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRSETB P2.0SETB P2.1CLR P2.2SETB P2.3LCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRCLR P2.3MOV P0,A ;显示时的十位SETB P2.0SETB P2.1SETB P2.2CLR P2.3LCALL DELAYMOV A,TT3MOV DPTR,#TEMP_TAB MOVC A,@A+DPTRMOV R0,AANL A,#0FH;送分的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRMOV P0,ACLR P2.0SETB P2.1SETB P2.2SETB P2.3LCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRMOV P0,A ;显示分的十位SETB P2.0CLR P2.1SETB P2.2SETB P2.3LCALL DELAYRET;-----------显示倒计时2:-------------- TIMEING2:MOV A,TT3MOV DPTR,#TEMP_TABMOVC A,@A+DPTRMOV R0,AANL A,#0FH;送分的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRSETB P2.0SETB P2.1CLR P2.2SETB P2.3MOV P0,ALCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRSETB P2.0SETB P2.1SETB P2.2CLR P2.3MOV P0,A ;显示分的十位LCALL DELAYMOV A,TT2MOV DPTR,#TEMP_TABMOVC A,@A+DPTRMOV R0,AANL A,#0FH;送秒的个位MOV DPTR,#VIEW0MOVC A,@A+DPTRCLR P2.0SETB P2.1SETB P2.2SETB P2.3MOV P0,ALCALL DELAYMOV A,R0SWAP AANL A,#0FHMOVC A,@A+DPTRSETB P2.0CLR P2.1SETB P2.2SETB P2.3MOV P0,A ;显示秒的十位LCALL DELAYRET;**************定时中断子程序**************************************** CTC0: MOV TL0,#0B0H ;定时50msMOV TH0,#3CHINC TT1RETIEND。
51单片机数码管倒计时汇编语言代码
51单片机数码管倒计时汇编语言代码数码管是一种电子元器件,常用于倒计时、计时和显示数字等场景中。
其中,51单片机作为一种常见的控制芯片,能够对数码管进行比较精确的控制。
本文将介绍51单片机在数码管倒计时中的应用,并给出相应的汇编语言代码。
一、硬件准备首先,我们需要准备一些硬件设备。
具体来说,我们需要一块51单片机的开发板、一组共阳数码管、一个蜂鸣器、一枚按键开关、若干杜邦线和面包板。
在连接各个模块时,需要注意接线的正确性和稳定性。
二、倒计时实现接下来,我们就可以开始编写汇编语言代码了。
代码实现中,需要注意数码管的显示方式以及倒计时时间的设定等细节。
首先,我们定义一些常数,如:COUNT_MAX EQU10;倒计时时长为10sCLK_FREQ EQU12000000;时钟频率为12MHzDELAY_US EQU CLK_FREQ/1000000其中,COUNT_MAX表示倒计时的最大时长,CLK_FREQ表示单片机的时钟频率,DELAY_US表示1us延时所需的机器周期数。
其次,需要定义一些数据段:ORG0SJMP MAINORG0BHDELAY_CNT:DB0ORG0CHMODE_CNT:DB0其中,DELAY_CNT是延时计数器,MODE_CNT是模式计数器。
接着,我们定义主函数:MAIN:CLR P1.5CLR P1.6CLR P1.7MOV TMOD,#01H;设置定时器0为模式1SETB TR0;启动定时器0SETB EASETB ET0SETB EX0MOV R6,#DELAY_USSJMP MODE_SEL首先,需要清空P1.5、P1.6和P1.7引脚,以便控制数码管的显示。
然后,设置定时器0为模式1,并启动定时器0。
接着,开启总中断、定时器0中断和外部中断,设置延时计数器,并跳转到MODE_SEL 模式选择功能。
接下来是MODE_SEL模式选择功能:MODE_SEL:MOV A,MODE_CNTCPL AMOV MODE_CNT,AANL A,#03HJZ MODE_0CJNE A,#01H,MODE_SEL_ENDSJMP MODE_1CJNE A,#02H,MODE_SEL_ENDSJMP MODE_2MODE_SEL_END:CLR TR0CLR EARETI在这个模式下,程序每执行一次,模式计数器加1,并且A寄存器与3进行与操作,最后根据A的值跳转到相应的倒计时模式。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
倒计时器只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。
比如30分钟倒计时修改分钟十位和各位即可。
一、设计要求:由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。
倒计时到,由蜂鸣器发出报警。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
二、设计的作用目的:此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
三、具体设计:1.问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
单片机的诞生标志着计算机正式形成了通过计算机系统和嵌入式计算机系统两个分支。
目前单片机已渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
单片机已在广阔的计算机应用领域中表现得淋漓尽致电器因此,单片机已成为电子类工作者必须掌握的专业技术之一。
单片机就是一个微型中央处理器,通过编程即能完成很多智能化的工作,因此它的出现给电子技术智能化和微型化起到了很大的推动作用。
本设计将采用89C51单片机,89C51单片机是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机自带5个中断,两个16位定时器32个I/O口,可擦除只读存储器可以反复擦除多次,功能相当强大。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
面对如此功能强大的单片机,结合本次设计要求,应该要用到单片机的内部时钟电路以及外围的显示接口电路和报警电路。
对与时钟,它有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法。
在显示方面,有着多种选择,但是8段LED数码管足以满足此次设计的要求了。
LED 数码显示器是一种有LED发光二极管组合显示字符的显示器件。
它使用了8个LED发光二极管,其中7个用于显示字符,一个用于显示小数点,故通常称之为8段发光二极管数码器。
其内部结构如下图(a)所示:LED数码显示器有如下两种连接方法:共阳极接法:把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。
共阴极接法:把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。
每个发光二极管的阳极通过电阻与输入端相连。
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。
由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口无法直接驱动,所以要利用放大电路来驱动,一般使用三极管来放大电流。
本设计采用p3.0口和三极管组成的电路来驱动蜂鸣器。
2.总体设计思想:本设计是基于AT89C51单片机的键盘控制及显示电路设计,从系统的设计功能上看,系统可分为两大部分,即键盘输入控制部分和显示部分,对于每一个部分都有不同的设计方案,起初我对键盘和显示每个都拟订了下面两种方案:键盘部分:第一种方案:采用扫描键盘,可以用普通按键构成4×4矩阵键盘,直接接到AT89C51单片机的P1口,高四位作为行,低四位作为列,通过软件完成键盘的扫描和定位。
这种方式相对下面的独立式键盘节省了很多的I/O口。
第二种方案:键盘控制采用独立式按键,每个按键的一端均接地,另一端直接和P1口相连,在按键和P1口之间通过10K电阻与+5V电源相连。
键盘通过检测输入线的电平状态就可以很容易地判断哪个键被按下了,这种方法操作速度高而且软件结构很简单,比较适合按键较少或操作速度较高的场合,这种独立式接口的应用很普遍。
显示部分:第一种方案:显示部分采用静态显示方法,所谓静态显示,就是每一个显示器都要占用一个独立的具有锁存功能的接口用于存储字形码。
这样单片机只要把要显示的字形代码发送到接口电路,从而输送至各数码管显示。
被显示的数据只要输出一次,直到要显示新的数据时,再发送新的字形码。
静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O 端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O端口才32个),实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。
第二种方案:显示部分采用动态显示。
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
动态显示是利用人眼视觉暂留特性来实现显示的。
事实上,显示器上任何时刻只有一个数码管有显示。
由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。
为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
本设计可采用P0口直接驱动七段数码管显示。
此方案成本低,而且单片机的I/O口占用较少,可以节约单片机接口资源,而且功耗更低。
由于本设计要求按键较少,且本次设计只是对所学知识的一次实践,设计要求简单,容易实现,成本低廉。
比较以上各种设计方案,采用独立式键盘和动态显示两种方案配合,成本低,占用单片机资源少,且容易实现,这样的设计比较适合本次设计,故最终决定选用这样的一种搭配设计方案。
对于蜂鸣器,将采用p3.0口和三极管组成的外围电路驱动,根据定时时间报警。
3.具体实现方法:根据设计任务与要求,可初步将系统分为五大功能模块:主电路、按键电路、显示电路、报警电路。
进一步细说,主电路选用AT89C51作为中央处理器,系统采用12MHZ的晶振;按键停控制电路由四个按键(复位键、启动/暂停键、设置键、+1调时键)组成,键盘采用软件扫描的方式设计,低电平有效;显示电路由六位七段共阴极数码管和一个9位200欧姆上拉电阻组成,显示内容有倒计时器的0.1秒位以及分秒的个、十位,数码管通过P0口直接输出数据;报警电路主要由蜂鸣器组成,通过电路与P3.0口相连。
当P3.0口输出高电平时,蜂鸣器响。
对于本次单片机课程设计,根据设计要求可以将功能分成如下4部分:(1)由于单片机内部振荡方式电路简单,时钟信号比较稳定,是独立的单片机应用系统的首选,故本设计采用内部振荡方式,采用12MHZ的晶振。
图(1)晶振电路图(2)本设计电路采用定时器T0产生定时中断,由于本设计需要0.1s的基本时间,故选择其工作在定时方式1下。
这时定时器T0是一个16位的计时器,由它产生50ms 的基本定时中断,两次中断后将得到0.1s的时间。
(3)键盘电路有独立式键盘和矩阵式两种。
独立式键盘占用I/O口线较多,适用于按键较少的情况。
矩阵式键盘占用的I/O口相对较少,适用于按键很多的情况。
图(2)键盘电路图(4)报警电路将采用p3.0口驱动,当数码管显示00.00.0时p3.0口输出高电平,驱动蜂鸣器达到报警的目的,只有当复位键按下后,蜂鸣器才会停止报警。
图(3)蜂鸣器报警电路图(5)对于显示电路,本设计采用6位8段共阴极LED数码管显示。
上电显示最大倒计时时间60.00.00-。
其中“-”位为系统状态标志位,当显示“-”时,表示系统处于等待状态,按下开始键后将开始计数,开始计数后此数码管将关闭显示,以达到省电的目的,当显示“E”时,表示系统正处于调时状态,此时只用两个调时键有用,按下开始键或复位键将没有用。
图(4)显示电路图系统的原理框图如下图:图(5)系统原理框图图(6)硬件连线图硬件连接说明:本系统以AT89C51单片机为核心。
单片机采用内部振荡的方式。
通过200欧姆电阻与一个6位8段LED数码显示管相连。
从P0口输出LED数码管的字形码,从P2口输出LED数码管的位选码,高电平有效。
4个功能按键和P1口相连,中间通过10K的电阻与+5V电源相连,按键另一端接地,P1口低电平时表示按键被按下。
报警电路则与P3.0口相连,当P3.0口输出高电平时,蜂鸣器响。
在程序设计方面:将键盘扫描程序置于主程序中,采用扫描方式检测键盘的按键情况,主程序流程图见图(7)。