51单片机四位共阳数码管显示2305(数码管段选引脚连P0,位选引脚连P2)
时间: 2023-07-02 21:19:40 浏览: 271
好的,下面是51单片机的代码实现:
```c
#include <reg51.h>
// 数码管共阳极连接,定义数码管显示0~9的段码值
unsigned char code numTable[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void main()
{
unsigned char i = 0;
while (1)
{
P0 = numTable[i % 10]; // 显示个位数
P2 = 0xfe; // 选择第一位数码管
delay(1); // 延时
P2 = 0xff; // 关闭所有数码管
P0 = numTable[i / 10]; // 显示十位数
P2 = 0xfd; // 选择第二位数码管
delay(1); // 延时
P2 = 0xff; // 关闭所有数码管
P0 = numTable[0]; // 显示小数点
P2 = 0xfb; // 选择第三位数码管
delay(1); // 延时
P2 = 0xff; // 关闭所有数码管
i++; // 循环显示
}
}
```
其中,`numTable`数组是用来存储显示0~9的数码管段码值的。`delay`函数是为了让数码管显示出来的数字能够被人眼识别,因为人眼对数字的刷新频率有限制。在`main`函数中,先显示个位数,然后选择第一位数码管,延时一段时间,再关闭所有数码管;然后显示十位数,选择第二位数码管,延时一段时间,再关闭所有数码管;最后显示小数点,选择第三位数码管,延时一段时间,再关闭所有数码管;最后循环显示。注意,这里的位选引脚P2需要设置为反向输出,即使用`P2 = 0xfe`选择第一位数码管,使用`P2 = 0xfd`选择第二位数码管,使用`P2 = 0xfb`选择第三位数码管,因为数码管的位选引脚是共阳的。
阅读全文