打印

430f5529的内置温度传感器

[复制链接]
1907|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq2432974686|  楼主 | 2013-7-16 09:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//我找到一个在x44x上用的代码,是把温度传感器的温度显示到LCD上,求帮忙改下能用在5529上。
#include <msp430x44x.h>

#define LCD_IN_USE 8   
#define RADIX_POINT 0x08
#define REFVOL 2.5                                     //vcc参考设为2.5   
   
unsigned char adc_Flag;   
/******************************************************  
   数据定义                                          
*****************************************************/   
const unsigned char NUM_LCD[16]={   
                0x7B, 0x12, 0x4f, 0x1f, 0x36,  //'0'~ '4'   
        0x3d, 0x7d, 0x13, 0x7f, 0x3f,  //'5' ~ '9'   
        0x73, 0x7c, 0x69, 0x5e, 0x6f,  // '6'~ 'E'   
        0x65};                         // F"   
unsigned char lcd_Buf[LCD_IN_USE];             // 自定义显示缓冲区,用于   
                                               // 外部设定要显示的数据
/************************************************************  
*   初始化ADC12  
************************************************************/   
void init_ADC12(void)   
{   
     ADC12CTL0   = ADC12ON + REFON + REF2_5V + SHT0_6;// 设置ADC12 的内部参考电压2.5伏   
     ADC12CTL1   = SHP;                               // 设置使用采样时钟   
     ADC12MCTL0  = INCH_10 + SREF_1;                  // 选择通道A10,即片内温度传感器输出   
     ADC12IE    |= 0x01;                              // 使能中断   
     ADC12CTL0  |= ENC;                               // 使能转换        
}   
/***********************************************************  
*   启动  ADC12  
************************************************************/   
void start_ADC12()   
{   
     ADC12CTL0 |= ADC12SC;   
     adc_Flag   = 0;   
}   
/***********************************************************  
*   把数据编程要显示的格式,然后写到lcd_Buf中去  
***********************************************************/   
void format_Data()   
{   
     int result;   
     unsigned char tmp;   
     result = ADC12MEM0;      
     result = ( int)(((REFVOL * result )/ 4096 - 0.986) /0.0000355); //得到对应的温度值*10,以包括小数两位 ;   
     for(tmp=0;tmp<7;tmp++)   
     {   
           lcd_Buf[tmp] = result % 10;                              //把结果转换成十进制,并存放在LCD缓冲区中   
           result = result /10;                                     //   
     }      
}   
/***********************************************************  
*   中断向量  
************************************************************/   
#pragma vector = ADC_VECTOR   
__interrupt void  ADC_Interrupt(void)   
{   
    format_Data();              //格式化数据并显示到LCD   
    adc_Flag = 1;               //指示有数据要显示   
}     
   
/*******************************************************  
*     模块初始化  
*******************************************************/   
void init_LCD(void)   
{   
    char tmpv;   
    BTCTL |= 0x10;                         // set LCD 时钟   
    P3DIR  = 0xff;                         // 输出模式   
    P5SEL  = 0xfc;                         // 置为外围模块   
    LCDCTL = LCDON+LCD4MUX+LCDP1;          // 4Mux 模式   
     for (tmpv = 0;tmpv<7;tmpv++)   
     {   
        LCDMEM[tmpv] = 0x00;               //clear LCD   
     }   
     LCDMEM[7] = 0x02;                      // 设置LCDMEM[7]                     
}   
/****************************************************  
*   
*    更新LCD缓冲区的内容,把数据显示到LCD  
*      
****************************************************/   
void lcd_Display()   
{                        
    char tmpv;   
    for(tmpv=0;tmpv<LCD_IN_USE-1;tmpv++)   
    {      
        LCDMEM[tmpv] = NUM_LCD[lcd_Buf[tmpv]]; //更新LCDMEM中的内容   
    }   
}   
/***************************************************  
*  设置小数点  
***************************************************/   
void lcd_SetRP()   
{   
    LCDMEM[2] |= 0x80;                         // 显示小数点   
}  

void main(void)   
{   
    unsigned int tmpv;         
    WDTCTL = WDTHOLD + WDTPW;     //停止看门狗   
    init_LCD();                   //初始化LCD   
    init_ADC12();                 //初始化ADC12   
    _EINT();                      //使能中断   
    while(1)   
    {   
        start_ADC12();            //启动ADC12   
        while(adc_Flag == 0);     //等待转换完称   
        lcd_Display();            //显示数据到LCD   
        lcd_SetRP();              //显示小数点   
        tmpv = 0;   
        while(tmpv<0xffff) tmpv++;//延时   
   }   
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

4

帖子

0

粉丝