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