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

倒计时器51单片机

发布时间:2025-08-21 21:40:46

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

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

Ⅱ 51鍗旷墖链篴t89s52镐庝箞锅0-9绉掑掕℃椂锛屾眰澶т浆瑙g瓟

鐢ㄤ竴涓鍏遍槾鏁扮爜绠℃帴鍦≒0鍙o纴鐢盘0鍙h緭鍑烘电爜銆傚啀鐢ㄥ畾镞跺櫒瀹氭椂50ms锛岄噰鐢ㄤ腑鏂鏂瑰纺锛屽逛腑鏂璁℃暟20娆″氨鏄涓绉掋傜敤涓涓鍙橀噺璁$掞纴鍒濆间负9锛屾疮涓绉掑噺涓锛屽苟阃丳0鏄剧ず銆备豢鐪熷浘濡备笅銆

Ⅲ 求大神编一道51单片机实现多种倒计时功能

这个不算太难,只要利用标识符进行判断即可


标识符就是一个变量,常使用字符型变量作为标识符,占用空间小


每一种状态都用标识符表示出来,例如状态0,状态1,状态2 ..................状态254


字符型变量的值范围是 0 ~ 254 共255个值,够你用的了


给你一个类似的程序,我自己写的,你作为参考吧


程序的组成是:两个按键,一组四位数码管,两个LED发光二极管


程序的功能是:按下按键A,两个LED同时点亮,并延时10秒(时间随意修改)

按下按键B,两个LED同时熄灭,并延时10秒(时间随意修改)

无按键按下时,两个LED交替点亮,达到闪烁的效果


程序如下,并加了注释,若满意请采纳!


#include <reg51.h> //51单片机通用头文件

unsigned int i,t,h; char fe;

sbit a=P3^7; sbit b=P3^6; sbit led=P2^7; sbit lad=P2^6;//按键及LED端口定义

char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码

/***************************************************************************/

void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数

/***************************************************************************/

void XS(int xs) //数码管显示

{

char d1,d2,d3,d4;

d1=(xs/1)%10; d2=(xs/10)%10; d3=(xs/100)%10; d4=(xs/1000)%10;

P0=table[d1]; P1=0xf7; YS(10); P1=0xff;//个位显示

P0=table[d2]; P1=0xfb; YS(10); P1=0xff;//十位显示

P0=table[d3]; P1=0xfd; YS(10); P1=0xff;//百位显示

P0=table[d4]; P1=0xfe; YS(10); P1=0xff;//千位显示

}

/***************************************************************************/

void main()

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TMOD=0x01; TR0=1; ET0=1; EA=1;

led=0;lad=1;

while(1)

{

XS(h);//调用数码管显示函数

if(a==0){h=10;fe=0;}//按键 A, LED 亮10秒

if(b==0){h=10;fe=1;}//按键 B, LED 灭10秒

}

}

/***************************************************************************/

void t0()interrupt 1//定时器 0 中断

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i++; t++;

if(h>0){t=0;}//如果按键按下,屏蔽 t 计数,

if(t>=5){t=0;led=~led; lad=~lad;}//t计数,用于两个LED闪烁

if(i>=20)//还是原来的时间判断

{

i=0;

if(h>0&&fe==0){h--;led=0;lad=0;}//如果是状态 0 同时点亮两个LED

if(h>0&&fe==1){h--;led=1;lad=1;}//如果是状态 1 同时关闭两个LED

}

if(h==0&&led==0&&lad==0){led=1;lad=0;}//此句防止数码管倒计时后两个LED继续同时点亮

}

/***************************************************************************/

Ⅳ c51单片机定时器30秒倒计时程序,一个按键控制开始,另一个按键控制暂停和继续

#include<reg51.h>
unsignedcharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9
unsignedcharsec=30,scanled;
unsignedchardisdat[2];
sbitkeys=P1^0;
sbitkeyc=P1^1;
sbitfmq=P3^0;

voiddelay(unsignedintx)
{
unsignedinti,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
voiddischg()
{
disdat[0]=sec/10;
disdat[1]=sec%10;
}
voidt0isr()interrupt1 //秒计时
{
TH0=0x3c;
TL0=0xb0;
time++;
if(time==20)
{
time=0;
if(sec>0&&flag==0)sec--;
}
dischg();
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0xfe;
P0=ledtab[disdat[1]];
break;
case1:
P2=0xfd;
P0=ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=2;
}
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;
while(1)
{
if(keys==0)
{
while(keys==0);
TR0=1;
}
if(keyc==0)
{
while(keyc==0);
TR0=~TR0;
}
}
}

阅读全文

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

热点内容
在阿里云服务器如何打开服务器 浏览:307
创建进程的命令 浏览:30
如何加密吃鸡 浏览:721
青春pdf下载 浏览:682
期货交易技术pdf 浏览:642
手机解压加密文件的软件 浏览:891
程序员那么可爱姜妈 浏览:398
vivo手机编译时间为什么晚了 浏览:816
matlab命令行窗口 浏览:704
php网站开发实例pdf 浏览:81
倒计时器51单片机 浏览:916
三菱fx1n加密程序 浏览:645
python云计算器 浏览:913
解压缩密码是多少 浏览:88
phpnamespace报错 浏览:754
浙江国税发票服务器地址 浏览:770
cmd比较文件内容命令 浏览:508
压缩面膜含化学物么 浏览:656
linux如何打开python文件 浏览:62
手机为什么连接谷歌服务器 浏览:673