标题:
单片机数码管 7SEG-MPX4-CC不亮但是引脚在闪怎么解决?
[打印本页]
作者:
暗黑泡泡龙
时间:
2023-11-4 23:35
标题:
单片机数码管 7SEG-MPX4-CC不亮但是引脚在闪怎么解决?
写的是按下4x4键盘矩阵,在动态数码管上显示”L ? OP ”,其中?的取值范围为0~9。
Keil 4的代码
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit LATCH = P2^2; // 数码管锁存引脚
uchar code segCode[] = { // 共阴极数码管的段码表
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
uchar code keyTable[] = { // 4x4矩阵键盘的键值表
0xEE, 0xDE, 0xBE, 0x7E,
0xED, 0xDD, 0xBD, 0x7D,
0xEB, 0xDB, 0xBB, 0x7B,
0xE7, 0xD7, 0xB7, 0x77
};
uchar keyValue; // 存储当前按下的键值
void delay(uint t) // 延时函数
{
uint i, j;
for(i = t; i > 0; i--)
for(j = 110; j > 0; j--);
}
void display(uchar num) // 数码管显示函数
{
LATCH = 0;
P0 = segCode[num];
LATCH = 1;
}
uchar getKey() // 获取按键函数
{
uchar row, col;
P1 = 0xFF; // 全部行拉高
col = P1; // 读取列值
col = col & 0x0F; // 只保留低4位
if(col == 0x0F) // 没有按键按下
return 0xFF;
else
{
row = 0;
P1 = 0xF0; // 全部列拉高
while(col == 0x0F) // 检测列值是否改变
{
delay(5);
col = P1 & 0x0F;
row++;
}
col = col | (P1 & 0x0F); // 组合列值和行值
return keyTable[(row - 1) * 4 + col - 1];
}
}
void main()
{
uchar num = 0;
while(1)
{
keyValue = getKey(); // 获取当前按下的键值
if(keyValue != 0xFF) // 判断是否有按键按下
{
if(keyValue >= 0xE7 && keyValue <= 0xEE) // 判断按下的键是否在范围内
{
num = keyValue - 0xE0; // 获取按键对应的数字
}
}
// 数码管动态显示"L ? OP"
display(0); // 显示空白
delay(5);
display(num); // 显示数字
delay(5);
display(10); // 显示字母L
delay(5);
display(11); // 显示字母O
delay(5);
display(12); // 显示字母P
delay(5);
}
}
屏幕截图 2023-11-04 233437.png
(105.55 KB, 下载次数: 51)
下载附件
2023-11-4 23:34 上传
作者:
KingTheWorld
时间:
2023-11-4 23:51
位选都没控制。。。。
作者:
zhuls
时间:
2023-11-5 01:13
一个巴掌拍不响,LED都单端了你还想让它亮起来?
作者:
beigua003
时间:
2023-11-5 01:21
位选线都没有接啊。led灯一个都不会亮的,要先位选后对应被选中的哪一位数码管led才会响应控制IO显示的
作者:
beigua003
时间:
2023-11-5 01:22
位选四个引脚没有接,不会亮的,要位选选中的LED数码才会响应IO口发过来的显示信号
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1