51单片机矩阵键盘控制数码管
我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。
显示内容
在显示模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。
#include <reg52.h>
#include <absacc.h>
#define smgdat P0 //数码管数据口
#define temp P2 //矩阵键盘数据口
sbit smgcs1 = P1^5; //数码管控制
sbit smgcs2 = P1^6;
sbit smgwe = P1^4;
#define uchar unsigned char
#define uint unsigned int
uchar keyfhz=255,juzz; //定义一个返回
uchar code smg_dat[] = {
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 };
void delay(uint i){
while(i--);}
void juzxs(void); //矩阵键盘扫描取值
void smgsaom(uchar dat1,uchar dat2,uchar dat3,uchar dat4,uchar dat5,uchar dat6,uchar dat7,uchar dat8);
void t0init(void);
void keyscan()
{
uchar num;
EA = 0;
temp=0x0f; //拉低4位
if(temp!=0x0f) //判断是否有按键按下
{
delay(500); //¸消抖
if(temp!=0x0f)
{
temp=0x0f;
switch(temp)
{
case 0x07: num=1; break;