標(biāo)題: 單片機(jī)為核心的8位競(jìng)賽搶答器仿真和源程序 倒計(jì)時(shí)剩余時(shí)間還未完成 [打印本頁(yè)]
作者: 781151973 時(shí)間: 2018-7-1 16:49
標(biāo)題: 單片機(jī)為核心的8位競(jìng)賽搶答器仿真和源程序 倒計(jì)時(shí)剩余時(shí)間還未完成
1) 搶答器同時(shí)供8名選手或8個(gè)代表隊(duì)比賽,分別用8個(gè)按鈕s1-s8表示;
2) 設(shè)置一個(gè)系統(tǒng)清除和搶答控制開關(guān)Key1和Key2。
3) 搶答器具有鎖存與顯示功能。即選手按下按鈕,鎖存相應(yīng)編號(hào),顯示該選手編號(hào)至數(shù)碼管,并且該編號(hào)保存至主持人按下清除鍵Key1清除為止。
4) 搶答器具有定時(shí)搶答功能,一次搶答設(shè)定的時(shí)間為30秒。主持人按下?lián)尨鹂刂崎_關(guān)Key2,搶答才能開始,啟動(dòng)定時(shí)器,并將倒數(shù)計(jì)時(shí)時(shí)間用數(shù)碼管顯示。若定時(shí)時(shí)間到,無(wú)人搶答,則該輪搶答結(jié)束,系統(tǒng)通過蜂鳴器報(bào)警,選手禁止搶答。
5) 選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,蜂鳴器報(bào)警,數(shù)碼管顯示選手編號(hào)及倒計(jì)時(shí)剩余時(shí)間,并保持到主持人將系統(tǒng)清除為止。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (14.82 KB, 下載次數(shù): 43)
下載附件
2018-7-1 18:10 上傳
0.png (6.38 KB, 下載次數(shù): 48)
下載附件
2018-7-1 18:10 上傳
單片機(jī)源程序如下:
- #include <reg52.h>
- //共陰極數(shù)碼管編碼表 0 - f顯示
- unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- //變量定義
- sbit start_stop = P3^6;
- sbit reset = P3^7;
- sbit LE =P3^0;
- sbit key1 = P1^0;
- sbit key2 = P1^1;
- sbit key3 = P1^2;
- sbit key4 = P1^3;
- sbit key5 = P1^4;
- sbit key6 = P1^5;
- sbit key7 = P1^6;
- sbit key8 = P1^7;
- sbit state = P3^4;
- sbit start=P3^1;
- bit start_stop_flag = 0;
- bit key1_flag = 0;
- bit key2_flag = 0;
- bit key3_flag = 0;
- bit key4_flag = 0;
- bit key5_flag = 0;
- bit key6_flag = 0;
- bit key7_flag = 0;
- bit key8_flag = 0;
- bit reset_flag = 0;
- bit action = 0;
- bit start_flag=0;
- unsigned char second = 15;
- unsigned char timer0_count = 0;
- unsigned char number = 0;
- unsigned char number_display = 0;
- //延時(shí)函數(shù)
- void delay(unsigned int z)
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void Play(unsigned char t)
- {
- unsigned char i;
- for(i=0;i<100;i++)
- {
- state=~state;
- delay(t);
- }
- state=0;
- }
- //數(shù)碼管顯示驅(qū)動(dòng)函數(shù)
- void display(unsigned char number,unsigned char second)
- {
- unsigned char second_first,second_second;
- second_first = second / 10;
- second_second = second % 10;
-
- P2 = 0xfe;
- P0 = table[number];
- delay(1);
-
- P2 = 0xfb;
- P0 = table[second_first];
- delay(1);
-
- P2 = 0xf7;
- P0 = table[second_second];
- delay(1);
- }
- //開始鍵掃描函數(shù)
- void start_stop_keyscan()
- {
- if(start_stop == 0)
- {
- delay(8);
- if((start_stop == 0)&&(!start_stop_flag))
- {
- start_stop_flag = 1;
- action = 1;
- TR0 = 1;
- //state =0;
- Play(1);
- }
- }
- else
- {
- start_stop_flag = 0;
- }
- }
- //八位搶答鍵掃描函數(shù)
- unsigned char key_scan8()
- {
- if(key1 == 0)
- {
- delay(8);
- if((key1 == 0)&&(!key1_flag))
- {
- key1_flag = 1;
- number = 1;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key1_flag = 0;
- number = 0;
- }
-
- if(key2 == 0)
- {
- delay(8);
- if((key2 == 0)&&(!key2_flag))
- {
- key2_flag = 1;
- number = 2;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key2_flag = 0;
- number = 0;
- }
-
- if(key3 == 0)
- {
- delay(8);
- if((key3 == 0)&&(!key3_flag))
- {
- key3_flag = 1;
- number = 3;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key3_flag = 0;
- number = 0;
- }
-
- if(key4 == 0)
- {
- delay(8);
- if((key4 == 0)&&(!key4_flag))
- {
- key4_flag = 1;
- number = 4;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key4_flag = 0;
- number = 0;
- }
-
- if(key5 == 0)
- {
- delay(8);
- if((key5 == 0)&&(!key5_flag))
- {
- key5_flag = 1;
- number = 5;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key5_flag = 0;
- number = 0;
- }
-
- if(key6 == 0)
- {
- delay(8);
- if((key6 == 0)&&(!key6_flag))
- {
- key6_flag = 1;
- number = 6;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key6_flag = 0;
- number = 0;
- }
-
- if(key7 == 0)
- {
- delay(8);
- if((key7 == 0)&&(!key7_flag))
- {
- key7_flag = 1;
- number = 7;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key7_flag = 0;
- number = 0;
- }
-
- if(key8 == 0)
- {
- delay(8);
- if((key8 == 0)&&(!key8_flag))
- {
- key8_flag = 1;
- number = 8;
- number_display = number;
- Play(2);
- LE=0;
- }
- }
- else
- {
- key8_flag = 0;
- number = 0;
- }
-
- if(number_display != 0)
- {
- return 1;
- }
- else
- {
- return 0;
- }
-
- }
- //復(fù)位鍵掃描函數(shù)
- void reset_keyscan()
- {
- if(reset == 0)
- {
- delay(8);
- if((reset == 0)&&(!reset_flag))
- { second=15;
- reset_flag = 1;
- number_display = 0;
- LE = 1;
- //state = 1;
- }
- }
- else
- {
- reset_flag = 0;
- }
- }
-
- //主函數(shù)
- void main()
- {
- TMOD=0x01;
- TH0=0x3C;
- TL0=0xB0;
- EA=1;
- ET0=1;
- TR0=0;
-
- while(1)
- { while((start == 0)&&(!start_flag))
- { start_stop_keyscan();
- reset_keyscan();
- while(action)
- {
- while(!key_scan8())
- {
- display(number_display,second);
- if(second == 0)
- {
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png (46.47 KB, 下載次數(shù): 39)
下載附件
2018-7-1 18:10 上傳
所有資料51hei提供下載:
搶答.rar
(67.64 KB, 下載次數(shù): 67)
2018-7-1 16:48 上傳
點(diǎn)擊文件名下載附件
作者: zyt123456 時(shí)間: 2018-7-5 09:24
兄弟倒計(jì)時(shí)剩余時(shí)間顯示不出來(lái)?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |