文章目录

  • 0 文章介绍
  • 1 仿真图
  • 2 效果图(展示第3行按键和第4行按键效果图)
  • 3 代码(部分)

0 文章介绍

5.2.3 键盘检测案例目标的实现
要求:上电时,数码管显示6个0,顺序按下矩阵键盘后,在数码管上依次显示0-F

1 仿真图

在这里插入图片描述

2 效果图(展示第3行按键和第4行按键效果图)

在这里插入图片描述

3 代码(部分)

参考案例7_2的代码 和 书上P107代码,完善该部分代码。

#include<reg52.h>        // 引入52系列单片机的头文件,定义了特殊功能寄存器
#define uchar unsigned char   // 定义 uchar 为 unsigned char 的简写
#define uint unsigned int     // 定义 uint 为 unsigned int 的简写

sbit dula = P1^6;            // 定义 dula 位变量,接U2锁存器的锁存端,连接在P1.6引脚
sbit wela = P3^4;            // 定义 wela 位变量,接U3锁存器的锁存端,连接在P3.4引脚

uchar num;                   // 保存当前按键对应的值
uchar temp;                  // 临时变量,用于读取P2口状态

// 数码管显示的编码表,0-9以及A-F的16个16进制字符对应的段码【待补充】
uchar code table[] =
{
    // 0,1,2,3
    // 4,5,6,7
    // 8,9,A,b
    // C,d,E,F
};

// 延时函数,x 控制延时时长(粗略)
void delay(uchar x)
{
    uchar a, b;
    for(a = x; a > 0; a--)
        for(b = 200; b > 0; b--);
}

// 数码管显示函数,x 是要显示的数字(0-15,对应上面的 table 编码)
void display(uchar x)
{
	// 1、段选
    P0 = table[x];   // 将段码送到P0口
    dula = 1;           // 锁存段选数据
    dula = 0;
    
	// 2、位选
    P0 = 【待补充】;          // 1100 0000   6位数码管全亮
    wela = 1;           // 锁存位选数据
    wela = 0;
}

// 主函数
void main()
{
    while(1)
    {
		//================== 1、扫描第一行(P2.0) ==================【待补充】
		

        //==================2、扫描第二行(P2.1) ==================【待补充】
        

        //==================3、扫描第2行(P2.2) ==================【待补充】
       

        //==================4、扫描第四行(P2.3) ==================【待补充】
       
		//================== 5、显示按键对应的数字或字母 ==================
        display(num); // 显示按键对应的数字或字母
    }
}
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐