导航:首页 > 操作系统 > 基于51单片机的倒计时器

基于51单片机的倒计时器

发布时间:2025-03-02 06:34:12

⑴ 基于AT89C51单片机的LED数字倒计时器

#include<reg51.h>

#define uchar unsigned char
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsigned char sec=0,min=0,hour=24,scanled;
unsigned char key,mode,time;
unsigned char disdat[8];
unsigned char alarm[3]={23,59,58},dly;
sbit keyhu=P1^0;
sbit keyhd=P1^1;
sbit keymu=P1^2;
sbit keymd=P1^3;
sbit keysu=P1^4;
sbit keysd=P1^5;
sbit keyst=P1^6;
sbit fmq=P3^0;
bit flag=0;


void delay(unsigned int x)
{
unsigned int i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void dischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;

disdat[2]=min%10;
disdat[3]=min/10;

disdat[4]=hour%10;
disdat[5]=hour/10;
}
void t0isr() interrupt 1//秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
switch(mode)
{
case 0:
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
break;
case 1:
if(time==20)
{
time=0;
if(sec>0 && flag==0)sec--;
else if(min>0 && flag==0){sec=59;min--;}
else if(hour>0 && flag==0){sec=59;min=59;hour--;}

if((hour == alarm[0]) && (min == alarm[1]) && (sec == alarm[2])){fmq=1;flag=1;dly++;}
}
break;
}
if(dly>=2){fmq=0;flag=0;TR0=0;dly=0;}
dischg();
}
void t1isr() interrupt 3//显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case 0:
P2=0x20;
P0=~ledtab[disdat[5]];
break;
case 1:
P2=0x10;
P0=~ledtab[disdat[4]]&0x7f;
break;
case 2:
P2=0x08;
P0=~ledtab[disdat[3]];
break;
case 3:
P2=0x04;
P0=~ledtab[disdat[2]]&0x7f;
break;
case 4:
P2=0x02;
P0=~ledtab[disdat[1]];
break;
case 5:
P2=0x01;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
TR1=1;
TR0=0;
ET0=1;
ET1=1;
EA=1;
fmq=0;
scanled=0;
time=0;
mode=1;
dischg();
while(1)
{
if(keyhu==0)
{
while(keyhu==0);
TR0=0;
hour++;
hour%=24;
}
if(keyhd==0)
{
while(keyhd==0);
TR0=0;
if(hour>0)hour--;
if(hour==0)hour=23;

}
if(keymu==0)
{
while(keymu==0);
TR0=0;
min++;
min%=60;
}
if(keymd==0)
{
while(keymd==0);
TR0=0;
if(min>0)min--;
if(min==0)min=59;
}
if(keysu==0)
{
while(keysu==0);
TR0=0;
sec++;
sec%=60;
}
if(keysd==0)
{
while(keysd==0);
TR0=0;
if(sec>0)sec--;
if(sec==0)sec=59;
}
if(keyst==0)
{
while(keyst==0);
TR0=~TR0;
}
dischg();
}
}

⑵ 如何用单片机做一个简单的倒计时器

一般我们用定时器来做计时器,实现时间得加。每次中断发生,用一个变量自增来判断时间是否到1S,到了之后清零这个变量,另一个时间变量自增来作时间得增加。现在就是要把这个自增的时间变量改为自减,判断当小于0时,又赋初值,然后继续自减判断。

⑶ 51单片机秒表设计,高手请进

基于89C51单片机的电子秒表设计,需要借助外部晶振和复位电路,搭配两个数码管与两个按键。系统通过按键控制秒表的启动和停止,以及设定倒计时时间(例如10秒、20秒或60秒),启动倒计时功能。用户可以通过按键选择这两种功能之一。程序代码主要分为两部分,分别对应秒表计时和倒计时功能。秒表计时部分,当按下启动按钮时,程序进入计时循环,每10毫秒更新一次显示,直到再次按下停止按钮。倒计时功能则在设定时间内递减,同样通过按键切换。程序中还包含一个延时子函数,用于确保显示的稳定性和准确性。

具体实现细节如下:在主程序中,首先设置P3和P0口为高电平,清除F0和F1标志位。通过检测P3.6和P3.7引脚的状态,分别控制秒表计时和倒计时功能的启动。秒表计时部分,循环更新时间并显示在数码管上,倒计时部分则递减预设时间并显示。在每个循环中,通过延时子函数确保操作的准确性。

延时子函数用于处理程序中的时间延迟,确保数码管的显示效果。程序中还包含一个数表,用于将十进制数转换为BCD码,进而显示在数码管上。通过不断调整和优化,可以实现更稳定和准确的电子秒表设计。

整个设计的核心在于程序代码的编写和调试,确保按键操作的响应性,以及显示的准确性和稳定性。通过合理设置晶振频率和延时时间,可以实现精确的时间测量和显示功能。

在实际应用中,可以根据需求进一步优化程序,例如增加更多的功能或改进用户界面。此外,还可以通过外部扩展提高系统的稳定性和可靠性,例如使用更高质量的晶振和更好的复位电路。

总之,基于89C51单片机的电子秒表设计是一个功能强大且实用的项目,适用于多种应用场景,从简单的计时到复杂的倒计时功能,都能轻松实现。

⑷ 基于51单片机的999倒计时C语言程序。

/*************************************
要求是能进行9999秒倒计时
用C语言实现
*************************************/
#include<at89X51.h>

#define uchar unsigned char
#define uint unsigned int
uchar num_qian,num_,num_shi,num_ge;//定义千位,百位,十位,个位。
uint time;//要显示的时间0~9999
uint tcnt;//计时单元
//*****************//
//以下是端口定义
//*****************//
sbit key_qian=P1^0;//按键"千加1"
sbit key_ =P1^2;//按键"百加1"
sbit key_shi =P1^4;//按键"十加1"
sbit key_ge =P1^6;//按键"个加1"
sbit laba =P3^1;//喇叭

void delay(unsigned int z)//1毫秒延时子函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

//*****************//
//以下是七段数码管驱动程序
//*****************//
/**************************************************
** 功能描述: 中断接受字符串驱动程序
**占用引脚资源 P30
**占用系统资源 串口中断;中断向量4
***************************************************/
#define DUAN P0
#define WEI P2

unsigned char code dispcode[]=
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}; //共阴段码表
//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-
uchar code dispbitcode[]=
{0xef,0xdf,0xbf,0x7f}; //共阴位码表

uchar dispbuf[4],dispcount;//开辟四个显示缓冲区

void ledinit()/***初始化子函数,定时器0刷新显示内容***/
{
TMOD|=0x01; // 定时器0方式1
TH0=(65536-5000)/256; //定时器16位模式
TL0=(65536-5000)%256; //溢出时间:5ms
TR0=1; //开启定时器0
ET0=1; //使能定时器0
EA=1; //系统使能
}

void leddisp()//固定显示某些数字
{
dispbuf[0]=time/1000;
dispbuf[1]=time%1000/100;
dispbuf[2]=time%100/10;
dispbuf[3]=time%10;
}

void keytest()//按键检测程序
{
if(!key_qian)//如果千位按键
{
delay(5);//5毫秒延时去抖
if(!key_qian)//如果千位按键的确按下了
{
num_qian++;//千位数字加一
while(!key_qian);//等待按键松开
}
time+=num_qian*1000;//千位数字加1
}
if(!key_)//如果百位按键
{
delay(5);//5毫秒延时去抖
if(!key_)//如果百位按键的确按下了
{
num_++;//百位数字加一
while(!key_);//等待按键松开
}
time+=num_*100;//百位数字加1
}
if(!key_shi)//如果十位按键
{
delay(5);//5毫秒延时去抖
if(!key_shi)//如果十位按键的确按下了
{
num_shi++;//千位数字加一
while(!key_shi);//等待按键松开
}
time+=num_shi*10;//十位数字加1
}
if(!key_ge)//如果千位按键
{
delay(5);//5毫秒延时去抖
if(!key_ge)//如果个位按键的确按下了
{
num_qian++;//千位数字加一
while(!key_ge);//等待按键松开
}
time+=num_ge;//个位数字加1
}
}

void main()//主程序
{
ledinit();//数码管中断初始化,定时器0刷新显示内容
while(1)//大循环
{
if((!key_qian)||(!key_)||(!key_shi)||(!key_ge))//如果四个按键中的任何一个被按下
keytest();//执行按键检测程序
leddisp();//不断的刷新显示内容
}
}

//*************************************************
//以下是定时器0刷新数码管显示内容驱动程序
//*************************************************
/**************************************************
** 功能描述: 七段数码管驱动程序
**占用引脚资源: 数码管段选,数码管位选
**占用系统资源T0
***************************************************/

void t0(void) interrupt 1 //using 0
{
TH0=(65536-5000)/256; //5ms中断
TL0=(65536-5000)%256; //16位定时器模式
WEI=0xff;//关位选
DUAN=dispcode[dispbuf[dispcount]]; //段选
WEI=dispbitcode[dispcount]; //开位选
dispcount++;
if(dispcount==5)
dispcount=0;

tcnt++; //计数个数加一
if(tcnt==5*200)//满足1S了
{
tcnt=0;//计数个数归零
time--;//时间减一
if(time==0)//时间
while(1);
}
if(time<10)//时间小于10
laba=~laba;//声音报警
}

这是9999秒倒计时的

阅读全文

与基于51单片机的倒计时器相关的资料

热点内容
阿里云服务器web服务 浏览:804
edm图纸加密 浏览:563
豆腐app中献花有什么用 浏览:55
主图源码怎么买 浏览:667
python按键代码 浏览:496
美国吃喝玩乐用什么app 浏览:753
安卓机连接不上苹果热点怎么办 浏览:900
c系列空气压缩机租赁 浏览:217
seafile云盘服务器 浏览:781
去小公司的程序员 浏览:631
广西百色dns服务器地址 浏览:358
world程序编译步骤 浏览:21
气缸压缩容积 浏览:487
空调双压缩机原理 浏览:901
冰箱压缩机以小换大 浏览:600
用友T3U盘加密狗能解么 浏览:373
手机版我的世界玩服务器太卡怎么办 浏览:573
flashtopdf 浏览:971
phpfaq系统 浏览:635
编译原理统计终结符与非终结符 浏览:796