简易直流数字电压表 - 图文

发布时间 : 星期二 文章简易直流数字电压表 - 图文更新完毕开始阅读

程序:

#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))

联系合同范文客服:xxxxx#qq.com(#替换为@)