近期c51单片机程序实例成为网络焦点,我们通过专业视角对相关信息进行了梳理 ,期待这些内容能为您排忧解难。
#include<reg51.h>
#define?uchar?unsigned?char
uchar?tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0到9
uchar?num,cnt,disn;
uchar?keyval,disk;
uchar?led[]={1,2,3,4};
void?dealdat(uchar?a)
{
led[0]=0;
led[1]=0;
led[2]=0;
led[3]=0;
led[a]=disk;
}
void?delay(unsigned?int?a)
{
unsigned?int?i,j;
for(i=0;i<a;i++)
for(j=0;j<1000;j++);
}
void?t0isr()?interrupt?1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(num)
{
case?0:P2=0x01;break;
case?1:P2=0x02;break;
case?2:P2=0x04;break;
case?3:P2=0x08;break;
default:break;
}
P0=~tab[led[num]];
num++;
num&=0x03;
cnt++;
if(cnt>100)
{
cnt=0;
disn++;
disn%=4;
dealdat(disn);
}
}
uchar?kbscan(void)
{
unsigned?char?sccode,recode;
P3=0x0f;//发0扫描,列线输入
if?((P3?&?0x0f)?!=?0x0f)//有键按下
{
// delay(20);?//延时去抖动
if?((P3&0x0f)!=?0x0f)
{
sccode?=?0xef;//逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
return((~sccode)+(~recode));
?}
else
sccode=(sccode<<1)|0x01;
}
}
}
return?0;//无键按下,返回0
}
void?getkey(void)
{
unsigned?char?key;
key=kbscan();
if(key==0){keyval=0xff;return;}
switch(key)
{
case?0x11:keyval=7;break;
case?0x12:keyval=4;break;
case?0x14:keyval=1;break;
case?0x18:keyval=10;break;
case?0x21:keyval=8;break;
case?0x22:keyval=5;break;
case?0x24:keyval=2;break;
case?0x28:keyval=0;break;
case?0x41:keyval=9;break;
case?0x42:keyval=6;break;
case?0x44:keyval=3;break;
case?0x48:keyval=11;break;
case?0x81:keyval=12;break;
case?0x82:keyval=13;break;
case?0x84:keyval=14;break;
case?0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
main()
{
TMOD=0x11;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
if(keyval!=0xff)disk=keyval;
delay(10);
}
}
本文已完整呈现c51单片机程序实例的核心内容解析,若这些分析对您的工作或学习有所助益 ,建议您将本站加入书签以便后续查阅 。
来源:http://luzgz.org.cn/news-rog/7.html