一个ch455实现4x5矩阵键盘灯光,包含三个数码管,具体实现代码
时间: 2023-12-24 19:05:42 浏览: 80
单片机实践-按键控制数码管代码实现.pptx
以下是一个基于CH455芯片的4x5矩阵键盘灯光及三位数码管的实现代码:
```
#include <CH455.h> //引入CH455库
#define ROW 4 //定义行数
#define COL 5 //定义列数
int rowPins[ROW] = {2,3,4,5}; //定义行引脚
int colPins[COL] = {6,7,8,9,10}; //定义列引脚
CH455 CH455(11, 12); //定义CH455对象,设置DIN和CLK引脚
int digitPins[3] = {A0, A1, A2}; //定义三位数码管的引脚
byte keys[ROW][COL] = { //定义键值矩阵
{'1', '2', '3', '4', '5'},
{'6', '7', '8', '9', '0'},
{'A', 'B', 'C', 'D', 'E'},
{'F', 'G', 'H', 'I', 'J'}
};
void setup() {
pinMode(digitPins[0], OUTPUT); //设置三位数码管引脚为输出模式
pinMode(digitPins[1], OUTPUT);
pinMode(digitPins[2], OUTPUT);
for (int i = 0; i < ROW; i++) { //设置行引脚为输入模式
pinMode(rowPins[i], INPUT_PULLUP);
}
for (int i = 0; i < COL; i++) { //设置列引脚为输出模式
pinMode(colPins[i], OUTPUT);
digitalWrite(colPins[i], HIGH);
}
CH455.init(); //CH455初始化
}
void loop() {
for (int col = 0; col < COL; col++) { //循环扫描列
digitalWrite(colPins[col], LOW); //设置当前列为低电平
for (int row = 0; row < ROW; row++) { //扫描当前列下的行
if (digitalRead(rowPins[row]) == LOW) { //如果当前行为低电平,则表示该键被按下
CH455.showChar(keys[row][col]); //在CH455上显示对应的字符
}
}
digitalWrite(colPins[col], HIGH); //恢复当前列为高电平
}
showNumber(millis() / 1000); //在三位数码管上显示从开机到现在经过的秒数
}
void showNumber(int num) { //显示数字函数
int digits[3]; //定义数组存储每一位数字
for (int i = 0; i < 3; i++) { //分离出每一位数字
digits[i] = num % 10;
num /= 10;
}
for (int i = 0; i < 3; i++) { //循环显示每一位数字
digitalWrite(digitPins[i], LOW); //设置当前位为低电平
CH455.showChar(digits[i] + '0'); //显示数字
delay(5); //延时
digitalWrite(digitPins[i], HIGH); //恢复当前位为高电平
}
}
```
需要注意的是,上述代码中使用了CH455库用于控制三位数码管,因此需要下载并安装该库后才能正常运行。
阅读全文