线反转法键盘扫描,数码管显示健值(原创)。。
线反转法键盘扫描,数码管显示健值(原创)。。《初学者,望指教》以下是程序。。。#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar keytab={{11,12,13,14}, //键盘编码
{21,22,23,24},
{31,32,33,34},
{41,42,43,44}
};
uchar tabled={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//数码管段选显示数字编码
uchar code tablew={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选编码
void Delay(uint i);//延时函数申明
uchar keyscan();//键盘扫描函数申明
void table();//数码管显示函数申明
void main() //主函数
{
while(1)
{
table();
}
}
void Delay(uint i) //延时函数
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
uchar keyscan() //键盘扫描函数
{
uchar hang,lie,ltemp,htemp,KEY;
P1=0xf0;
while(1)
{
P1=0xf0;
if((P1&0xf0)!=0xf0)
{
Delay(20);
if((P1&0xf0)!=0xf0)
{
htemp=P1;
switch(htemp)
{
case 0xe0: hang=0;break;
case 0xd0: hang=1;break;
case 0xb0: hang=2;break;
case 0x70: hang=3;break;
}
P1=0x0f;
Delay(10);
ltemp=P1;
switch(ltemp)
{
case 0x07: lie=0;break;
case 0x0b: lie=1;break;
case 0x0d: lie=2;break;
case 0x0e: lie=3;break;
}
KEY=keytab;
return KEY;
}
}
}
}
void table()//数码管显示函数
{
uint i,j;
uchar temp;
temp=keyscan();
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(temp==keytab)
{
P2=0;
P0=tabled;
};
}
}
} 楼主就从消灭哪几个Delay();开始改进吧,这将是一个有效的进步{:smile:} 矩阵键盘反转法早有了,赞同LS,建议LZ从消灭Delay();开始更进一层 用状态机更好! lxvtag 发表于 2012-5-30 23:31 static/image/common/back.gif
楼主就从消灭哪几个Delay();开始改进吧,这将是一个有效的进步
能详细说下吗???我初学者,谢谢指教。。 杏花雨 发表于 2012-5-31 13:08 static/image/common/back.gif
能详细说下吗???我初学者,谢谢指教。。
看这个帖子:
http://www.ourdev.cn/forum.php?mod=viewthread&tid=4310923&highlight=%E6%9C%80%E9%AB%98%E6%95%88%E7%8E%87%E4%BD%BF%E7%94%A8
页:
[1]