51单片机数码管显示0-99
时间: 2023-11-20 10:59:34 浏览: 148
51单片机 数码管显示
这里给出一个基于51单片机的数码管显示0-99的程序:
```c
#include <reg51.h> // 引入 51 单片机头文件
// 定义数码管端口
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit DIO=P2^0;
sbit RCK=P2^1;
unsigned char code table[]={ // 数码管显示表,0-9
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void delay(unsigned int i) { // 延时函数
while(i--);
}
void writeData(unsigned char dat) { // 向数码管写入数据
unsigned char i;
for(i=0;i<8;i++) {
DIO=dat&0x80;
dat<<=1;
delay(100);
RCK=1;
delay(100);
RCK=0;
}
}
void select(unsigned char n) { // 选择数码管显示位
switch(n) {
case 0:
LSA=0;
LSB=0;
LSC=0;
break;
case 1:
LSA=1;
LSB=0;
LSC=0;
break;
case 2:
LSA=0;
LSB=1;
LSC=0;
break;
case 3:
LSA=1;
LSB=1;
LSC=0;
break;
case 4:
LSA=0;
LSB=0;
LSC=1;
break;
case 5:
LSA=1;
LSB=0;
LSC=1;
break;
case 6:
LSA=0;
LSB=1;
LSC=1;
break;
case 7:
LSA=1;
LSB=1;
LSC=1;
break;
}
}
void main() {
unsigned char i,j;
while(1) {
for(i=0;i<100;i++) { // 数码管显示0-99
for(j=0;j<8;j++) { // 选择数码管
select(j);
writeData(table[i%10]); // 显示个位数
delay(100);
writeData(0x00); // 清空数码管
select(j+1);
writeData(table[i/10]); // 显示十位数
delay(100);
writeData(0x00); // 清空数码管
}
}
}
}
```
在上述程序中,我们使用了一个 `table` 数组来存储数码管显示表,其中每个元素表示显示的数码。在 `main()` 函数中,我们使用了两个循环来分别控制个位数和十位数的显示,同时还用了 `select()` 函数来选择要显示的数码管。程序中还定义了一个 `delay()` 函数,用于实现延时,以便数码管能够正常显示。
需要注意的是,由于 51 单片机的时钟频率较低,因此在循环中需要加入适当的延时函数,以确保数码管能够正常显示。此外,在实际的电路中,还需要将数码管接到相应的端口上,并且需要使用适当的电阻限流,以避免对数码管造成损坏。
阅读全文