#include <stdio.h>
#include<math.h>
#define Max_voltage 5.0
#define Max_value 4095
void approaching(float inputvotlage,int j,int results[12],int compare_voltage,int set_voltage,float guess_voltage)
{
int i;
if(j<12)
{
if(guess_voltage>=compare_voltage+set_voltage)
{
results[j]=1;
compare_voltage=compare_voltage+set_voltage;
approaching( guess_voltage, j+1,results,compare_voltage,set_voltage/2,guess_voltage);
}
else
{
approaching( guess_voltage, j+1, results,compare_voltage,set_voltage/2,guess_voltage);
}
}
}
int main () {
printf("请输入0——5V的电压值:");
float input_votlage;
scanf("%f",&input_votlage);
int i;
int set_voltage=2048;
int compare_voltage=0;
float step=Max_voltage/Max_value;
float guess_voltage=input_votlage/step;
int j=0;
int results[12];
for(i=0;i<12;i++)
{
results[i]=0;
}
if(input_votlage>5)
{
input_votlage=5;
}
else if(input_votlage<0)
{
input_votlage=0;
}
printf("基于12位AD转换的量化电压为:") ;
printf("%.1f\n",guess_voltage);
approaching(input_votlage,j,results,compare_voltage,set_voltage,guess_voltage);
printf("最终二进制值为:");
for(i=0;i<12;i++)
{
printf("%d",results[i]);
}
return 0;
}