51单片机共阳极数码管制作四位计数器0000-9999
时间: 2023-07-30 10:09:05 浏览: 216
首先,需要了解数码管的共阳极和共阴极的区别。共阳极数码管的所有阳极都连接在一起,而阴极是分开控制的。因此,要点亮数码管上的某一位,需要将该位对应的阴极接地,同时将对应的阳极输出高电平。
以下是51单片机控制共阳极数码管实现四位计数器的基本步骤:
1. 定义数码管的引脚和对应的端口,如:
```
sbit DIG1 = P1^0; // 数码管第一位
sbit DIG2 = P1^1; // 数码管第二位
sbit DIG3 = P1^2; // 数码管第三位
sbit DIG4 = P1^3; // 数码管第四位
sbit DIO = P2^0; // 数据线
sbit CLK = P2^1; // 时钟线
```
2. 定义数码管的显示字符集,即对应数字的 LED 点阵,如:
```
unsigned char code LEDChar[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
};
```
3. 编写数码管显示函数,根据需要显示的数字将对应的 LED 点阵输出到数据线上,如:
```
void Display(unsigned char num, unsigned char dig){
unsigned char i;
DIO = 0; // 数据线清零
for(i = 0; i < dig; i++){ // 循环控制位选
CLK = 0; // 时钟线清零
if(i == num){ // 根据需要显示的数字选择 LED 点阵输出
DIO = LEDChar[i];
}
CLK = 1; // 时钟线置高
DIO = 0; // 数据线清零
}
}
```
4. 编写主函数,实现四位计数器的功能。首先需要定义计数器的变量,然后在循环中控制计数器的变化,并将计数器每一位的数字显示到对应的数码管上,如:
```
void main(){
unsigned int cnt = 0;
unsigned char cnt0, cnt1, cnt2, cnt3;
while(1){
cnt++; // 计数器加1
cnt0 = cnt % 10; // 取个位数字
cnt1 = cnt / 10 % 10; // 取十位数字
cnt2 = cnt / 100 % 10; // 取百位数字
cnt3 = cnt / 1000 % 10; // 取千位数字
DIG1 = 0; // 数码管第一位接地
Display(cnt0, 1); // 显示个位数字
DIG1 = 1; // 数码管第一位输出高电平
DIG2 = 0; // 数码管第二位接地
Display(cnt1, 2); // 显示十位数字
DIG2 = 1; // 数码管第二位输出高电平
DIG3 = 0; // 数码管第三位接地
Display(cnt2, 3); // 显示百位数字
DIG3 = 1; // 数码管第三位输出高电平
DIG4 = 0; // 数码管第四位接地
Display(cnt3, 4); // 显示千位数字
DIG4 = 1; // 数码管第四位输出高电平
delay(10); // 延时10ms,控制计数速度
}
}
```
以上是共阳极数码管实现四位计数器的基本步骤,可以根据需要进行修改和扩展。注意在实际连接数码管时需要根据具体型号和引脚定义进行修改。
阅读全文
相关推荐















