单片机4X4键盘扫描和显示课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、设计内容
1、本设计利用各种器件设计,并利用原理图将8255单元与键盘及数码管显示单元连接,扫描键盘输入,最后将扫描结果送入数码管显示。

键盘采用4*4键盘,每个数码管可以显示0-F共16个数。

将键盘编号,记作0-F,当没按下其中一个键时,将该按键对应的编号在一个数码管上显示出来,当在按下一个
键时,便将这个按键的编号在下一个数码管上显示,数码管上
可以显示最近6次按下的按键编号。

设计并实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。

三、问题分析及方案的提出
4×4键盘的每个按键均和单片机的P1口的两条相连。

若没有按键按下时,单片机P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。

单片机定时对P1口进行程序查询,即可发现键盘上是否有按键按下以及哪个按键被按下。

实现4×4键盘的接口需要用到单片机并编写相应的程序来识别键盘的十六个按键中哪个按键被按下。

因为此题目还要求将被按下的按键显示出来,因此可以用两个数码管来分别显示被按下的按键的行与列
表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列。

例如0xD7是键盘的第二行第四列的按键
对于数码管的连接,采用了共阳极的接法,其下拉电阻应保证芯片不会因为电流过大而烧坏。

五、电路设计及功能说明
4×4键盘的十六个按键分成四行四列分别于P1端口的八条I/O
数据线相连;两个七段数码管分别与单片机的P0口和P2口的低七
位I/O数据线相连。

数码管采用共阳极的接法,所以需要下拉电阻
来分流。

结合软件程序,即可实现4×4键盘的接口及显示的设计。

当按下键盘其中的一个按键时,数码管上会显示出该按键在4×4键
盘上的行值和列值。

所以实现了数码管显示按键位置的功能
四、设计思路及原因
对于4×4键盘,共有十六个按键。

如果每个按键与单片机的一个引脚相连,就会占用16个引脚,这样会使的单片机的接口不够用(即使够用,也是对单片机端口的极大浪费)。

因此我们应该行列式的接法。

行列式非编码键盘是一种把所有按键排列成行列矩阵的键盘。

在这种键若没有按键按下时,单片机从P1口读得的引脚电平为“1”;若某一按键被按下,则该键所对应的端口线变为地电平。

因此0xEX(X表示任意4×4键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X
二、实验内容
设计并实现一4×4键盘的接口,并在两个数码管上显示键盘所在的行与列。

即将8255单元与键盘及数码管显示单元连接,编写实验程序扫描键盘输入,并将扫描结果送数码显示,键盘采用4×4键盘,每个数码管值可以为0到F,16个数。

将键盘进行编号记作0—F当按下其中一个按键时将该按键对应的编号在一个数码管上显示出来,当按下下一个按键时便将这个按键的编号在下一个数码管上显示出来,且数码管上可以显示最近6次按下按键的编号。

基本原理
1.电路设计及功能说明
2.硬件原理框图及电路图(包括接口芯片简介)
电路图:
六、实验步骤
(1).把实验平台与PC机串行口连起来,根据实验连线提示在实验
台上连线,之后打开电源。

(2).在PC机上用鼠标点击“Wave”图标,进入WINDOWS调试环境,
而后进行初始化设置。

点击[仿真器\仿真器设置]出现“仿真器设置”窗,进行仿真器的设置。

(3).用鼠标点一下[文件\打开文件],输入文件名*.asm,创建新文
件,在该窗口中输入事先编好的程序。

(4).用鼠标点[项目\全部编译]窗,对当前源文件进行编译,反复
修改好程序,直到编译通过为止。

(5).全速运行程序,通过在键盘按键,观察八段管的显示结果,理
解键盘扫描原理及程序编写方法。

接口芯片简介
AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。

主要管脚说明:
VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据
存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH 编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口同时为闪烁编程和编程校验接收一些控制信号。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略
微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

数码管简介
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

七、软件部分的程序流程图,算法和使用的编程技巧 1.编程技巧
1.在按键扫描程序中,通过for 循环语句实现被按下的按键的行值的确定,用switch 语句实现列值的确定。

0xEX(X 表示任意一个十六进制数)表示4×4
键盘的第一行中的某个按键被按下,相应的0xDX、0xBX、0x7X(X表示任意一个十六进制数)分别表示键盘的第二行、第三行、第四行;0xXE、0xXD、0xXB、0xX7(X 表示任意一个十六进制数)则分别表示键盘的第一列、第二列、第三列和第四列;
2. ucRow+ucLine+1即为被按下的按键的行列值;
3.用十六个switch语句实现对单片机P0端口和P2口的I/O数据线的控制,来控制数码管显示被按下按键的行值和列值;
2.程序流程图
主流程图子流程图




开始
显示缓冲区初始化
LED显示
读取键值
键值转换为显示数据
开始
输出列扫描信号列扫描信号移位
该列有键输入?
读入行信号
返回
6列扫描完?
有键输入?
初始化地址参数
按照行列计算键值
查表得键码
等待按键释放
返回
八、程序编程
OUTBIG EQU 8002H ; 位控制口
OUTSEG EQU 8004H ; 段控制口
KEYIN EQU 8001H ; 键盘读入口
READY: MOV 20H,#3FH ;缓冲器设初值,赋值到6个数码管MOV 21H,#3FH
MOV 22H,#3FH
MOV 23H,#3FH
MOV 24H,#3FH
MOV 25H,#3FH
MAIN: LCALL DISPLAY ;无键码输入,调用显示模块
LCALL TEST
JZ MAIN ;累加器为0即说明无按键,则转移继续显示
LCALL SEARCH ;有键值输入,寻找输入键值所在的行和列
MOV 20H,21H ;数码管显示出输入的键值
MOV 21H,22H
MOV 22H,23H
MOV 23H,204
MOV 24H,25H
MOV DPTR,#LEDTAB
MOVC A,@A+DPTR
MOV 25H,A
SJMP MAIN
DISPLAY: ;显示模块
MOV R0,#20H ;缓冲区从20H处开始
MOV R1, #6 ;共6个八段管
MOV R2, #00100000B ;从左边开始显示灯亮为1,灭为0, LOOP: MOV DPTR, #OUTBIG
MOV A, #0
MOVX @DPTR, A ; 位选码初值设为0,即关闭所有八段管
MOV A, @R0 ;将以20H为首地址的内存值发送到段码输出口8004H
MOV DPTR, #OUTSEG
MOVX @DPTR,A
MOV DPTR, #OUTBIG ;输出位选通信号,使每次只显示一位八段管
MOV A, R2
MOVX @DPTR, A
LCALL DELAY ;延时
MOV A, R2
RR A ;位选信号右移一位,即动态显示下一个数码管
MOV R2, A
INC R0 ;内存地址加一,提供段码输出
DJNZ R1, LOOP
RET
DELAY: MOV R7,#01H ; 延时子程序
DEL1: MOV R6,#00H
DEL2: DJNZ R6, DEL2
DJNZ R7, DEL1
RET
TEST: MOV DPTR,#OUTBIG ;检测有无键值输入
MOV A,#00H
MOVX @DPTR,A ;输出线置为0
MOV DPTR,#KEYIN
MOVX A,@DPTR ;读入键状态
CPL A ;累加器求反
ANL A,#0FH ;高四位不用
RET
SEARCH: ;找出键值所在的的位置(行和列)MOV R1,#00100000B
MOV R2,#06H
MOV R5,#00H
MOV R4,#03H
LSEARCH: ;找出列所在位置后
MOV A,R1
MOV DPTR,#OUTBIG
MOVX @DPTR,A
CPL A
RR A ;通过判断循环几次进位为1来实现计数的功能,从而得知行所在位置
MOV R1,A
MOV DPTR,#KEYIN
MOVX A,@DPTR
CPL A
ANL A,#0FH
JNZ HSEARCH ;找到所在列,继续寻找行所在位置
INC R5
DJNZ R2,LSEARCH
HSEARCH:
MOV R7,#04H
LOOP2: RRC A
JC GET
DEC R4
DJNZ R7, LOOP2
GET: ;确定输入的键码值
MOV A,R4 ;键值=行*6+列,R4*6+R5->A
MOV B,#6H
ADD A,R5
MOV DPTR,#KEYTAB ;取出键码所在位置
MOVC A,@A+DPTR
MOV 26H,A ;将取出键值暂时保存在内存中,以免数据丢失
WAIT: MOV DPTR,#OUTBIG ;等键释放
CLR A
MOVX @DPTR,A
LCALL DELAY
LCALL TEST
JNZ WAIT
MOV A,26H ;释放出键盘输入值
RET
LEDTAB: ; 八段管显示码
DB 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h
DB 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71h
KEYTAB: ;键盘码
DB 07H,08H,09H,0AH,00H,00H
DB 04H,05H,06H,0BH,00H,00H
DB 01H,02H,03H,0CH,00H,00H
END
九、仿真过程综述
1.按照设计思路在PROTEUS软件中找到相应元器件,按照正确的连线方法将各个元器件连起来。

再用PROTEUS软件仿真时,为避免连线的复杂性,可以使用在要连线的引脚上标注相同的符号的方法。

这样可以使PROTEUS软件窗口中的连线少一些,使电路图更加清晰;
2.按照硬件电路在KEIL C软件中编写程序,对编写的程序进行编译,在确定没有错误后生成十六进制文件并加载到PROTEUS软件中原理图的AT89C51芯片中;
3.在PROTEUS软件中点击运行按钮,实现仿真:按下键盘上的按键,观察数码管显示的是否正确。

十一、课设结果及分析、收获、体会
通过这次设计,我基本上完成了题目中所给出的要求,设计出了4×4键盘的接口,并且在两个数码管上能够显示键盘所在的行值与列值。

同时深刻体会到理论与实践相结合的重要性懂得我必须学会如何整理并利用手中的资料,没有就的用心去查去找。

学习要独立不能总依赖别人,但要学会请教同学老师。

相关文档
最新文档