预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共20页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

单片机控制的矩阵键盘扫描程序集 各种各样的矩阵键盘扫描程序集 矩阵键盘的扫描对初学者来说是不可避免的,然而也相对来说有点难度. 鉴于此,我整理了一下,我所遇到的矩阵键盘扫描程序集,将相继贴上来,供大家参考! 说明:这些大多都是网上转贴来的,其所有权归原作者! 谢谢合作. 最简单矩阵键盘扫描程序 key:MOVp0,#00001111b;上四位和下四位分别为行和列,所以送出高 低电压检查有没有按键按下 jmpk10;跳到K10处开始扫描,这里可以改成其它条件转移指令来决 定本次扫描是否要继续,例如减1为0转移或者位为1或0才转移,这主 要用来增加功能,确认上一按键功能是否完成?是否相当于经过了延 时?是否要封锁键盘? goend:jmpkend;如果上面判断本次不执行键盘扫描程序,则立即转 到程序尾部,不要浪费CPU的时间 k10:jbp0.0,k20;扫描正式开始,先检查列1四个键是否有键按下, 如果没有,则跳到K20检查列2 k11:MOVp0,#11101111b;列1有键按下时,P0.0变低,到底是那一个键 按下?现在分别输出各行低电平 jbp0.0,k12;该行的键不按下时,p0.0为高电平,跳到到K12,检查其 它的行 MOVr1,#1;如果正好是这行的键按下,将寄存器R0写下1,表示1号键 按下了 k12:MOVp0,#11011111b jbp0.0,k13 MOVr1,#2;如果正好是这行的键按下,将寄存器R0写下2,表示2号键 按下了 k13:MOVp0,#10111111b jbp0.0,k14 MOVr1,#3;如果正好是这行的键按下,将寄存器R0写下3,表示3号键 按下了 k14:MOVp0,#01111111b jbp0.0,kend;如果现在四个键都没有按下,可能按键松开或干扰, 退出扫描(以后相同) MOVr1,#4如果正好是这行的键按下,将寄存器R0写下4,表示4号键 按下了 jmpkend;已经找到按下的键,跳到结尾吧 k20:jbp0.1,k30;列2检查为高电平再检查列3、4 k21:MOVp0,#11101111b;列2有健按下时,P0.0会变低,到底是那一 行的键按下呢?分别输出行的低电平 jbp0.1,k22;该行的键不按下时p0.0为高电平,跳到到K22,检查另 外三行 MOVr1,#5;如果正好是这行的键按下,将寄存器R0写下5,表示5号键 按下了(以后相同,不再重复了) k22:MOVp0,#11011111b jbp0.1,k23 MOVr1,#6 k23:MOVp0,#10111111b jbp0.1,k24 MOVr1,#7 k24:MOVp0,#01111111b jbp0.1,kend MOVr1,#8 jmpkend;已经找到按下的键,跳到结尾吧(以后相同,不要重复了 ) k30:jbp0.2,k40 k31:MOVp0,#11101111b jbp0.2,k32 MOVr1,#9 k32:MOVp0,#11011111b jbp0.2,k33 MOVr1,#10 k33:MOVp0,#10111111b jbp0.2,k34 MOVr1,#11 k34:MOVp0,#01111111b jbp0.2,kend MOVr1,#12 jmpkend k40:jbp0.3,kend k41:MOVp0,#11101111b jbp0.3,k42 MOVr1,#13 k42:MOVp0,#11011111b jbp0.3,k43 MOVr1,#14 k43:MOVp0,#10111111b jbp0.3,k44 MOVr1,#15 k44:MOVp0,#01111111b jbp0.3,kend MOVr1,#16 kend:ret 行列扫描键盘可检测出双键按下 #include<reg52.h> #defineulongunsignedlong #defineuintunsignedint #defineucharunsignedchar externvoiddelay(unsignedintx); unsignedcharTab_key[]=//行列式键盘映射 {0x00,//无键按下 ’’7’’,’’8’’,’’9’’,’’/’’, ’’4’’,’’5’’,’’6’’,’’*’’, ’’1’’,’’2’’,’’3’’,’’-’’, ’’C’’,’’0’’,’’=’’,’’+’’, //下面为按’’C’’同时再按的键: ’’7’’,’’8’’,’’9’’,’’/’’, ’’4’’,’’5’’,’’6’’,’’*’’, ’’1’’,’’2’’,’’3’’,’’-’’, ’’0’’,’’=’’,’’+’’