使用p1.0-p1.7口实现4*4键盘输入,并用p0口和p2口控制数码管显示输入键值 单片机汇编语

 我来答
GUEL86
2017-12-08 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2680万
展开全部

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int//矩阵键盘按键特征码表

uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};//延时

void DelayMS(uint x)  // 延时

{

uchar i;

while(x--)

for(i=0;i<120;i++);

}

uchar Keys_Scan()     //键盘扫描

{

uchar sCode,kCode,i,k; //低4位置0,放入4行

P1=0xf0;           

if((P1&0xf0)!=0xf0)      //若高4位出现0,则有键按下

{

DelayMS(2);

if((P1&0xf0)!=0xf0)

{

sCode=0xfe;        //行扫描码初值

for(k=0;k<4;k++) //对4行分别进行扫描

{

P1=sCode;

if((P1&0xf0)!=0xf0)

{

kCode=~P1;

for(i=0;i<16;i++)  //查表得到按键序号并返回

if(kCode==KeyCodeTable[i])

return(i);

}

else   sCode=_crol_(sCode,1);

}

}

}

return(-1);

}

void main()   //主程序

{

uchar i,P2_LED,P1_LED;

uchar KeyNo=-1;      //按键序号,-1表示无按键

while(1)

{

KeyNo=Keys_Scan(); //扫描键盘获取按键序号KeyNo

if(KeyNo!=-1)

{

P2_LED=0xff;

P1_LED=0xff;

for(i=0;i<=KeyNo;i++) //键值越大,点亮的LED越多

{

if(i<8)    P1_LED>>=1;

else       P2_LED>>=1;

}

P3=P1_LED;   //点亮条形LED

P2=P2_LED;

}

}

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式