找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

大家能帮我看看这个键盘扫描函数不

[复制链接]
admin 发表于 2012-9-2 21:20:54 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
uchar keyscan(void) //键盘扫描函数,使用行列反转扫描法
{
uchar code keycode[]={0x7e,0x7d,0x7b,0x77,0xbe,0xbd,0xbb,0xb7,0xde,0xdd};//10个按键码值
uchar cord_h,cord_l,k=0xff,i;//行列值中间变量
P3=0x0f; //行线输出全为0
cord_h=P3&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
delay(100); //去抖
if(cord_h!=0x0f)
{
cord_h=P3&0x0f; //读入列线值
P3=cord_h|0xf0; //输出当前列线值
cord_l=P3&0xf0; //读入行线
for(i=0;i<10;i++)
{
if(cord_h+cord_l==keycode) //查找行列组合值在键盘表中位置
{ k=i; //找到,该位置即为键值
break;
} }

P3=0x0f;
while(P3!=0x0f); //等待按键释放
return k;
}
}return k; //返回该值
}

这个程序有问题吗?为什么后面执行一直不正确?

while(1)
{
num1=keyscan();
while(num1)
{
we0=0; //数码管动态扫描,we0,1,2都是位选。38译码器,亮前两个灯。
we1=0;
we2=0;
P0=tab[num1];
delay(300);
we0=1;
we1=0;
we2=0;
P0=tab[num2];
delay(300);

}

}

小弟程序是想让按下按键第一个数码管亮对应数值,再按下亮第二个数值。一直调试不成功,各位大哥帮帮忙啊。
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 13:33 , Processed in 0.053427 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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