51单片机倒计时源程序
单片机设计24秒倒计时
![单片机设计24秒倒计时](https://img.taocdn.com/s3/m/6e582e2af4335a8102d276a20029bd64783e6292.png)
单片机设计24秒倒计时1.引言倒计时器是一种常见的电子设备,被广泛应用于体育比赛、倒计时游戏、厨房计时等场景中。
本文介绍了使用单片机设计一个24秒倒计时器的方法和过程。
2.设计原理本设计使用的单片机为51系列单片机,采用倒计时的方式进行计时,显示剩余时间,并发出声音提示时间结束。
具体实现主要包括以下几个步骤:-初始化单片机的定时器和功能引脚;-设置定时器的工作模式和计时时间;-编写程序控制定时器开始计时;-显示剩余时间并发出声音提示;-定时器到达设定时间后,停止计时并显示时间结束。
3.硬件设计硬件设计主要包括51系列单片机、LED数码管和蜂鸣器。
-单片机需要通过引脚连接LED数码管,用于显示剩余时间;-单片机通过一个GPIO引脚连接蜂鸣器,用于发出时间结束的提示声音。
4.软件设计软件设计主要包括初始化、计时、显示和提示等功能。
-初始化函数主要用于设置单片机的定时器和GPIO引脚;-计时函数用于设定倒计时的时间,并开始计时;-显示函数用于将剩余时间显示在LED数码管上;-提示函数用于判断是否到达设定时间,如果是则停止计时并发出提示声音。
5.实验结果经过调试和测试,实验结果表明该24秒倒计时器可以正常工作。
在开始计时后,数码管上会显示剩余时间,同时蜂鸣器会发出定时器结束的提示音。
6.结论本文介绍了使用单片机设计24秒倒计时器的方法和过程。
该设计通过初始化、计时、显示和提示等功能,实现了24秒倒计时的功能要求。
同时,该设计可以在实际中进行必要的优化和改进,以满足具体的应用需求。
7.致谢感谢本文参考的相关文献和资料,以及为本文提供实验设备和技术支持的相关人员。
[1]《51单片机原理与应用》[2]《C语言微机原理与接口技术》总结:本文主要介绍了使用单片机设计24秒倒计时器的方法和过程。
通过初始化、计时、显示和提示等功能,实现了24秒倒计时的功能要求。
同时,该设计可以在实际中进行必要的优化和改进,以满足具体的应用需求。
c51可调10小时倒计时源程序
![c51可调10小时倒计时源程序](https://img.taocdn.com/s3/m/aa23532c5901020207409ceb.png)
#include <reg52.h>#include <stdio.h>unsigned char sec100,sec,sec5,min,hour,flag1,command,temp,opto; unsigned char i,digit,buffer[4],onHour1,onMin1,offHour1,offMin1;char cputick,key,delay,count1;char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f}; void pause(int);void scanLED();void manualOnOff();void savetimeOnOff1();void setmin();void sethour();void showOnce();void savetimeOff1();void time();void timeToBuffer();void blink();void offmsd();void keyexe();void keydelay();void comparetime();void timer0int (void)interrupt 1 using 1{TH0 |= 0xdc;cputick++;time();}void main() //主运行程序//{EA = 1; //打开总中断开关//ET0 = 1; //打开定时器中断//TMOD |= 0x01; //定时器方式选择//TR0 = 1;opto = 0xff; //定时开关置1//cputick = 0;hour = 10;min = 0;sec = 0; //初始开机时分秒//key = -1;flag1 = 0;onHour1 = 10;onMin1 = 00; //定时开关开启时间//offHour1 = 00;offMin1 = 00; //定时开关关闭时间//count1 = 0;buffer[0] = 0x40;buffer[2] = 0x40;buffer[3] = 0x40;while(1){while ( cputick < 1)scanLED();cputick = 0;timeToBuffer();blink();offmsd();keyexe();keydelay();comparetime();}}void time () //计时子程序//{sec100++;if (sec100 >= 100) //这里if构成顺序选择结构/// {sec100 = 0;flag1 |= 0x05;temp = 50;sec++;if (sec >= 60){sec = 0; //秒产生程序//flag1 |= 0x02;min--;if (min == -1){min = 59; //分倒计时//hour--;if (hour == -1){hour = 23; //时倒计时//}}}}}void scanLED(){int i;digit = 0x08;for( i = 0; i < 4; i++){P3 = ~digit & opto;P1 = ~buffer[i];pause(5);P1 = 0xff;if ((P3 & 0x10) == 0)key = i;digit>>=1;}}void timeToBuffer(){buffer[0] = convert[min%10]; //分个位//buffer[1] = convert[min/10]; //分十位//buffer[2] = convert[hour%10]; //时个位//buffer[3] = convert[hour/10]; //时十位//}void blink(){if((flag1 & 0x04) != 0){temp--;if (temp != 0){buffer[1] |= 0x80;buffer[2] |= 0x80;}else( flag1 &= ~0x04);} //if和else构成多分支选择结构,当表达式为假时,就跳过分支语句,执行后续程序/////}void keyexe() //键盘处理子程序//{if (key != -1) //if如果的意思//{if ((flag1 & 0x80) == 0){flag1 |= 0x80;delay = 50; //延时//switch(key) //开关和跳转语句//{case (0): //开关语句关键字//manualOnOff();break; //通常用在循环语句和开关语句中,用来跳出循环程序块//savetimeOnOff1();break;case (2):setmin();break;case (3):sethour();}}}}void sethour() //小时调整子程序//{hour--;if ( hour== 23)hour = 0;}void setmin() //分钟调整子程序//{min--;sec = 0;if( min == 59 )min = 0;}void savetimeOnOff1(){count1++;if (count1 == 1){onHour1 = hour;onMin1 = min;buffer[0] = 0x00;buffer[1] = 0x68;buffer[2] = 0x78;buffer[3] = 0x71;showOnce();}else{count1 = 0;savetimeOff1();}}void savetimeOff1()offHour1 = hour;offMin1 = min;buffer[0] = 0x63;buffer[1] = 0x63;buffer[2] = 0x78;buffer[3] = 0x71;showOnce();}void manualOnOff() {opto= ~opto | 0x7f;if ((opto & 0x80) == 0){buffer[0] = 0;buffer[1] = 0;buffer[2] = 0x68;buffer[3] = 0x78;showOnce();}else{buffer[0] = 0;buffer[1] = 0x63;buffer[2] = 0x63;buffer[3] = 0x78;showOnce();}}void showOnce() {int i;for(i=0;i<2000;i++)scanLED();}void keydelay(){if ((flag1 & 0x80) !=0){delay--;if(delay == 0)flag1 &= ~0x80;}}void comparetime()if((flag1 & 0x01) != 0 ){flag1 &= ~0x01;if(hour == onHour1 && min == onMin1)opto = 0x7f;if(hour == offHour1 && min == offMin1)opto = 0xff;}}void offmsd(){if (buffer[3] == 0x3f)buffer[3] = 0x00;}void pause(j)int j;{int i;for (i = 0; i < j; i++);}。
51单片机倒计时程序
![51单片机倒计时程序](https://img.taocdn.com/s3/m/3c8845da51e2524de518964bcf84b9d528ea2cc7.png)
51单片机倒计时程序#include reg52.h#define uint unsigned int#define uchar unsigned charsbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;sbit key4=P2^3;sbit key5=P2^4;sbit key6=P2^5;uinta[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0到9 uint b[]={0xef,0xdF,0xbF,0x7F,0xfe,0xfb,0xfd,0xf7,};int s=5,m=00,h=00;uint timecount;uint sg,ss,mg,ms,hg,hs,flag1=0,flag2=0;int keycount=0;void init()//初始化函数配置中止存放器得值。
{timecount=0; TMOD=0x01;TR0=1;ET0=1;EA=1;TH0=0x3c;TL0=0xb0;}void delay(x)//延时函数。
{uint i,j;for(i=x;i0;i--)for(j=120;j0;j--);}void display()//把时候秒送到数码管显示。
{uint i;sg=s%10;ss=s/10;mg=m%10;ms=m/10;hg=h%10;hs=h/10;for(i=0;i8;i++){switch(i){case 0:P1=b[7];P0=a[sg];break;case 1:P1=b[6];P0=a[ss];break;case 2:P1=b[5];P0=0x40;break;case 3:P1=b[4];P0=a[mg];break;case 4:P1=b[3];P0=a[ms];break;case 5:P1=b[2];P0=0x40;break;case 6:P1=b[1];P0=a[hg];break;case 7:P1=b[0];P0=a[hs];break;}delay(1);}}void key_scan()//检测键能否按下按没有同键完成没有同得处置。
基于51单片机的9999秒倒计时器毕业设计
![基于51单片机的9999秒倒计时器毕业设计](https://img.taocdn.com/s3/m/be005ebec77da26925c5b0cd.png)
编号:审定成绩:重庆邮电大学毕业设计(论文)设计题目:基于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系列单片机都是理想的选择。
51单片机倒计时报警器程序
![51单片机倒计时报警器程序](https://img.taocdn.com/s3/m/3c6a1cd684254b35eefd346e.png)
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
51单片机三路抢答器倒计时模块代码
![51单片机三路抢答器倒计时模块代码](https://img.taocdn.com/s3/m/c4e7b35ddcccda38376baf1ffc4ffe473268fd53.png)
51单片机三路抢答器倒计时模块代码51单片机三路抢答器倒计时模块是一种常见的电子产品,为了方便大家的理解和使用,下面我来介绍一下关于该模块的相关内容。
首先,我们来介绍一下这个模块的作用。
三路抢答器倒计时模块可以用于各种抢答比赛或者问答环节中,通过设置倒计时功能,为参与者提供了更好的参与和互动体验。
同时,这个模块还可以灵活地设置不同的时间长度和不同数量的抢答按钮,以满足不同场景的需求。
接下来,我们来了解一下这个模块的工作原理。
首先,该模块通过与51单片机进行连接,实现了与其他外设设备的交互。
在倒计时开始之前,用户可以通过按键设置倒计时的时间长度,同时也可以设置参与者数量和相应的抢答按钮。
当倒计时开始后,模块会通过数码管或者液晶屏等显示设备进行倒计时显示,并且通过LED灯或者蜂鸣器等输出设备提醒倒计时结束。
另外,这个模块还具有一些其他的特点和功能。
比如,它可以设置倒计时的暂停和继续功能,参与者可以在倒计时过程中暂停抢答按钮的功能。
同时,该模块还具有防恶意按键的功能,避免了重复按键或者误操作。
此外,模块还支持外部按键触发,可以通过外部输入信号来控制倒计时的开始和结束。
在实际应用中,这个模块可以广泛应用于各种抢答比赛和问答环节中。
比如,在学校的知识竞赛中,老师可以使用这个模块来管理学生的抢答顺序,并通过倒计时的形式来增加紧张感和竞争性;在企业的培训、宣讲会等活动中,主持人可以使用这个模块来控制抢答环节的顺序和时间,提高活动效果。
总的来说,51单片机三路抢答器倒计时模块在抢答比赛和问答环节中具有重要的作用,通过其灵活的设置和功能,为参与者和主持人提供了更好的抢答体验。
同时,该模块还具有一些特殊的功能和应用场景,可以满足不同需求和场合的使用。
希望以上的介绍能够对大家了解和使用这个模块有所帮助。
51单片机输入数字并数码管倒计时典型C语言代码
![51单片机输入数字并数码管倒计时典型C语言代码](https://img.taocdn.com/s3/m/98907a7c48d7c1c709a1450a.png)
circle1=circle/10;
chaishu(circle1);
while(1)
{
display(e,d,c,b,a);
}
}
else
{
TH0=(65536-50000)/256;//50毫秒
TL0=(65536-50000)%256;//装入定时器0初值
circle=0;
c=d1/100;////////c=5*
c1=d1%100;///////c1=35
b=c1/10;/////////b=3*
b1=c1%10;////////b1=5
a=b1;////////////a=5*
}
void display(uint wan,uint qian,uint bai,uint shi,uint ge)
void T0_time() interrupt 1///////定时/计数器0的溢出中断对应的中断序号为"1"
{
TH0=(65536-50000)/256;//50毫秒
TL0=(65536-50000)%256;//装入定时器0初值
time++;
}
/////////////////////////////////////////////定时中断函数内容///////////////////////////////////////
{
case 0xeb:
{
num=7;
count=count+1;
}//如果=0xed那么num设定为4
break;//跳出switch
case 0xdb:
{
num=8;
51单片机定时器数码管60秒倒计时
![51单片机定时器数码管60秒倒计时](https://img.taocdn.com/s3/m/fa20f500657d27284b73f242336c1eb91a373382.png)
51单片机定时器数码管60秒倒计时#include#include"delay.h"#define DataPort P0sbit Latch1=P2^2;//段锁存sbit Latch2=P2^3;//位锁存unsigned char code DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0 x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值0~Funsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char i=0,num=60,j=0;void Init_Timer0(void){TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响TH0=(65536-50000)/256; //重新赋值TL0=(65536-50000)%256;EA=1; //总中断打开ET0=1; //定时器中断打开TR0=1; //定时器开关打开}main()unsigned char Temp[2];Init_Timer0();while(1){Temp[0]=DuanMa[num/10]; Temp[1]=DuanMa[num%10];DataPort=WeiMa[i];Latch2=1;Latch2=0;DataPort=T emp[i];Latch1=1;Latch1=0;DelayMs(1);i++;if(i>=2){i=0;}if(num==0xff){num=60;}}void Timer0_isr(void) interrupt 1 using 1 {TH0=(65536-50000)/256; //重新赋值TL0=(65536-50000)%256;j++;if(j==20){j=0;num--;}}#includetypedef unsigned char uchar ; typedef unsigned int uint ;uchar temp,bai,shi,ge,num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};//定义数码管参数void delay(uint);//声明全局函数void display();void main(){temp=60;num=0;while(1){TMOD=0x01; //定时器0EA=1; //开总中断ET0=1;TR0 = 1; //开定时器中断display();delay(5);display();delay(5);}}void T0_time()interrupt 1 {TH0=(65536-45872)/256;TL0=(65536-45872)%256; num++;if(num==40){num=0;temp--;if(temp==0){temp=60;}}}void display() {ge = temp / 10; shi = temp % 10; P0 = table[ge];P2 = table[shi];}void delay(uint z) {uint x,y;for(x=z;x>0;x--) for(y=110;y>0;y--); }。
单片机lcd显示屏,100-0倒计时代码
![单片机lcd显示屏,100-0倒计时代码](https://img.taocdn.com/s3/m/c2d730c19f3143323968011ca300a6c30c22f18c.png)
单片机lcd显示屏,100-0倒计时代码这是一个基于8051单片机的LCD显示屏,能够实现从100到0的倒计时代码。
```#include<reg52.h>#include<intrins.h>unsigned char code table[] = {"0123456789"};void display(unsigned int num) //数码管显示函数{unsigned char x,y,z;x=num/100;y=num%100/10;z=num%10;P2=0x0f;P0=table[x];P2=0x1f;P2=0x0f;P0=table[y];P2=0x2f;P2=0x0f;P0=table[z];P2=0x3f;}void delay_ms(unsigned int ms) //延时函数{unsigned int i,n;for(i=0;i<ms;i++)for(n=0;n<125;n++);}void init() //LCD初始化函数{delay_ms(15);P0=0x38;P2=0x03;P2=0x02;P0=0x0c;P2=0x03;P2=0x02;P0=0x06;P2=0x03;P2=0x02;P0=0x01;P2=0x03;P2=0x02;}void main() //主函数{unsigned int i;init();while(1){for(i=100;i>=0;i--) //倒计时 {display(i);delay_ms(1000);}}}```在这个代码中,我们使用了一个数码管显示函数`display()`来实现LCD的数字显示。
我们还使用了一个`delay_ms()`函数来实现延时功能。
主函数中使用了一个for循环来实现倒计时,每隔1秒更新一次LCD屏幕上显示的数字。
51单片机倒计时源程序
![51单片机倒计时源程序](https://img.taocdn.com/s3/m/bf65001842323968011ca300a6c30c225901f0ec.png)
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单片机能实现任意时间倒计时。
![基于51单片机能实现任意时间倒计时。](https://img.taocdn.com/s3/m/fc6a86d6d5bbfd0a795673c4.png)
倒计时器只要修改此文档15页源程序的(如下图)的到计时初值即可实现想要的倒计时。
比如30分钟倒计时修改分钟十位和各位即可。
一、设计要求:由单片机接收小键盘阵列设定倒计时时间,倒计时的范围最大为60分钟,由LED 显示模块显示剩余时间,显示格式为 XX(分):XX(秒).X,精确到0.1s的整数倍。
倒计时到,由蜂鸣器发出报警。
绘制系统硬件接线图,并进行系统仿真和实验。
画出程序流程图并编写程序实现系统功能。
二、设计的作用目的:此次设计是我们更进一步了解基本电路的设计流程,提高自己的设计理念,丰富自己的理论知识,巩固所学知识,使自己的动手动脑能力有更进一步提高,为自己今后的学习和工作打好基础,为自己的专业技能打好基础。
通过解决实际问题,巩固和加深“单片机原理与应用”课程中所学的理论知识和实验能力,基本掌握单片机应用电路的一般设计方法,提高电子电路的设计和实验能力,加深对单片机软硬知识的理解,获得初步的应用经验,为以后从事生产和科研工作打下一定的基础。
本次设计注重对单片机工作原理以及键盘控制及显示原理的理解,以便今后自己在单片机领域的学习和开发打下基础,提高自己的动手能力和设计能力,培养创新能力,丰富自己的理论知识,做到理论和实践相结合。
本次设计的重要意义还在于对单片机的内部结构和工作状态做更进一步的了解,同时还对单片机的接口技术,中断技术,存储方式和控制方式作更深层次的了解。
三、具体设计:1.问题分析:在电子技术飞速发展的今天,电子产品的人性化和智能化已经非常成熟,其发展前景仍然不可估量。
如今的人们需求的是一种能给自己带来方便的电子产品,当然最好是人性化和智能化的,如何能做到智能化呢?单片机的引入就是一个很好的例子。
单片机又称单片微型计算机,也称为微控制器,是微型计算机的一个重要分支,单片机是20世纪70年代中期发展起来的一种大规模集成电路芯片,是集CPU,RAM,ROM,I/O接口和中断系统于同一硅片上的器件。
51单片机99秒倒计时C语言源程序
![51单片机99秒倒计时C语言源程序](https://img.taocdn.com/s3/m/f7b6ac00bed5b9f3f90f1ca9.png)
51单片机99秒倒计时C语言源程序51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。
目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。
定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。
10*100毫秒=1S计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。
定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*//*数码管,12M晶振*/#include <reg52.h>#define uchar unsigned charsbit p11=P1^1; //连的是继电器。
code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar shiwei;uchar gewei;void delay(unsigned int cnt){while(--cnt);}void main(){TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms*/TH0=0xd8;TL0=0xf0;IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=1; //开定时器0while(1){P0=shiwei; //99的十位P2=0; //99的个位,delay(300); //动态扫描数码管延时P0=gewei;P2=1;delay(300);}}void tim(void) interrupt 1 using 1 //定时器0中断{static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时TH0=0xd8; //定时10毫秒TL0=0xf0;count++;if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒{count=0;second--;if(second==0){p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
51单片机100天倒计时牌完整程序
![51单片机100天倒计时牌完整程序](https://img.taocdn.com/s3/m/7fd5cafaa48da0116c175f0e7cd184254a351b4b.png)
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单片机数码管倒计时汇编语言代码
![51单片机数码管倒计时汇编语言代码](https://img.taocdn.com/s3/m/734e89e627fff705cc1755270722192e453658f2.png)
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的值跳转到相应的倒计时模式。
51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)
![51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)](https://img.taocdn.com/s3/m/2e5e8074a0116c175e0e4878.png)
51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)51单片机定时器数码管30秒倒计时(带三个按键控制开始,暂停,复位)程序:#include ""unsigned char code led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char code addr[2]={0xef,0xdf};unsigned char xx[2];unsigned char time=30;unsigned char flag=0;void delay(void);void sys(void){TMOD=0x01;TH0=(65536 - 50000) / 256;TL0=(65536 - 50000) % 256;ET0=1;TR0=1;EA=1;EX0=1;IT0=1;}void ftimer0(void) interrupt 1{static unsigned char cnt;TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt>20){if(flag==1){time--;cnt=0;if(time==0){ET0=0;TR0=0;}}51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)}}void int0(void) interrupt 0{if(P2_0==0){flag=1;ET0=1;}else if(P2_1==0){ET0=0;}else if(P2_2==0){time=30;ET0=0;TR0=1;}}void main(){unsigned char a;sys();for(;;){for(a=0;a<2;a++){xx[0]=time/10;xx[1]=time%10;P0=led[xx[a]];P1=addr[a];delay();P1=0xff;}}}void delay(void){long t=100;while (t--);}51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位) 电路图及结果:。
51单片机产生59S的倒计时程序
![51单片机产生59S的倒计时程序](https://img.taocdn.com/s3/m/c923f074f242336c1eb95e16.png)
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
#define uchar unsigned char
uchar aa,num;
sbit dula=P2^6; //声明段控制
sbit wela=P2^7; //声明为控制
uchar code table[]={ //数码管编码表;
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z); //延时函数
void display(uchar shu); //显示函数
void init(); //初始化函数;
void main()
{
init();
while(1)
{
if(aa==20) //延时1s。。每进入一次中断50ms
ge=shu%10; //分离个位
shi=shu%100/10; //分离十位
bai=shu/100; //分离百位
wela=1;
P0=0xfe;
wela=0;
P0=0xff; //消影
dula=1;
P0=table[bai]; //显示百位
dula=0;
P0=0xff;
delay(2);
wela=1;
/////////////////////////////////////////////////////*
使用定时器0,在数码管显示59s的倒计时。。
/////////////////////////////////////////////////////
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
feng_ming_qi(1);
}
else feng=0; //否则让蜂鸣器停发
} //函数结束,电路图略
void feng_ming_qi(uchar num1) //间断发声
{
uchar didi_num;
for(didi_num=num1;didi_num>0;didi_num--)
}
void init()//TR1初始化
{
TMOD=0x22; // TMOD=0x20; 开定时 1
TH1=0x06; //T1 250微妙
TL1=0x06; //装初值
EA=1; //打开总中断
TR1=1; ////初始化先打开定时器1
ET1=1;
{
TR0=0;
feng_ming_qi(3); //每次进行倒计时的时候都让 num 清零,这样就不会乱了。
biaozhi=11;
}
P0=0xff;
sky1=0; //断控
P0=TAB[dao_pao1]; //倒跑秒的个位
sky1=1;
dao_gge2=dao_miao/10;
dao_ffen1=dao_fen%10;
dao_ffen2=dao_fen/10;
dao_sshi1=dao_shi%10;
dao_sshi2=dao_shi/10; //倒时 倒分 倒秒 的分解
if((dao_miao==0)&&(dao_fen==0)&&(dao_shi==0)) //蜂鸣器20秒的报时
const uchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极显示代码
//****************** 函数声明 *****************************
void feng_ming_qi(uchar); //报时函数
{
count=P2; //把P2口二进制给变量count
switch(count)
{
case 0xfe: //时针加加
{
if(s0==0) //若S0键按下
{
sky2=0;
P0=0x7f;
sky2=1;
delay(5);
sky1=0 ;
P0=TAB[dao_pao2];
sky1=1;
sky2=0;
P0=0xbf;
sky2=1;
delay(5); //倒跑秒的十位
//****
#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; //函数变量声明
P0=TAB[pao2]; //秒的十位
sky1=1;
sky2=0;
P0=0xbf;
sky2=1;
delay(5);
//////////////////////////////////
sky1=0;
P0=TAB[gge1]+0x80;
sky1=1;
sky2=0;
IP=0x20;
}
////////////////////////////////////////////////////////////////////////////////////////////
void dao_fenjie() //分解倒秒,倒分,倒时。控制8个数码管显示倒时间
sky2=0;
P0=0xfb; //P0=0xfd;
sky2=1;
delay(5); //倒分和时中间一个间隔控制 分控制结束
//***************************************************
sky1=0; //倒时 的时位
delay(50); //延时1秒
shi++; //让时针不断加1
pao_miao=0;
miao=0; //让秒停止
}
if(shi==24) shi=0; //当时针为24时,清0
return biaozhi;
}
break; //跳出键盘函数
P0=TAB[ffen1]+0x80;
sky1=1;
sky2=0;
P0=0xf7;
sky2=1;
delay(5); //分控制结束
sky1=0;
P0=TAB[ffen2];
sky1=1;
sky2=0;
P0=0xfb;
sky2=1;
delay(5); //分和时中间一个间隔控制
P0=0xdf;
sky2=1;
delay(5);
sky1=0;
P0=TAB[gge2];
sky1=1;
sky2=0;
P0=0xef;
sky2=1;
delay(5);
/////////////////////////////////
sky1=0;
sky2=1;
delay(5); //倒时控制结束
}
////////////////////////////////分解秒,分,时。///////////////////////////////////////////
void fenjie() //控制8个数码管显示时间
{
feng=1;
delay(70);
}
}
uchar key_scan()
{
P2=0xff; //对P2口进行赋初值
if((P2&0x0f)!=0x0f) delay(100); //键扫描,幷延时消抖
if((P2&0xff)!=0xff) //在判断键值
#include<reg52.h> //51头文件
//#include<472405468.h>//51头文件
#define uchar unsigned char //宏定义
*********************************************
sky1=0; //倒秒 的个位
P0=TAB[dao_gge1]+0x80;
sky1=1;
sky2=0;
P0=0xdf;
sky2=1;
////////////////////////////////////
sky1=0;
P0=TAB[sshi1]+0x80;
sky1=1;
sky2=0;
P0=0xfd;
sky2=1;
delay(5);
sky1=0;
P0=TAB[sshi2];
sky1=1;
sky2=0;
P0=0xfe;
sky2=1;
delay(5); //时控制结束
//////////////////////////////////
if((shi==5)&&(fen==30)&&(0<miao)&&(miao<20)) //蜂鸣器20秒的报时
//************************************************************
void delay(uchar z) //一毫秒延时函数
{
uchar x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
{
uchar dao_gge2,dao_gge1,dao_ffen2,dao_ffen1,dao_sshi2,dao_sshi1,dao_pao1,dao_pao2;//局部变量
dao_pao1=dao_paomiao%10;
dao_pao2=dao_paomiao/10;
dao_gge1=dao_miao%10;
void init(); //定时器的初始化(T1)
void fenjie(); //函数声明
void delay(uchar); //延时函数声明
void dao_fenjie(); //倒计时显示函数
uchar key_scan(); //按键调试函数
P0=TAB[dao_sshi1]+0x80;
sky1=1;
sky2=0;
P0=0xfd; //P0=0xfb;
sky2=1;
delay(5);
sky1=0;
P0=TAB[dao_sshi2];
sky1=1;
sky2=0;
P0=0xfe; //P0=0xf7;
feng=0;
///////////////////////////////////////////////
TH0=0x06; //T0 也是 250 微妙中断一次