51单片机共阳极数码管制作四位计数器0000-9999代码
时间: 2023-07-30 10:10:11 浏览: 111
51单片机0-999的计数器
以下是51单片机共阳极数码管制作四位计数器0000-9999的代码:
```c
#include <reg51.h> //头文件
#define uchar unsigned char //宏定义uchar为unsigned char类型
sbit LSA = P2^2; //定义P2.2口为LSA
sbit LSB = P2^3; //定义P2.3口为LSB
sbit LSC = P2^4; //定义P2.4口为LSC
uchar code table[] = { //共阳极数码管0~9的编码
0xC0, 0xF9, 0xA4, 0xB0, 0x99,
0x92, 0x82, 0xF8, 0x80, 0x90
};
void delay(uchar i) //延时函数
{
uchar j, k;
for(j=0; j<i; j++)
for(k=0; k<125; k++);
}
void display(uchar num) //数码管显示函数
{
LSA = 0; LSB = 0; LSC = 0; //清空LSA、LSB、LSC
P0 = table[num/1000]; //显示千位
delay(1); //延时
LSA = 1; //锁存千位数据
P0 = 0xFF; //清空P0
LSA = 0; //清空LSA
LSA = 0; LSB = 0; LSC = 1; //显示百位
P0 = table[(num%1000)/100]; //显示百位
delay(1); //延时
LSB = 1; //锁存百位数据
P0 = 0xFF; //清空P0
LSB = 0; //清空LSB
LSA = 0; LSB = 1; LSC = 0; //显示十位
P0 = table[(num%100)/10]; //显示十位
delay(1); //延时
LSC = 1; //锁存十位数据
P0 = 0xFF; //清空P0
LSC = 0; //清空LSC
LSA = 1; LSB = 0; LSC = 0; //显示个位
P0 = table[num%10]; //显示个位
delay(1); //延时
LSA = 0; //清空LSA
}
void main() //主函数
{
uchar i, j, k, m;
while(1) //循环
{
for(i=0; i<10; i++)
for(j=0; j<10; j++)
for(k=0; k<10; k++)
for(m=0; m<10; m++) //四重循环
{
display(i*1000+j*100+k*10+m); //显示数字
}
}
}
```
该代码使用了共阳极的数码管,共阳极数码管的原理是将数码管对应的段选端口接在VCC上,而将位选端口接在单片机的IO口上。当IO口输出高电平时,对应的数码管会发光。代码使用了四重循环来实现从0000到9999的计数,每次循环通过调用数码管显示函数来显示当前的数字。其中,数码管显示函数通过锁存LSA、LSB、LSC的值来控制位选,通过P0口输出对应数字的编码来控制段选。延时函数用于控制数码管显示的时间,避免数字显示过快导致无法观察。
阅读全文