主题中讨论的其他器件: 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
}