欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機數字電子搶答器程序
[打印本頁]
作者:
EdwinZhong
時間:
2019-6-28 10:50
標題:
單片機數字電子搶答器程序
用八路搶答器實現 1、4、6按下后,裁判鍵按下不能復位。 1、4、6的復位需要關斷電源開關后約20秒 少于20秒重新開電源時,仍顯示146 2、3、5、8、0正常 7無法自鎖。
單片機源程序如下:
#include <reg51.h>
#define LED P2 //宏定義,使用LED代替P3口(相當于LED=P3)
#define uchar unsigned char //用uchar代替unsigned char方便操作
#define uint unsigned int
sbit beep=P2^7;//蜂鳴器
sbit BG=P3^7;//指示燈
sbit key4=P1^0;//按鍵D
sbit key2=P1^1;//按鍵B
sbit key1=P1^2;//按鍵A
sbit key3=P1^3;//按鍵C
bit time_over=0;//倒計時結束標記
bit WARNING=0;//倒數十秒控制變量
bit INT_ON=0;//中斷標記
bit key_down=0;//鍵盤輔助變量
uchar RIGHT=0xff;//按鍵暫存器
uchar CONT=0; //定時器輔助變量
uchar res_time=0;//時間
uchar set_time=30;
uchar leds[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x83,0xa7,0xa1,0x86,0x8e,0xff};
/*------------------time ms延時函數-----------------*/
void delay_ms(uint time)
{
uchar tres;
for(;time>0;time--)
{
tres=150;
while(tres--);
}
}
//外部中斷1初始化程序
void Init_Sys() //中斷初始化函數
{
TCON=0x00; //外部中斷1低電平觸發
TMOD=0X01; //定時器0方式1
IE=0x86; //開啟外部中斷1,定時器中斷0,及總中斷 10000110B
IP=0X04; //外部中斷優先級高于定時器
CONT=0; //時間清零
res_time=0;
}
//外部中斷1處理程序
void exint1_int() interrupt 2 using 0
{
uchar t=200;
EA=0;//關中斷
TR0=0;//關定時器
WARNING=0;//關警告
while(t--)beep=0;//軟件延時,消除抖動
RIGHT=P0; //獲得按鍵值
INT_ON=1; //標記中斷
}
//定時器0中斷處理程序
void count_int() interrupt 1 using 1
{
TH0=0X4C;//重新裝載
TL0=0X00;
CONT++;
if(CONT==20)
{
CONT=0;
if(res_time==0)time_over=1;
res_time--;
}
}
//遙控按鍵掃描程序
uchar key_scan(void)
{
P1=0xff;
if(key1==1||key2==1||key3==1||key4==1)
{
if(!key_down)
{
delay_ms(10); //延時
key_down=1; //限制
if(key1==1)return 1;//按鍵A
if(key2==1)return 2;//按鍵B
if(key3==1)return 3;//按鍵C
if(key4==1)return 4;//按鍵D
}
else return 0;
}
else if(key_down)key_down=0;//消除限制
return 0; //未獲得任何按鍵
}
uchar juder(void)
{
switch(RIGHT)
{
case 0xff:return 0;
case 0xfe:return 1;
case 0xfd:return 2;
case 0xfb:return 3;
case 0xf7:return 4;
case 0xef:return 5;
case 0xdf:return 6;
case 0xbf:return 7;
case 0x7f:return 8;
default:return 14;//E,錯誤
}
}
//顯示答案
void show_answer(void)
{
uchar ti=0;
uchar key=0;
while(1)
{
key=key_scan();
if(ti==100){BG=!BG;ti=0;}
if(key!=0)
{
LED=leds[key+9];//顯示答案
BG=1;//滅燈
break;
}
ti++;
delay_ms(1);
}
}
void BELL(uchar times)
{
while(times--)
{
beep=0;
delay_ms(100);
beep=1;
delay_ms(100);
}
}
//清除顯示
void clear(void)
{
EA=0; //關掉計時器
beep=0; //開蜂鳴器
WARNING=0; //清警告標記
time_over=0;//清溢出標記
TR0=0; //關定時器
INT_ON=0;//清除中斷標記
TL0=0X00;//初始值設置
TH0=0X4C;
CONT=0;
res_time=set_time;//賦初始值
delay_ms(100);
LED=leds[16];//清屏,同時關蜂鳴器
BG=1;//關燈
}
void debug(void)//處理犯規隊,顯示犯規隊隊號
{
RIGHT=P0;//獲得犯規隊的地址
LED=leds[juder()];//顯示隊號
BELL(4);
}
//開啟搶答器
//1普通模式
//0倒計時模式
void start(uchar type)
{
bit alarm=1;//提示音
uchar key=0;
res_time=set_time;//獲取初始值
while(1)
{
key=key_scan();//掃描鍵盤
if(key!=0)
{
switch(key)
{
case 1://顯示答案
{
clear();//清除
show_answer();
break;
}
case 2://開始搶答
{
if(P0!=0XFF)
{
debug();//處理犯規
break;
}
if(!type)TR0=1; //倒計時方式
else //普通方式
{
clear();
BG=0;//開燈指示
}
EA=1;//使能中斷
break;
}
case 3:clear();break;//清除
case 4:return;//返回
}
}
if(TR0==1)//倒計時
{
if(CONT==0&&BG)
{
if(res_time>=10)LED=leds[res_time/10];
BG=0;//每秒鐘閃爍一次
if(WARNING)alarm=0;//最后十秒
}
if(CONT==10&&!BG)
{
BG=1;
if(WARNING)alarm=1;//最后十秒
else LED=leds[res_time%10];//顯示個位數據;
}
if(res_time<10)//最后十秒標記
{
WARNING=1;
LED=leds[res_time];
}
beep=alarm;
delay_ms(5);
}
if(time_over) //倒計時結束處理
{
clear();
LED=leds[0];
time_over=0;
BELL(3);
}
if(INT_ON)//有選手按下
{
TR0=0;//關定時器
beep=0;//開提示音
BG=1;//關燈
delay_ms(100);
INT_ON=0;
LED=leds[juder()];//顯示選手號
}
}
}
void main()
{
bit set=0;//設置狀態標記
bit model=1; //模式標記
uchar key;
Init_Sys();//初始化外部中斷 1 捕獲按鍵輸入
P0=0XFF;
TR0=1;//開啟定時器0
while(1)//死循環
{
key=key_scan();
if(key!=0)
{
if(!model)switch(key)
{
case 1:
{
set=1;
set_time+=10;
if(set_time>90)set_time=10;
break;
}
case 3:
{
set=1;
if(set_time>10)set_time-=10;//范圍限制
else set_time=90;
break;
}
}
if(key==2)
{
start(model);//開始搶答
set=0;//非設置狀態
}
if(key==4)
{
model=!model;//模式切換
set=0; //非設置狀態
}
}
if(model)LED=leds[14];
else
{
if(set)LED=leds[set_time/10];//顯示設置時間
else LED=leds[15];
}
}
}
復制代碼
所有資料51hei提供下載:
搶答器.rar
(1.01 MB, 下載次數: 7)
2019-6-28 10:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1