標(biāo)題:
利用oled顯示的51單片機(jī)六人搶答器源代碼
[打印本頁(yè)]
作者:
愛(ài)學(xué)習(xí)009
時(shí)間:
2019-3-31 21:56
標(biāo)題:
利用oled顯示的51單片機(jī)六人搶答器源代碼
這個(gè)是利用iic驅(qū)動(dòng)的oled屏幕顯示,與數(shù)碼管顯示會(huì)有不同,但主要的程序還是一樣的,希望可以給大家提供一些資料
單片機(jī)源程序如下:
#include "reg52.h"
#include "intrins.h"
#include "codetab.h"
#include "LQ12864.h"
#include<stdio.h>
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit beep=P2^3;
uchar key,j,k,temp,wei;
daojishi=5;
bit begin,end,clear;
int a0,b0;c0;d0;e0;f0=5;
unsigned int pp;
uchar diss[20]={0};
void delay1(int i) //延時(shí)函數(shù)
{
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void keyscan() //按鍵掃描
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay1(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=1;
wei++;
break;
case 0xde:
key=2;
wei++;
break;
case 0xbe:
key=3;
wei++;
break;
case 0x7e:
key=4;
wei++;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=5;
wei++;
break;
case 0xdd:
key=6;
wei++;
break;
case 0xbd:
clear=1;
break;
case 0x7d:
begin=1;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp&0xf0;
beep=0;
}
beep=1;
}
}
}
void kaiji(void)
{
OLED_Init(); //OLED初始化
OLED_P16x16Ch(0,0,1); //初始顯示的字符
OLED_P16x16Ch(16,0,2);
OLED_P16x16Ch(33,0,3);
OLED_P16x16Ch(0,3,4);
OLED_P16x16Ch(16,3,5);
OLED_P16x16Ch(32,3,6);
OLED_P16x16Ch(0,6,7);
OLED_P16x16Ch(16,6,8);
OLED_P16x16Ch(32,6,9);
}
void fangui()
{
if(key!=0)
{
switch(wei) //傳遞字符,顯示
{
case 1: a0=key;
sprintf((int*)diss,"%d",a0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
case 2: b0=key;
sprintf((int*)diss,"%d",b0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
case 3: c0=key;
sprintf((int*)diss,"%d",c0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
case 4: d0=key;
sprintf((int*)diss,"%d",d0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
case 5: e0=key;
sprintf((int*)diss,"%d",e0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
case 6: f0=key;
sprintf((int*)diss,"%d",f0);
OLED_P6x8Str(40,0,diss);
beep=0;
break;
}
}
}
void main(void)
{
kaiji();
TMOD=0x01;
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;//46080的來(lái)歷,為50000*11.0592/12
ET0=1;
EA=1;
while(1)
{
keyscan();
if(begin) //開(kāi)始計(jì)時(shí)并搶答
{
if(!end)
{
TR0=1; //中斷開(kāi)始
if(pp==20) //中斷次數(shù)
{
pp=0;
daojishi--;
}
sprintf((int*)diss,"%d",daojishi);
OLED_P6x8Str(40,6,diss);
if(key!=0)
{
a0=key; //倒計(jì)時(shí)結(jié)束
sprintf((int*)diss,"%d",a0);
OLED_P6x8Str(40,3,diss);
}
if(!daojishi|a0)
{
end=1;
TR0=0; //中斷暫停
pp=0;
}
}
}
else
{
fangui();
}
if(clear)
{
a0=0;key=0;begin=0;end=0;beep=1;daojishi=5;f0=5;clear=0; //數(shù)據(jù)清除
OLED_CLS();//清屏
kaiji();
}
}
}
void time0() interrupt 1 //中斷函數(shù)
{ TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
pp++;
}
復(fù)制代碼
所有資料51hei提供下載:
單片機(jī)課設(shè).zip
(43.62 KB, 下載次數(shù): 7)
2019-3-31 21:53 上傳
點(diǎn)擊文件名下載附件
只有程序
下載積分: 黑幣 -5
作者:
admin
時(shí)間:
2019-4-1 05:12
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1