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

求大神编一道51单片机实现多种倒计时功能,第1张

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

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

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

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

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

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

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

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

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

程序如下,并加了注释,若!

#include <reg51h> //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继续同时点亮

}

//

从60秒到30秒再到90秒并循环倒计时显示。

----

有点不好理解。

从60秒到30秒,看来,是倒计时。

到了30之后,怎么办?是立即改为90吗?

到了90之后,再怎么办?是立即改为60吗?

#include "reg51h"

sbit start=P3^2; //外部中断0引脚 开始

sbit rst=P3^3; //外部中断1引脚 复位

sbit breakk=P3^4;

sbit led=P3^5;

sbit beep=P3^7;

sbit P30=P3^0;

sbit P31=P3^1;

unsigned char code duanma[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff

};

char time=24;//原来的30s改为24小时

char flag_t=0; // 1秒辅助计时

char now=0; // 0停止 1 计时 2报警 3复位

unsigned int temp=0;//添加此行// 定义一个16位临时变量

unsigned char g=0,s=3,i=0;

void delay(unsigned int n)

{

while(--n);

}

void t0_srv() interrupt 1 using 1

{

TH0=0X3C;

TL0=0XB0;

flag_t++;

if(flag_t>=20){ //2050ms=1s

flag_t=0;

temp++; //添加此行

if(temp>=3600)//1小时=3600s //添加此行

{

temp=0;//添加此行

time--;

if(time<=0){

beep=0;

led=0;

TR0=0;

now=2;

time=0;

}

}

}

}

void button_start() interrupt 0 using 1 //外部中断0

{

delay(1500);

if(start==0) {

now=1;

TR0=1;

}

else return;

while(start==0);

delay(1500);

}

void button_rst() interrupt 2 using 1

{

delay(1500);

if(rst==0) {

TR0=0;

time=24;//原为time=30;

i=0;

led=1;

beep=1;

now=0;

}

else return;

while(rst==0);

delay(1500);

}

void disp()

{

g=time%10;

s=time/10;

g=duanma[g];

s=duanma[s];

P1=g;

P31=0;

delay(250);

P31=1;

P1=s;

P30=0;

delay(250);

P30=1;

//

}

void key()

{

if(breakk==0)delay(1500);

else return;

if(breakk==0) {

if(now==1){

i++;

if(i%2)TR0=0;

if(!(i%2))TR0=1;

}

}

else return;

while(breakk==0);

delay(1500);

}

main()

{

TMOD=0X01;//定时器0工作在方式1,

EA=1;

IT0=1;

ET0=1;

TH0=0X3C;//在12M 晶振下,定时时间为50ms

TL0=0XB0;

EX0=1;

EX1=1;

//TR0=1;

while(1){

disp();

key();

}

}

#include <at89x52h>

#include <intrinsh>

#define uchar unsigned char

#define uint unsigned int

#define seg P0

#define sw P2

int tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

int dis[]={0,0};

uint X;

uchar Count=0;

uchar sec=60;

void display()

{

int a;

int m=0x01;

dis[0]=sec/10;

dis[1]=sec%10;

for(a=0;a<2;a++)

{

seg=0xff;

seg=tab[dis[a]];

sw=m;

m=_crol_(m,1);

}

}

void TINT0() interrupt 1

{

TL0=-50000%256;

TH0=-50000/256;

if(++Count==20)

{

if(sec>0)sec--;

Count=0;

}

}

void Main()

{

TMOD=0x01;

EA=1;

ET0=1;

TR0=1;

TL0=-50000%256;

TH0=-50000/256;

while(1)

{

if(sec==0)sec=60;

display();

}

}

以上就是关于求大神编一道51单片机实现多种倒计时功能全部的内容,包括:求大神编一道51单片机实现多种倒计时功能、求C51单片机汇编语言控制两位数码管倒计时程序,从60秒到30秒再到90秒并循环倒计时显示。、下面是51单片机30秒倒计时程序,怎么把它改成24小时倒计时程序,别的不变,十分感谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9303609.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存