51编写 4 位数码管显示驱动程序,要求较为方便的给数码管对应的位的显存赋值。
时间: 2023-06-18 17:08:54 浏览: 53
这里给出一个基于51单片机的4位数码管显示驱动程序,使用共阳数码管,使用P2口作为控制端口,P0口作为数据端口。
```
#include <reg52.h>
// 定义数码管编码表,共阳数码管
const unsigned char code ledCode[10] = {
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90
};
void delay(unsigned int t) {
while(t--);
}
void main() {
unsigned char data digit[4] = {0}; // 数码管显示的4个数字
unsigned char code pos[4] = {0xfe, 0xfd, 0xfb, 0xf7}; // 数码管对应的位控制码
unsigned char i = 0; // 循环计数器
while(1) {
// 数码管扫描
for(i = 0; i < 4; i++) {
P0 = ledCode[digit[i]]; // 给数码管赋值
P2 = pos[i]; // 选择数码管位
delay(100); // 延时,控制数码管刷新速度
P0 = 0x00; // 关闭数码管
}
}
}
// 给数码管赋值,pos为数码管位,val为对应的数字
void setDigit(unsigned char pos, unsigned char val) {
digit[pos] = val;
}
```
在主函数中,使用一个循环来扫描4个数码管,分别给每个数码管赋值,并选择对应的位进行显示。在给数码管赋值时,使用了一个数码管编码表,将数字转换为对应的编码。如果需要给数码管赋新的值,可以使用`setDigit`函数进行赋值。