实验四 矩阵键盘实验

一、实验目的

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. 【单片机实验】矩阵键盘

    实验五 矩阵键盘 一.实验目的 1.掌握矩阵键盘的硬件电路原理和软件编程方法: 2.掌握利用数码管显示矩阵键盘键值的编程方法. 二.实验说明 本实验提供了一个4X4小键盘,开始先将4行置一,4列置零, ...

  2. <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验 实验八 矩阵键盘应用实验.doc 一.实验目的 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 二.实验主要仪器和环境 Keil5 普中A2开发板 stc-isp 三.实验 ...

  3. 矩阵键盘简易计算机设计报告,矩阵键盘实验总结.docx

    矩阵键盘实验总结 矩阵式键盘实验报告 学生:学号:XX 专业班级:自动化1202 指导老师:杨东勇 XX年12月 一.实验目的 1.学习矩列式键盘工作原理: 2.学习矩列式接口的电路设计和程序设计. ...

  4. c语言矩阵键盘实验心得,DSP-矩阵键盘扫描实验.doc

    DSP-矩阵键盘扫描实验 班 级 学号 姓 名 同组人 实验日期 室温 大气压 成 绩 实验五 矩阵键盘扫描实验 一.实验目的 1.掌握键盘信号的输入,DSP I/O的使用: 2.掌握键盘信号之间的时 ...

  5. 实验六 键盘扫描显示实验(矩阵键盘)

    实验六 键盘扫描显示实验(矩阵键盘) 一.实验要求 在上一个实验的基础上,利用实验仪提供的键盘扫描电路和显示电路,做一个扫描键盘和数码显示实验,把按键输入的键码在八位数码管上显示出来. 实验程序可分成 ...

  6. java实验四结果,java实验四异常处理.doc

    java实验四异常处理.doc 实验四异常处理一.实验目的1.掌握异常的概念和Java异常处理机制.2.掌握异常的定义.抛出和捕捉处理.二.实验内容与要求1.仔细读下面的JAVA语言源程序,自己给出程 ...

  7. 多思计组实验实验四、数据通路实验

    实验四.数据通路实验 一.实验目的: 1.理解总线的概念和作用. 2.连接运算器与存储器,理解计算机的数据通路. 3.理解微命令与微操作的概念. 二.预习要求: 1.读懂实验电路图. 2.在实验之前填 ...

  8. 微控制器实验计算机组成原理,组成原理实验四 微控制器实验

    实验四 微控制器实验 实验四微控制器实验 实验四 一.实验目的 1.掌握时序产生器的组成原理. 微控制器实验 2.掌握微程序控制器的组成原理. 3.掌握微程序的编制.写入,观察微程序的运行.二.实验设 ...

  9. 计算机组成原理学习-实验四 模型机实验(简易版)(详细、人话)

    如果你对其他计算机组成原理知识感兴趣,请考虑阅读我的专栏: 计算机组成原理[专栏] 须知 本文仅作学习笔记使用,仅在CSDN网站发布,如果在其他网站发现,均为侵权行为,请举报.作者:小王在努力. 实验 ...

  10. linux 程序实验总结,Linux实验报告(实验四) shell编程实验

    实验四 shell编程实验(二) 班级:姓名:学号:上机时间:年月日 任课教师:实验教师:实验成绩: 一.实验目的 综合Linux常用命令和vi编辑器的使用,熟练掌握shell脚本编程. 二.实验注意 ...

最新文章

  1. 获取汉字的首字母(转)
  2. Linux:vim环境设置
  3. 测试build出来的dist文件夹是否编译成功
  4. 5月22日阿里云网络变更公告
  5. java学习笔记(十二)----集合
  6. theme vscode 护眼_VS code 豆沙绿护眼主题
  7. php 获取class id,CSS Class 與 CSS ID
  8. #Tomcat# 本地正常但是部署到服务器后,mysql插入中文乱码问题解决!
  9. 超详细:Springboot连接centos7下redis6的必要配置和失败分析
  10. 如何JQ将下拉列表的值传送给php,JQuery设置获取下拉菜单某个选项的值(比较全)...
  11. ArcGIS水文分析实战教程(7)细说流域提取
  12. python雷达算法实现_基于Python的气象雷达工具包研究
  13. STM32F429与CC2530 ZigBee模块通信
  14. 1.3 可移植性和标准
  15. LM386喇叭驱动电路
  16. 插入法排序c语言程序,C语言之插入排序算法
  17. AJAX获取数据然后显示在页面
  18. 机器学习-贝叶斯分类
  19. 使用quaggaJS识别图片中的条形码
  20. 网易云音乐“王牌冤家”用户评论:评论爬虫及情感分析(SnowNLP)

热门文章

  1. 热门城市地铁svg矢量图
  2. 基于SVM,KNN,CNN的数字图像识别
  3. wkt文件java解析_WKT文件解析 以及各个投影坐标的wkt参数查询 | 学步园
  4. Java框架总结(高淇java300集+入门笔记)
  5. t分布 u分布 卡方分布_几种分布概述(正态分布/卡方分布/F分布/T分布)
  6. 百度地图api自定义marker图片不显示问题
  7. 2018成都大数据公司名单总汇!
  8. 搜索引擎提交软件_搜索引擎排名因素有哪些?
  9. 牛逼!40行Python代码一键把html网页保存为pdf,太方便了!
  10. 《2021中国数据智能产业图谱3.0升级版》重磅发布