c52单片机共阴数码管倒计时
时间: 2023-07-03 07:11:11 浏览: 60
以下是一个基于c52单片机的共阴数码管倒计时程序:
```c
#include <REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit LSA = P2 ^ 2; // 数码管控制引脚LSA
sbit LSB = P2 ^ 3; // 数码管控制引脚LSB
sbit LSC = P2 ^ 4; // 数码管控制引脚LSC
sbit DIO = P2 ^ 0; // 数码管数据引脚
sbit CLK = P2 ^ 1; // 数码管时钟引脚
uchar code table[] = { // 数码管显示字符表
0x3f, // 0
0x06, // 1
0x5b, // 2
0x4f, // 3
0x66, // 4
0x6d, // 5
0x7d, // 6
0x07, // 7
0x7f, // 8
0x6f, // 9
};
void delay(uint z) // 延时函数
{
uint x, y;
for (x = z; x > 0; x--)
for (y = 110; y > 0; y--);
}
void display(uchar num) // 数码管显示函数
{
uchar i;
for (i = 0; i < 8; i++)
{
CLK = 0;
DIO = (num & 0x80);
num <<= 1;
CLK = 1;
}
}
void main()
{
uchar i, j;
for (i = 9; i > 0; i--) // 倒计时从9开始
{
for (j = 99; j > 0; j--) // 一个循环中有100个数码管显示,相当于1秒钟
{
LSA = 0; LSB = 0; LSC = 0; // 显示百位数码管
display(~table[i]);
delay(2);
LSA = 1; LSB = 0; LSC = 0; // 显示十位数码管
display(~table[j / 10]);
delay(2);
LSA = 0; LSB = 1; LSC = 0; // 显示个位数码管
display(~table[j % 10]);
delay(2);
}
}
}
```
和共阳数码管相比,共阴数码管的显示方式是相反的,即需要通过将数码管的引脚电平置为低电平来开启一个数码管的显示。因此,在程序中需要对数码管的显示字符表进行取反,即将每个字符的数码管引脚电平状态取反,才能正确地显示出来。除此之外,程序的其余部分和共阳数码管的倒计时程序是相同的。