一.硬件方案
本设计基于STC89C52单片机的一种电压测量电路,该电路采用ADC0832A/D转换芯片,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量0~9V的电压值,并在四位LED数码管上显示电压值。
二.设计功能
(1)ADC0832模数转换,0-9V电压测量;
(2)4位数码管显示测量电压值;
(3)10K可调电阻模拟电压测试;
(4)当提供电源电源为精准的5V电源时,精度为正负0.02V;
三.设计原理图
(1)原理图主要采用AD软件进行设计,如图:
(2)Protues仿真图如下:
四.软件设计
主程序源码
/*****************主函数********************/
void main()
{
static uchar i,j;
uint temp;
while(1)
{
display(); //数码管显示函数
if(i % 3 == 0) //循环10次
{
pingjun_zhi(p1); //把数从小到大排序
p1[j++] = ad0832read(1,0); //循环255个周期读取一次0832,因CPU运行比较快,没必要每次循环都去读取,选择通过CH0输入
if(j >= 9)
{
j = 0;
temp = p1[3] ; //取个中间值
temp = temp * 100 / 255 * 4.5 * 2;
dis_smg[2]=smg_du[temp/100%10] & 0xdf; //得到百位
dis_smg[1]=smg_du[temp/10%10]; //十位
dis_smg[0]=smg_du[temp%10]; //个位 ADC0832为8位ADC,数值为0~255,我们将其分开放入l_tmpdate数组中显示
}
}
i++;
}
}
/************ 排序***************/
void pingjun_zhi(uint *p)
{
static uint value;
static uchar i,j;
for(j=1;j<9;j++) //先对整个数组的9个值进行从小到大的排列
for(i=0;i<9 - j;i++)
{
if(p[i] > p[i+1])
{
value = p[i];
p[i] = p[i+1];
p[i+1] = value;
}
}
}
链接:https://pan.baidu.com/s/1C4gM1O25vXmcElER6dSEhw?pwd=ou47