基于51單片機的搶答器制作,源程序,OLED顯示
下載:
搶答器程序.zip
(81.57 KB, 下載次數(shù): 38)
2016-10-13 12:05 上傳
點擊文件名下載附件
搶答器,OLED 下載積分: 黑幣 -5
部分源程序:
- // 說明:
- // ----------------------------------------------------------------
- // GND 電源地
- // VCC 接5V或3.3v電源
- // D0 P1^0(SCL)
- // D1 P1^1(SDA)
- // RES 接P12
- // DC 接P13
- // CS 接P14-----本模塊片選腳已經(jīng)幫用戶接地,無需再接
- // ----------------------------------------------------------------
- //******************************************************************************/
- #include "REG52.h"
- #include "oled.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit s5 = P0^2; //控制選手搶答
- sbit s1 = P0^6;
- sbit s2 = P0^5;
- sbit s3 = P0^4;
- sbit s4 = P0^3;
- sbit ggd = P1^5;
- sbit s8 = P1^6; //移位
- sbit s6 = P0^0; //加一分
- sbit s7 = P0^1; //減一分
- sbit fengmingqi = P0^7;
- unsigned char code table[]={
- 0x3f,0x06,0x3f,0x5b,
- 0x3f,0x4f,0x3f,0x66};
- void dlayms(uint);
- unsigned char s1num;
- uint a = 0,b = 0,c = 0,d = 0;
- uchar code table1[]={
- 0xfe,0xfd,0xfb,0xf7,
- 0xef,0xdf,0xbf,0x7f};
- void delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- void keyscan1()
- {
- if(s1==0) // 1號
- {
- delayms(5);
- if(s1==0)
- {
- P2=0;
- P3=1;
- OLED_ShowString(50,2,"*");
- OLED_ShowString(70,2," ");
- OLED_ShowString(90,2," ");
- OLED_ShowString(110,2," ");
- EA=0;
- fengmingqi=0;
- delayms(10);
- fengmingqi=1;
- }
- }
- if(s2==0) // 2號
- {
- delayms(5);
- if(s2==0)
- {
- P2=0;
- P3=1;
- OLED_ShowString(50,2," ");
- OLED_ShowString(70,2,"*");
- OLED_ShowString(90,2," ");
- OLED_ShowString(110,2," ");
- EA=0;
- fengmingqi=0;
- delayms(10);
- fengmingqi=1;
- }
- }
- if(s3==0) //3號
- {
- delayms(5);
- if(s3==0)
- {
- P2=0;
- P3=1;
- OLED_ShowString(50,2," ");
- OLED_ShowString(70,2," ");
- OLED_ShowString(90,2,"*");
- OLED_ShowString(110,2," ");
- EA=0;
- fengmingqi=0;
- delayms(10);
- fengmingqi=1;
- }
- }
- if(s4==0) // 4號
- {
- delayms(5);
- if(s4==0)
- {
- P2=0;
- P3=1;
- OLED_ShowString(50,2," ");
- OLED_ShowString(70,2," ");
- OLED_ShowString(90,2," ");
- OLED_ShowString(110,2,"*");
- EA=0;
- fengmingqi=0;
- delayms(10);
- fengmingqi=1;
- }
- }
- }
-
- void keyscan2()
- {
- if(s8==0) //移位
- {
- delayms(5);
- if(s8==0)
- {
- s1num++;
- while(!s1);
- if(s1num==1)
- {
- delayms(5);
- OLED_ShowString(40,4,"*");
- }
- }
- if(s1num==2)
- {
- delayms(5);
- OLED_ShowString(40,4," ");
- OLED_ShowString(60,4,"*");
- }
- if(s1num==3)
- {
- delayms(5);
- OLED_ShowString(40,4," ");
- OLED_ShowString(60,4," ");
- OLED_ShowString(80,4,"*");
- }
- if(s1num==4)
- {
- delayms(5);
- OLED_ShowString(40,4," ");
- OLED_ShowString(60,4," ");
- OLED_ShowString(80,4," ");
- OLED_ShowString(100,4,"*");
- }
- if(s1num==5)
- {
- delayms(5);
- s1num=0;
- OLED_ShowString(40,4," ");
- OLED_ShowString(60,4," ");
- OLED_ShowString(80,4," ");
- OLED_ShowString(100,4," ");
- }
- while(!s8);
- }
- if(s1num!=0)
- { //加分
- if(s6==0)
- {
- delayms(5);
- if(s6==0)
- {
- while(!s6);
- if(s1num==1)
- {
- a++;
- OLED_ShowString(10,4,"+");
- OLED_ShowNum(30,6,a,3,14);
- if(a>=98)
- a=98;
- }
- if(s1num==2)
- {
- b++;
- OLED_ShowString(10,4,"+");
- OLED_ShowNum(52,6,b,3,14);
- if(b>=98)
- b=98;
- }
- if(s1num==3)
- {
- c++;
- OLED_ShowString(10,4,"+");
- OLED_ShowNum(74,6,c,3,14);
- if(c>=98)
- c=98;
- }
- if(s1num==4)
- {
- d++;
- OLED_ShowString(10,4,"+");
- OLED_ShowNum(96,6,d,3,14);
- if(d>=98)
- d=98;
- }
- }
- }
- if(s7==0) //減分
- {
- delayms(5);
- if(s7==0)
- {
- while(!s7);
- if(s1num==1)
- {
- if(a>0)a--;
- OLED_ShowString(10,4,"-");
- OLED_ShowNum(30,6,a,3,14);
- }
- if(s1num==2)
- {
- if(b>0)b--;
-
-
- OLED_ShowString(10,4,"-");
- OLED_ShowNum(52,6,b,3,14);
- }
- if(s1num==3)
- {
- if(c>0)c--;
- OLED_ShowString(10,4,"-");
- OLED_ShowNum(74,6,c,3,14);
- }
- if(s1num==4)
- {
- if(d>0)d--;
- OLED_ShowString(10,4,"-");
- OLED_ShowNum(96,6,d,3,14);
- }
- }
- }
- }
- }
-
- void keyscan3()
- {
- if(s5==0)
- {
- delayms(5);
- if(s5==0)
- {
-
- EA=1;
- OLED_ShowString(50,2," ");
- OLED_ShowString(70,2," ");
- OLED_ShowString(90,2," ");
- OLED_ShowString(110,2," ");
- if(s1==1);
- if(s2==1);
- if(s3==1);
- if(s4==1);
- }
- }
- }
-
-
- void main(void)
- {
- ggd=0;
- TMOD=0X01;
- TH0=0xf4;
- TL0=0x48;
- EA=1;
- ET0=1;
- TR0=1;
- P3=0xef;
- OLED_Init(); //初始化OLED
- OLED_Clear();
-
- OLED_Clear();
- OLED_ShowCHinese(32,0,0); //選
- OLED_ShowCHinese(48,0,1); //手
- OLED_ShowCHinese(64,0,2); //得
- OLED_ShowCHinese(80,0,3); //分
-
- OLED_ShowCHinese(0,2,5); //編
- OLED_ShowCHinese(16,2,6); //號
- OLED_ShowString(40,2,"1");
- OLED_ShowString(60,2,"2");
- OLED_ShowString(80,2,"3");
- OLED_ShowString(100,2,"4");
-
- OLED_ShowCHinese(0,6,3); //分
- OLED_ShowCHinese(16,6,4); //數(shù)
- OLED_ShowString(40,6,"0");
- OLED_ShowString(60,6,"0");
- OLED_ShowString(80,6,"0");
- OLED_ShowString(100,6,"0");
- while(1)
- {
-
- keyscan2();
- keyscan3();
-
-
- }
- }
- int i = 0;
- void T0_time() interrupt 1
- {
-
- i++;
- TH0=0xf4;
- TL0=0x48;
- if(i > 7)
- {i = 0;}
- P2=table[i];
- P3=table1[i];
- keyscan1();
- }
復(fù)制代碼
|