1、液晶显示采集温度系统 一、 实验目的 在这个实验中让我们了解基于CC2530芯片以及ZigBee协议实现温度的采集。 二、 仪器介绍 1、CC2530芯片: CC2530芯片主要分为三大方面:1、CPU和内存 2、外设,时钟以及电源管理,无线电灯。而在我们这次试验就涉及了第二模块。 2、ADC寄存器:ADC寄存器是一个支持多达14位的模拟数字转化。ADC寄存器在这次的实验中主要表现了以下几个特性: (1):8个独立的输入通道,可接受单端或差分信号 (2):转化结束时的DMA触发 (3):温度传感器输入,这也是本实验中最重要的 3、液晶显示器:由ADC寄存器的模数转化,从
2、而显示其数据 三、 程序设计 主函数代码如下: #include "ioCC2530.h" #include "initUART_Timer.h" #include "stdio.h" #include "LCD.h" INT16 AvgTemp; /**************************************************************** 温度传感器初始化函数 ****************************************************************/ void initTemp
3、Sensor(void) { DISABLE_ALL_INTERRUPTS(); //关闭所有中断 InitClock(); //设置系统主时钟为32M *((BYTE __xdata*) 0x624B) = 0x01; //开启温度传感器 *((BYTE __xdata*) 0x61BD) = 0x01; //将温度传感器与ADC连接起来 } /****************************************************************
4、 读取温度传感器AD值函数 ****************************************************************/ INT8 getTemperature(void) { UINT8 i; UINT16 AdcValue; UINT16 value; AdcValue = 0; for( i = 0; i < 4; i++ ) { ADC_SINGLE_CONVERSION(ADC_REF_1_25_V | ADC_14_BIT | ADC_TEM
5、P_SENS); // 使用1.25V内部电压,14位分辨率,AD源为:温度传感器 ADC_SAMPLE_SINGLE(); //开启单通道ADC while(!ADC_SAMPLE_READY()); //等待AD转换完成 value = ADCL >> 2; //ADCL寄存器低2位无效 value |= (((UINT16)ADCH
6、) << 6); AdcValue += value; //AdcValue被赋值为4次AD值之和 } value = AdcValue >> 2; //累加除以4,得到平均值 return ADC14_TO_CELSIUS(value); //根据AD值,计算出实际的温度 } void main(void) { char i; char TempValue[10]; whil
7、e(1) { initTempSensor(); //初始化ADC AvgTemp = 0; for(i = 0 ; i < 64 ; i++) { AvgTemp += getTemperature(); AvgTemp >>= 1; //每次累加后除2. } sprintf(TempValu
8、e, (char *)"%dC", (INT8)AvgTemp); uchar *pstr = (uchar *)TempValue; P0DIR = 0XFF; P1DIR = 0XFF; ResetLCD(); initLCDM(); ClearRAM(); delay_us(100); Print8(12,6,pstr); delay_ms(5000); } } 函数调用以及声明在库文件中,请到文件夹上看 四、 程序流程图 以下是采集的温度如何实现液晶显示的流程图 接受温
9、度TempValue 调用液晶显示器借口pstr 从而把温度显示出来 Pstr=TempValue 传入温度传感器中,并且读取温度 这时的信号是个模拟信号 信号进过ADC寄存器 IAR软件输入程序 利用Dubgger数据线 把程序传入CC2530芯片 从而液晶显示器显示出来 ADC寄存器进行模拟信号转化成数字信号 五、 温度采集的流程图 六、 整体分析 a) 对整个项目来说,主要面临的问题是我们如何采集温度? sprintf(TempValue, (char *)"%dC", (INT8)AvgTemp);这句代码尤
10、为重要, 把采集到的温度求取平均值在利用ADC 寄存器进行模数转化,成为uint型的数据。 b) 又如何把温度显示出来? uchar *pstr = (uchar *)TempValue;液晶显示器接受的类型是uchar类型的,而温度是个uint类型的,这时我们就要进行类型转化。 七、 结语 1、 编程方面:在实现这个液晶显示采集温度系统中,遇到的困难也是有些的,首先在遍程中怎么实现温度采集,温度显示。等等这些都是我们要考虑的,延迟函数的用法也要用的恰当。 2、 程序测试方面:不是每个编写出来的程序一定就是对的,肯定有他的BUG。而测试员就是要尽可能的找出BUG,以便程序员改正。 3、 仪器测试员:程序编好了就要把程序输入到温度传感器中,在这个过程中出现黑屏,温度格式显示不正确,或者温度显示离谱。这些都是有可能的。而测试员就是要找出这些错误。 4、 每个项目做出来后,都会有收获。收获多少就要看自己领会多少。






