用单片机做的倒计时15s
单片机:手动设定倒计时时间,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--);}更新:显⽰四位以上的秒时:显⽰最后四位的秒数,第⼀位数码管右侧的点亮。
四路抢答器设计报告

四路抢答器设计报告专业:物理学班级:09物理学2班姓名:xxx 学号:1226姓名:xxx 学号:1251姓名:xxx 学号:1225姓名:xxx 学号:1208姓名:xxx 学号:1231指导老师: xx日期:2012年6月12日摘要抢答器作为一种工具,已广泛应用于各种智力和知识竞赛场合。
本设计是以四路抢答为基本理念,考虑到依需要设定限时和记数的原理,利用AT89C52单片机以及外围接口实现的抢答系统,利用单片机的定时器/ 计数器定时和记数的原理,将软件、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。
用开关做键盘输出,蜂鸣器给出声响提示。
同时系统能够实现:抢答开始后,若有选手先按动抢答按钮,该选手编号就会在显示器上显示同时蜂鸣器会发出音响,而且禁止其他选手抢答。
优先抢答的选手的编号一直保持到主持人将系统清零为止。
抢答器同时具有限时抢答功能。
当主持人按下按钮后,定时器开始倒计时,并显示倒计时时间(15s)。
如果时间已到,无人抢答,则本次抢答无效。
本次实验巧妙运用单片机技术,大大的减少了电路的复杂性。
关键词:AT89C52 数码管抢答器计时目录一、设计任务和要求 (4)二、方案的选择的论证 (5)三、原理图 (7)四、电路图及工作原理 (9)五、组装与调试 (10)六、电路的特点 (12)七、元器件列表 (13)八、参考文献 (13)九、感想和体会 (13)十、附录 (17)一、设计任务及要求1、设计任务设计一台可供4名选手参加比赛的智力竞赛抢答器。
由主持人控制抢答开始开关和系统清零开关,用数码管抢答倒计时间,由“15”倒计到“00”时,无人抢答,蜂鸣器给出响声提示。
选手抢答时,数码管上显示选手组号,同时蜂鸣器给出响声提示,倒计时停止。
2、设计要求1)抢答器同时供4名选手,用1、2、3、4表示4名选手,选手各用一个抢答按钮,按键的编号与选手的编号相对应。
2)主持人控制两个按钮,作用是整个系统的清零以及抢答的开始。
倒计时秒表 单片机

目录一、设计目的 (1)二、设计任务及要求 (2)三、总体方案设计 (2)四、硬件电路设计 (3)1、各部分电路设计 (3)2、整体电路图 (8)五、软件设计 (9)1、程序流程图 (9)2、源程序 (9)六、仿真效果 (9)1、显示部分仿真效果 (9)2、报警装置仿真效果 (10)七、实物调试 (11)八、设计总结 (11)1、设计过程中遇到的问题及解决方法 (11)2、设计体会 (12)3、对设计的建议 (12)参考文献 (13)附录 (14)一、设计目的单片机课程设计中通过查阅资料、接口设计、程序设计、安装调试等环节,完成AT89S-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,是同学们将课堂上学到的理论知识与实际应用结合起来,并能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,增进对单片机的感性认识,加深对单片机理论方面的理解,掌握单片机的内部功能模块的应用,如定时器/计数器、中断、片内外存贮器、I/O口、串行口通信等,强化单片机应用电路的设计与分析能力,提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力,实现理论结合实际,学以至用的原则。
运用所学的知识和自身课外的拓展学习加深对专业课的理解和学习,锻炼综合运用电路设计及相关电子仪器、单片机软硬件结合的理论,结合生产实际分析和解决工作工程实际问题的能力,加固、加深和扩展有关电子类,汇编语言,相关电子电路和仿真软件方面的知识和能力。
通过本次课程设计,应加强培养如下能力:(1)加强自身独立的动手能力和思考解决问题的能力,提高创造能力。
(2)学会使用软件Proteus画原理图和仿真调试。
(3)通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课的应用进一步的了解。
(4)掌握定时器、外部中断的设置和编程原理。
[中学]单片机设计60秒倒计时正计时Proteus仿真
![[中学]单片机设计60秒倒计时正计时Proteus仿真](https://img.taocdn.com/s3/m/9be9d137ae45b307e87101f69e3143323968f5c9.png)
60秒倒计时设计一:1.目的课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
2.要求单片机控制的60s倒计时00000(1)用单片机AT89C51的定时器实现60s倒计时。
00000(2)用PROTEUS设计,仿真基于AT89c51单片机的60s倒计时实验。
3. 目标通过课程设计,使自己深刻理解并掌握基本概念,掌握单片机的基本应用程序设计及综合应用程序设计的方法。
2:方案选择图2.1:60秒倒计时总体电路设计本设计由硬件设计和软件设计两部分组成,总电路框图如图2.1所示。
具体设计:通过AT89C51型号单片机,由P1和P2两组I/O引脚分别控制两个7SEG–COM –ANODE型号数码管,分十位控制和个位控制,达到显示60秒倒计时的目的。
通过复位电路,在仿真过程中点击开关实现60复位3.1 AT89C51外形及引脚排列如图3.1所示图3.1:89C51的核心电路框图主要特性·与MCS-51 兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路管脚说明(1)电源及时钟引脚(4个)Vcc: 电源接入引脚Vss:接地引脚XTAL1:晶振震荡器接入的一个引脚(采用外部振荡器时,此引脚接地);XTAL2:晶体振荡器的另一个引脚(采用外部振荡器时,此引脚作为外部振荡器信号的输入端)。
(2)控制线引脚(4个)RST/Vpd:复位信号输入引脚/备用电源输入引脚;ALE:地址锁存允许信号输出引脚/编程脉冲输入引脚:EA:内外存储器选择引脚/片外EPROM编程电压输入引脚;PSEN:外部程序存储器选通信号输出引脚。
智能抢答器的设计

项目名称:智能抢答器一、选题背景随着我国经济和文化事业的飞速发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示。
智能抢答器主要应用于各种知识竞赛、文艺活动等场合。
二、题目要求1.主要教学内容用单片机系统设计智力竞赛抢答器逻辑控制电路,具体要求:(1)抢答组数为3组,输入抢答信号的按键需完成无抖动功能;(2)能迅速、准确地判处抢答者,同时能排除其它组的干扰信号,闭锁其它各路输入使其它组再按开关时失去作用,并能对抢中者有显示和鸣叫指示;(3)每组有1位十进制计分显示电路,能进行加/减计分;(4)当抢答开始后,指示灯应闪亮;当有某组抢答时,指示灯灭,最先抢答一组的灯亮,并发出音响;也可以驱动组别数字显示(用数码管显示);(5)回答问题的时间应可调整,分别为15s、30;主持人应有复位按钮和开始抢答按钮。
2.教学要求选择适当元器件设计单片机外围电路,单片机系统完成抢答、判别选组、计数、显示、定时及音响提示、复位控制功能;仿真实现各电路功能;搭建、调试电路实现设计要求的功能;掌握单片机系统及外围电路的一般设计方法,具备初步的独立设计能力;掌握对单片机系统进行仿真调试的方法和技能;掌握实现电路的实验方法和电路的调试方法。
三、设计方案在设计中采用的是AT89C51作为控制的核心,从而使得各个模块能够相互合作,共同完成,该系统包括共5个模块,通过9个按键控制,主持人5个按键,分别是开始抢答、抢答结束、加减分、复位,三个答题选手各一个按键。
当主持人按下开始抢答后,抢答选手即可按下按键,发出声光提示并且数码管显示该位选手的序号,当主持人没有按下开始抢答时,选手按下抢答时,则出现违规抢答,发出声光提示并且数码管显示该位选手的序号,主持人按下“开始答题”按钮后,数码管开始倒计时,从15到0一秒减一下,也就是抢答倒计时,在数码管显示0之前,4个开关无论哪一个先按下,LED灯就会亮,同时蜂鸣器不在进行鸣叫,从而实现了抢答的功能与显示。
51单片机写的倒计时和顺计时的程序

#include<reg52.h>#define ulong unsigned long#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit feng=P3^5;ulong a1,a2,a3,a4,a5,b2=60,b3=600,b4=3600,shi,ge,bai,qian;uint i,j,k;void delay(xms);void disply();void disply1();void clearn(); // 0 1 2 3 4 5 6 7 8 9uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //10个数,但是电脑是从0读到10,如果说是1,则电脑里就显示1,如果是2,则电脑就读出是2.uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x0f}; //10个数,但是电脑是从0点读到10点void main(){TMOD=0x11;//开两个定时器TH1=(65536-45872)/256;TL1=(65536-45872)%256;TH0=(65536-45872)/256;TL0=(65536-45872)%256;ET1=1;ET0=1;TR1=0;TR0=0;EA=1;while(1)while(1){P1=0XEF;delay(2000);P1=0XFF;delay(2000);P1=0XDF;delay(2000);P1=0XFF;P1=0XBF;delay(2000);P1=0XFF;delay(2000);P1=0X7F;delay(2000);P1=0XFF;delay(2000);if(key3==0){ for(;;)disply();}if(key4==0){ qian=b4/600;for(;;)disply1();}}}void delay(xms){for(i=xms;i>0;i--)for(j=1;j>0;j--);clearn();}void disply() //顺着计时{P2=0xf7;P0=table[shi] ;delay(1);P2=0xfb;P0=table[ge] ;delay(1);P2=0xfd;P0=table1[bai] ;delay(1);P2=0xfe;P0=table[qian] ;delay(1);if(key1==0){TR1=0;feng=0;P1=0X0F;}if(key2==0){TR1=1;feng=1;P1=0XFF;}}void disply1() //倒着计时{P2=0xf7;P0=table[shi] ;delay(1);P2=0xfb;P0=table[ge] ;delay(1);P2=0xfd;P0=table1[bai] ;delay(1);P2=0xfe;P0=table[qian] ;delay(1);if(key1==0){TR0=0;feng=0;P1=0X0F;}if(key2==0){TR0=1;feng=1;P1=0XFF;}}void t0_time() interrupt 1{TH0=(65536-45872)/256;TL0=(65536-45872)%256;a1++;if(a1==20){{a1=0;}b4--;b3--;b2--;qian=b4/600;bai=b3/60;ge=b2/10;shi=b2%10;if(b2==0)b2=60;if(b3==60)b3=600;if(b4==600)b4=3600;}}void t1_time() interrupt 3 {TH1=(65536-45872)/256;TL1=(65536-45872)%256;a1++;if(a1==20){{a1=0;}a2++;ge=a2/10;shi=a2%10;a3++;bai=a3/60 ;a4++;qian=a4/600;if(a2==60)a2=0;if(a3==600)a3=0;if(a4==3600)a4=0;}}void clearn(){P2=0XFF;P0=0XFF;//目的是消抖}。
AT89C51单片机课程设计 抢答器设计

一.需求分析1.设计目的现如今电视节目日益丰富其中的竞赛环节也越来越多,其中智力抢答器是不可或缺的器材。
在本学期学习了单片机这门课之后,我们小组成员觉得可以试着自己来实现抢答器的功能,令它能准确、公正、直观地判断出第一抢答者,并通过抢答器的数码管显示和蜂鸣器报警指出抢答组别。
我们最终做出一种数字式抢答器的设计方案,通过Proteus设计完成,利用WAVE6000软件编辑程序,仿真验证,适用于多种竞赛场合。
2.设计要求设计一个用于智力竞赛的抢答器,其功能的实现是由单片机控制的,满足(1)能容许2-6组进行抢答。
(2)能显示抢答组号。
(3)各组记分,并能记分显示。
(4)比赛结束时,能发出报警声。
二.设计方案在设计中采用的单片机是AT89C51,它主要负责控制各个部分协调工作。
P1.0和P1.7由裁判控制,分别是抢答开始和停止键。
P1.1—P1.6是6组抢答的输入口,按下对应按钮即为抢答。
P0口为数码管的段选口,位选口用的是P2口的低4位,外部中断0。
外部中断1,P3.3用于控制有组答题完成后结束计时。
P3.4—P3.5分别实现了分数的加一和减一。
P3.6为蜂鸣器的控制口。
外部中断和内部中断并存,单片机有硬件复位端,只要输入持续4个机器周期的高电平即可实现复位。
外部还接有蜂鸣器用来发出报警音。
采用7SEG-MPX4-CC-BLUE显示,它是共阴极的由高电平点亮。
系统仿真用到了WAVE6000和Proteus软件,通过仿真可以显示所设计系统的功能,对于程序的调试等有很大的帮助。
三.硬件设计1.电路原理图图3.1 电路原理图2.总体设计电路图整个系统分为:外部振荡电路、复位电路、加减分电路及蜂鸣器报警电路、抢答电路及裁判控制开始停止电路、数码管显示电路几个部分本设计的核心是单片机AT89C51。
AT89C51 提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
单片机设计倒计时器

单片机设计倒计时器在我们的日常生活中,倒计时器有着广泛的应用,比如体育比赛、烹饪、考试等等。
通过单片机来设计倒计时器,不仅能够实现精准的计时功能,还能根据不同的需求进行灵活的定制和扩展。
接下来,让我们一起深入了解一下如何用单片机设计一个实用的倒计时器。
首先,我们需要明确倒计时器的基本功能和要求。
一般来说,倒计时器应该具备以下几个主要功能:1、设定倒计时的时间,时间范围可以根据实际需求进行调整,比如从几分钟到几小时。
2、能够清晰地显示剩余的时间。
3、具有启动、暂停和复位等操作按钮。
4、在倒计时结束时,能够发出提示信号,比如声音或者灯光提示。
为了实现这些功能,我们选择合适的单片机作为核心控制单元。
常见的单片机如 51 系列、STM32 系列等都可以满足需求。
以 51 单片机为例,它具有价格低廉、编程简单、资源丰富等优点。
在硬件设计方面,我们需要以下几个主要的组件:1、单片机最小系统:包括单片机芯片、晶振电路、复位电路等,为单片机的正常运行提供必要的条件。
2、显示模块:可以选择数码管或者液晶显示屏(LCD)来显示倒计时的时间。
数码管显示简单直观,适用于对显示效果要求不高的场合;LCD 显示屏则能够提供更丰富的信息显示,比如同时显示时间、日期等。
3、按键模块:用于输入操作指令,如设置时间、启动、暂停、复位等。
4、报警模块:可以使用蜂鸣器或者发光二极管(LED)在倒计时结束时发出提示信号。
下面我们来详细介绍一下各个模块的设计和实现。
单片机最小系统的设计是整个硬件系统的基础。
晶振电路为单片机提供时钟信号,保证其正常运行的时序。
复位电路则在系统出现异常时,能够将单片机恢复到初始状态。
对于显示模块,如果选择数码管,需要通过驱动芯片(如74HC595)来控制数码管的显示。
如果选择 LCD 显示屏,则需要根据显示屏的接口类型(如并行接口或串行接口)来进行相应的连接和编程。
按键模块可以采用独立按键或者矩阵按键的方式。
单片机实现倒数计时器

单⽚机实现倒数计时器信息⼯程学院课程设计报告设计题⽬: 倒数计时器名称: 电⼦信息专业基础课程设计班级: 1101姓名: 曹乐刘君学号: 2011013493 2011013513设计时间: 2013-12-23 ⾄2014-1-5指导教师: 徐明鹃评语:评阅成绩: 评阅教师:⼀、课程设计的性质和⽬的通过课程设计,进⾏硬件设计和程序设计的⽅法和技能训练,巩固在课堂上学到的有关软件程序设计和硬件电路设计的基本知识和基本⽅法,通过具体课题的训练,进⼀步熟悉汇编语⾔的结构和使⽤⽅法,掌握软硬结合的控制程序设计,达到能独⽴阅读、查阅资料、编制和调试完善特定功能的⽬的。
⼆、课程设计的要求1、遵循硬件设计模块化。
2、要求程序设计结构化。
3、程序简明易懂,多运⽤输⼊输出提⽰,有出错信息及必要的注释。
4、要求程序结构合理,语句使⽤得当。
5、适当追求编程技巧和程序运⾏效率。
三、主要仪器设备及软件PC机、Keil软件、Proteus绘图软件及仿真、89C51、SEG等。
1.Keil软件介绍(1)建⽴您的第⼀个C 项⽬(2)选择所要的单⽚机,这⾥我们选择常⽤的Ateml 公司的A T89C51。
(3)该选项的默认值是该芯⽚的最⾼时钟脉冲频率,但在实际电路中不⼀定使⽤最⾼频率,通常是改为12MHZ(4)标在屏幕左边的Source Group1 ⽂件夹图标上右击Add File to Group ‘Source Group 1’,然后将项⽬编译成为HEX⽂件,实现仿真、下载验证的功能2.Proteus绘图软件及仿真Proteus软件是英国Labcenter electronics公司出版的EDA⼯具软件(该软件中国总代理为⼴州风标电⼦技术有限公司)。
它不仅具有其它EDA⼯具软件的仿真功能,还能仿真单⽚机及外围器件。
它是⽬前最好的仿真单⽚机及外围器件的⼯具。
虽然⽬前国内推⼴刚起步,但已受到单⽚机爱好者、从事单⽚机教学的教师、致⼒于单⽚机开发应⽤的科技⼯作者的青睐。
用单片机做的倒计时15s

用单片机设计15s倒计时器跳线设置:默认跳线位置,注意蜂鸣器选择跳线J5要选23端程序效果:利用单片机的定时/计数器设计一个15到0倒计时器,按S4后启动,要求精确显示到百分之一秒。
发挥部分:1、定时结束后有提示音报警,并可重新定时2、定时过程中按独立键盘s5可暂停,按S4继续运行环境:51hei单片机学习板*/ORG 0000HLJMP START //主程序必须避开地址000BHORG 000BH //定时器0的中段服务程序,起始地址为000BHLJMP IT00ORG 0030HSTART: MOV TH0,#0EBH //装入初始值,定时时间为10msMOV TL0,#64HMOV TMOD,#01H //工作方式1MOV 33H,#01 //显示初值为15sMOV 32H,#05MOV 31H,#00MOV 30H,#00SETB ET0 //打开定时0SETB EA //开总中断LOOP1: JB P3.6,LOOP //判断高低位,即按键KEY0是否按下LCALL DISPLAY //为低,即按键按下,延时消抖LCALL DISPLAYJB P3.6,LOOP //按键真的按下,并不是外界的干扰SETB TR0 //启动定时器HERE: LCALL DISPLAY //调用显示JB P3.7,LOOP3 //判断高低,即KEY1按键是否按下CLR TR0 //按下,关闭定时器,这里并没有消抖LJMP LOOP1 //等待KEY0的按下LOOP3: SJMP HERE //KEY1没有按下,就需显示LOOP: LCALL DISPLAY //KEY1没有按下,就需显示LJMP LOOP1//减10ms子程序SUB1: DEC 30H //百分位减1MOV A,30HCJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否再减1MOV 30H,#09 //是,装入初值9DEC 31H //十分位减1MOV A,31HCJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否再减1MOV 31H,#09MOV A,32HCJNE A,#0FFH,LOOP2MOV 32H,#09DEC 33HMOV A,33HCJNE A,#0FFH,LOOP2clr P2.2 //从15s减到0s后,驱动蜂鸣器 LCALL DELAY //延时LCALL DELAYSETB P2.2 //关闭蜂鸣器MOV 33H,#01 //装入初值15sMOV 32H,#05MOV 31H,#00MOV 30H,#00LOOP2: NOP //空指令RET //返回//显示子程序DISPLAY: MOV DPTR,#TAB //赋表首地址MOV A,#0FBHSETB P2.7MOV P0,A //亮最左边的数码管CLR P2.7XCH A,R0 //暂存A的值MOV A,33HMOVC A,@A+DPTR //根据表值查找所需的值 SETB P2.6MOV P0,A //显示值CLR P2.6LCALL DELAY //延时XCH A,R0 //恢复原值RL A //循环左移,为下次做准备SETB P2.7MOV P0,ACLR P2.7XCH A,R0MOV A,32HMOVC A,@A+DPTRSETB P2.6MOV P0,ACLR P2.6LCALL DELAYXCH A,R0RL AMOV P0,Aclr P2.7XCH A,R0MOV A,31HMOVC A,@A+DPTRSETB P2.6MOV P0,Aclr P2.6LCALL DELAYXCH A,R0RL ASETB P2.7MOV P0,Aclr P2.7XCH A,R0MOV A,30HMOVC A,@A+DPTRSETB P2.6MOV P0,Aclr P2.6LCALL DELAYRETTAB: DB 3FH,06H,5BH,4FH,66H ;数码管显示的数值DB 6DH,7DH,07H,7FH,6FHIT00: MOV TH0,#0EBH //装入初值,时间为10msMOV TL0,#64HLCALL SUB1 //减10msRETI //返回DELAY: MOV R7,#04 //延时子程序,时间大约为:2us*4*250DEL2: MOV R6,#250DEL1: DJNZ R6,DEL1DJNZ R7,DEL2RETEND //结束单片机AT89C51 00——99带倒计时计数器[日期:2008-01-29 ] [来源:东哥开发网() 作者:佚名] [字体:大中小] (投递新闻)1.设计任务(1.上电时显示“00”,第一次按下SP1后就开始计数。
如何用AT89C2051单片机自制一个倒计时器

如何用AT89C2051单片机自制一个倒计时器
倒计时器在生活非常有用,用单片机自制,不但电路简单,而且功能可根据需要自行设计。
由74系列、40系列小规模数字芯片设计的倒计时器非常多,但有显示不直观(无LED数码管);调整参数不灵活;计时精度低(采用RC振荡)等缺点。
一、功能介绍
1.独立的三路倒计时。
均可独立设置启动、关闭。
2.范围:0~20小时,可任意设定。
关机后数据不丢失。
计时精度高:《0.1S
3.。
独立的三路输出:
a:第1路蜂鸣器输出:15S
b:第2路PNP晶体管输出:5S
c:第3路PNP晶体管输出:直致关机
二、工作原理
电路见上图整机由89c2051、三位LED数码管、K1-K4、R、T等元器件组成。
89C2051内部T1定时器完成100mS定时中断功能。
为了减少硬件,由89C2051的P1口直接输出LED的段码,BCD转换由软件完成。
位选码由P3.0,P3.1,P3.7输出。
键盘扫描与LED 位选码的脚共用。
由于89C2051的灌入电流:20mA。
故直接驱动:蜂鸣器、PNP晶体管。
LED数码管采用共阴高亮型,LED1数码管要旋转180度。
因为要显示:“19:99”,而只有三位数码管,因此用第三位的数码管的小数点表示“1”。
三、软件编制
(软件流程见图三)
在T1中断程序中做一个软时钟,在定时处理程序不断查寻时间,并根据每路的启动状态,。
单片机倒计时

模拟电视播放中插播广告倒计时方莹目录摘要 (1)1绪论 (1)1.1功能需求 (1)1.2数据需求 (2)2硬件设计 (2)2.1电路设计 (2)2.2LCD液晶屏坐标图及外形尺寸图 (3)2.3功能模块设计 (4)3 系统工作原理 (6)3.1型液晶显示屏(奥可拉中文集成模块)工作原理 (6)3.2串行接口与串行传输介绍 (7)3.3字形显示模块 (8)4 线路连接 (9)5 软件设计 (9)5.1主程序 (9)5.2LCD显示模块设计 (10)6 调试分析 (10)7结论 (11)8结束语 (11)参考文献 (11)附录一 (12)附录二 (34)摘要液晶屏在现代人们日常生活中的使用已经非常广泛,例如飞机场里使用液晶屏来显示各个航班的情况,火车站和汽车站里用其来显示车次,商业街里使用液晶屏来显示各种各样的广告标语等。
本次课程设计要求使用液晶屏在第一页电视画面显示节目图片信息,随后插播10秒广告倒计时,使用到了OCMJ4X8C_3型LCD液晶屏,在这一次的课程设计中是将LCD液晶屏和单片机相结合使用,因此,还涉及到了51单片机的编程方式及实现方法。
本报告中包含了系统工作原理:OCMJ4X8C_3型液晶显示屏(奥可拉中文集成模块)工作原理、串行接口与串行传输资料、汉字图形显示步骤;硬件设计:电路设计、LCD液晶屏外形尺寸图及坐标图、功能模块设计;线路连接;软件设计:主程序、LCD显示模块设计等内容,并给出了硬软件的调试。
关键词:扫描;51单片机;字码库;1绪论LCD电子显示屏是近年来得到广泛应用的重要信息设备。
这种显示屏具有耗电省、成本低、清晰度高、寿命长、显示内容的信息量大,外形美观大方,操作使用方便灵活,用户可随时任意自行编辑修改显示内容,显示方式图文并茂等优点,因此被广泛应用于商场、学校、银行、邮局。
由于显示屏具有色彩鲜艳、亮度高、寿命长、工作稳定可靠等优点, 在许多行业都得到了广泛的应用, 如在车站、码头、商场、银行等公共场所将显示屏用于信息发布。
单片机课程设计秒倒计时

单片机课程设计秒倒计时概述在单片机课程设计中,秒倒计时是一个常见的实践项目。
本文将介绍如何使用单片机设计一个简单的秒倒计时电路,并使用Markdown文本格式进行说明。
硬件设备•单片机(例如STC89C52)•七段数码管•按钮•电阻、电容等基础元器件功能设计本文设计的秒倒计时电路具有以下功能: 1. 系统上电后,自动开始倒计时; 2. 使用按钮控制启动/暂停倒计时; 3. 使用按钮控制归零操作; 4. 显示倒计时的秒数。
硬件连接七段数码管将7个IO口分别连接到七段数码管的对应引脚,使用共阳极数码管时,将数码管的共阳极引脚连接到VCC,使用共阴极数码管时,将数码管的共阴极引脚连接到GND。
按钮使用一个按钮作为启动/暂停倒计时的按键,使用另一个按钮作为归零操作的按键。
将按钮引脚连接到单片机的GPIO口,并通过上拉电阻将按钮引脚连接到VCC。
软件设计引脚定义首先,需要定义单片机的输入输出引脚。
根据硬件连接,假设七段数码管的引脚分别连接到P0口,启动/暂停按钮连接到P1.0口,归零按钮连接到P1.1口。
可以使用以下代码进行引脚定义:// 引脚定义sbit LED = P0; // 七段数码管连接到P0口sbit KEY1 = P1^0; // 启动/暂停按钮连接到P1.0口sbit KEY2 = P1^1; // 归零按钮连接到P1.1口然后,需要设计倒计时的逻辑。
在每个时钟周期,需要判断是否需要启动/暂停倒计时,以及是否需要进行归零操作。
具体的倒计时逻辑可以使用以下代码实现:// 秒倒计时逻辑void countdown() {static unsigned int seconds = 60; // 倒计时的秒数,默认为60秒static bit running = 0; // 表示倒计时是否运行中,默认为停止状态if (running) {if (seconds > 0) {seconds--;} else {running = 0;}}if (KEY1 == 0) { // 按下启动/暂停按钮running = !running;delay(10); // 延时去抖动}if (KEY2 == 0) { // 按下归零按钮seconds = 60;running = 0;delay(10); // 延时去抖动}}最后,需要设计显示倒计时的逻辑。
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单片机的倒计时程序

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。
单片机简易秒表正计时时间可设置倒计时时间可查询

单片机简易秒表正计时时间可设置倒计时时间可查询1.1设计任务用AT89C52设计一个4位的LED数码作为多功能“秒表”。
1.2设计目的1.学习数码管显示的结构与工作流程,实现数码管分组显示数字组合。
2.学习有关单片机的内容,进一步熟悉AT89C52芯片的有关功能。
3.复习C语言的有关知识。
4.培养自学能力与探索解决问题的能力。
1.3设计要求显示时间为00分00秒-59分59秒,每1秒自动加1,另外设计一个“开始/暂停”键、一个“记录/查询”键、一个“清零”键、一个“模式切换”键、一个“时间设置”键、一个“复位”键。
秒表要求正计时时,可记录同时查询10组数据,倒计时时,时间用户可设置,同时时间到时蜂鸣器报警。
1.4设计创新在基本设计基础上添加了正向查询10条记录后蜂鸣器同时报警。
1.5设计意义简易秒表具有读取方便,显示直观,功能多样,电路简洁,成本低廉等诸多优点,符合电子仪器仪表的进展趋势,具有广阔的市场前景。
本次设计将基于单片机的工作原理,设计简易秒表的基本电路,深入的熟悉其工作原理,掌握其基本的工作特点。
同时简易秒表在生活中应用广泛,从实际出发,不断创新。
第二章方案设计与选择2.1技术可行性20世纪以来,微电子,IC集成电路行业进展迅速,其中单片机行业进展最引人注目。
单片机利用大规模集成电路技术把中央处理器与数据存储器(RAM),程序存储器(ROM)及其他I/O通信口集成在一块芯片上,构成最小的计算机系统。
如今的单片机进展集成了更多的特殊功能单元,比如A/D,D/A转换器,通信操纵,DMA,PWM操纵输出单元等。
因此,只要外加一些扩展电路及必要的通道接口就能够构成各类计算机应用系统。
单片机除了具备体积小,价格低,速度快,用途广,可靠性高等特点,在硬件结构与指令设置上还有下列特殊之处:1.存储器ROM与RAM是严格分工的。
前者存放程序,常数与数据表格,后者存放临时数据与变量。
2.使用面向操纵的指令系统,构成的应用系统有较大的可靠性。
倒计时60秒程序(单片机C51)

#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0xc0,0xf9,0xa4, 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit gew=P2^1;sbit shiw=P2^0;sbit k2=P1^0;uchar num,num1=60,num2,shi,ge;void Init(){TMOD=0X01; TH0=(65536-50000)%256; TL0=(65536-50000)%256;EA=1;ET0=1; TR0=1;}void delay(uint xms) //延时子函数{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void scankey() //键盘检测子函数{if(k2==0) //检测键是否被按下{delay(5); //延时消除抖动if(k2==0) //重新读取k2的值 {num2++; //num2为按次数标志位 while(!k2); //等待按键释放if(num2==1) //按键一次计时停止 TR0=0;if(num2==2) //按键两次计时开始 {TR0=1;}}}}void main() //主函数{Init(); //初始化子函数调用 while(1){scankey(); //不断键盘扫描gew=0; //打开数码管个位位选 P0=table[ge]; //数码管个位赋值delay(1); //延时送入数据的反应时间gew=1; //关闭数码管个位位选delay(1);shiw=0; //打开数码管十位位选P0=table[shi]; //送入数据delay(1);shiw=1; //关闭数码管十位位选delay(1);}}void Timer0() interrupt 1{TH0=(65536-50000)/256; //定时器重装初值TL0=(65536-50000)%256;num++;if(num==20) //定时器每进行一个周期num加1,运行20个周期即为1s {num=0; //到1秒,num清0重新开始num1--; //倒计时1秒if(num1==0)num1=60;shi=num1%10; //两位数分离赋给数码管十位显示 ge=num1%10; //两位数分离赋给数码管个位显示 }}(注:文档可能无法思考全面,请浏览后下载,供参考。
单片机倒计时系统

单片机倒计时系统单片机倒计时系统可以采用8051单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计。
具体功能包括:1.六位LED显示,从59分59秒99开始倒计时。
2.倒计时精度为0.01秒,能正确地进行倒计时。
3.复位后倒计时重新回到初始状态。
单片机倒计时系统的制作方法包括以下步骤:1.确定系统的基本要求:例如数码管上显示计时的时间,可以通过按键实现1小时内初始时间的设定(以秒为分度),并且完成计时,可随时暂停并且重新设置计时时间等。
2.选择合适的单片机型号:根据需要实现的倒计时功能以及控制要求,选择适合的8051单片机型号,例如AT89C51等。
3.设计电路:根据所选的单片机型号和功能要求,设计外围电路,包括按键电路、复位电路、晶振电路、LED显示电路等。
4.编写程序:使用C语言等编程语言编写程序,实现倒计时的功能。
程序应该包括主程序、中断服务程序等。
在编写程序时需要考虑按键的输入、时间的计算、LED的显示等细节问题。
5.调试程序:通过调试程序可以确保程序的正确性和可靠性。
在调试时需要使用调试工具,例如示波器、逻辑分析仪等,对程序的各个部分进行测试和验证。
6.制作电路板:将设计好的电路制作成电路板,将各个元器件按照设计好的位置和连接方式焊接在电路板上。
7.测试系统:完成电路板的制作后,需要进行系统测试,验证是否实现了预期的倒计时功能。
测试时需要使用测试工具,例如电源、按键、LED显示器等,对系统的各个部分进行测试和验证。
总之,单片机倒计时系统是一个比较复杂的系统,需要设计电路、编写程序、制作电路板和测试系统等多个步骤。
在制作过程中需要注意细节问题,确保系统的正确性和可靠性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用单片机设计15s倒计时器跳线设置:默认跳线位置,注意蜂鸣器选择跳线J5要选23端程序效果:利用单片机的定时/计数器设计一个15到0倒计时器,按S4后启动,要求精确显示到百分之一秒。
发挥部分:1、定时结束后有提示音报警,并可重新定时2、定时过程中按独立键盘s5可暂停,按S4继续运行环境:51hei单片机学习板*/ORG 0000HLJMP START //主程序必须避开地址000BHORG 000BH //定时器0的中段服务程序,起始地址为000BHLJMP IT00ORG 0030HSTART: MOV TH0,#0EBH //装入初始值,定时时间为10msMOV TL0,#64HMOV TMOD,#01H //工作方式1MOV 33H,#01 //显示初值为15sMOV 32H,#05MOV 31H,#00MOV 30H,#00SETB ET0 //打开定时0SETB EA //开总中断LOOP1: JB P3.6,LOOP //判断高低位,即按键KEY0是否按下LCALL DISPLAY //为低,即按键按下,延时消抖LCALL DISPLAYJB P3.6,LOOP //按键真的按下,并不是外界的干扰SETB TR0 //启动定时器HERE: LCALL DISPLAY //调用显示JB P3.7,LOOP3 //判断高低,即KEY1按键是否按下CLR TR0 //按下,关闭定时器,这里并没有消抖LJMP LOOP1 //等待KEY0的按下LOOP3: SJMP HERE //KEY1没有按下,就需显示LOOP: LCALL DISPLAY //KEY1没有按下,就需显示LJMP LOOP1//减10ms子程序SUB1: DEC 30H //百分位减1MOV A,30HCJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否再减1MOV 30H,#09 //是,装入初值9DEC 31H //十分位减1MOV A,31HCJNE A,#0FFH,LOOP2 //判断百分位减到0之后是否再减1MOV 31H,#09MOV A,32HCJNE A,#0FFH,LOOP2MOV 32H,#09DEC 33HMOV A,33HCJNE A,#0FFH,LOOP2clr P2.2 //从15s减到0s后,驱动蜂鸣器 LCALL DELAY //延时LCALL DELAYSETB P2.2 //关闭蜂鸣器MOV 33H,#01 //装入初值15sMOV 32H,#05MOV 31H,#00MOV 30H,#00LOOP2: NOP //空指令RET //返回//显示子程序DISPLAY: MOV DPTR,#TAB //赋表首地址MOV A,#0FBHSETB P2.7MOV P0,A //亮最左边的数码管CLR P2.7XCH A,R0 //暂存A的值MOV A,33HMOVC A,@A+DPTR //根据表值查找所需的值 SETB P2.6MOV P0,A //显示值CLR P2.6LCALL DELAY //延时XCH A,R0 //恢复原值RL A //循环左移,为下次做准备SETB P2.7MOV P0,ACLR P2.7XCH A,R0MOV A,32HMOVC A,@A+DPTRSETB P2.6MOV P0,ACLR P2.6LCALL DELAYXCH A,R0RL AMOV P0,Aclr P2.7XCH A,R0MOV A,31HMOVC A,@A+DPTRSETB P2.6MOV P0,Aclr P2.6LCALL DELAYXCH A,R0RL ASETB P2.7MOV P0,Aclr P2.7XCH A,R0MOV A,30HMOVC A,@A+DPTRSETB P2.6MOV P0,Aclr P2.6LCALL DELAYRETTAB: DB 3FH,06H,5BH,4FH,66H ;数码管显示的数值DB 6DH,7DH,07H,7FH,6FHIT00: MOV TH0,#0EBH //装入初值,时间为10msMOV TL0,#64HLCALL SUB1 //减10msRETI //返回DELAY: MOV R7,#04 //延时子程序,时间大约为:2us*4*250DEL2: MOV R6,#250DEL1: DJNZ R6,DEL1DJNZ R7,DEL2RETEND //结束单片机AT89C51 00——99带倒计时计数器[日期:2008-01-29 ] [来源:东哥开发网() 作者:佚名] [字体:大中小] (投递新闻)1.设计任务(1.上电时显示“00”,第一次按下SP1后就开始计数。
(2.第二次按SP1后,计数停止。
(3.第三次按SP1后,计数清零。
(4. 第四次按下倒计时。
2. 电路的原理图3.系统板上硬件连线(1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。
(3.把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上;4.汇编源程序D1A EQU 30H 个位寄存地址设置;D1B EQU 31H 十位寄存地址设置;SEC EQU 32HKY1 EQU 33HSP1 BIT P3.5 位选口设置;ORG 0000HLJMP STARTORG 0B00H 中断方式选折;LJMP INT_T0START: MOV KY1,#00HMOV SEC,#00HMOV A,SECMOV B,#10DIV AB 个位和十位的区分;MOV DPTR,#TABLE 开始查个位的段码;MOVC A,@A+DPTRMOV P0,AMOV A,BMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,AMOV TMOD,#02HSETB ET0SETB EA 开启中断;WT: JB SP1,WTLCALL DELY10MSJB SP1,WTINC KY1 第一次按下键盘,开始计数;MOV A,KY1CJNE A,#01H,KN1SETB TR0MOV TH0,#06HMOV TL0,#06HMOV D1A,#00HMOV D1B,#00HLJMP DKNKN1: CJNE A,#02H,KN2CLR TR0LJMP DKNKN2: CJNE A,#03H,DKNMOV SEC,#00HMOV A,SECMOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,BMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,AMOV KY1,#00HKN3: INC KY1DEC KY1 第4次按下键盘,开始计数;MOV A,KY1CJNE A,#04H,KN3SETB TR0MOV TH0,#06HMOV TL0,#06HMOV D1A,#00HMOV D1B,#00HLJMP DKNDKN: JNB SP1,$LJMP WTDELY10MS: 延时子程序;MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETINT_T0: 中断子程序;INC D1AMOV A,D1ACJNE A,#100,NEXTMOV D1A,#00HINC D1BMOV A,D1BCJNE A,#5,NEXTMOV TCNTB,#00HINC SECMOV A,SECCJNE A,#100,DONEMOV SEC,#00HDONE: MOV A,SECMOV B,#10DIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AMOV A,BMOV DPTR,#TABLEMOVC A,@A+DPTRMOV P2,ANEXT: RETITABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND单片机倒计时定时器这里我们先要安装好51试验板上的两个轻触按钮开关,我们采用的是独立式按钮开关,也就是说将开关直接连接到电源的地和单片机的对应引脚之间,这里K1接到单片机的P3.6引脚,K2接到P3.7。
正常情况下单片机的P3.6、P3.7都被程序初始化时置“1” 当有按键按下时对应的单片机引脚被按钮开关下拉为“0”,这种方法比较直观,而且比较简单,在按键数量不多的场合下使用很广泛。
因为机械开关开关时有抖动,所以需要在程序中加一个软件去抖动程序,它的工作原理如下:当单片机检测到有按键被按下后立即执行一个10毫秒的延时程序,然后再在检测该引脚是否仍然为闭合状态?如果仍然为闭合说明确认该键被按下立即执行相应的处理程序,否则可能是干扰,丢弃这次检测结果。
接下来我们再安装一个四位的拨码开关,就是图中红色的开关,它相当于四个装在一起的拨动开关,当开关拨到"ON"一侧时,对应的那路就会接通,反之断开.它在单片机中一般用于设置初始参数,而且不经常改变的场合。
这里因为单片机引脚资源不够,所以我们只使用了拨码开关的第2、3、4位,第1位闲置。
三个开关可以逻辑组合出8种状态,所以我们能够方便灵活地预置多达7种的倒计时时间。
最后我们来安装两个继电器和相关电路,有了继电器我们的实验板不再仅仅是做做实验而已,可以用于控制一些负载,比如说:充电器,洗衣机,电风扇等,使我们的实验板的实用功能大大增强,这也是电子制作实验室网站的单片机实验板和其他公司的产品不同的地方。
这里继电器由相应的S8050三极管来驱动,开机时,单片机初始化后的P2.3/P2.4为高电平,+5伏电源通过电阻使三极管导通,所以开机后继电器始终处于吸合状态,如果我们在程序中给单片机一条:CLR P2.3或者CLR P2.4的指令的话,相应三极管的基极就会被拉低到零伏左右,使相应的三极管截至,继电器就会断电释放,每个继电器都有一个常开转常闭的接点,便于在其他电路中使用,继电器线圈两端反相并联的二极管是起到吸收反向电动势的功能,保护相应的驱动三极管,这种继电器驱动方式硬件结构比较简单。
;电子制作实验室/;可设定时间的倒计时定时器,可选择5/15/20/30/35/45/50分钟倒计时;倒计时时间由四位拨码开关的2/3/4位来控制,;第2位表示5分钟,第3位表示15分钟,第4位表示30分钟,;通过不同的组合可以产生5/15/20/30/35/45/50分钟倒计时;P1.0口的外接的发光二极管为状态LED,定时未开始时LED常亮,定时过程中LED闪烁;K1为开始按钮,K2为停止按钮a_bit equ 20h ;数码管个位数存放内存位置b_bit equ 21h ;数码管十位数存放内存位置temp equ 22h ;计数器数值存放内存位置;开机初始化MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入MOV P0,#0FFH;使显示时间数码管熄灭CLR P1.0;点亮LED指示灯;等待键盘输入START:JB P3.6,$;循环判断开始按钮K1是否按下?ACALL DELAY10;延时10毫秒触点消抖JB P3.6,START;如果是干扰就返回JNB P3.6,$;等待按键松开;读拨码开关的状态,获得倒计时时间SET:MOV A,#0;首先对A清零JB P2.0,A1;判断拨码开关的第2位是否接通,接通就对A加5ADD A,#5A1:JB P2.1,A2;判断拨码开关的第3位是否接通,接通就对A加15ADD A,#15A2:JB P2.2,A3;判断拨码开关的第4位是否接通,接通就对A加30ADD A,#30A3:MOV TEMP,A;这时TEMP中的值就是倒计时时间;数码管显示定时时间的程序display:CLR P2.4;使继电器1释放,开始定时(开机时继电器处于吸合状态) CLR P2.3;使继电器2释放,开始定时(开机时继电器处于吸合状态)MOV R2,#120AB:MOV R3,#250TIME1:mov a,temp ;将temp中的十六进制数转换成10进制mov b,#10 ;10进制/10=10进制div abmov b_bit,a ;十位在amov a_bit,b ;个位在bmov dptr,#numtab ;指定查表启始地址mov r0,#4dpl1: mov r1,#250 ;dplop: mov a,a_bit ;取个位数MOVC A,@A+DPTR ;查个位数的7段代码mov p0,a ;送出个位的7段代码clr p2.7 ;开个位显示ACALL DELY1;显示1毫秒setb p2.7;关闭个位显示,防止鬼影mov a,b_bit ;取十位数MOVC A,@A+DPTR ;查十位数的7段代码mov p0,a ;送出十位的7段代码clr p2.6 ;开十位显示ACALL DELY1;显示1毫秒setb p2.6;关闭十位显示,防止鬼影;插入一段判断定时过程中是否有按键输入的程序段C1:JB P3.6,B1ACALL DELAY10;延时10毫秒消抖JB P3.6,C1JNB P3.6,$;等待按键松开AJMP SETB1:JB P3.7,M33ACALL DELAY10;延时10毫秒消抖JB P3.7,B1JNB P3.7,$;等待按键松开AJMP OVERM33:djnz r3,TIME1 ;2毫秒循环执行250次,时间约0.5秒CPL P1.0;使LED每1秒闪烁一次djnz r2,AB ;循环执行120次,时间为1分钟DEC TEMP;满一分钟对定时时间减1MOV A,TEMPJNZ DISPLAY;判断TEMP的数值是否为0?不为0循环;结束定时OVER:CLR P1.0;LED指示灯常亮SETB P2.4;继电器1吸合,定时结束,退回到开机时的状态SETB P2.3;继电器2吸合,定时结束,退回到开机时的状态AJMP START;退到开机初始化状态;1毫秒延时子程序DELY1:MOV R4,#2D1:MOV R5,#248DJNZ R5,$DJNZ R4,D1RET;10毫秒延时子程序DELAY10:MOV R4,#20D2:MOV R5,#248DJNZ R5,$DJNZ R4,D2RET;实验板上的7段数码管0~9数字的共阴显示代码numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH end。