求大神编一道51单片机实现多种倒计时功能
按下p1.1口,可以令LED全亮10秒。等等.
这些不同的LED灯花色在实现功能时会有数码管去显示程序剩余时间。
这程序该怎么编? 展开
标识符就是一个变量,常使用字符型变量作为标识符,占用空间小
每一种状态都用标识符表示出来,例如状态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继续同时点亮
}
/***************************************************************************/