单片机控制的矩阵键盘扫描程序集.docxVIP

  • 0
  • 0
  • 约1.15万字
  • 约 25页
  • 2019-09-27 发布于广东
  • 举报
单J ;?机控制的矩阵键盘担描程序集 各种各样的矩阵键盘扫描程序集 矩阵键盘的扫描对初学者来说是不可避免的,然而也相对来说有点难度. 鉴于此,我整理了一卜:我所遇到的矩阵键盘扫描程序集,将相继贴上來,供大家参考! 说明:这些大多都是网上转贴来的,英所冇权归原作者! 谢谢合作. 最简单矩阵键盘扫描程序 kcy:MOV p0,;±四位和下四位分别为行和列,所以送出高 低电压检查有没有按键按下 jmp kl();跳到K10处开始扫描,这里可以改成其它条件转移指令来决 定本次扌I描是否要继续,例如减1为0转移或者位为1或0才转移,这主 要用來增加功能,确认上一按键功能是否完成?是否相当于经过了延 吋?是否要封锁键盘? goend:jmp kend;如果上面判断本次不执彳亍键盘扌11描程序,则立即转 到程序尾部,不要浪费CPU的时间 kio:jb p0.0,k20;扫描正式开始,先检查列1四个键是否有键按下, 如果没有,则跳到K20检查列2 kllrMOV p0,;列1有键按下时,P0.0变低,到底是那一个键 按下?现在分别输出各行低电平 jbp0.0,kl2;该行的键不按下时,pO.O为高电平,跳到到K12,检查其 它的行 MOVrl,#l;如果正好是这行的键按下,将寄存器R0写下1,表示1号键 按下了 kl2:MOV p(), jb pO.O,kl3 MOVrl,#2;如果止好是这行的键按下,将寄存器R0写下2,表示2号键 按下了 kl3:MOV p0, jb p0.0,kl4 MOV,#3;如果正好是这行的键按下,将寄存器R0写下3,表示3号键 按下了 kl4:MOV p0,#01 111 111b jb pO?O,kend;如果现在四个键都没冇按下,可能按键松开或干扰, 退出扫描(以后相同) MOVrl,#4如果正好是这行的键按下,将寄存器R0写下4,表示4号键 按下了 jmpkend;已经找到按卜的键,跳到结尾吧 k20:jb pO.l,k3O;列2检查为高电平再检查列3、4 k21:MOV p0,洌2有健按下时,P0.0会变低,到底是那一 行的键按下呢?分别输出行的低电平 jbp()」,k22;该行的键不按下时p().()为高电平,跳到到K22,检杳另 外三行 MOVrl,#5;如果止好是这行的键按下,将寄存器R0写下5,表示5号键 按下了(以后相同,不再重复了) k22:MOV pO,# jbp0.1,k23 MOVrl,#6 k23:MOV p0, jb p0.1,k24 MOVrl,#7 k24:MOV p0, jb pO.l,kend MOV rI,#8 jmpkend;Ll经找到按下的键,跳到结尾吧(以后相同,不要重复了 ) k30:jb p0.2,k40 k31:MOV p0,#HI01111b jb p().2,k32 MOVrl,#9 k32:MOV p0, jb pO.2,k33 MOVrl,#10 k33:MOV p0, jb p0.2,k34 MOVrl,#ll k34:MOV p0, jb p().2,kend MOVrl,#12 jmp kend k40:jb pO.3,kend k41:M0V p0, jb p0.3,k42 M0Vrl,#l3 k42:MOV p0, jb p0.3,k43 MOV rl,#14 k43:MOV p0, jb p0.3,k44 MOVrL#15 k44:MOV pO,#Olllllllb jb pO.3,kend MOVrl,#16 kend: ret 行列扫描键盘可检测出双键按K #include reg52.h #define ulong #define uint #define uchar unsigned long unsigned int unsigned char extern void delay(unsigned int x); unsigned char Tab_key[]= {0x00, ,,7,,,,,8,,,,,9,,,,,/,,, ,,4,,,,,5?,,,6,,,,,*,,, ,VP,% 〃行列式键盘映射 〃无键按下 //下面为按C”同时再按的键: ,,0,, // Pl 口行列式键盘// #define KEYPIN.L Pl 低四位输入〃 #define KEYP1N_H Pl //定义键扫描列端口为Pl //定义键扌打描行端口为P1高 四位扫描输出〃 /

文档评论(0)

1亿VIP精品文档

相关文档