您的位置 首页 动态

数码管可调倒计时器

调节精度:5分钟调节范围:0~650分钟数码管显示格式:000(分钟)-00(秒)按下P1^0口开始倒计时P1^1口停止P1^2加时间P1^3减时间

调理精度:5分钟 调理规模:0~650分钟 数码管显现格局:000(分钟)-00(秒)
按下P1^0口开端倒计时 P1^1口中止 P1^2加时刻 P1^3减时刻
#include
#define KeyPort P1
sbit Key_UP=P1^0;
sbit Key_DOWN=P1^1;
unsigned char KeyV,TempKeyV,num;
sbit P25=P2^0;//数码管第1位
sbit P26=P2^1;//数码管第2位
sbit P29=P2^2;
sbit gang=P2^3;
sbit P27=P2^4;//数码管第4位
sbit P28=P2^5;
sbit P12=P1^2;//时刻加
sbit P13=P1^3; //时刻减
sbit JDQ=P3^7;//继电器
unsigned int js;
unsigned int ds=6000,x,y;//倒计时初始时刻,加时,减时
unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
unsigned char KeyScan(void);//键盘扫描
void tiaojie(void);
void Delay(unsigned int ii) //1MS
{
unsigned int jj;
for(;ii>0;ii–)
for(jj=0;jj<125;jj++);
}
void main()
{
EA = 1; //答应CPU中止
ET0 = 1; //守时器0中止翻开
ET1=1; //守时器1中止翻开
TMOD = 0x11; //设守时器0 1为形式1,16位形式
TH0=0xB8;
TL0=0x00; //设守时值为(20ms)
TH1=0xdc; //设守时值为(10ms)
TL1=0x00;
TR0 = 1;
TR1=1;

KeyV = 0;
TempKeyV = 0;
jsflag=0;
while(1);
}
//守时器0中止外理中键扫描和显现
void Key_Time0(void) interrupt 1 using 2
{
TH0=0xB8;
TL0=0x00; //设守时值为20000us(20ms)
if (!Key_UP)
KeyV = 1;
if (!Key_DOWN)
KeyV = 2;

if(P12==0)
{
Delay(20);
if(P12==0)
ds=ds+500;//守时加5分钟 (调理精度)
while(!P12);
}
if(P13==0)
{
Delay(20);
if(P13==0)
ds=ds-500; //守时减5分钟
while(!P13);
}
if (KeyV!= 0) //有键按下
{
Delay(10); //延时防抖 按下10ms再测
if (!Key_UP)
TempKeyV = 1;
if (!Key_DOWN)
TempKeyV = 2;
if (KeyV == TempKeyV) //两次值持平为确认接下了键
{
if (KeyV == 1)
{
jsflag=0;
if(ds==0)
{
ds=100;
}
js=js+1;
JDQ=1; //继电器吸合

if(js==50)
{
js=0;
ds=ds-1;

}
}
if(KeyV==2)
{
jsflag=1;
}
}
}
if(jsflag==1)
{
JDQ=0;
}
if(ds==0)
{
JDQ=0;
jsflag=1;
KeyV=0;
}

}
void disp_Time1(void) interrupt 3 using 3
{
TH1=0xdc;
TL1=0x00;
x=ds/10000;
P0=LEDDis[x]; //分钟百位
P25=0;
Delay(2);
P25=1;
y=(ds%10000)/1000;//分钟十位
P0=LEDDis[y];
P26=0;
Delay(2);
P26=1;
P0=LEDDis[((ds%10000)%1000)/100];//分钟各位
P29=0;
Delay(2);
P29=1;
P0=0xbf; //分钟与秒的距离符
gang=0;
Delay(2);
gang=1;
P0=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
if(((ds%1000)%100)/10>=6) //满60,百位减一
{
ds=ds-10;
P0=LEDDis[6];
}
P27=0;
Delay(2);
P27=1;
P0=LEDDis[(((ds%10000)%1000)%100)%10]; //秒个位
P28=0;
Delay(2);
P28=1;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/255330.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部