矩阵键盘控制数码管和LCD1602的显示


第一章 系统整体概述

本次实验模块将通过矩阵键盘来控制字符的显示输出,分别采用了LED数码显示管及LCD1602液晶显示屏这两种显示方式来显示从0到F的16个字符。
键盘显示模块整体划分为四个部分,一是单片机最小系统,用来提供本系统最基本的工作环境配置;二是一个4*4的矩阵键盘,通过线反转法进行扫描,从而控制单片机的运行,十六个按键对应输出的十六种字符;三是共阳极数码管及其串联的电阻,四是LCD1602A液晶显示屏和控制其对比度的电位器。

第二章 硬件设计与实现

1.准备电路元器件及焊接工具:STC89C51RC芯片一个、IC插座、40p排针1个、11.0592MHz晶振一个、30pF瓷片电容2个、10uF电解电容一个、排阻一个、电阻若干、LED数码管一个、LCD1602A显示屏一个、10*15cm洞洞板一个、电源线、杜邦线、下载器、电烙铁、焊锡丝等。
2.焊接电路板:按照设计好的原理图进行焊接
3.调试:下载程序,测试LED数码管和lcd显示屏是否能够正常闪烁。

  • 焊接成果图
  • 正面
  • 背面

第三章 软件设计与编程

1.编写代码:利用keil软件进行编程,本次设计使用了汇编语言来进行编写
2.设计仿真电路图:将电源、时钟电路、复位电路、51单片机、LED数码管及LCD1602显示屏正确连接。电源选用+5v,晶振选用11.0592MHz,时钟电路选用30pF电容,复位电路选用10kΩ电阻、10uF电容,LED数码管串联470Ω电阻接在P2引脚,电阻的作用为保护电路,防止led灯被击穿,将键盘矩阵接在P0口,LCD1602A的D0-D7接口接在P1口。
3.仿真调试:用proteus进行仿真测试,将事先编好的程序导入51单片机中,以测试程序是否能达到目标要求。

  • 编程
    ORG 0000H
    LJMP MAIN
    MAIN:
    RS EQU P3.7
    RW EQU P3.6
    E EQU P3.5
    MOV P1,#00000001B ;清屏
    ACALL ENABLE
    MOV P1,#00111100B ; 功能设定
    ACALL ENABLE
    MOV P1,#00001100B ; 开关控制
    ACALL ENABLE
    MOV P1,#00000110B ;模式设置
    ACALL ENABLE
    MOV P1,#80H
    ACALL ENABLE
    MOV R1,#00H
    MOV DPTR,#TABLE3
    OR0:MOV A,R1
    MOVC A,@A+DPTR
    MOV P1,A
    ACALL WRITE
    INC R1
    CJNE A,#00H,OR0

ORI:MOV P0,#0FH
MOV A,P0
CJNE A,#0FH,ORII
LJMP ORI

ORII:
ACALL KEYSCAN
MOV A,30H
MOV DPTR,#TABLE2
MOVC A,@A+DPTR
MOV P2,A ;数码管的显示
ACALL DELAY
MOV P1,#0C0H
ACALL ENABLE
MOV A,30H
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P1,A ;lcd的显示
ACALL WRITE
ACALL DELAY
SJMP ORI

AJMP $
WRITE:SETB RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET

ENABLE:CLR RS
CLR RW
CLR E
ACALL DELAY
SETB E
RET
KEYSCAN:MOV P0,#0FH
MOV A,P0
ANL A,#0FH
MOV R3,A
MOV P0,#0F0H
MOV A,P0
ANL A,#0F0H
ORL A,R3
CJNE A,#0FFH,KEYPRO
RET
KEYPRO:MOV R3,A ;R3放键值
MOV DPTR,#KEYVALUE
MOV R4,#0FFH
KEY1:INC R4 ;从1到16查找键值
MOV A,R4 ;R4放偏移量
MOVC A,@A+DPTR
MOV 31H,R3
CJNE A,31H,KEY1 ;判断是否与键值相等
MOV A,R4
MOV 30H,A
RET
DELAY:
MOV R4,#60
D1:MOV R5,#60
D2:MOV R6,#30
DJNZ R6,$
DJNZ R5,D2
DJNZ R4,D1
RET
KEYVALUE: DB 77H,7BH,7DH,7EH,0B7H,0BBH,0BDH,0BEH,0D7H,0DBH,0DDH,0DEH,0E7H,0EBH,0EDH,0EEH
TABLE: DB 30H, 31H, 32H, 33H ,34H ,35H ,36H, 37H, 38H, 39H ,41H, 42H, 43H, 44H, 45H, 46H
TABLE2: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH
TABLE3: DB “ PENG CHENLIANG “,00H
END

  • Proteus 仿真电路图

第四章 作品调试与分析

1.最开始使用汇编语言进行程序设计的时候,整合了数码管和LCD1602的显示程序,并使用查表法整合了数码管和LCD1602的键码,从而可以通过键盘来控制数码管和LCD的显示。整合完之后发现在有光标的显示模式下,LCD显示出的单个字符会不断闪烁,反复排查后发现,原来是写数据的操作在不断的循环执行。我通过判断键盘输入的电平是否有变化来跳出了这一循环。
2.焊接完整后导入程序发现数码管不能正常显示,仔细检查后发现自己把一个错误的程序导入了进去。,于是自己重新导入了新的程序,数码管和LCD也恢复了正常显示。
3.LCD的显示偏暗,而且存在略微的鬼影,通过调节电阻来控制V0口的电压,改善了这一现象。
4.在完成最基本的键盘显示操作后,我又自己研究了LCD的CGRAM,学会了如何自己使用字模来创造自定义的字符,并将字模导入到CGRAM。

第五章 制作感受

本次制作的键盘显示模块是继单片机最小系统之后的又一个模块,不得不说,键盘显示确实比单片机最小系统难了很多。从线反转的扫描方法,到数码管的动态显示,再到用键盘操控数码管和LCD,每一步充满了各种挫折和困顿。不光软件设计上很麻烦,硬件制作上也比单片机最小系统复杂了很多,更多的接口,更多的线路,要求更高的焊接,一个个困难阻碍着设计与制作。从电路设计到电路焊接整个过程,虽然遇到过很多挫败,也有过很多心情沮丧的时候,但更多的是知识的成长以及心中不断燃烧的好奇与热情,在这样的热情和兴趣下,自己一步步克服障碍,完成了键盘显示的设计制作,并在此基础上,自己尝试了自定义字符和电子表的制作。
通过键盘显示模块的设计与制作,自己的的确确学到了很多。从知识方面来看,自己不仅对数码管和LCD1602有了深入的认识,而且了解到了如何通过键盘来控制这两个显示模块。另外,自己也对汇编语言有了更加深入而细致的认识,看到了汇编语言相对其他语言在单片机操作上的优势,看到了汇编语言的形象化与底层化。除此之外,自己通过这个过程,也收获了更多新的技能,对单片机有了更加深入而全面的认识,为以后的理论学习和课程实践打下了一个稳健的基础。


文章作者: pcl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 pcl !
评论
  目录