本產品模擬競賽中搶答環節賽事,八組選手同時按下按鈕只有一組通過的設計。
實物照片2.jpg (134.32 KB, 下載次數: 40)
下載附件
2018-6-24 19:30 上傳
實物照片.jpg (109.4 KB, 下載次數: 38)
下載附件
2018-6-24 19:30 上傳
DSCN3243.JPG (497.79 KB, 下載次數: 31)
下載附件
2018-6-24 19:30 上傳
DSCN3239.JPG (191.59 KB, 下載次數: 34)
下載附件
2018-6-24 19:30 上傳
DSCN3237.JPG (196.59 KB, 下載次數: 33)
下載附件
2018-6-24 19:30 上傳
DSCN3235.JPG (195.05 KB, 下載次數: 32)
下載附件
2018-6-24 19:30 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (44.61 KB, 下載次數: 38)
下載附件
2018-6-24 19:29 上傳
0.png (54.43 KB, 下載次數: 32)
下載附件
2018-6-24 19:30 上傳
0.png (20.96 KB, 下載次數: 35)
下載附件
2018-6-24 19:30 上傳
0.png (23.47 KB, 下載次數: 27)
下載附件
2018-6-24 19:29 上傳
單片機源程序如下:
- //八路搶答器說明:P2.7口為顯示個位數碼管的位選線;P2.6口為顯示十位數碼管的位選線 ;搶答或倒計時結束后按復位鍵進行下一次搶答.
- #include<reg52.h>
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽數碼管段碼表
- sbit beep=P2^4; //蜂鳴器控制位
- uchar num,t1,shu,temp,shi,ge;//聲明變量
- uint i;
- //延時子程序
- void delay(uint z)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<110;y++);
- }
- //初始化子程序
- void init()
- {
- P0=0xff;//消隱
- P2=0xff;
- P1=0xff;//保證搶答前P1口全為高電平(單片機檢測低電平認為搶答)
- temp=P1;
- TMOD=0x01; //選擇定時器0為工作方式
- TH0=(65536-50000)/256;//定時器裝初值
- TL0=(65536-50000)%256;
-
- EA=1; //開總中斷
- ET0=1; //開定時器0
- TR0=1; //啟動定時器0
- num=30; //倒計時數為30
- }
- void display()//搶答倒計時顯示子函數
- {
- shi=num/10;
- ge=num%10;
- P0=table[shi]; //顯示十位 送段碼
- P2=0xfe; //送位碼
- delay(2); //延時
- P0=table[ge]; //顯示個位 ,送段碼
- P2=0xfd; //送位碼
- delay(2); //延時
- }
- //主程序
- void main()
- {
- init(); //調初始化
- //大循環
- while(1)
- {
- //倒計時顯示程序
- while(temp==0xff)
- {
-
- display(); //搶答倒計時顯示函數
- temp=P1;//判斷之前,先把P1口的數據送給temp;
- while(temp!=0xff) //判斷
- break;
- }
-
- //獨立鍵盤掃描程序
- while(temp!=0xff)//有鍵按下
- {
- delay(5);//軟件延時消抖
- temp=P1; //重讀按鍵
- while(temp!=0xff)//再次確認有鍵按下
- {
- temp=P1;
- switch(temp)//判斷哪個鍵按下
- {
- case 0xfe : shu=1; //1號選手搶答成功
- break;
- case 0xfd : shu=2; //2號選手搶答成功
- break;
- case 0xfb : shu=3; //3號選手搶答成功
- break;
- case 0xf7 : shu=4; //4號選手搶答成功
- break;
- case 0xef : shu=5; //5號選手搶答成功
- break;
- case 0xdf : shu=6; //6號選手搶答成功
- break;
- case 0xbf : shu=7; //7號選手搶答成功
- break;
- case 0x7f : shu=8; //8號選手搶答成功
- break;
- }
- P0=table[shu];//顯示所按下的鍵 ,送段碼
- P2=0xfd; //送位碼
- beep=0; //開蜂鳴器
- delay(500);//有鍵按下時蜂鳴器響500ms
- beep=1; //關閉蜂鳴器
- while(1);//進入死循環,將所按下的鍵顯示并定格,防止有鍵再按下時將其覆蓋;
- }
- }
- }
- }
- //定時器T0中斷子函數
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256; //重賦初值,定時時間為50ms
- TL0=(65536-50000)%256;
- t1++;
- if(t1==20) //50ms*20=1s,1秒到
- {
- t1=0; //定時計數清0
- num--;//30秒倒計時
- if(num==0)
- {
- TR0=0; //關斷定時器0
- beep=0; //開蜂鳴器
- while(1)//進入死循環防止超時搶答
- {
- for(i=0;i<600;i++)//循環調用顯示延時,同時刷新顯示
- {
- display(); //搶答倒計時顯示函數
- }
- beep=1; //關斷蜂鳴器
- }
- }
- }
-
- }
復制代碼
所有資料51hei提供下載:
8路搶答器.zip
(1.96 MB, 下載次數: 52)
2018-6-24 17:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|