一.实验目的、内容、仪器

实验目的:

  1. 了解并区分独立按键,矩阵按键,以及其它模块的按键。

  1. 编写键盘的相关算法,了解相关概念

实验内容:进行独立按键以及矩阵按键的测试实验

实验仪器:7SEG-MPX8-CC:八位数码管共阴极,74HC573:锁存器,74HC138:译码器,AT89C52:52单片机,RESPACK-8:排阻,BUTTON:按键、CAP:电容、CRYSTAL:晶振、RES:电阻

二.硬件原理

三.程序流程图

四.代码实现

#include <REGX52.H>
sbit LSA=P2^4;
sbit LSB=P2^3;
sbit LSC=P2^2;
void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}
unsigned char MatrixKey()
{unsigned char KeyNumber=0;P1=0xFF;P1_3=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}P1=0xFF;P1_2=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}P1=0xFF;P1_1=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}P1=0xFF;P1_0=0;if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}return KeyNumber;
}unsigned char KeyNum;
//数码管段码表unsigned char a[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location)        //位码输出{case 1:LSA=1;LSB=1;LSC=1;break;case 2:LSA=1;LSB=1;LSC=0;break;case 3:LSA=1;LSB=0;LSC=1;break;case 4:LSA=1;LSB=0;LSC=0;break;case 5:LSA=0;LSB=1;LSC=1;break;case 6:LSA=0;LSB=1;LSC=0;break;case 7:LSA=0;LSB=0;LSC=1;break;case 8:LSA=0;LSB=0;LSC=0;break;}P0=a[Number];    //段码输出Delay(1);                //显示一段时间P0=0x00;                //段码清0,消影
}void main()
{while(1){KeyNum=MatrixKey();                //获取矩阵键盘键码switch(KeyNum)
{case 1:LSA=1;LSB=1;LSC=1;P0=a[0];break;
case 2:LSA=1;LSB=1;LSC=0;P0=a[1];break;
case 3:LSA=1;LSB=0;LSC=1;P0=a[2];break;
case 4:LSA=1;LSB=0;LSC=0;P0=a[3];break;
case 5:LSA=0;LSB=1;LSC=1;P0=a[4];break;
case 6:LSA=0;LSB=1;LSC=0;P0=a[5];break;
case 7:LSA=0;LSB=0;LSC=1;P0=a[6];break;
case 8:LSA=0;LSB=0;LSC=0;P0=a[7];break;case 9:LSA=1;LSB=1;LSC=1;P0=a[8];break;
case 10:LSA=1;LSB=1;LSC=0;P0=a[9];break;
case 11:LSA=1;LSB=0;LSC=1;P0=a[10];break;
case 12:LSA=1;LSB=0;LSC=0;P0=a[11];break;
case 13:LSA=0;LSB=1;LSC=1;P0=a[12];break;
case 14:LSA=0;LSB=1;LSC=0;P0=a[13];break;
case 15:LSA=0;LSB=0;LSC=1;P0=a[14];break;
case 16:LSA=0;LSB=0;LSC=0;P0=a[15];break;}}
}

五.实验步骤

(1)了解译码器的功能,以及动态显示原理

(2)搭建仿真电路,勾选debug,建立keil工程,选择单片机型号

(3)给工程创建源码文件,并以.c结尾,添加文件到源组里

(4)生成hex文件,点击魔术棒,在output中勾选Create HRX_File

(5)对代码进行编译,调试debug,点击USE,在下拉菜单里选中“Proteus VSM Monitor 一51 ”进行设置

(6)将程序导入到单片机中运行,双击单片机,选择生成的hex文件

(7)在keil中启动调试,开始运行,观察proteus中的电路

六.结果及讨论

行/列扫描:检测时,先送一行为低电平,其余几列全为高电平,然后立即轮流监测一次各列是否有低电平,若检测到某一列为低电平,我们便可以确认当前被按下的键是那一行那一列。

这个实验最难的其实是在代码方面,首先要理清思路,知道代码需要几个部分,其次便是一些知识的补充,像行列扫描,以及消影,这些名词以及对实验原理的了解。

实验(五)键盘检测实验相关推荐

  1. linux内存实验,LINUX编程-实验五 内存管理实验

    实验五内存管理实验 1.目的要求 (1)学习使用内存管理库函数. (2)学习分析.改正内存错误. 2.实验内容 (1)内存库函数实验 ●malloc函数 原型:extern void *malloc( ...

  2. 20145308刘昊阳 20145302张薇《信息安全系统设计基础》实验五:网络通信 实验报告...

    20145308刘昊阳 20145302张薇 <信息安全系统设计基础>实验五:网络通信 实验报告 本次实验报告由结队伙伴书写:http://www.cnblogs.com/5302v/p/ ...

  3. 实验五——数据库设计实验

    实验五--数据库设计实验 一.实验题目 二. 实验内容和要求 三.实验步骤 1.分析问题 2.概念结构设计 3.逻辑结构设计 四.实验心得体会 一.实验题目 数据库设计实验 二. 实验内容和要求 掌握 ...

  4. 【安卓实验】实验五、广播实验

    [实验名称]实验五.广播实验 [实验目的] 1.了解使用Intent进行组件通信的原理: 2.了解Intent过滤器的原理和匹配机制: 3.掌握发送和接收广播的方法 [实验内容] 任务1.普通广播: ...

  5. 多思计组实验实验五、程序计数器实验

    实验五.程序计数器实验 一.实验目的: 1.连接程序计数器.地址寄存器.存储器与指令寄存器,理解程序计数器的作用. 2.掌握使用微命令通过程序计数器从存储器中读取指令和数据的方法. 预习要求: 1.读 ...

  6. 计算机网络实验五 STP配置实验

    实验五 STP配置实验 一.实验目的: 理解交换机中STP协议的作用. 掌握配置.查看STP信息的方法. 掌握修改桥优先级,控制根桥选举的方法 掌握修改端口优先级,控制根端口和指定端口选举的方法. 掌 ...

  7. linux实验五 信号应用,实验五 进程间通信(中)

    一.实验名称:实验五进程间通信(中) 二.实验日期:2014/3/27 三.实验目的: 1.  通过实验理解消息缓冲通信 2.  通过实验理解共享内存通信 3.  了解消息缓冲通信与内存共享通信之间的 ...

  8. c语言程序设计 实验五数组6,实验五 数组——一维数组.doc

    实验五 数组--一维数组 淮海工学院计算机科学系实验报告书 课程名:< C语言程序设计教程> 题 目: 实验五 数组--一维数组 班 级: 学 号: 姓 名: 评语: 成绩: 指导教师: ...

  9. 实验五 微控制器实验

    系列文章目录 目录 系列文章目录 一.实验目的 二.实验原理 三.微程序控制电路与微指令格式 四.实验接线 五.实验步骤 ①写微程序 ②读微程序 ③单步运行 ④连续运行 六.实验结论 一.实验目的 1 ...

  10. 算法设计与分析 实验五 算法综合实验

    实验5.<算法综合实验> 一.实验目的 理解和复习所学各种算法的概念 掌握和复习所学各种算法的基本要素 掌握各种算法的优点和区别 通过应用范例掌握选择最佳算法的设计技巧与策略 二.实验内 ...

最新文章

  1. 干货 | 时间序列预测类问题下的建模方案探索实践
  2. azure虚拟机挂载数据盘
  3. boost::fusion::join用法的测试程序
  4. c++类与类的组合关系(Combination)关系
  5. weblogic 8.1 安装并配置数据源
  6. 最小生成树的Prime算法的思想
  7. 二叉树的先序、中序、后续遍历【Java】
  8. Web开发人员的必备工具 - Emmet (Zen Coding)
  9. 培训前5分钟时间写的抽查考试的程序
  10. 数据库脏读,不可重复度,幻读以及对应的事务隔离级别
  11. 如何从超级用户进入非超级用户
  12. 跑跑卡丁车rush服务器维护,跑跑卡丁车rush+每日必做事情整理得丰富奖励
  13. 郑轻OJ:1153: 简易版最长序列
  14. 主流消费级固态硬盘SSD接口
  15. 猪悟能淘宝店商品下载专家 v1.2
  16. 【产业互联网周报】高盛上调阿里云估值至1238亿美元;腾讯云入选Gartner全球云计算IaaS和PaaS魔力象限...
  17. Ubuntu20.04 conda安出错,成功解决:solving environment:failed with initial frozen solve.Retrying with flexibl
  18. ubuntu挂载Nas及磁盘测速
  19. excel不显示0_Excel中把0显示为空白的三种解决方法
  20. SpringBoot 集成 Spring Data Mongodb 操作 MongoDB 详解

热门文章

  1. Java面试题大全带答案 40道
  2. 你知道判断高防抗ddos的能力吗?
  3. android 调出键盘表情_Android高仿微信表情输入与键盘输入详解
  4. 前端程序员常用办公工具(持续更新)
  5. 选股策略与技巧 选股策略报告
  6. java0.632数据类型_Object-c提供基本数据类型
  7. 用python发送叮叮消息
  8. 计算机主机中包,百度地图脱机包最终可以在计算机上导入
  9. 开机自动随机改计算机名,【优化电脑·禁止随机启动项·加速开机】
  10. macOS 网络已连接但无法使用的一种情况