标题:
单片机矩阵键盘扫描程序(仿真+程序)注释很详细
[打印本页]
作者:
cangyuan
时间:
2021-7-16 15:32
标题:
单片机矩阵键盘扫描程序(仿真+程序)注释很详细
摁键扫描是很基础的知识点,摁键扫描通俗的来说就是在串口输出高低电平,然后当有摁键摁下时便会引起电平的变化,我们只需将变化的电平进行记录和组合便可以知晓具体是那一格摁键摁下。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png
(25.39 KB, 下载次数: 79)
下载附件
2021-7-16 17:10 上传
单片机源程序如下:
#include <reg52.H>
#define u8 unsigned char
#define KEY P3 //定义变量,方便以后键盘接到其他的端口后,修改这里就行了,下面的程序不用再修改
u8 num1,i,num2;
u8 code keycode[16]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
void delay(long i){while(i--);}
void main(void)
{
KEY=0x0f;//初始状态,高位列,低电平;低位行,高电平
while(1)
{
if(KEY!=0x0f)//如果有按键按下,则KEY肯定不是原来的0x0f
{
delay(2000);//延时20毫秒,以防按键的弹簧上下振荡,造成按下的假象
if(KEY!=0x0f)num1=KEY;//的确是按下了,获取此时状态,高位均为0,低位有1位不是1
KEY=0xf0;//KEY输出0xf0
delay(2000);//延时20毫秒,以防按键的弹簧上下振荡,造成按下的假象
if(KEY!=0xf0)num2=KEY;
//for循环keycode数组检测 break
for(i=0;;i++)
{
if((num1|num2)==keycode[i]) break;
}
KEY=0x0f;//KEY输出0x0f,恢复初始状态
while(KEY!=0x0f);//如果还在按下,等待放手
P2=i;//P2口输出给BCD数码管
}
}
}
复制代码
仿真代码资料51hei提供下载(用winrar解压):
矩阵键盘程序.rar
(66.73 KB, 下载次数: 60)
2021-7-16 15:29 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
YwJ
时间:
2024-4-3 14:36
谢谢分享,学习学习
作者:
zhengguo_wang
时间:
2024-4-28 10:03
好资料,51黑有你更精彩!!!
作者:
leoeric
时间:
2024-5-10 22:34
谢谢分享,学习学习
好资料,51黑有你更精彩!!!
作者:
打杂的
时间:
2024-5-15 10:11
下载试试效果咋样
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1