单片机实验四 矩阵键盘实验

这篇具有很好参考价值的文章主要介绍了单片机实验四 矩阵键盘实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验四 矩阵键盘实验

一、实验目的

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个输入。能力提高了一倍。
无论什么按键都是需要进行消除抖动的,因为电平不可能一直稳定不变,会有短暂的剧烈的变化惨杂其中。这时就可能出行误判,所以消除抖动是必要的。有一些重要的工作的执行,比如说医生开刀手术、武器发射,还需要反复确认,以免误判。
但是对于多个按键同时按下,键盘的扫描就有可能出行纰漏,对付这样的情形,键盘就显得无力,这也是它的一个缺点。文章来源地址https://www.toymoban.com/news/detail-785396.html

到了这里,关于单片机实验四 矩阵键盘实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 7. 嵌入式与单片机

    常见面试题 请说说你对嵌入式的理解。⭐⭐⭐⭐ 嵌入式系统是指以应用为中心,以计算机技术为基础,软件硬件可剪裁,适应应用系统对功能、成本、体积、功耗严格要求的专用计算机系统。 嵌入式系统 主要由 嵌入式微处理器 、 外围硬件设备 、 嵌入式操作系统以及用户

    2024年02月02日
    浏览(89)
  • 嵌入式开发:单片机嵌入式Linux学习路径

    SOC(System on a Chip)的本质区别在于架构和功能。低端SOC如基于Cortex-M架构的芯片,如STM32和NXP LPC1xxx系列,不具备MMU(Memory Management Unit),适用于轻量级实时操作系统如uCOS和FreeRTOS。高端SOC如基于Cortex-A架构的芯片,如三星、高通、飞卡、全志和瑞芯微等,具备MMU,支持虚拟内

    2024年02月15日
    浏览(57)
  • 嵌入式(二)单片机基础 | 单片机特点 内部结构 最小系统 电源 晶振 复位

    上一篇文章我们介绍了嵌入式系统 嵌入式系统(Embedded System)是一种特定用途的计算机系统,它通常嵌入在更大的产品或系统中,用于控制、监测或执行特定的任务。这些系统通常由硬件和软件组成,旨在满足特定的需求,如嵌入在家电、汽车、医疗设备、工业自动化、消费

    2024年02月02日
    浏览(108)
  • 单片机(嵌入式)程序分层架构

    目录 前言 嵌入式3层软件架构 嵌入式4层软件架构-1 驱动层 操作系统层 中间件层 应用层 嵌入式4层软件架构-2 硬件层 嵌入式微处理芯片 嵌入式存储器系统 嵌入式I/O接口 中间层 系统软件层 RTOS 文件系统 GUI 应用层 嵌入式5层软件架构1 嵌入式5层软件架构2 嵌入式6层软件架构

    2023年04月19日
    浏览(80)
  • 单片机和Linux嵌入式区别

    单片机是一种集成电路,它能够在一个芯片上完成各种计算、控制和管理任务。单片机没有明确的分层,这是因为它通常被用来设计嵌入式系统,其程序结构和功能要根据具体的应用需求来设计。 在单片机的程序设计中,可以通过一些方法将程序分为不同的层次,比如可以将

    2024年01月17日
    浏览(64)
  • 【单片机/嵌入式】最完整学习路线

            关于这个问题我在网上寻找到 了 相关文章解释得很详细,不了解的同学可以参考一下这篇文章: 到底什么是嵌入式?什么是单片机? - 知乎         一个人学习是孤独的,如果你是一名学生,建议加入学校的电子社团或者实验室,有老师的帮助和同学的互助

    2024年02月03日
    浏览(54)
  • 【唠唠嵌入式】__如何学习单片机?

    目录 前言 个人定位,从事软件还是硬件? 学习内容 (* ̄︶ ̄)创作不易!期待你们的 点赞、收藏和评论喔。 作为一个老司机,多年来跟 单片机 、 Keil 、 C语言 、 AD 、 烙铁 、 风枪 、 示波器 、 电子元器件 纠缠不清。期间经历了不少磨练,熬过了很多夜晚,也掉了大把头

    2024年02月06日
    浏览(71)
  • 单片机项目分享 stm32机器视觉的人脸识别系统 - 单片机 物联网 嵌入式

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月22日
    浏览(84)
  • 【单片机毕设选题】stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(60)
  • 单片机项目分享 基于stm32的便携用电功率统计系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月19日
    浏览(113)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包