单片机4*4矩阵键盘,求高手

#include<reg51.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintuch... #include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]= {0x3f,0x06,0x5b,0x4f, //0~3
0x66,0x6d,0x7d,0x07, //4~7
0x7f,0x6f,0x77,0x7c, //8~b
0x39,0x5e,0x79,0x71};
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);}
// 分别给高四位 置0,同时检测低四位
uchar Keyscan(void)
{
uchar i,j, temp, Buffer[4]= {0xef, 0xdf, 0xbf, 0x7f};
for(j=0; j<4; j++)
{
P1= Buffer[j];
/*以下三个_nop_();作用为让 P1 口的状态稳定*/
_nop_();
_nop_();
_nop_();
temp= 0x01;
for(i=0; i<4; i++)
{
if(!(P1& temp))
{
return (i+j*4); //返回取得的按键
}

temp <<= 1;
}
}
}

void main()
{ uchar key=;
while(1)
{

P2=0; //数码管位码

key=keyscan();

P0=table[key];//数码管段码

}
}

问题1 为什么没按键按下时数码管显示4;
问题2 当按键按下时显示某个数,但松开按键时又再次显示4,如何让显示的数保持住,例如当按键按下时显示0,如何写程序让按键松开时一直显示0,再次有按键按下时显示其它数字,
展开
 我来答
jeason_young
2011-09-19 · 超过15用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:36.8万
展开全部
程序有问题:1、没有按键按下时,你的键盘扫描程序并没有返回值;
2、主函数一直在对key值进行扫描,当你按下按键时,显示键值,这个没问题;但是,当你松开按键时,扫描没有按键按下,也就没有返回值,key值应该是一个随机的数! 我还没搞明白为什么会是4。
东莞大凡
2024-08-07 广告
作为东莞市大凡光学科技有限公司的一员,我们深知Matlab圆点标定板在相机标定中的重要性。该标定板通过均匀分布的圆点,帮助精确计算相机参数,优化成像效果。Matlab强大的编程功能,使得我们能够灵活设计标定板,调整圆点大小、数量和分布,以满... 点击进入详情页
本回答由东莞大凡提供
不懈求知2
2011-09-19 · TA获得超过452个赞
知道小有建树答主
回答量:574
采纳率:13%
帮助的人:79.3万
展开全部
看看初值的设置,用锁存器可以保持住上次的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2011-09-19 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友00c59a2
2011-09-19 · 超过31用户采纳过TA的回答
知道答主
回答量:185
采纳率:0%
帮助的人:72.2万
展开全部
松手等待。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式