从adc采样电压数据,然后用lcd1602进行显示,但是其中数字无法被改变。
a11=Voltage_DC/1000+48;
b22=(Voltage_DC%1000)/100+48;
c33=((Voltage_DC%1000)%100)/10+48;
d44=Voltage_DC%10+48;
就是四个数字,把四位数的数据进行分离,但是它们无法被赋值。
显示的数字永远是2500.
#include <msp430.h>
#include <string.h>
#include "1602.h"
#include "adc.h"
#include <string.h>
#include "1602.h"
#include "adc.h"
long adc_date1;
long Voltage[50];
long Display_data;
int Current_AC;
long Voltage_DC;
float Voltage_AC;
int Current_DC;
int flag_ad=0;
int Flag_time=0;
int R=25;
int time=0;
void ADC10_ISR(void);
void ADC10_init(void);
/*
* main.c
*/
//unsigned int a[10],i;
int a11=0,b22=0,c33=0,d44=0;
* main.c
*/
//unsigned int a[10],i;
int a11=0,b22=0,c33=0,d44=0;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
P1DIR |= BIT0;
P2DIR |= 0xff;
lcdinit();
int i;
WDTCTL=WDTPW+WDTHOLD;
ADC10_init();
while(1)
{
for(i=0;i<50;i++){
ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
__delay_cycles(10);//延时 ,采样频率hz
//-----ADC转换完成中断唤醒CPU后才执行以下代码-----
adc_date1 = ADC10MEM; //读取AD采样值
Voltage[i]= (adc_date1-6)*1000/1000*2.5; //转换为电压值
if(Voltage[i]<=0){
flag_ad++;
}
Voltage_DC+=Voltage[i]/50;//直流电压取平均
Voltage_AC+=(Voltage[i]/1000.0*Voltage[i]/1000.0)/25;//交流电压取
} //for循环结束
Voltage_AC=1000*sqrtf(Voltage_AC);
Current_AC= Voltage_AC/R;
Current_DC= Voltage_DC/R;
if(flag_ad>2){//判定是否为交流点
LCD_write_string(0,0,"U:");
// writecom(0xc0+6); //摄氏度的小圆圈
// writedata(0xdf);//摄氏度的小圆圈
LCD_write_string(0,0,"U:");
// writecom(0xc0+6); //摄氏度的小圆圈
// writedata(0xdf);//摄氏度的小圆圈
// LCD_write_int(4,0,Voltage_AC);//显示交流电压
LCD_write_string(7,0,"AC");
LCD_write_string(0,1,"A:");
// LCD_write_int(4,1,Current_AC);//显示交流电压
}
else {
LCD_write_string(0,0,"U:");
a11=Voltage_DC/1000+48;
b22=(Voltage_DC%1000)/100+48;
c33=((Voltage_DC%1000)%100)/10+48;
d44=Voltage_DC%10+48;
LCD_write_int(2,0, a11);//显示直流电压
LCD_write_int(3,0,b22);//显示直流电压
LCD_write_int(4,0, c33);//显示直流电压
LCD_write_int(5,0, d44);//显示直流电压
LCD_write_string(7,0,"DC");
LCD_write_string(0,1,"A:");
LCD_write_int(4,1,Current_DC);//显示直流电压
}
LCD_write_string(7,0,"AC");
LCD_write_string(0,1,"A:");
// LCD_write_int(4,1,Current_AC);//显示交流电压
}
else {
LCD_write_string(0,0,"U:");
a11=Voltage_DC/1000+48;
b22=(Voltage_DC%1000)/100+48;
c33=((Voltage_DC%1000)%100)/10+48;
d44=Voltage_DC%10+48;
LCD_write_int(2,0, a11);//显示直流电压
LCD_write_int(3,0,b22);//显示直流电压
LCD_write_int(4,0, c33);//显示直流电压
LCD_write_int(5,0, d44);//显示直流电压
LCD_write_string(7,0,"DC");
LCD_write_string(0,1,"A:");
LCD_write_int(4,1,Current_DC);//显示直流电压
}
flag_ad=0;
Voltage_DC=0;
Voltage_AC=0;//
a11=0;b22=0;c33=0;d44=0;
}
}
Voltage_DC=0;
Voltage_AC=0;//
a11=0;b22=0;c33=0;d44=0;
}
}