This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F5529:MSP430f5529的温度读数

Guru**** 1688460 points
Other Parts Discussed in Thread: MSP430F5529, LM35
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1357542/msp430f5529-temperature-reading-from-msp430f5529

器件型号:MSP430F5529
主题中讨论的其他器件: LM35

你好,有一个项目要做,但我有问题,我不能解决。 因此、简言之、我将从 lm35dz 获取输出到 msp430f5529、然后通过 ADC 转换它、并将这些输出发送到3位7段显示屏、但我的段显示了随机数、无法正常工作。 有什么帮助吗? 谢谢。 (下面的代码)

#包含
#定义 BIT0
#定义 B 位1
#定义 C1位2
#define D BIT3 // P2.3
#define E BIT4
#define F BIT5
#定义 G 位6
#define DP BIT7
#define LM35 BIT0 //模拟输入 P4.0 LM35

#define Digit1位2
#define Digit2位3
#define Digit3 BIT4

空 configPins (空);
空 configTimer (空);
void configADC (void);
void DisplaySSD (int value、int digit、int showdecimal);

INT 电压;
INT temp = 0;

void main (void){
WDTCTL = WDTPW | WDTHOLD;//禁用看门狗计时器
configTimer();
configADC();
__ bis_SR_register (GIE);

P6DIR |=(A + B + C1 + D + E + F + G + DP);//设置 P6引脚作为输出
P1DIR |=(Digit1 + Digit2 + Digit3);//将 P1引脚设置为输出

while (1){
ADC12CTL0 |= ADC12SC;//开始 ADC 转换
while (! (ADC12IFG & BIT0));//等待转换完成

Voltage = ADC12MEM0;//读取 ADC 值
Voltage =(voltage * 3300)/ 1023;//将 ADC 读数转换为毫伏

//将毫伏转换为摄氏度
temp =电压/10;

//在7段显示屏上显示温度
DisplaySSD (temp % 10、3、1);//显示小数部分
P1OUT |=(Digit3);
__ delay_cycles (5000);
P1OUT &=μ~(Digit3);

DisplaySSD ((temp / 10)% 10、2、0);//显示十位数
P1OUT |=(Digit2);
__ delay_cycles (5000);
P1OUT &=μ~(Digit2);

DisplaySSD (temp /100、1、0);//显示数百位数
P1OUT |=(Digit1);
__ delay_cycles (5000);
P1OUT &=μ~(Digit1);


void configTimer (void){
TA0CTL = TASSEL_2 + MC_1;// SMCLK 向上计数模式、/1
TA0CCR0 = 1000000;// 1 MHz SMCLK、1Hz 采样率
TA0CCTL0 |= CCIE;//启用计时器 A0的中断

void configADC (void){
P4SEL |= LM35;//选择 ADC 输入引脚

ADC12CTL0 = ADC12SHT0_8 + ADC12ON;//设置 ADC12ON、ADC12CLKDIV = 0、ADC12SHT0_8
ADC12CTL1 = ADC12SHP+ADC12CONSEQ_1;//使用采样计时器
ADC12MCTL0 = ADC12INCH_0;// ADC 输入通道
ADC12CTL0 |= ADC12ENC;//启用转换

void DisplaySSD(int value、int digit, int showdecimal){
P6OUT = 0;//清除所有段

开关(值){
情形0:
P6OUT |= A + B + C1 + D + E + F;
中断;
情形1:
P6OUT |= B + C1;
中断;
情形2:
P6OUT |= A + B + G + E + D;
中断;
情形3:
P6OUT |= A + B + C1 + D + G;
中断;
情形4:
P6OUT |= B + C1 + F + G;
中断;
情形5:
P6OUT |= A + C1 + D + F + G;
中断;
情况6:
P6OUT |= A + C1 + D + E + F + G;
中断;
情形7:
P6OUT |= A + B + C1;
中断;
情形8:
P6OUT |= A + B + C1 + D + E + F + G;
中断;
情形9:
P6OUT |= A + B + C1 + D + F + G;
中断;
默认值:
中断;

如果(showdecimal && digit == 3){
P6OUT |= DP;//打开小数点

#pragma vector=TIMER0_A0_vector
__interrupt void Timer_A (void){
Voltage = ADC12MEM0;//读取 ADC 值
__ bic_SR_register_on_exit (CPUOFF);//退出 LPM0

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好, Eyup Orhan

    您能否检查一下是否可以从寄存器  ADC12MEM0读取正常值?

    您可以在此代码行 电压= ADC12MEM0之前设置断点;//读取 ADC 值

    谢谢!