生成一个基于51单片机的数字电压表,并且在电压表数值上显示出序号13
时间: 2024-03-23 10:38:07 浏览: 17
好的,以下是一个基于51单片机的数字电压表程序,同时在数码管上显示序号13:
```c
#include <reg52.h> // 引入51单片机的头文件
sbit LSA = P2^2; // 定义LSA引脚
sbit LSB = P2^3; // 定义LSB引脚
sbit LSC = P2^4; // 定义LSC引脚
unsigned char code duan[] = { // 数码管段码表
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
unsigned char code wei[] = { // 数码管位码表
0xfe, 0xfd, 0xfb, 0xf7
};
void delay(unsigned int i) { // 延时函数
while(i--);
}
void display(unsigned char num, unsigned char pos) { // 数码管显示函数
switch(pos) { // 根据位码表选择相应的位
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;
}
P0 = duan[num]; // 根据段码表输出相应的数字
}
void main() {
unsigned int voltage = 130; // 定义电压值为130
unsigned char digit[4]; // 定义4个数码管的值
digit[0] = voltage % 10; // 取个位
digit[1] = voltage / 10 % 10; // 取十位
digit[2] = voltage / 100 % 10; // 取百位
digit[3] = 13; // 显示13
while(1) {
for(int i = 0; i < 4; i++) { // 依次显示4个数码管的值
display(digit[i], i);
delay(1000); // 延时1秒
}
}
}
```
该程序使用了4个共阴数码管进行数字显示,其中LSA、LSB、LSC分别连接到P2.2、P2.3、P2.4引脚。在main函数中,首先将电压值130拆分为个位、十位、百位三个数码管的值,然后将序号13赋值给第四个数码管的值。在while循环中,依次显示每个数码管的值,并延时1秒,循环显示。注意,由于51单片机的I/O口输出电流较小,需要使用三极管放大电流才能驱动数码管。