51單片機做的帶有計分功能的8路搶答器proteus仿真電路工程文件和c51源代碼
TIM截圖20170808083856.png (36.03 KB, 下載次數: 147)
下載附件
2017-8-8 08:40 上傳
TIM截圖20170808083916.png (69.97 KB, 下載次數: 120)
下載附件
2017-8-8 08:39 上傳
0.png (44.87 KB, 下載次數: 148)
下載附件
2017-8-8 17:38 上傳
單片機源程序如下:
- #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 beep=P3^7; /*蜂鳴器*/
- sbit ks=P2^4; /*開始計時*/
- sbit jiayi=P2^5; /*分數加1*/
- sbit jianyi=P2^6; /*分數減1*/
- sbit fw=P2^7; /*復位*/
- int flg=1;
- bit flg1=0;
- int t=0,s=0;
- uchar qiangdanum=0x0b;
- uchar code table[]=
- {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x00};
- uchar ge=0,shi=0;
- uint num,time=10, fs=0;
- int nums[]={50,50,50,50,50,50,50,50};
- void kyy(void) ;
- void displayfs();
- 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; /*開啟總中斷源,定時器中斷*/
- }
- void intia2()
- { TMOD=0X10; /*采用方式一,即十六位計數器*/
- TH1=(65536-50000)/256; /*設置初始值,50ms中斷一次*/
- TL1=(65536-50000)%256;
- EA=1;ET1=1; /*開啟總中斷源,定時器中斷*/
- }
- main()
- { intia2();
- intial(); /*初始化*/
- beep=0;
- while(1)
- { kys();
- if(flg1==1)
- displayfs();
- else
- display(); /*顯示函數*/
-
- if(flg==0)
- {
- kys2();
- }
- }
- }
- void kys2() /*搶答按鍵函數*/
- {
- if(k0==0) /*開關0按下*/
- {
- delay(5);
- if(k0==0)
- { flg=1;
- qiangdanum=1; /* 1號選手搶答成功,數碼管顯示1*/
- beep=1;
- delay(1000);
- beep=0;
-
- time=20;
-
- }
- }
- if(k1==0) /*開關1按下*/
- {
- delay(5);
- if(k1==0)
- { flg=1;
- qiangdanum=2; /* 2號選手搶答成功,數碼管顯示2*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k2==0) /*開關2按下*/
- {
- delay(5);
- if(k2==0)
- { flg=1;
- qiangdanum=3; /* 3號選手搶答成功,數碼管顯示3*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k3==0) /*開關3按下*/
- {
- delay(5);
- if(k3==0)
- { flg=1;
- qiangdanum=4; /* 4號選手搶答成功,數碼管顯示4*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k4==0) /*開關4按下*/
- {
- delay(5);
- if(k4==0)
- { flg=1;
- qiangdanum=5; /* 5號選手搶答成功,數碼管顯示5*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k5==0) /*開關5按下*/
- {
- delay(5);
- if(k5==0)
- { flg=1;
- qiangdanum=6; /* 6號選手搶答成功,數碼管顯示6*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k6==0) /*開關6按下*/
- {
- delay(5);
- if(k6==0)
- { flg=1;
- qiangdanum=7; /* 7號選手搶答成功,數碼管顯示7*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- if(k7==0) /*開關7按下*/
- {
- delay(5);
- if(k7==0)
- { flg=1;
- qiangdanum=8; /* 8號選手搶答成功,數碼管顯示8*/
- beep=1;
- delay(1000);
- beep=0;
- time=20;
-
- }
- }
- }
- void kys() /*設置按鍵函數*/
- {
- uchar i;
- if(qiangdanum==0x0a) //復位按鍵按下后開始按鍵才有效
- {
- if(ks==0)
- {
- delay(5);
- if(ks==0)
- {
- TR0=1;
- flg=0;
- }
- }
- }
- if((qiangdanum!=0x0a)&&(qiangdanum!=0x0b)&&(time!=0)) //在規定時間內或規定時間內答題結束后,分數加減按鍵才有效
- {
- if(jiayi==0)
- {
- delay(5);
- if(jiayi==0)
- TR0=0;
- time=nums[qiangdanum-1];
- for (i=0;i<5;i++)
- {display();
- delay(250);
- delay(250);
- }
-
- fs=nums[qiangdanum-1];
- fs++;
- nums[qiangdanum-1]=fs;
- time=nums[qiangdanum-1];
- // qiangdanum=0x0b;
- while(!jiayi);
-
- }
- if(jianyi==0)
- {
- delay(5);
- if(jianyi==0)
- TR0=0;
- time=nums[qiangdanum-1];
- for (i=0;i<5;i++)
- {display();
- delay(250);
- delay(250);
- };
- fs=nums[qiangdanum-1];
- fs--;
- nums[qiangdanum-1]=fs;
- time=nums[qiangdanum-1];
- // qiangdanum=0x0b;
- while(!jianyi);
- }
- }
- if(fw==0) //復位按鍵
- {
- delay(5);
- if(fw==0)
- { flg=1;
- TR0=0;
- time=10;
- flg1=1;
- s=0;
- TR1=1;
-
- }
- }
- }
- void time0() interrupt 1 /*1秒定時函數,采用方式1重裝*/
- {
- num++;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- if(num==20)
- {
- num=0;
- time--;
- if(time==0) //時間到,搶答無效
- {
- TR0=0;
- flg=1;
- }
- }
-
- }
-
- void time1() interrupt 3
- {
- t++;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- if(t==200)
- { qiangdanum=0x0b;
- t=0;
- s++;
- if(s==8) //時間到,搶答無效
- { s=0;
- TR1=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
帶計分功能的8路搶答器仿真電路和源代碼分享.zip
(218.9 KB, 下載次數: 99)
2017-8-8 08:41 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|