关于AT89C52用AD转换器,采集一电位器(变阻器)的电压,并用数码管显示该模拟电压,保留两位小数,写出程序代码
时间: 2023-10-24 20:05:39 浏览: 66
好的,以下是基于AT89C52单片机的AD转换器采集电位器电压并用数码管显示的程序代码:
```c
#include <reg52.h> // 引入AT89C52头文件
sbit dula = P2^6; // 数码管段选1
sbit wela = P2^7; // 数码管段选2
unsigned char code table[] = { // 数码管显示表
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90
};
void delay(unsigned int i) { // 延时函数
while (i--);
}
void display(unsigned char num) { // 数码管显示函数
dula = 1;
P0 = table[num / 10];
dula = 0;
delay(100);
dula = 1;
P0 = table[num % 10];
dula = 0;
delay(100);
}
void main() {
unsigned int ad_result; // AD转换结果
float voltage; // 电位器电压
unsigned char i; // 循环计数器
while (1) {
ADCON0 = 0x85; // 设置AD转换器
ADCON1 = 0x80; // 设置AD转换器
delay(1000); // 延时,等待AD转换完成
ad_result = ADRESH;
ad_result <<= 8;
ad_result |= ADRESL;
voltage = (float)ad_result / 1023 * 5; // 计算电位器电压
voltage = (int)(voltage * 100) / 100.0; // 取两位小数
for (i = 0; i < 50; i++) { // 数码管显示
wela = 1;
P0 = 0xff;
wela = 0;
display(voltage * 100);
}
}
}
```
程序思路:
1. 引入头文件,并定义数码管段选引脚和显示表;
2. 定义延时函数和数码管显示函数;
3. 在主函数中,定义AD转换结果、电位器电压和循环计数器;
4. 进入无限循环,每次循环进行以下操作:
- 设置AD转换器;
- 延时,等待AD转换完成;
- 获取AD转换结果,并计算电位器电压;
- 取两位小数;
- 循环50次,每次调用数码管显示函数,显示电位器电压。
希望能够帮到你,如有疑问请继续提问。