//我找到一个在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++;//延时
}
} |