单片机课程设计4x8矩阵键盘.docx
《单片机课程设计4x8矩阵键盘.docx》由会员分享,可在线阅读,更多相关《单片机课程设计4x8矩阵键盘.docx(11页珍藏版)》请在冰豆网上搜索。
单片机课程设计4x8矩阵键盘
单片机原理与应用课程设计
矩阵式键盘与显示
班级:
机102-1
姓名:
许传栋
学号:
201056502133
组号:
六组
组员:
孔令伟、张叶荣、尚桂香、许传栋、刘金林
目录:
一、设计要求(3
二、硬件设计(3
三、键盘的运行(6
四、数码管的显示(6
五、键盘键值的确定(6
六、按键顺序码的显示(7
七、74LS48的应用(8
八、数码管接口引脚(9
九、程序设计(10
附录(18
一、设计要求
1、完成单片机与32键矩阵式键盘的连接方法。
2、识别是否有键按下,并将键值用两位数码管显示出来。
3、用软件延时取出按键抖动。
二、硬件设计
1、总体构思
本次设计为32键矩阵式键盘,因此采用4x8式按键分布。
分为4行8列的布局。
如图T2_1
图T2_1
当行线和列线分别置一和置零时,按键两端的电压将发生改变。
将键盘的所有引线连出,行线联接到P2口的低四位,列线联接到P1口,从而构成了单片机对键盘按钮动作的读取电路。
将键值用两位数码管显示,因此要利用两片数码管。
由于单片机通过P0口进行输出,因此将P0口的高四位和低四位分别输出数码管的十位和个位,并在单片机与数码管之间接入74LS48。
74LS48
的作用是将P0的四位输出转化为八位,并且作为晶体管的驱动,74LS48的输出电流为6mA,刚好满足数码管的电流。
连接电路如图T2_2
图T2_2
单片机将数据从P0口输出后经过74LS48的转换与驱动带动,数码管进行数码的显示,通过数码管的显示判断出按钮的位置。
将上述键盘和显示电路联接到单片机上:
键盘的行线联接到单片机的P2.0~P2.3上,列线联接到单片机的P1口,P0.0~P0.3,P0.4~P0.7分别连接到两片74LS48的输入端口。
再接入单片机的晶振电路和复位电路,构成单片机的总体电路设计。
如图T2_3
图T2_3
根据总体电路图的联接,设计出实际的物品。
三、键盘的运行
将32个按钮按照4x8的方式排列并连接到电路后。
先将行线全部置一列线全部置零,在将列线置一行线全部置零,检测各行线和列线的的键值,若键值产生变化则表明有按钮按下,否则表示没有按键按下。
对于有按键按下的线路将其中变化的键值,通过软件查表得出其对应的顺序码,并将其保存。
四、数码管的显示
将从键盘处读取的顺序码转换为BCD码从P0口处进行输出。
因此用P0口的高四位和低四位分别代表十位和个位进行输出。
数码管需要8根输入,并且连接到单片机上需要驱动,因此选择采用74LS48进行转换与驱动。
五、键盘键值的确定
由于行线和列线分别置一和置零,当按下按钮后,该按钮所在的行线和列线上所检测到的电位将会发生变化,曾而判断出不同的按钮所对应的位置和顺序码,确定数码管显示的数值。
个按键的键值如图
T5_1
图T5_1
如图T5_1所示,在线左侧,键值的最后一位均为F;在线右侧,键值对低二位均为F。
因此可根据F所在位置的不同判断按键在线左侧还是右侧。
且出去为F的为后左侧和右侧的键值时一一对应相等的。
在查询按键键位位置时,只需建立一个相同的表即可。
六、按键顺序码的显示
先将顺序码定制为FFH,再在差表时,将顺序码逐次加一,当查找到对应的键值的同时也取得了在表中相应的顺序码。
当按键所在的位置为线的左侧时顺序码纪委输出置,在线的右侧时则需将顺序码加16在进行输出。
输出由两片数码管进行显示,所以要将十六进制数转化为BCD码进行输出。
将八个输出端口分成两组,一组输出为十位、另一组输出为个位。
并将十位于个位分别联接到不同的74LS48的输入端进行译码,控制晶体管的显示。
达到显示的目的。
七、74LS48的应用
八、数码管接口引脚
九、程序设计
1、程序设计流程:
如图T8_1
图T8_1
按照电路图联接电路,确定行线与列线所对应的I/O接口。
通过MOV指令将行线所在的端口P2口赋值为0FH,列线所在端口P1口
赋值为00H。
读取P2口的低四位存入R0。
通过MOV指令将行线所在的端口P2口赋值为00H,列线所在的端口P1口赋值为FFH。
取P1口的高四位存入R2,P1口的低四位存入R1。
取P2的低四位作为高四位分别与P1的低四位和高四位组合为新的八位二进制数,并分别保存在R4和R7中。
判断P1的高四位是否等于0F0H。
若相等,表明对应于P1低四位的按钮有动作,在进行查表,确定该键所对应的顺序码;若不相等,则表明对应于P1高四位的按钮有动作,进行跳转,跳转到判断P1高四位顺序码的指令,进行查表。
由于键值的原因,两组所查的表完全相同。
当动作的按钮在低位时,将顺序码存入到30H单元;当动作的按钮在高四位时,将顺序码加16再存入30H。
将顺序码除后10,将整数部分与余数部分组成一个新的八位二进制,并将其通过P0口进行输出。
在检测到有按键按下后,通过演示程序,对按键进行去抖操作。
具体程序及注释如下:
ORG0000H
LJMPSTART
ORG0100H;识别键盘有无按下程序首
地址
START:
MOVP1,#00H;所有列线置低电平
MOVP2,#0FH;所有行线置高电平MOVA,P2;读P2口
ANLA,#0FH;取出低四位
MOVR0,A;P2低四位暂存到R0MOVP1,#0FFH;所有列线置高电平
MOVP2,#00H;所有的行线置低电平MOVA,P1;读P1口
MOVR3,A;p1口暂存到R3
ANLA,#0FH;取出低四位
MOVR1,A;P1口低四位暂存到R1MOVA,R3;读取P1口给累加器ANLA,#0F0H;取出P1口高四位
MOVR2,A;P1口的高四位暂存到R2MOVA,R0;读取P2口的低四位给累
加器A
SWAPA;累加器A中低四位和高四
位交换
ORLA,R1;P1口的低四位与P2口的
低四位逻辑或运算重新
组合,存在累加器AMOVR4,A;P1口的低四位与P2口的
低四位逻辑或运算重新
组合暂存到R4
MOVA,R0;读取P2口的低四位给累
加器A
ORLA,R2;P1口的高四位与P2口的
低四位逻辑或运算重新组
合,存在累加器A
SWAPA;累加器A中低四位和高
四位交换
MOVR7,A;P1口的高四位与P2口
的低四位逻辑或运算重
新组合暂存到R7
KEY0:
CJNER2,#0F0H,KEY1;p1口的高四位不全为高电平,
跳转到KEY1
MOVSP,#70H;软件延时子程序,软件
消抖
MOVA,R0
PUSHACC
MOVA,R1
PUSHACC
MOVR0,#64H
MOVR1,#64H
NET:
DJNZR1,NET
DJNZR0,NET
POPACC
MOVR1,A
POPACC
MOVR0,A
CJNER2,#0F0H,KEY_IN1;p1口的高四位不全为高
电平,跳转到KEY_IN1
KEY_IN1:
MOVA,R4;p2低四位与P1低四位组
合给累加器A
MOVB,A;将按键的特征编码暂存
到B
MOVDPTR,#KEY_TABLE1
MOVR6,#0FFH
KEY_IN2:
INCR6;顺序码加1
MOVA,R6;顺序码值给累加器A
MOVCA,@A+DPTR;查表
CJNEA,B,KEY_IN3;比较,若相同则找到按键
的特征编码
MOVA,R6;找到特征编码后,取顺序
码
MOV30H,A;存入30H单元
MOVB,#0AH;B=0AH
DIVAB;累加器A除以B,商存在A,
余数存在B
SWAPA;高四位与低四位互换
ORLA,B;A中高四位与B低四位取逻
辑或重新组合
MOVP0,A;从P0口输出
LJMPSTART
KEY_IN3:
CJNEA,#00H,KEY_IN2;未完,继续查
RET;00H为结束码
KEY1:
CJNER1,#0FH,START;比较,P1低四位不全为
高电平,跳转到STARTMOVSP,#70H;软件延时子程序,软件消抖
MOVA,R0
PUSHACC
MOVA,R1
PUSHACC
MOVR0,#0AH
MOVR1,#0AH
NET2:
DJNZR1,NET2
DJNZR0,NET2
单片机课程设计POPACCMOVR1,APOPACCMOVR0,AMOVA,R7;P2低四位P1低四位(R7)给累加器AMOVB,A;累加器A暂存到BMOVDPTR,#KEY_TABLE1MOVR6,#0FFHKEY_IN4:
INCR6MOVA,R6MOVCA,@A+DPTRCJNEA,B,KEY_IN5;顺序码加1;顺序码值给累加器A;查表;比较,若相同则找到按键的特征编码MOVA,R6ADDA,#10HMOV30H,AMOVB,#0AHDIVAB;找到特征编码后,取顺序码;累加器A加上16给累加器A;存入30H单元;B=0AH;累加器A除以B,商存在A,余数存在BSWAPAORLA,B;高四位与低四位互换;A中高四位与B低四位取逻16
单片机课程设计辑或重新组合MOVP0,ALJMPSTARTKEY_IN5:
CJNEA,#00H,KEY_IN4RET;未完,继续查;00H为结束码;从P0口输出KEY_TABLE1:
DB0EEH,0DEH,0BEH,07EHDB0EDH,0DDH,0BDH,07DHDB0EBH,0DBH,0BBH,07BHDB0E7H,0D7H,0B7H,077H00HEND;顺序码;顺序码;顺序码;顺序码;结束码17
单片机课程设计附录:
参考文献新编单片机原理及应用(机械工业出版社)74LS48芯片资料18