AT89C51电子密码锁矩阵键盘控制遇到问题,求单片机程序高手解答

//**************************************************//函数名:键盘识别函数//功能:通过扫描对键盘进行识别//***... //**************************************************
//函数名:键盘识别函数
//功能:通过扫描对键盘进行识别
//**************************************************
uchar key_num(){uint temp,b;
while(1){P1=0xfe; //开始扫描第一行
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0;
if(temp!=0xf0){
while(temp!=0xf0){temp=P1;temp=temp&0xf0;}
switch(b){case 0xee: return '4';break;
case 0xde: return '3';break;
case 0xbe: return '2';break;
case 0x7e: return '1';break;}}}
P1=0xfd; //扫描第二行
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0;
if(temp!=0xf0){
while(temp!=0xf0){temp=P1;temp=temp&0xf0;}
switch(b){case 0xed: return '8';break;
case 0xdd: return '7';break;
case 0xbd: return '6';break;
case 0x7d: return '5';break;}}}
P1=0xfb; //扫描第三行
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0;
if(temp!=0xf0){
while(temp!=0xf0){temp=P1;temp=temp&0xf0;}
switch(b){ case 0xeb: return 'b';break;
case 0xdb: return 'a';break;
case 0xbb: return '0';break;
case 0x7b: return '9';break;}}}}}
/****************************************
只扫描第四行,禁止数字键输入
****************************************/
uchar key_gn(){uint temp,b;
while(1){P1=0xf7; //扫描第四行
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0){delay(1);temp=P1;b=temp;temp=temp&0xf0;
if(temp!=0xf0){
while(temp!=0xf0){ temp=P1;temp=temp&0xf0;}
switch(b){case 0xe7: return 'f';break;
case 0xd7: return 'e';break;
case 0xb7: return 'd';break;
case 0x77: return 'c';break;}}} }}
/****************************************
密码函数:将输入的密码写放进数组
****************************************/
uchar enter(uchar password[]){uchar m=0,j,back=0;
for(m=0;;){j=key_num();time_50ms=0;time_1s=0;
if(j>='0'&&j<='9'&&m<6){write_1602com(0x06);password[m]=j; m++;
write_1602dat('*');}
if(j=='a')
{password[m]='\0';return 1;} //输入撤销键无效,仿真结果为数字0,无撤销功能,求大神指导该如何该为撤销功能。。
if(j=='b')
{if(m>0){write_1602com(0x11);write_1602dat(0x20);
write_1602com(0x11);password[m]='\0';m--;}

}
}
}
展开
 我来答
zhang_yi_cheng
推荐于2016-03-16 · TA获得超过353个赞
知道小有建树答主
回答量:186
采纳率:100%
帮助的人:134万
展开全部
这段代码来分析,a键不是撤销,是确认输入完成键。
//没测试,程序大致应该修改如下
if(j=='a')
{

for(i=0;i<m;i++)
{
password[i]='';
write_1602dat('');

}
}

如果是回退键则
if(j=='a'){password[m]='';write_1602dat('');m--;}
追问
能否QQ聊吗?我将完整的程序发给你,你说的对,这样定义a键变成确认,b变成撤销键了,但我无论怎么改,总有一个功能失效,要么撤销有用确认没有了,或者确认有用撤销按不出来。。求解,急啊!!帮我弄好再追加50分

51五370五30 谢谢咯
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
力控科技
2024-12-19 广告
第一步:看XPE是什么版,如果内核是英文版,需要安装一个MUI包,即语言包。第二步:进入控制面板-区域和语言选项,如下图,在区域选项中,选择“中文(中国)”,位置也为“中国”,在高级选项中,代码页转换表中,将所有的“简体中文”都选择上。... 点击进入详情页
本回答由力控科技提供
百度网友2744c94
2014-05-18 · TA获得超过143个赞
知道小有建树答主
回答量:234
采纳率:100%
帮助的人:154万
展开全部
是不是在数据清零之后再加一个写入write(),具体不了解
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式