51单片机数码管显示0~9999和9999~0的代码
时间: 2023-10-22 16:03:21 浏览: 137
以下是基于51单片机的数码管显示0~9和9999~0代码示例:
```c
#include <reg51.h>
// 定义数码管段引脚连接的端口
sbit DIG1 = P2^0;
s DIG2 = P2^1;
sbit DIG3 = P2^2;
sbit DIG4 = P2^3;
// 定义数码管位选引脚连接的端口
sbit SEG_A = P1^0;
sbit SEG_B = P1^1;
sbit SEG_C = P1^2;
sbit SEG_D = P1^3;
sbit SEG_E = P1^4;
sbit SEG_F = P1^5;
sbit SEG_G = P1^6;
sbit SEG_DP = P1^7;
// 数码管显示0~9的编码
unsigned char code segNum[10] = {
0xC0, // 显示0
0xF9, // 显示1
0xA4, // 显示2
0xB0, // 显示3
0x99, // 显示4
0x92, // 显示5
0x82, // 显示6
0xF8, // 显示7
0x80, // 显示8
0x90 // 显示9
};
void delay(unsigned int t) {
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(unsigned int num) {
unsigned int i, j;
unsigned char digit[4];
digit[0] = num / 1000; // 千位
digit[1] = (num / 100) % 10; // 百位
digit[2] = (num / 10) % 10; // 十位
digit[3] = num % 10; // 个位
for (i = 0; i < 4; i++) {
switch (i) {
case 0:
DIG1 = 1;
break;
case 1:
DIG2 = 1;
break;
case 2:
DIG3 = 1;
break;
case 3:
DIG4 = 1;
break;
}
P1 = segNum[digit[i]];
delay(1); // 延时一段时间保证数码管刷新
// 关闭所有位选,准备切换到下一位数码管
DIG1 = 0;
DIG2 = 0;
DIG3 = 0;
DIG4 = 0;
delay(1); // 延时一段时间保证数码管刷新
}
}
void main() {
unsigned int i;
while (1) {
// 数码管显示0~9999
for (i = 0; i < 10000; i++) {
display(i);
}
// 数码管显示9999~0
for (i = 9999; i >= 0; i--) {
display(i);
}
}
}
```
这段代码在`main()`函数中的循环中,先将0~9999逐个显示在数码管上,然后逆序显示9999~0。你可以根据自己的硬件连接情况进行相应的修改。
阅读全文