標題:
基于51單片機的搶答器制作,源程序,OLED顯示
[打印本頁]
作者:
歸依龍井
時間:
2016-10-13 12:07
標題:
基于51單片機的搶答器制作,源程序,OLED顯示
基于51單片機的搶答器制作,源程序,OLED顯示
下載:
搶答器程序.zip
(81.57 KB, 下載次數: 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-----本模塊片選腳已經幫用戶接地,無需再接
// ----------------------------------------------------------------
//******************************************************************************/
#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); //數
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();
}
復制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1