用c语言写一个动态数码管显示的程序,要求用到共用体,一共三位数码管,数码管是共阳的
时间: 2024-02-05 16:10:26 浏览: 64
数码管显示的C语言编程
以下是用C语言编写的动态数码管显示程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <Windows.h>
typedef union {
struct {
unsigned char bit0 : 1;
unsigned char bit1 : 1;
unsigned char bit2 : 1;
unsigned char bit3 : 1;
unsigned char bit4 : 1;
unsigned char bit5 : 1;
unsigned char bit6 : 1;
unsigned char bit7 : 1;
} bits;
unsigned char byte;
} LED;
int main()
{
LED digit[3] = { 0 }; // 三位数码管的共用体
int num = 0; // 要显示的数字
int i, j;
srand((unsigned)time(NULL)); // 初始化随机数种子
while (1)
{
num = rand() % 1000; // 生成一个0~999的随机数
// 将num的三位数分别存储到共用体中
digit[0].byte = num / 100;
digit[1].byte = num / 10 % 10;
digit[2].byte = num % 10;
// 循环显示三位数码管
for (i = 0; i < 3; i++)
{
// 设置三个引脚为输出模式
TRISBbits.TRISB0 = 0;
TRISBbits.TRISB1 = 0;
TRISBbits.TRISB2 = 0;
// 根据共阳的特性,将共用体中的每个字节取反
digit[i].byte = ~digit[i].byte;
// 分别输出共用体中每个字节中的每一位
for (j = 0; j < 8; j++)
{
PORTBbits.RB0 = digit[i].bits.bit0;
PORTBbits.RB1 = digit[i].bits.bit1;
PORTBbits.RB2 = digit[i].bits.bit2;
PORTBbits.RB3 = digit[i].bits.bit3;
PORTBbits.RB4 = digit[i].bits.bit4;
PORTBbits.RB5 = digit[i].bits.bit5;
PORTBbits.RB6 = digit[i].bits.bit6;
PORTBbits.RB7 = digit[i].bits.bit7;
Sleep(1); // 暂停1毫秒
PORTB = 0; // 关闭所有引脚
}
}
}
return 0;
}
```
在这个程序中,我们使用了共用体来表示三位数码管的显示状态。每个共用体包含一个字节(即一个数码管),而每个字节又包含了8个位,分别对应数码管中的8个LED灯。在循环显示数码管时,我们将共用体中的每个字节取反后,分别输出每个字节中的每一位,从而实现了动态显示。同时,我们使用了Windows.h头文件中的Sleep函数来暂停程序的执行,以便给人眼留出足够的时间观察数码管的变化。需要注意的是,这个程序是在Windows平台下编写的,如果要在其他平台下运行,需要根据具体平台的API进行相应的修改。
阅读全文