|
protues仿真圖:
實(shí)物圖:
單片機(jī)程序源碼:
- /*******************************************************************************
- * 標(biāo)題: 三路搶答器 *
- * 時(shí)間 2018年8月5日17:59:20 *
- * *
- * 實(shí)驗(yàn)說明:在10s的時(shí)間內(nèi),三位選手進(jìn)行按鍵搶答,如果1號(hào)搶答,那么數(shù)碼管將顯示*
- 1號(hào)選手的號(hào)碼。并且蜂鳴器響,以此類推。如果10s時(shí)間到,蜂鳴器響,選手 *
- 無法進(jìn)行搶答 *
- ********************************************************************************
- * 實(shí)驗(yàn)心得:做法相對(duì)簡單,注意共陰數(shù)碼管還是共陽數(shù)碼管 *
- ********************************************************************************/
- #include <reg52.h>
- //IO口定義
- #define GPIO_DIG P0
- #define GPIO_SHOW P2
- sbit LSA=P3^0;
- sbit beep=P1^5;
- sbit K1=P3^1;
- sbit K2=P1^0;
- sbit K3=P1^1;
- sbit K4=P1^2;
- //--定義全局變量--//
- typedef unsigned int u16;
- unsigned char code DIG_CODE[18]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff};
- //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
- unsigned int Ge=0;
- unsigned int Shi=1;
- unsigned int num=0;
- unsigned int Res=10;
- unsigned int flag=0;
- //全局函數(shù)
- void DigDisplay();
- void delay(u16 i)
- {
- while(i--);
- }
- void main()
- {
- TMOD = 0x01;
- TH0 = 0x3C;
- TL0 = 0x0B0;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- DigDisplay();
- }
- void DigDisplay()
- {
- unsigned char i;
- unsigned int j;
- while(1)
- {
- for(i=0;i<2;i++)
- {
- switch(i) //位選,選擇點(diǎn)亮的數(shù)碼管,
- {
- case(0):
- LSA=0;
- GPIO_DIG=DIG_CODE[Shi];//發(fā)送段碼
- break;//顯示第0位
- case(1):
- LSA=1;
- GPIO_DIG=DIG_CODE[Ge];//發(fā)送段碼
- break;//顯示第1位
- }
-
- /****************************************************************************/
- /*消隱函數(shù)要在數(shù)碼管更新頻率很快的條件下,才起作用,手動(dòng)更換數(shù)碼管位選完全達(dá)不到這么快的速度,因此在這種情況下也是沒必要用消隱的 */
- j=10; //掃描間隔時(shí)間設(shè)定
- while(j--);
- GPIO_DIG=0x00;//消隱
- }
- if(K1==0)
- {
- Res=10;
- flag=0;
- }
- else if(K2==0)
- {
- GPIO_SHOW=~DIG_CODE[1];
- while(1)
- {
- beep=~beep;
- delay(10);
- if(K1==0)
- {
- Res=10;
- flag=0;
- GPIO_SHOW=~DIG_CODE[17];
- break;
- }
- }
- }
- else if(K3==0)
- {
- GPIO_SHOW=~DIG_CODE[2];
- while(1)
- {
- beep=~beep;
- delay(10);
- if(K1==0)
- {
- Res=10;
- flag=0;
- GPIO_SHOW=~DIG_CODE[17];
- break;
- }
- }
- }
- else if(K4==0)
- {
- GPIO_SHOW=~DIG_CODE[3];
- while(1)
- {
- beep=~beep;
- delay(10);
- if(K1==0)
- {
- Res=10;
- flag=0;
- GPIO_SHOW=~DIG_CODE[17];
- break;
- }
- }
- }
- }
- }
- void Int1() interrupt 1
- {
- TMOD = 0x01;
- TH0 = 0x3C;
- TL0 = 0x0B0;
- num++;
- if(num==20)
- {
- num=0;
- flag++;
- Res--;
- Ge=Res%10;
- Shi=Res/10;
- }
-
- if(flag==10)
- {
- while(1)
- {
- beep=~beep;
- delay(10);
- if(K1==0)
- {
- Res=10;
- flag=0;
- break;
- }
- }
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
三路搶答器.rar
(49.57 KB, 下載次數(shù): 170)
2018-8-5 18:20 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|