構建和諧論壇,杜絕灌水
8路搶答器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (20.18 KB, 下載次數: 37)
下載附件
2018-6-23 06:41 上傳
0.png (50.58 KB, 下載次數: 31)
下載附件
2018-6-23 06:42 上傳
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit k0=P1^0; /*數碼管段選*/
- sbit k1=P1^1;
- sbit k2=P1^2;
- sbit k3=P1^3;
- sbit k4=P1^4;
- sbit k5=P1^5;
- sbit k6=P1^6;
- sbit k7=P1^7;
- sbit wela0=P2^0; /*數碼管位選*/
- sbit wela1=P2^2;
- sbit wela2=P2^3;
- sbit beep=P2^4; /*蜂鳴器*/
- sbit ks=P3^0; /*開始計時*/
- sbit tz=P3^1; /*停止計時*/
- sbit jiayi=P3^4; /*時間加1s*/
- sbit jianyi=P3^5; /*時間減1s*/
- sbit fw=P3^6; /*復位*/
- uchar qiangdanum=0xff;
- uchar code table[]=
- {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar ge=0,shi=0;
- uint num,time=30;
- void display(); /*顯示函數*/
- void kys(); /*設置按鍵函數*/
- void kys2(); /*搶答按鍵函數*/
- void delay(unsigned int z) /*延遲函數*/
- {
- unsigned int x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void intial()
- {
- TMOD=0X01; /*采用方式一,即十六位計數器*/
- TH0=(65536-50000)/256; /*設置初始值,50ms中斷一次*/
- TL0=(65536-50000)%256;
- EA=1;ET0=1; /*開啟總中斷源,定時器中斷*/
- }
- main()
- {
- intial(); /*初始化*/
- while(1)
- {
- display(); /*顯示函數*/
- kys();
- if(TR0==1)
- {
- kys2();
- }
- }
- }
- void kys2() /*搶答按鍵函數*/
- {
- if(k0==0) /*開關0按下*/
- {
- delay(5);
- if(k0==0)
- {
- qiangdanum=1; /* 1號選手搶答成功,數碼管顯示1*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0;
- time=60;
- }
- }
- if(k1==0) /*開關1按下*/
- {
- delay(5);
- if(k1==0)
- {
- qiangdanum=2; /* 2號選手搶答成功,數碼管顯示2*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- }
- }
- if(k2==0) /*開關2按下*/
- {
- delay(5);
- if(k2==0)
- {
- qiangdanum=3; /* 3號選手搶答成功,數碼管顯示3*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- if(k3==0) /*開關3按下*/
- {
- delay(5);
- if(k3==0)
- {
- qiangdanum=4; /* 4號選手搶答成功,數碼管顯示4*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- if(k4==0) /*開關4按下*/
- {
- delay(5);
- if(k4==0)
- {
- qiangdanum=5; /* 5號選手搶答成功,數碼管顯示5*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- if(k5==0) /*開關5按下*/
- {
- delay(5);
- if(k5==0)
- {
- qiangdanum=6; /* 6號選手搶答成功,數碼管顯示6*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- if(k6==0) /*開關6按下*/
- {
- delay(5);
- if(k6==0)
- {
- qiangdanum=7; /* 7號選手搶答成功,數碼管顯示7*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- if(k7==0) /*開關7按下*/
- {
- delay(5);
- if(k7==0)
- {
- qiangdanum=8; /* 8號選手搶答成功,數碼管顯示8*/
- beep=1;
- delay(100);
- beep=0;
- TR0=0; /*停止計數*/
- time=60;
- }
- }
- }
- void kys() /*設置按鍵函數*/
- {
- if(ks==0)
- {
- delay(5);
- if(ks==0)
- {
- TR0=1;
- }
- }
- if(tz==0)
- {
- delay(5);
- if(tz==0)
- TR0=0;
- }
- if(jiayi==0)
- {
- delay(5);
- if(jiayi==0)
- time++;
- while(!jiayi);
- }
- if(jianyi==0)
- {
- delay(5);
- if(jianyi==0)
- time--;
- while(!jianyi);
- }
- if(fw==0)
- {
- delay(5);
- if(fw==0)
- {
- time=30;
- qiangdanum=0xff;
- }
- }
- }
- void time0() interrupt 1 /*1秒定時函數,采用方式1重裝*/
- {
- num++;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
搶答器.rar
(107.38 KB, 下載次數: 37)
2018-6-22 23:33 上傳
點擊文件名下載附件
下載即可使用 下載積分: 黑幣 -5
|