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

关于键盘IO口不在一个端口的矩阵键盘

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

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

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

×
实验板上的矩阵键盘,比如4X4的,都在一个端口上,比如都在P3口上,这样操作比较方便。比如
key_dat=P3; 端口的数据就得到了,但有时,硬件设计时,键盘8个口不在同一端口上,比如,key1在P1^4,key2在P3^5等等,这样编程就很麻烦。我试着把在不同端口的键盘口映射到一个变量中,通过此变量来操作,这样无论底层硬件怎么安排,键盘的扫描程序不用变,接到新任务时只要改一下底层的驱动程序就行了。可是我没有成功。,我用的是TX—1c的实验板。底层硬件驱动是这样写的;

//按键端口定义,
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
sbit key6=P3^5;
sbit key7=P3^6;
sbit key8=P3^7;


uchar key_bit[8]; //申明一个数组


/**********************************************
在键盘扫描函数中,调用这个带返回值的函数就可得到按键IO口的状态。
若硬件有变化,改变上面的按键端口定义就行了
************************************************/
uchar key_map()
{
uchar i,k;
key_bit[0]=key8;
key_bit[1]=key7;
key_bit[2]=key6;
key_bit[3]=key5;
key_bit[4]=key4;
key_bit[5]=key3;
key_bit[6]=key2;
key_bit[7]=key1;
for(i=0;i<8;i++)
{
k=(k<<1)|key_bit; //通过这样一个循环把八个键盘端口的值集合到变量K中,
}
return k;
}
我感觉我的思路是对的,程序的其他部分都是验证过的,可这样写就是不行。哪位前辈指教一二,问题出在哪里?
或者谁有含这种思路(先将按键端口映射到一个“虚拟”端口上,再操作)的例程,发上来看看,咱也好借鉴一下高手的思路。

罗嗦一大段,不知把意思表达清楚没有,呵呵
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-25 04:21 , Processed in 0.055049 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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