51单片机数码管显示0~99
时间: 2023-08-14 21:51:32 浏览: 123
对于51单片机来说,可以使用数码管来显示0到99的数字。下面是一个示例程序,使用共阳极的4位数码管进行显示:
```c
#include <reg51.h>
// 定义数码管段选和位选的引脚
sbit segA = P0^0;
sbit segB = P0^1;
sbit segC = P0^2;
sbit segD = P0^3;
sbit segE = P0^4;
sbit segF = P0^5;
sbit segG = P0^6;
sbit segDP = P0^7;
sbit dig1 = P2^4;
sbit dig2 = P2^5;
sbit dig3 = P2^6;
sbit dig4 = P2^7;
// 数码管显示的数字编码
unsigned char code digitCode[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90 // 9
};
// 延时函数
void delay(unsigned int ms) {
unsigned int i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void displayNumber(unsigned int number) {
unsigned char digit[4];
digit[0] = number % 10; // 个位
digit[1] = (number / 10) % 10; // 十位
// 数码管显示
segA = 1;
segB = 1;
segC = 1;
segD = 1;
segE = 1;
segF = 1;
segG = 1;
segDP = 0;
// 显示第一个数码管
dig1 = 0;
P1 = digitCode[digit[1]];
delay(5);
dig1 = 1;
// 显示第二个数码管
dig2 = 0;
P1 = digitCode[digit[0]];
delay(5);
dig2 = 1;
}
void main() {
unsigned int number = 0;
while (1) {
displayNumber(number);
number++;
if (number > 99)
number = 0;
delay(500); // 每隔500ms刷新一次显示
}
}
```
这个程序通过循环显示从0到99的数字,使用了共阳极的4位数码管。你可以根据自己的硬件连接情况进行相应的修改。
阅读全文