单片机数码管动态显示代码,不用switch语句,且使用八位共阴极数码管
时间: 2023-10-22 13:10:49 浏览: 142
以下是使用循环数组实现单片机数码管动态显示的代码,适用于八位共阴极数码管:
```c
unsigned char digit_table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 数码管段码表
void display(unsigned char* digits, int delay_time)
{
int i, j;
unsigned char digit;
for (i = 0; i < 8; i++)
{
digit = digits[i];
for (j = 0; j < delay_time; j++)
{
P1 = digit_table[digit];
P0 = ~(1 << i);
}
}
}
int main()
{
unsigned char digits[] = {1, 2, 3, 4, 5, 6, 7, 8}; // 要显示的数字
int delay_time = 10000; // 每个数字显示的时间
while (1)
{
display(digits, delay_time);
}
return 0;
}
```
这个代码中,`digit_table` 数组存储了数码管的段码表,其中每个元素对应一个数字,例如 `0xc0` 对应数字 0,`0xf9` 对应数字 1,以此类推。
`display` 函数用于显示一个八位数字数组。它首先遍历数组中的每个数字,然后在每个数字的显示时间内,依次点亮对应的数码管段和位。在每次循环中,将数码管段码输出到 P1 口,将对应的数码管位码取反后输出到 P0 口,从而实现数码管动态显示。
在主函数中,我们定义了一个要显示的数字数组 `digits` 和每个数字的显示时间 `delay_time`,然后在一个无限循环中调用 `display` 函数以动态显示数字。
阅读全文