实验四 矩阵键盘实验
一、实验目的
1.熟悉实验软件和硬件,进行正确的接线;
2.按下按键,1602显示其键值;
二、实验软硬件
1.Keil uVision4
2.PZISP自动下载软件
3.HC6800S开发板
三、实验原理
按键:
矩阵键盘
4X4 的矩阵键盘,一共是16 个按键。我们照习惯称横为“行”,“竖”为列。那么5、6、7、8 我们称之为“行线”,则1、2、3、4 称为“列线”。要正确记住各个行列线各自对应的IO。每一个按键的两端,都分别接在某一个列线和行线上,即:“行线和列线是通过某个按键的按下和抬起实现联通和断开的”,和“导线两端上的信号是经过“与”的关系再体现到导线上的。”这两句话便构成了矩阵键盘扫描的全部。
液晶屏:
液晶显示器(Liquid Crystal Display, LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。1602的意思是每行显示16个字符,一共可以显示两行 。
LCD硬件原理图
用1602LED显示按键结果,利用了:
LCD1602写入8位命令子函数:void LcdWriteCom(uchar com)
LCD1602写入8位数据子函数:void LcdWriteData(uchar dat)
LCD1602初始化子程序:void LcdInit();
一般初始化(复位)过程:
延时15mS→写指令38H(不检测忙信号)→延时5mS→写指令38H(不检测忙信号)→延时5mS→写指令38H(不检测忙信号)(以后每次写指令、读/写数据操作均需要检测忙信号)→写指令38H:显示模式设置→写指令08H:显示关闭→写指令01H:显示清屏→写指令06H:显示光标移动设置→写指令0CH:显示开及光标设置。
四、软件流程图
矩阵键盘程序流程图
五、实验代码
LCD使用模块化的程序,调用LCD.C中的LcdInit( )、LcdWriteData( )、LcdWriteCom( )等函数。这里的LCD.C是直接调用的,没有改动,下只展示main.c中的内容。
1.#include<reg51.h>
2.#include"lcd.h"
3.#define GPIO_KEY P1
4.unsigned char One[17]="The key value is:";
5.unsigned char KeyValue;
6.void Delay10ms(unsigned int c)
7.{
8. unsigned char a, b;
9. for (;c>0;c--)
10. {
11. for (b=38;b>0;b--)
12. {
13. for (a=130;a>0;a--);
14. }
15. }
16.}
17.void KeyScan(void)
18.{
19. char a = 0;
20. GPIO_KEY=0x0f;
21. if(GPIO_KEY!=0x0f)//读取按键是否按下
22. {
23. Delay10ms(1);//延时10ms进行消抖
24. if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
25. {
26. //列
27. GPIO_KEY=0X0F;
28. switch(GPIO_KEY)
29. {
30. case(0X07): KeyValue=0;break;
31. case(0X0b): KeyValue=4;break;
32. case(0X0d): KeyValue=8;break;
33. case(0X0e): KeyValue=12;break;
34. }
35. //行
36. GPIO_KEY=0XF0;
37. switch(GPIO_KEY)
38. {
39. case(0X70): KeyValue=KeyValue+3;break;
40. case(0Xb0): KeyValue=KeyValue+2;break;
41. case(0Xd0): KeyValue=KeyValue+1;break;
42. case(0Xe0): KeyValue=KeyValue;break;
43. }
44. while((a<50) && (GPIO_KEY!=0xf0))
45. {
46. Delay10ms(1);
47. a++;
48. }
49. }
50. }
51.}
52.void main(void)
53.{
54. unsigned char i;
55. LcdInit();
56. for(i=0; i<17; i++)
57. {
58. if(i == 14)
59. {
60. LcdWriteCom(0x80 + 0x40);
61. }
62. LcdWriteData(One[i]);
63. }
64. while(1)
65. {
66. KeyScan();
67. LcdWriteCom(0x80 + 0x44);
68. if(KeyValue < 10)
69. {
70. LcdWriteData('0' + KeyValue);
71. }
72. else
73. {
74. LcdWriteData('7' + KeyValue);
75. }
76. }
77.}
六、实验步骤
1.连接试验相关模块
硬件接线图
2.编写1602显示键值程序
扫描键值的函数,要能防抖,做到行列扫描无逻辑错误,返回一个状态数据,根据返回数据对lcd1602进行显示。
3.下载1602显示键值程序
程序下载界面
4.调试按键显示功能
检查LCD屏是否可以正常显示,不能的话需要调节电位器。检查排线是否插好,检查J21是否接在左边,JP165是否断开,然后按按键看是否可以正常显示。文章来源:https://www.toymoban.com/news/detail-785396.html
七、实验思考
矩阵键盘对于独立按键来说,相对负责了一点。矩阵键盘可以用8个IO口得到16个输入。而独立按键只能用8个IO口得到8个输入。能力提高了一倍。
无论什么按键都是需要进行消除抖动的,因为电平不可能一直稳定不变,会有短暂的剧烈的变化惨杂其中。这时就可能出行误判,所以消除抖动是必要的。有一些重要的工作的执行,比如说医生开刀手术、武器发射,还需要反复确认,以免误判。
但是对于多个按键同时按下,键盘的扫描就有可能出行纰漏,对付这样的情形,键盘就显得无力,这也是它的一个缺点。文章来源地址https://www.toymoban.com/news/detail-785396.html
到了这里,关于单片机实验四 矩阵键盘实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!