#include
unsigned char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管 0-9
sbit led=P3^0;
sbit s1=P0^0;
sbit s2=P0^1;
sbit k0=P2^0;
sbit k1=P2^1;
int sec=0,i,a,b=20,key1;
/*—–延迟函数——-*/
void delay(int z)
{
while(z–>0);
}
/*—–显示函数——-*/
void display(int n)
{
if(n>0)
{
s2=1;s1=0; //显示十位
P1=tab[n/10]; //除10,取十位数值
delay(100); //延迟显示
s1=1;s2=0; //显示个位
P1=tab[n%10]; //求余,取个位数值
delay(100); //延迟
}
else
{ //当输入值小于0,显示0
s2=1;s1=0; //显示十位
P1=tab[0]; //除10,取十位数值
delay(100); //延迟
s1=1;s2=0; //显示个位
P1=tab[0]; //求余,取个位数值
delay(100); //延迟显示
}
}
/*—–外部中断0中断服务函数———-*/
void RESET() interrupt 0
{
sec=0; //恢复初始值
b=20; //恢复初始值
TR0=0; //关闭定时器
}
/*—–外部中断1中断服务函数———-*/
void START() interrupt 2
{
TR0=1; //打开定时器
}
/*—–定时器T0服务函数,计时功能———-*/
void timer0() interrupt 1
{
i–; //50ms时间到
TH0=(65536-50000)/256; //存放高8位,50ms
TL0=(65536-50000)%256; //存放低8位
if(i==0)
{
i=20; //1s计数
sec++; //软件计数1s
}
}
/*——键值扫描函数———-*/
void key()
{
k0=1;k1=1; //读按键
key1=P2; //将P2的值赋值给key1
key1=key1&0x03; //屏蔽高6位,保留k0,k1的值
while(key1!=0x03) //判断是否有按键按下
{
delay(600); //消抖动
key1=P2;
key1=key1&0X03;
while(key1!=0x03) //当有按键按下时
{
if(k0==0) b=b+1; //按下k0按键时,初始值加1
else b=b-1; //按下k1按键时,初始值减1
k0=1;k1=1; //判断按键是否抬起
key1=P2; //重新将P2的值赋值给key1
key1=key1&0x03;
while(key1!=0x03) //判断是否有按键按下
{
key1=P2;
key1=key1&0x03;
}
}
}
}
/*——主函数———-*/
void main()
{
TMOD=0X01; //设定定时器0工作,工作方式1
TH0=(65536-50000)/256; //存放高8位,50ms
TL0=(65536-50000)%256; //存放低8位
IT0=1;IT1=1; //外部中断选择下降沿触发
IE=0X87; //开启INT0,INT1,T0
PX0=1; //设定INT0为高优先级
led=1; //初始灯熄灭
TR0=0; //初始计数停止
i=2;
while(1)
{
a=b-sec; //将增计时变为减计时
if(TR0==0) //当定时器关闭时开启键值扫描
{key();}
display(a); //显示函数
if(a<=0)
{
led=0; //当减计时为0时, 警灯点亮
}
else
{
led=1; //当减计时不为0时, 警灯熄灭
}
}
}
相关资源:PPT倒计时软件FlyClock(PPT倒计时软件)v1.3_ppt倒计时代码-其它…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!