TI中文支持网
TI专业的中文技术问题咨询交流网站

用msp430显示数据,数据永远无法改变。

从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"
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;
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_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);//显示直流电压
                      }
          flag_ad=0;
          Voltage_DC=0;
          Voltage_AC=0;//
          a11=0;b22=0;c33=0;d44=0;
        }
}
灰小子:

这个是程序的逻辑问题。估计是那一段显示最新电压的代码没执行到。

建议画一下逻辑流程图,就很清楚了。

user5928186:

回复 Susan Yang:

非常感谢,问题已解决,前段时间非常忙碌,没有及时回复非常抱歉。

Susan Yang:

回复 user5928186:

很高兴您能解决问题

赞(0)
未经允许不得转载:TI中文支持网 » 用msp430显示数据,数据永远无法改变。
分享到: 更多 (0)