【Proteus仿真】Arduino UNO+数码管显示4x4键盘矩阵按键

【Proteus仿真】Arduino UNO+数码管显示4x4键盘矩阵按键


  • Proteus仿真演示
    在这里插入图片描述

所需库

可以在Arduino IDE管理库(Ctrl + Shift + I)下载到,也可以直接点击在IDE源码中的点击http://librarymanager/All#Keypad

  • Keypad库
    在这里插入图片描述
  • 代码编译信息
1
2
3
4
5
6
 已使用: C:\Users\Administrator\Documents\Arduino\libraries\Keypad
使用 3.1.1 版本的库 Keypad 在文件夹: C:\Users\Administrator\Documents\Arduino\libraries\Keypad
"C:\\Users\\Administrator\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "d:\\arduino\\MyHexDir/MatrixKey.ino.elf"
项目使用了 2918 字节,占用了 (9%) 程序存储空间。最大为 32256 字节。
全局变量使用了190字节,(9%)的动态内存,余留1858字节局部变量。最大为2048字节。

  • 加载带BootLoader字符的Hex文件,进行仿真。
    在这里插入图片描述

程序代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/\* 名称:数码管显示4x4键盘矩阵按键
说明:基于键盘矩阵库Keypad完成4x4键盘矩阵按键扫及数码管显示;
每次按键被按下时蜂鸣器同时输出指定指示音;
\*/

#include <Keypad.h> //点击这里会自动打开管理库页面:http://librarymanager/All#Keypad
const byte CA_SEGCODE[] = //0~F共阳数码管段码,最后一个是横线的段码
{0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8E, 0xbf};
//定义4x4矩阵键盘行线与列线引脚
byte row_pins[4] = {17, 16, 15, 14};
byte col_pins[4] = {11, 10, 9, 8};
//定义4x4键盘各键位对应的字符
char KeyCharList[4][4] = {
{'0', '1', '2', '3'},
{'4', '5', '6', '7'},
{'8', '9', 'A', 'B'},
{'C', 'D', 'E', 'F'},
};
//初始化Keypad实例
Keypad kpd = Keypad(makeKeymap(KeyCharList), row_pins, col_pins, 4, 4);
char c;
byte i;

void setup()
{
DDRD = 0XFF; PORTD = 0XFF; //PD端口全部设置为输出
PORTD = CA_SEGCODE[16]; //初始时数码管显示‘-’
}

void loop()
{
c = kpd.getKey(); //获取键值
if (!c) return; //无按键按下,直接返回
if (isdigit(c)) i = c - '0'; // 0~9
if (isalpha(c)) i = c - 'A' + 10; //10~15
PORTD = CA_SEGCODE[i]; //输出段码
tone(12, 2400, 50); //12号引脚输出2.4Hz音频,时长50ms
}


仿真资源和程序源码

本实验基于Proteus8.12平台。

1
2
3
链接:https://pan.baidu.com/s/1abFF1sfnUisiouGpMpfTcg 
提取码:ujiw


世界上最富有的人,是跌倒最多的人。世界上最勇敢的人,是每次跌倒都能爬起来的人!