2020级机械电子工程专业学生“电工电子技术实训”项目之一为“简易计算器”。其中的数字显示模块要求使用8个共阴极数码管作为计算结果显示,并将任意3位数显示在数码管上。试使用C51编写程序实现上述功能。
时间: 2024-04-06 16:29:53 浏览: 59
以下是使用C51编写的简易计算器程序,其中使用了8个共阴极数码管进行计算结果的显示,能够显示任意3位数:
```c
#include <reg51.h>
// 定义数码管连接的IO口
#define DIGIT_PORT P1
#define SEGMENT_PORT P0
// 定义数码管显示的数字
unsigned char digit[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
void delay(unsigned int n)
{
unsigned int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < 125; j++);
}
void display(unsigned int num)
{
unsigned int i, j, k, m;
unsigned int digit_num[3];
// 分离出百位、十位、个位数字
digit_num[0] = num / 100;
digit_num[1] = (num % 100) / 10;
digit_num[2] = num % 10;
// 循环显示数字
for (i = 0; i < 100; i++)
{
for (j = 0; j < 3; j++)
{
// 每隔一段时间切换数码管
for (k = 0; k < 8; k++)
{
DIGIT_PORT = ~(1 << k);
SEGMENT_PORT = digit[digit_num[j]];
delay(1);
SEGMENT_PORT = 0xFF;
}
}
}
// 数码管显示完毕,清空数字
for (m = 0; m < 3; m++)
{
digit_num[m] = 0;
}
}
void main()
{
unsigned int num = 123; // 要显示的数字
while (1)
{
display(num);
}
}
```
在程序中,首先定义了数码管连接的IO口、数码管显示的数字等信息。然后使用了一个 `display()` 函数来实现数字的显示,该函数将要显示的数字按百位、十位、个位分离出来,然后循环显示每个数字。在循环中,先循环显示每个数码管,然后再切换到下一个数字的显示,每隔一段时间切换一次,最终显示完毕后清空数字。在 `main()` 函数中,不断调用 `display()` 函数来显示数字。
阅读全文