矩阵按键通过按键值表查询的方法实现按键依次显示0~F

矩阵按键通过按键值表查询的方法实现按键依次显示0~F

首页休闲益智连线矩阵更新时间:2024-07-31

书山有路勤为径,学海无涯苦作舟。开始新的学习吧,让你感到快乐的学习不叫学习!

先给大家上个图,

今天的视频录制完毕,我会把程序贴在文章里面,需要看视频的同学,请前往我个人的视频区。

电路图怎么连线,大家可以看得出来。我现在把程序代码贴一下:/*矩阵按键通过读取按键值表来分析出按键值并送去显示*/

#include <reg52.h> //头文件

#define uchar unsigned char //定义两个无符号字符

#define uint unsigned int //定义两个无符号字符

sbit dula=P2^0; //把p2.0-2.1 分别赋值为 段选位 和位选

sbit wela=P2^1; //把p2.0-2.1 分别赋值为 段选位 和位选

uchar code KEY_table[]={0xee,0xde,0xbe,0x7e, // 按键键值表

0xed,0xdd,0xbd,0x7d,

0xeb,0xdb,0xbb,0x7b,

0xe7,0xd7,0xb7,0x77};

uchar code table[]={0x3f,0x06,0x5b,0x4f, //定义一个阴极数码管的编码表。

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delayms(uint xms) //延时子程序

{

uint i,j;

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void display(uchar y) //显示子程序 定义一个无符号字符

{

P0=table[y]; // 形式参数

dula=1; //开断选位

dula=0 ;//关闭断选 ,锁存器就把数据存住了,

}

main() //主函数

{

uchar temp,key,num,x; //顶一个4个无符号字符

P0=0x00; //让八个位选全部低电平有效

wela=1; //位选开启,自动把数据送到P0

wela=0; //位选关闭,数据在锁存器保持

while(1) //判断为真

{

P3=0xf0; //把列全部输出高电平,行全部输出低电平

if(P3!=0xf0)// 测试不等于 ,

{

delayms(10); 延时去抖动

if(P3!=0xf0) 再次判断是否有按键按下

{

temp=P3; 把目前P3口的真实状态 送给temp /这个时候,行全是低电平,但是列也会存在一个低电平。

P3=0x0f; 然后再让列全部变成低电平,行全部点成高电平。//

实际上 因为有按键按下,这是就对行来看,里面会有低电平。

//此时列全是低电平,行也会存在一个低电平。

key=temp|P3; 将 行列状态综合赋值给temp ,把上面的值进行一个运算,举个例子:

Temp:1110 0000, P3:0000 1110 temp|p3=1110 1110

for(x=0;x<16;x ) //一开始如果没有给定义的数值 赋值,那么默认为0,所以X=0.

if(key==key_table[x]) 进行查表 对比如果第X个数的值等于KEY,则

{

num=x; //就会吧X的值 赋值给num

break; //退出这个循环

}

display(num); 把值送到显示子函数,

delayms(50);/*这个延时可以加,也可以不加,加上仿真,

用肉眼可以看出程序在不断扫描,不加就看不出来,

但是实际还是在扫描 */

}

}

}

}

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved