|
1、利用各種器件設(shè)計一個八路智力競賽搶答器
2、并用PROTEL或EWB畫原理圖與印制板電路圖。3、總結(jié)檢驗電路設(shè)計的結(jié)果2)設(shè)計要求
1、搶答器同時供八名選手或八個代表隊比賽,分別用八個按鈕S0~S7表示。2、設(shè)置一個系統(tǒng)清除和搶答控制開關(guān)s,該開關(guān)由主持入控制。
3、搶答器具有鎖存于顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并且優(yōu)先搶答選手的編號一直保持到主持人講系統(tǒng)清零為止。
4、搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定。當主持人啟動開始鍵后,定時器進行減計時,同時揚聲器發(fā)出知暫的聲響,聲響持續(xù)的時間在3秒左右,與此同時,指示燈會亮,提示搶答開始。
5、參賽選手在設(shè)定的時間內(nèi)進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清零為止。
6、如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。
搜狗截圖_2018-06-04_14-55-55.png (74.35 KB, 下載次數(shù): 34)
下載附件
2018-9-3 14:52 上傳
單片機源程序:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define max 20
- uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,};
- sbit d1=P2^4;//**************段選
- sbit d2=P2^5;
- sbit x1=P2^6;
- sbit x2=P2^7;
- sbit k1=P1^0;//*********************八位選手開關(guān)
- sbit k2=P1^1;
- sbit k3=P1^2;
- sbit k4=P1^3;
- sbit k5=P1^4;
- sbit k6=P1^5;
- sbit k7=P1^6;
- sbit k8=P1^7;
- sbit zk1=P2^0;//*****************************主持人開關(guān)zk1 zk2
- sbit zk2=P2^1;
- sbit buz=P2^2;//*******************蜂鳴器
- uchar num,aa;
- uchar f,flag;
- void jianpan();
- void init(void)
- {
- TMOD=0X01;//***************T0,模式1,定時
- TL0=0XB0; //********************定時50ms
- TH0=0X3C;
- ET0=1; //**************開中斷
- EA=1;
- num=max;//置倒計時計數(shù)初值
- }
-
- void delay(uint xms)
- {
- uint x,y;
- for(x=xms;x>0;x--)
- for(y=110;y>0;y--);
-
- }
- /**********************************************
- 倒計時 選手號顯示函數(shù)
- **********************************************/
- void display()
- {d1=0; //控制開始置數(shù)
- P0=tab[num/10];//倒計時控制取最高位
- delay(5);
- d1=1; //停止置數(shù)操作
-
- d2=0;
- P0=tab[num%10];//倒計時取最低位
- delay(5);
- d2=1;
-
- x1=0; //控制開始置數(shù)
- P0=tab[flag/10];//選手號控制
- delay(5);
- x1=1; //停止置數(shù)操作
- x2=0;
- P0=tab[flag%10];
- delay(5);
- x2=1;
- }
- /**********************************************************主函數(shù)部分
- **********************************************************/void main()
- {
- init();
- while(1)
- { jianpan();display();} }
-
- /***************************************
- 中斷控制倒計時
- *************************************/
- void timer0(void) interrupt 1
- {
- TL0=0XB0; //******重裝初值,定時50ms
- TH0=0X3C;
- aa++;
- if(aa==20)//**********************************1秒到了
- {
- aa=0;//**************************************計數(shù)清零
- num--;
- if(num==0)//倒計時為0時迅速變?yōu)槌踔低瑫r關(guān)中斷停止倒計時
- { num=max;
- TR0=0; }
-
- buz=0;//***************要求蜂鳴器響
- delay(20);//**************************蜂鳴器響,特別注意時間為一秒buz=1;
-
- }
- }
- /**************************************************
- 按鍵控制 程序的核心部分
- ****************************************************/
- void jianpan()
- {
- if(zk1==0&flag=0)
- {
- delay(5);//消除數(shù)碼管抖動操作
- flag=0;//數(shù)碼管顯示0
- display();
- TR0=1;//ZK1鍵按下,開中斷以此控制:只有當此鍵按下時才搶答
- }
- if(zk2==0&&TR0==0)//注意這里要求TR0=0;
- {
- delay(5);//消除抖動
- if(zk2==0&&TR0==0)
- if(flag==0)
- {num--;buz=0;delay(20);buz=1;}
- if(num==0)
- num=max;
- if(flag!=0)//ZK2鍵清零操作
- {
- flag=0;
- num=max;//倒計時顯示最大值
- TR0=0;//注意此時關(guān)中斷,不再進行倒計時
- buz=0;
- delay(20);
- buz=1;
- }
- while(!zk2)//倒計時中ZK2 鍵不可影響
- display();
- }
-
- /**********************************************************TR0控制搶答先后順序
- *********************************************************/
-
- if(k1==0&&TR0==1)//注意此時TR0=1才執(zhí)行以下按鍵操作
- {
- buz=0;
- delay(20);
- buz=1;
- delay(5);
- flag=1;
- TR0=0;//此鍵按下關(guān)中斷,其他選手按鍵不再受影響
- display();
- }
- /*************************************
- 以下原理相同
- *************************************/
- if(k2==0&&TR0==1)
- {
- buz=0;delay(20);buz=1;
- delay(5);
- flag=2;
- TR0=0;
- display();
- }
-
- if(k3==0&&TR0==1)
- {
- buz=0;delay(20);buz=1;
- delay(5);
- flag=3;
- TR0=0;
- display();
- }
- if(k4==0&&TR0==1)
- {
- buz=0;delay(20);buz=1;
- delay(5);
- flag=4;
- TR0=0;
- display(); }
- if(k5==0&&TR0==1)
- {
- delay(5);
- flag=5;
- TR0=0;
- display();
- }
- if(k6==0&&TR0==1)
- {
- buz=0;delay(20);buz=1;
-
- delay(5);
-
- flag=1;
-
- TR0=0;
- display(); }
-
-
- if(k7==0&&TR0==1)
- {
- buz=0;delay(20);
- buz=1;
- delay(5);
- flag=7;
- TR0=0;
- display();
- }
-
- if(k8==0&&TR0==1)
- {
- buz=0;delay(20);
- buz=1;
- delay(5);
- flag=8;
- TR0=0;
- display();
- }
-
- }
復(fù)制代碼
|
-
-
代碼.docx
2018-9-3 14:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
15.23 KB, 下載次數(shù): 10, 下載積分: 黑幣 -5
|