当前位置:首页 > 简易直流数字电压表 - 图文
程序:
#include <12C5A60S2.h> #include \#include \
sbit JiDianQi = P2 ^0;
void delay(unsigned int x);
void main() {
int i, flag = 1; //flag为标志位,判断是否需要对电压进行放大
//内部AD返回数据三
unsigned int AD_value1, AD_value2, AD_value3, AD_value0; 通道;
double AD_valu0, AD_valu1, AD_valu2, AD_valu3, sum1 = 0, sum2 = 0, sum3 = 0,sum4 = 0, AD_V1, AD_V0, AD_V2, AD_V3; //AD_valux:单次电压值,sumx:100次的电压值,AD_Vx:最终电压值
int Cint, Cdou, Cdou1, Cdou2, Cdou3, Dint, Ddou, Ddou1, Ddou2, Ddou3, Ddou4; int Aint, Adou, Adou1, Adou2, Adou3, Bint, Bdou, Bdou1, Bdou2, Bdou3; //电压显示处理
/******初始化***********/ AD_init(); N5110_init();
N5110_clear_screen(); JiDianQi = 1; delay(200); while (1) {
/**************获取2V基准源*************/ for (i = 0; i < 1000; i++) {
P1M1 = 0x02;
P1M0 = 0x00;
AD_value1 = AD_get(1);
AD_valu1 = AD_value1 * 5.00 / 1024.0; sum1 = sum1 + AD_valu1;
/*********200mv~2V电压检测************/ while (flag)
{
}
AD_V1 = sum1 / 1000.00; sum1 = 0;
Aint = (unsigned int)AD_V1;
Adou = (unsigned int)((AD_V1 - Aint) * 1000); Adou1 = Adou / 100;
Adou2 = Adou % 100 / 10; Adou3 = Adou % 10; N5110_add_xy(30,0); N5110_led_ASCALL('R'); N5110_led_ASCALL(':'); N5110_led_int(Aint); N5110_led_ASCALL('.'); N5110_led_int(Adou1); N5110_led_int(Adou2); N5110_led_int(Adou3); N5110_led_ASCALL('V');
/***************读取电压值********************/ for (i = 0; i < 1000; i++) {
P1M1 = 0x04; P1M0 = 0x00;
}
}
AD_value2 = AD_get(2);
AD_valu2 = AD_value2 * AD_V1 / AD_value1; sum2 = sum2 + AD_valu2;
AD_V2 = sum2 / 1000.00 + 0.00555;
/**************判断阀值界限******************/ if ((((unsigned int)(AD_V2 * 1000)) <= 195)) { }
/***************电压显示处理及显示*********************/ sum2 = 0;
Bint = (unsigned int)AD_V2;
Bdou = (unsigned int)((AD_V2 - Bint) * 1000); Bdou1 = Bdou / 100;
Bdou2 = Bdou % 100 / 10; Bdou3 = Bdou % 10; N5110_add_xy(0,2);
//电压值显示
flag = 0;
JiDianQi = 0; delay(200); flag = 0; JiDianQi = 0; delay(200);
N5110_led_int(Bint); N5110_led_ASCALL('.'); N5110_led_int(Bdou1); N5110_led_int(Bdou2); N5110_led_int(Bdou3); N5110_led_ASCALL('V'); N5110_add_xy(0,0); N5110_led_int(2);
//2V档显示;
N5110_led_ASCALL('V'); N5110_led_ASCALL(' ');
N5110_clear_screen();
/*********10mv~200mV电压检测************/ while (!flag)
{
/**************获取5V基准源*************/ for (i = 0; i < 1000; i++) { P1M1 = 0x01;
P1M0 = 0x00;
AD_value0 = AD_get(0);
AD_valu0 = AD_value0 * 5.00 / 1024.0;
sum3 = sum3 + AD_valu0;
}
AD_V0= sum3 / 1000.0; sum3 = 0;
Cint = (unsigned int)AD_V0;
Cdou = (unsigned int)((AD_V0 - Cint) * 1000); Cdou1 = Cdou / 100;
Cdou2 = Cdou % 100 / 10; Cdou3 = Cdou % 10; N5110_add_xy(30,0); N5110_led_ASCALL('R'); N5110_led_ASCALL(':'); N5110_led_int(Cint); N5110_led_ASCALL('.'); N5110_led_int(Cdou1); N5110_led_int(Cdou2); N5110_led_int(Cdou3); N5110_led_ASCALL('V');
/***************读取电压值********************/ for (i = 0; i < 1000; i++) { }
P1M1 = 0x08;
P1M0 = 0x00;
AD_value3 = AD_get(3);
AD_valu3 = AD_value3 * AD_V0 / AD_value0; sum4 = sum4 + AD_valu3;
AD_V3 = (sum4 / 1000.0 + 0.01675) / 25.0;
/**************判断阀值界限******************/ if ((((unsigned int)(AD_V3 * 1000)) >= 195))
共分享92篇相关文档