C51编程动态数码管显示从左至右零至七的代码
时间: 2023-10-01 16:05:40 浏览: 135
以下是使用C语言编写的C51单片机动态数码管显示从左至右零至七的代码:
```c
#include <reg51.h> // 引入寄存器头文件
sbit LSA = P2^2; // 定义数码管位选控制引脚
sbit LSB = P2^3;
sbit LSC = P2^4;
unsigned char code dofly_DuanMa[17]={ // 数码管段码表
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00
};
void delay(unsigned int z) { // 延时函数
unsigned int x,y;
for(x=z;x>0;x--) {
for(y=110;y>0;y--);
}
}
void main() {
unsigned char i,j,k;
while(1) { // 无限循环
for(i=0;i<8;i++) { // 显示0~7
for(j=0;j<100;j++) { // 每个数码管显示100ms
for(k=0;k<8;k++) { // 依次显示每个数码管
switch(k) {
case(0): // 第1位数码管
LSA=0;LSB=0;LSC=0;dofly_DuanWei=0;break;
case(1): // 第2位数码管
LSA=1;LSB=0;LSC=0;dofly_DuanWei=1;break;
case(2): // 第3位数码管
LSA=0;LSB=1;LSC=0;dofly_DuanWei=2;break;
case(3): // 第4位数码管
LSA=1;LSB=1;LSC=0;dofly_DuanWei=3;break;
case(4): // 第5位数码管
LSA=0;LSB=0;LSC=1;dofly_DuanWei=4;break;
case(5): // 第6位数码管
LSA=1;LSB=0;LSC=1;dofly_DuanWei=5;break;
case(6): // 第7位数码管
LSA=0;LSB=1;LSC=1;dofly_DuanWei=6;break;
case(7): // 第8位数码管
LSA=1;LSB=1;LSC=1;dofly_DuanWei=7;break;
default:break;
}
P0=dofly_DuanMa[i]; // 显示i
delay(1); // 延时1ms
P0=0x00; // 关闭数码管
}
}
}
}
}
```
这段代码使用了循环嵌套,依次显示每个数码管,每个数码管显示100ms,循环显示0~7。其中,LSA、LSB、LSC 分别对应数码管的位选控制引脚,dofly_DuanMa 数组是数码管段码表,用于显示数字,delay 函数是延时函数。