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