b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

四个MCU学习矩阵键盘实验

电脑杂谈  发布时间:2020-08-01 09:04:26  来源:网络整理

51单片机矩阵键盘程序_单片机矩阵键盘c语言编程_单片机矩阵键盘课程设计报告

实验目的: 了解并掌握矩阵键盘的工作原理;

实验模块: 核心板+矩阵键盘+数字管模块;

实验内容: 数字显像管和矩阵键盘会相应显示,即从左到右,从上到下命名.

对于“ 0--F”;

扩展任务: 数字管和按钮分别显示,并进行乘法显示;

模块连接图:

电路原理图:

矩阵键盘的工作原理: 在矩阵键盘中,水平线和垂直线在交点处不是笔直的

已连接,但通过按钮连接. 这样就可以构成端口(例如P3端口)

4 * 4 = 16键,这是直接在键盘上使用端口线的两倍,而更多的行则是差异

更明显的是,例如,多条线可以组成一个20键键盘,而端口线只能直接使用

一键(9键). 可以看出,当按键数量较大时,采用矩阵法制作键盘是合理的.

的. 矩阵键盘通常使用以下命令确定所按下键的位置.

第一种方法是行扫描:

首先判断键盘上是否有按键,将所有行H0-H3设置为低电平,然后检查列线

L0-L3的状态. 只要一列的水平很低,就表示按下和关闭了键盘上的一个键

The

键位于4个键之间,其中低电平线与4条行线交叉. 如果所有列线都高,那么

键盘上没有按键被按下;然后,确定关闭键的位置. 确认按下键后,您可以输入

确定关闭密钥的过程. 方法是: 依次将行线设置为低电平,即将某行设置为

低电平时,其他行为高电平. 确认某行的位置较低后,然后逐行检查每一列

行的级别状态. 如果某列为低,则关闭设置为低的列线和行线交点处的按钮

关闭按钮.

51单片机矩阵键盘程序_单片机矩阵键盘c语言编程_单片机矩阵键盘课程设计报告

第二种方法是高低翻转法:

首先,让P1端口的高四位为1,低四位为0. 如果按下一个按钮,则前四位将有一个数字

一个1变为0,并且低四位不变. 此时,可以确定所按下键的行位置;然后让P1

嘴巴的高四位为0,低四位为1. 如果按下按钮,则低四位将有一个1,该位将变为0,

高四位不变,此时可以确定所按下键的列位置.

功能描述: 采用倒置方式实现矩阵键盘扫描,数码管显示4x4键盘扫描结果

硬件连接: 使用8位杜邦电缆连接J8和J12,使用2位杜邦电缆将J11_0连接到J15_DS1,将J11_1连接到J15_DS2,使用8位杜邦电缆将J9连接到J6.

#include“ reg51.h” //包含头文件

位LE1 = P2 ^ 0; //选择573锁存器使能

位LE2 = P2 ^ 1; //细分选择573锁存器启用

#define uchar无符号字符

#define uint unsigned int

uchar keyValue; //定义扫描结果参数

uchar代码dis [16] = {0x3F,0x06,0x5B单片机矩阵键盘课程设计报告,0x4F,0x66,0x6D,0x7D,0x07,

// 0 1 2 3 4 5 6 7

0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; // 0〜F段代码

// 8 9 A B C D E F

uchar temp;

// ********************************************* **************************************************** **** ***

//延迟功能

// ********************************************* **************************************************** **** ***

delay(uint time)// int类型数据为16位,因此最大值为65535

{

单片机矩阵键盘课程设计报告_51单片机矩阵键盘程序_单片机矩阵键盘c语言编程

uint i单片机矩阵键盘课程设计报告,j; //为循环语句定义变量i,j

for(i = 0; i for(j = 0; j)

// ********************************************* **************************************************** **** ***

//矩阵键盘扫描功能

// ********************************************* **************************************************** **** ***

keyScan()

{

uchar x,y;

P3 = 0xf0; // P3分配0xf0

if((P3&0xf0)!= 0xf0)//确定高4位是否全为1(高4位中的全1表示没有按键)

{

delay(20); //延时反跳,一般为5ms〜10ms(由于机械触点的弹力作用,关闭时按钮无法稳定开启,

//并且在关闭时会产生一系列抖动,按键的抖动会导致多次误读按键)

if((P3&0xf0)!= 0xf0)//如果仍然可以检测到键盘按动

{

x = P3&0xf0; //读取P3端口数据

P3 = 0x0f; //反向,P3分配值为0x0f

y = P3&0x0f; //读取P3端口数据

keyValue = x | y; //获取扫描结果

}

}

}

// ********************************************* **************************************************** **** ***

//矩阵键盘扫描结果处理功能

单片机矩阵键盘课程设计报告_单片机矩阵键盘c语言编程_51单片机矩阵键盘程序

// ********************************************* **************************************************** **** ***

uchar keyHandle(uchar值)

{

切换(值)

{

case 0xee: {return(0); break;} //对应于按钮S1

case 0xde: {return(1); break;} //对应的按钮S2

case 0xbe: {return(2); break;} //对应的按钮S3

case 0x7e: {return(3); break;} //对应于按钮S4

情况0xed: {return(4); break;} //对应于按钮S5

case 0xdd: {return(5); break;} //对应的按钮S6

case 0xbd: {return(6); break;} //对应的按钮S7

case 0x7d: {return(7); break;} //对应的按钮S8

case 0xeb: {return(8); break;} //对应的按钮S9

case 0xdb: {return(9); break;} //对应于按钮S10

case 0xbb: {return(10); break;} //对应于按钮S11

case 0x7b: {return(11); break;} //对应的按钮S12

case 0xe7: {return(12); break;} //对应的按钮S13

情况0xd7: {return(13); break;} //对应的按钮S14

case 0xb7: {return(14); break;} //对应的按钮S15

情况0x77: {return(15); break;} //对应的按钮S16

默认值: {break;}

}

}

51单片机矩阵键盘程序_单片机矩阵键盘课程设计报告_单片机矩阵键盘c语言编程

// ********************************************* **************************************************** **** ***

//显示扫描结果功能

// ********************************************* **************************************************** **** ***

show()

{

P1 = 0x00; // 0x00 = 0000 0000,即频闪数字均为8位

LE1 = 1; //锁位

LE1 = 0; //断开锁存器,第573位的Q7〜Q0仍为0x00

P1 = dis [temp]; //代码为0〜F

LE2 = 1; //锁定段代码

LE2 = 0; //断开锁存器,段573的Q7〜Q0仍为[temp]

}

// ********************************************* **************************************************** **** ***

//主要功能

// ********************************************* **************************************************** **** ***

void main()//主函数

{

while(1)//进入while循环

{

keyScan(); //按键扫描

temp = keyHandle(keyValue); //处理扫描结果

show(); // 8位数码管显示键值

}

}


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-289618-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 张秋丽
        张秋丽

        #杨洋2015金投赏##杨洋轻奢young#羊毛携手杨洋

      • 牛倩倩
        牛倩倩

        真心很好听

      • 陈赟
        陈赟

        各种复杂添加剂

      每日福利
      热点图片
      拼命载入中...