找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3111|回复: 1
收起左侧

keil 4*4键盘(P0接键盘P2输出)怎么无法保留原状态 ,在按键送开后P2为全低

[复制链接]
ID:46670 发表于 2012-11-22 09:08 | 显示全部楼层 |阅读模式
#include<reg51.h>
#include<intrins.h>
#define unchar unsigned char
#define unint unsigned int
void main()
{ unint key();
void ms_delay(unint delaytime);
P2=0x20;
a:P1=0xff;
P2=key();
ms_delay(500);
goto a;
}
unint key()
{unint mask=0xfe,temp,k=P2;
unint row=0,line=0;
const unint code numb[4][4]={0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,
0xd7,0xb7,0x77};

for(line=0;line<4;line++)
{P1=mask;
mask=mask*1;
temp=P1;
if(temp != mask) /*key pushed in the line ?*/
{ms_delay(300); /*to confirm a key pushed*/
if((temp&0xf0)==temp) return 0x20;
for(row=0;row<4;row++) /*抓到了行,寻列。并且P口已可读出*/
{if(P1==numb[line][row]) /*反查表,读出行列*/
return line*4+row+1;
}}
else mask=_crol_(mask,1); /*查表*/
}
P1=0x0f; /*no key*/
temp=P1;
while(temp&0x0f==0x0f)
{P1=0xf0;
return p2;}/*保留原状态*/
}

void ms_delay(unint delaytime)
{unint i=0;
for(;delaytime>0;delaytime--)
{for(i=0;i<124;i++); }}
回复

使用道具 举报

ID:46452 发表于 2012-11-22 20:17 | 显示全部楼层
我也搞不懂啊  那里出差了呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表