欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機搶答器倒計時結束后不能停止,怎么解決?
[打印本頁]
作者:
機電小生
時間:
2020-4-17 20:36
標題:
單片機搶答器倒計時結束后不能停止,怎么解決?
要做一個搶答器,60秒倒計時結束后紅燈亮,但數碼管不滅,想問一下怎么解決?
ND%KGM~(763BA2HZ$2@ECHX.png
(31.27 KB, 下載次數: 60)
下載附件
2020-4-17 20:35 上傳
作者:
機電小生
時間:
2020-4-17 20:36
本帖最后由 機電小生 于 2020-4-17 21:35 編輯
程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2; //黃燈
sbit P23=P2^3; //紅燈
sbit P26=P2^6;
sbit P27=P2^7;
sbit key1=P3^2; //倒計時開關
sbit key2=P3^0; //1
sbit key3=P3^1; //2
sbit key4=P3^5; //復位開關
void daojishi(void);
void yihao(void);
void erhao(void);
void fuwei(void);
void key_scan(void);
uchar n,k,flag;
void delay5ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
void delay10ms()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
n=60;
k=20;
P22=0;
P23=0;
P1=0xff;
TMOD=0x01; //T0用中斷定時1s,方式一
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x8f;
IT0=1;
IT1=1;
flag=0;
while(1)
{
key_scan();
switch(flag)
{
case 1:daojishi();break;
case 2:yihao();break;
case 3:erhao();break;
case 4:fuwei();break;
}
}
}
void t_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k--;
if(k==0)
{
k=20;
n--;
if(n==0)
{
TR0=0;
P23=1;
P0=0xff;
}
}
}
void key_scan()
{
if(key1==0)
{
delay10ms();
if(key1==0)
{ flag=1;
while(key1==1)
{
delay10ms();
flag=0;
}
}
}
if(key2==0)
{
delay10ms();
if(key2==0)
{
flag=2;
while(key2==1)
{
delay10ms();
flag=0;
}
}
}
if(key3==0)
{
delay10ms();
if(key3==0)
{
flag=3;
while(key3==1)
{
delay10ms();
flag=0;
}
}
}
if(key4==0)
{
delay10ms();
if(key4==0)
{
flag=4;
while(key4==1)
{
delay10ms();
flag=0;
}
}
}
}
void daojishi()
{
TR0=1;
P0=0xff;
P20=1;
P21=0;
if(n>=10)
P0=zixingma[n/10];
delay5ms();
P0=0xff;
P20=0;
P21=1;
P0=zixingma[n%10];
delay5ms();
}
void yihao()
{
P0=0xff;
P1=0xf9;
P22=1;
}
void erhao()
{
P0=0xff;
P1=0xa4;
P22=1;
}
void fuwei()
{
TR0=0;
P2=0;
P0=0xff;
P1=0xff;
n=60;
}
作者:
benclee
時間:
2020-4-18 09:49
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code zixingma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2; //黃燈
sbit P23=P2^3; //紅燈
sbit P26=P2^6;
sbit P27=P2^7;
sbit key1=P3^2; //倒計時開關
sbit key2=P3^0; //1
sbit key3=P3^1; //2
sbit key4=P3^5; //復位開關
void daojishi(void);
void yihao(void);
void erhao(void);
void fuwei(void);
void key_scan(void);
uchar n,k,flag;
void delay5ms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=248;j>0;j--);
}
void delay10ms()
{
unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
void main()
{
n=60;
k=20;
P22=0;
P23=0;
P1=0xff;
TMOD=0x01; //T0用中斷定時1s,方式一
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
IE=0x8f;
IT0=1;
IT1=1;
flag=0;
while(1)
{
if(key1==0)
delay10ms();
if(key1==0)
flag=1; //開始標志
if(flag!=0)
{
key_scan();
switch(flag)
{
case 1:daojishi();break;
case 2:yihao();break;
case 3:erhao();break;
case 4:fuwei();break;
}
}
else
if(key4==0)
delay10ms();
if(key4==0)
flag=4; //復位標志
}
}
void t_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
k--;
if(k==0)
{
k=20;
if(n>0) //增加一個判斷
{n--;}
else
/* n--;
if(n==0) */
{
TR0=0;
P23=1;
P0=0xff;
flag=0; //禁止除復位按鈕外其它按鈕 標志
}
}
}
void key_scan()
{
if(key1==0)
{
delay10ms();
if(key1==0)
{ flag=1;
while(key1==1)
{
delay10ms();
flag=0;
}
}
}
if(key2==0)
{
delay10ms();
if(key2==0)
{
flag=2;
while(key2==1)
{
delay10ms();
flag=0;
}
}
}
if(key3==0)
{
delay10ms();
if(key3==0)
{
flag=3;
while(key3==1)
{
delay10ms();
flag=0;
}
}
}
if(key4==0)
{
delay10ms();
if(key4==0)
{
flag=4;
while(key4==1)
{
delay10ms();
flag=0;
}
}
}
}
void daojishi()
{
TR0=1;
P0=0xff;
P20=1;
P21=0;
if(n>=10)
P0=zixingma[n/10];
delay5ms();
P0=0xff;
P20=0;
P21=1;
P0=zixingma[n%10];
delay5ms();
}
void yihao()
{
P0=0xff;
P1=0xf9;
P22=1;
flag=0;//禁止除復位按鈕外其它按鈕 標志
}
void erhao()
{
P0=0xff;
P1=0xa4;
P22=1;
flag=0 ;//禁止除復位按鈕外其它按鈕標志
}
void fuwei()
{
TR0=0;
P2=0;
P0=0xff;
P1=0xff;
n=60;
}
作者:
benclee
時間:
2020-4-18 10:06
while(1)
{
if(flag!=0)
{
if(key1==0)
delay10ms();
if(key1==0)
flag=1; //開始標志
key_scan();
switch(flag)
{
case 1:daojishi();break;
case 2:yihao();break;
case 3:erhao();break;
case 4:fuwei();break;
}
}
else
if(key4==0)
delay10ms();
if(key4==0)
flag=4; //復位標志
}
這樣調整一下,修復搶答鍵按下后,再按開始鍵繼續倒計時BUG
作者:
benclee
時間:
2020-4-18 10:15
flag=4;//開始賦值為4,修復啟動時要先按復位鍵BUG
while(1)
{
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1