用c语言写一个动态数码管的程序,要求数码管有三个位选,一共只有7只脚(请注意区别这里不是指7个段选,是加上位选一共只有7只脚,至于管脚直接如何定义的,你可以随便找找),要求用联合体
时间: 2024-02-12 10:04:58 浏览: 28
好的,以下是一个使用C语言编写的动态数码管程序,该程序使用3个位选和7个数字位,使用联合体来实现:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA = P2 ^ 2;
sbit LSB = P2 ^ 3;
sbit LSC = P2 ^ 4;
union num_display
{
uchar num[3];
struct
{
uchar digit1;
uchar digit2;
uchar digit3;
}digit;
};
uchar code table[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void delay(uint x)
{
uint i, j;
for(i = x; i > 0; i--)
for(j = 110; j > 0; j--);
}
void display(uchar num, uchar digit)
{
switch(digit)
{
case 1:
LSA = 0; LSB = 0; LSC = 0; break;
case 2:
LSA = 1; LSB = 0; LSC = 0; break;
case 3:
LSA = 0; LSB = 1; LSC = 0; break;
}
P0 = table[num];
delay(1);
P0 = 0x00;
}
void main()
{
union num_display num;
uchar i = 0;
while(1)
{
num.num[0] = i % 10; //个位
num.num[1] = i / 10 % 10; //十位
num.num[2] = i / 100 % 10; //百位
display(num.digit.digit1, 1);
display(num.digit.digit2, 2);
display(num.digit.digit3, 3);
i++;
if(i == 1000) i = 0;
}
}
```
在这个程序中,我们定义了一个联合体`num_display`,其中包含了一个三个元素的无符号字符数组`num`和一个包含三个无符号字符的结构体`digit`。数组`num`用于存储需要显示的数字,结构体`digit`则用于将数字按照个位、十位、百位的顺序进行存储。在`main`函数中,我们不断更新联合体`num_display`中的数字,并调用`display`函数在数码管上进行显示。