当前位置: 首页 > news >正文

单片机学习11——矩阵键盘

矩阵键盘:

这个矩阵键盘可以接到P0、P1、P2、P3都是可以的。

使用矩阵键盘是能节省单片机的IO口。

P3.0 P3.1 P3.2 P3.3 称之为行号。

P3.4 P3.5 P3.6 P3.7 称之为列号。

矩阵键盘检测原理:

1、检查是否有键按下;

2、键的抖动处理;

3、查询按下键所在行和列的位置,并对行号和列号译码,得到键值。

#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit dula=P2^6;
sbit wela=P2^7;uchar disnum,temp,key;uchar code table_duan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};void delay(uchar);void main()
{disnum=16;wela=1;P0=0xfe;wela=0;while(1){P3=0xf0;temp=P3;temp=temp&0xf0; //按位与if(temp!=0xf0)  //判断是否有按键按下{delay(10);if(temp!=0xf0){temp=P3;temp=temp|0x0f;P3=temp;key=P3;switch(key){case 0xee: disnum=0; break;case 0xde: disnum=1; break;case 0xbe: disnum=2; break;						case 0x7e: disnum=3; break;						case 0xed: disnum=4; break;						case 0xdd: disnum=5; break;						case 0xbd: disnum=6; break;						case 0x7d: disnum=7; break;						case 0xeb: disnum=8; break;						case 0xdb: disnum=9; break;						case 0xbb: disnum=10; break;						case 0x7b: disnum=11; break;						case 0xe7: disnum=12; break;						case 0xd7: disnum=13; break;						case 0xb7: disnum=14; break;						case 0x77: disnum=15; break;}}	}P0=table_duan[disnum];dula=1;dula=0;}
}void delay(uchar x)
{uchar a, b;for(a=x;a>0;a--){for(b=200;b>0;b--);}	
}

 使用子模块(函数)的方法:

#include<reg52.h>#define uchar unsigned char
#define uint unsigned intsbit dula=P2^6;
sbit wela=P2^7;uchar disnum,temp,key,num;void delay(uchar);
uchar keyscan();uchar code table_duan[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};void main()
{disnum=16;wela=1;P0=0xfe;wela=0;while(1){num=keyscan();P0=table_duan[num];dula=1;dula=0;}
}uchar keyscan()
{P3=0xf0;temp=P3;temp=temp&0xf0; //按位与if(temp!=0xf0)  //判断是否有按键按下{delay(10);if(temp!=0xf0){temp=P3;temp=temp|0x0f;P3=temp;key=P3;switch(key){case 0xee: disnum=0; break;case 0xde: disnum=1; break;case 0xbe: disnum=2; break;						case 0x7e: disnum=3; break;						case 0xed: disnum=4; break;						case 0xdd: disnum=5; break;						case 0xbd: disnum=6; break;						case 0x7d: disnum=7; break;						case 0xeb: disnum=8; break;						case 0xdb: disnum=9; break;						case 0xbb: disnum=10; break;						case 0x7b: disnum=11; break;						case 0xe7: disnum=12; break;						case 0xd7: disnum=13; break;						case 0xb7: disnum=14; break;						case 0x77: disnum=15; break;}}	}return disnum;	
}void delay(uchar x)
{uchar a, b;for(a=x;a>0;a--){for(b=200;b>0;b--);}	
}

光看不练,就是眼高手低。多练习才行的。

http://www.lryc.cn/news/246042.html

相关文章:

  • Java游戏 王者荣耀
  • 接口测试场景:怎么实现登录之后,需要进行昵称修改?
  • 石油化工专业MR仿真情景教学演练
  • Docker配置Halo搭建个人博客-快速入门
  • 禁止编辑的PPT幻灯片,如何有效保护文件安全?
  • 优化前端性能
  • 1.1 C语言之入门:使用Visual Studio Community 2022运行hello world
  • Android NDK开发中常用的gradle配置
  • 【AUTOSAR-DoIP】通过 DoIP 进行符合 Autosar 的车辆诊断
  • GPIO的使用--操作PE02 PE03 PE04实现开关控制灯泡亮灭
  • 【算法萌新闯力扣】:回文链表
  • php站点伪静态配置(Apache+Linux)
  • Figma 插件学习(二)- 常用属性和方法
  • 基于Flutter的图片浏览器的实现
  • STM32-使用固件库新建工程
  • 商用车量产智能驾驶路径思考
  • flink消费kafka限制消费速率
  • 搭建Appium工具环境
  • 【面经八股】搜广推方向:常见面试题(六)
  • 6.前端--CSS-基础选择器【2023.11.26】
  • Java制作“简易王者荣耀”小游戏
  • 正则表达式例题-PTA
  • 基于Python的南京二手房数据可视化分析的设计与实现
  • 软件特征与类型
  • 无人机遥控器方案定制_MTK平台无人设备手持遥控终端PCB板开发
  • 【C++】静态成员
  • 单片机学习10——独立按键
  • 微服务系列(三)--通过spring cloud zuul过滤器实现线上流量复制
  • 微信小程序image组件图片设置最大宽度 宽高自适应
  • 虚幻学习笔记—文本内容处理