单片机实验四 矩阵键盘实验
实验四 矩阵键盘实验
一、实验目的
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是否断开,然后按按键看是否可以正常显示。
七、实验思考
矩阵键盘对于独立按键来说,相对负责了一点。矩阵键盘可以用8个IO口得到16个输入。而独立按键只能用8个IO口得到8个输入。能力提高了一倍。
无论什么按键都是需要进行消除抖动的,因为电平不可能一直稳定不变,会有短暂的剧烈的变化惨杂其中。这时就可能出行误判,所以消除抖动是必要的。有一些重要的工作的执行,比如说医生开刀手术、武器发射,还需要反复确认,以免误判。
但是对于多个按键同时按下,键盘的扫描就有可能出行纰漏,对付这样的情形,键盘就显得无力,这也是它的一个缺点。
单片机实验四 矩阵键盘实验相关推荐
- 【单片机实验】矩阵键盘
实验五 矩阵键盘 一.实验目的 1.掌握矩阵键盘的硬件电路原理和软件编程方法: 2.掌握利用数码管显示矩阵键盘键值的编程方法. 二.实验说明 本实验提供了一个4X4小键盘,开始先将4行置一,4列置零, ...
- <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验
实验八 矩阵键盘应用实验 实验八 矩阵键盘应用实验.doc 一.实验目的 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 二.实验主要仪器和环境 Keil5 普中A2开发板 stc-isp 三.实验 ...
- 矩阵键盘简易计算机设计报告,矩阵键盘实验总结.docx
矩阵键盘实验总结 矩阵式键盘实验报告 学生:学号:XX 专业班级:自动化1202 指导老师:杨东勇 XX年12月 一.实验目的 1.学习矩列式键盘工作原理: 2.学习矩列式接口的电路设计和程序设计. ...
- c语言矩阵键盘实验心得,DSP-矩阵键盘扫描实验.doc
DSP-矩阵键盘扫描实验 班 级 学号 姓 名 同组人 实验日期 室温 大气压 成 绩 实验五 矩阵键盘扫描实验 一.实验目的 1.掌握键盘信号的输入,DSP I/O的使用: 2.掌握键盘信号之间的时 ...
- 实验六 键盘扫描显示实验(矩阵键盘)
实验六 键盘扫描显示实验(矩阵键盘) 一.实验要求 在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在八位数码管上显示出来. 实验程序可分成 ...
- java实验四结果,java实验四异常处理.doc
java实验四异常处理.doc 实验四异常处理一.实验目的1.掌握异常的概念和Java异常处理机制.2.掌握异常的定义.抛出和捕捉处理.二.实验内容与要求1.仔细读下面的JAVA语言源程序,自己给出程 ...
- 多思计组实验实验四、数据通路实验
实验四.数据通路实验 一.实验目的: 1.理解总线的概念和作用. 2.连接运算器与存储器,理解计算机的数据通路. 3.理解微命令与微操作的概念. 二.预习要求: 1.读懂实验电路图. 2.在实验之前填 ...
- 微控制器实验计算机组成原理,组成原理实验四 微控制器实验
实验四 微控制器实验 实验四微控制器实验 实验四 一.实验目的 1.掌握时序产生器的组成原理. 微控制器实验 2.掌握微程序控制器的组成原理. 3.掌握微程序的编制.写入,观察微程序的运行.二.实验设 ...
- 计算机组成原理学习-实验四 模型机实验(简易版)(详细、人话)
如果你对其他计算机组成原理知识感兴趣,请考虑阅读我的专栏: 计算机组成原理[专栏] 须知 本文仅作学习笔记使用,仅在CSDN网站发布,如果在其他网站发现,均为侵权行为,请举报.作者:小王在努力. 实验 ...
- linux 程序实验总结,Linux实验报告(实验四) shell编程实验
实验四 shell编程实验(二) 班级:姓名:学号:上机时间:年月日 任课教师:实验教师:实验成绩: 一.实验目的 综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程. 二.实验注意 ...
最新文章
- 获取汉字的首字母(转)
- Linux:vim环境设置
- 测试build出来的dist文件夹是否编译成功
- 5月22日阿里云网络变更公告
- java学习笔记(十二)----集合
- theme vscode 护眼_VS code 豆沙绿护眼主题
- php 获取class id,CSS Class 與 CSS ID
- #Tomcat# 本地正常但是部署到服务器后,mysql插入中文乱码问题解决!
- 超详细:Springboot连接centos7下redis6的必要配置和失败分析
- 如何JQ将下拉列表的值传送给php,JQuery设置获取下拉菜单某个选项的值(比较全)...
- ArcGIS水文分析实战教程(7)细说流域提取
- python雷达算法实现_基于Python的气象雷达工具包研究
- STM32F429与CC2530 ZigBee模块通信
- 1.3 可移植性和标准
- LM386喇叭驱动电路
- 插入法排序c语言程序,C语言之插入排序算法
- AJAX获取数据然后显示在页面
- 机器学习-贝叶斯分类
- 使用quaggaJS识别图片中的条形码
- 网易云音乐“王牌冤家”用户评论:评论爬虫及情感分析(SnowNLP)
热门文章
- 热门城市地铁svg矢量图
- 基于SVM,KNN,CNN的数字图像识别
- wkt文件java解析_WKT文件解析 以及各个投影坐标的wkt参数查询 | 学步园
- Java框架总结(高淇java300集+入门笔记)
- t分布 u分布 卡方分布_几种分布概述(正态分布/卡方分布/F分布/T分布)
- 百度地图api自定义marker图片不显示问题
- 2018成都大数据公司名单总汇!
- 搜索引擎提交软件_搜索引擎排名因素有哪些?
- 牛逼!40行Python代码一键把html网页保存为pdf,太方便了!
- 《2021中国数据智能产业图谱3.0升级版》重磅发布