寒假之前学过一些51单片机的基础内容,可是中间暂停了好久;没有继续深入学习,最近重拾51,感觉很长一段时间内的不良习惯加上自己未进入最佳状态,大脑好像锈住了,从今天起每天开博,不为别人,记录自己的生活,记录自 己的进步。
实践才是王道,加油吧骚年!!!!
一、用矩阵控制数码关源代码:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define dula P0 //段选
#define wela P2
#define jz P1
uchar key_num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint x)
{
uint y;
for(;x>0;x--)
for(y=110;y>0;y--);
}
void display(uchar num)
{
if (num==0)
{
wela=0xfe;
dula=table[num];
delayms(5);}
else if(num==1)
{
wela=0xfd;
dula=table[num];
delayms(5);
}
else if(num==2)
{
wela=0xfb;
dula=table[num];
delayms(5);
}
else if(num==3)
{
wela=0xf7;
dula=table[num];
delayms(5);
}
else if(num==4)
{
wela=0xfb;
dula=table[num];
delayms(5);
}
}
void keyscan()
{
uchar a;
jz=0x0f;
if(jz!=0x0f)
{
delayms(5) ;
if(jz!=0x0f)
{
switch(jz) //扫描列
{
case 0x07:
key_num=0;break;
case 0x0b:
key_num=1;break;
case 0x0d:
key_num=2;break;
case 0x0e:
key_num=3;break;
}
jz=0xf0;
switch(jz)//扫描行
{
case 0x70:
key_num=key_num;break;
case 0xb0:
key_num=key_num+4;break;
case 0xd0:
key_num=key_num+8;break;
case 0xe0:
key_num=key_num+12;break;
}
while((a<50)&&(jz!=0xf0))
{
delayms(5);
a++;
}
}
}
}
void main()
{
while(1)
{
keyscan();
display(key_num);
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------
MOVED FROM LOFTER