写出51单片机代码,利用单片机控制8个8段LED 数码管从0显示到8。
时间: 2024-02-01 18:17:07 浏览: 84
以下是基于Keil C51的代码:
```c
#include <reg51.h>
// 数码管位选信号控制端口
sbit digit1 = P2^0;
sbit digit2 = P2^1;
sbit digit3 = P2^2;
sbit digit4 = P2^3;
sbit digit5 = P2^4;
sbit digit6 = P2^5;
sbit digit7 = P2^6;
sbit digit8 = P2^7;
// 数码管段选信号控制端口
sbit segA = P1^0;
sbit segB = P1^1;
sbit segC = P1^2;
sbit segD = P1^3;
sbit segE = P1^4;
sbit segF = P1^5;
sbit segG = P1^6;
sbit segDP = P1^7;
// 数码管显示字符表
unsigned char code digitTable[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x98 // 9
};
void delay(unsigned int t) {
while (t--);
}
void display(unsigned char digit) {
segDP = 1; // 将小数点关闭
switch (digit) { // 根据显示的数字选择位选信号
case 0:
digit1 = 0;
break;
case 1:
digit2 = 0;
break;
case 2:
digit3 = 0;
break;
case 3:
digit4 = 0;
break;
case 4:
digit5 = 0;
break;
case 5:
digit6 = 0;
break;
case 6:
digit7 = 0;
break;
case 7:
digit8 = 0;
break;
default:
break;
}
P1 = digitTable[digit]; // 根据显示的数字选择段选信号
delay(1000); // 稍作延时
P1 = 0xFF; // 关闭所有段选信号
digit1 = 1; digit2 = 1; digit3 = 1; digit4 = 1;
digit5 = 1; digit6 = 1; digit7 = 1; digit8 = 1; // 关闭所有位选信号
}
void main() {
unsigned char i;
while (1) {
for (i = 0; i < 9; i++) {
display(i);
}
}
}
```
该代码中定义了数码管位选信号和段选信号的控制端口,并且定义了一个数码管显示字符表。在`display()`函数中,根据需要显示的数字选择位选信号和段选信号,并且稍作延时后关闭所有信号。
在`main()`函数中,循环显示0到8这9个数字。
阅读全文