zigbee---使用内置传感器

串口发送传感温度

1.使用ADC数模转换,计算出内置温度传感器的值
2.使用串口助手显示开发板传送上来的温度数据

实验思路:
使用ADC并进行4次数据的采集,最后求出平均值,利用规则公式计算出对应的温度,
将得到的浮点数转化成字符串利用串口发送,(1.可以使用整除,求余运算之后加上0x30进行转化,不过该方法精度较低 2.使用Sprintf函数将浮点型数拼接成字符串,这应该是特别好的方法),串口发送时是分一个字符一个字符的发送,使用strlen函数求取字符串的长度。

重点:如果使用的粤嵌开发板记得如下语句,否则拿到的温度值将为负数
在这里插入图片描述
实现代码:

#include <ioCC2530.h>
#include "exboard.h"
#include "string.h"
#include "stdio.h"
float getTemperature(void);   //函数声明
void initUART0(void);
void UartTX_Send_String(char *Data,int len);
uint value;
void delay(int i);
void main(void)
{
    char *data;
    float temp;
  
    initUART0(); 
    while(1)
    {
        temp=getTemperature();
        sprintf(data,"%f摄氏度    %d电压值\n",temp,value);  //字符串拼接函数,在头文件stdio.h中
        UartTX_Send_String(data,strlen(data));
        delay(100);
    }

}
//软件延时函数
void delay(int i)
{
    int j;
    for(;i>0;i--)
      for(j=0;j<10000;j++);

}
float getTemperature(void)
{
    char i;
    float va;
    uint AdcValue;
    AdcValue=0;
    TR0=0x01;//将内置温度传感器与ADC连接,粤嵌开发版的有这个需求
    ATEST=0x01;
    for(i=0;i<4;i++)//求取四次的平均值
    {
        ADCCON3|=0x3E;
        ADCCON1|=0x40;           //使用1.25v内部电压,12位分辨率,AD源为片内温度
                                 //传感器开启单通道ADC
        while(!(ADCCON1&0x80));  //等待AD转换完成
        value=ADCL>>2;           //AdcValue被赋值为4次AD值之和
        value|=(((uint)ADCH)<<6);
        AdcValue+=value;                   
    }
    value=AdcValue>>2;        //累加除以4,得到平均值
    va=(float)value*0.0629-303.3;   //根据AD值,计算出实际的温度   
    return va;
}

//串口通信初始化函数
void initUART0(void)
{
    CLKCONCMD&=~0x40;  //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);   //等待晶振稳定
    CLKCONCMD&=~0x47;           //设置系统主时钟频率为32MHZ
    PERCFG=0x00;                //位置1 P0口
    P0SEL=0x3C;                 //P0作为串口
    P2DIR&=~0x0C;             //P0优先作为UART0
    U0CSR|=0x80;              //串口设置为UART方式
    U0GCR|=9;
    U0BAUD|=59;              //波特率设为19200
    UTX0IF=1;                //UART0 TX中断标志初始置位1
    U0CSR|=0x40;              //允许接收
    IEN0|=0x84;              //开总中断,接收中断
}
//串口通信发送程序
void UartTX_Send_String(char *Data,int len)
{
    uint j;
    for(j=0;j<len;j++)//每次发送一个字符
    {
       U0DBUF=*Data++;
       while(UTX0IF==0);//发送标志
       UTX0IF=0; 
    }
    

}






实验现象:串口助手接收
在这里插入图片描述

串口助手下载地址链接:https://pan.baidu.com/s/1OLWEsXeW6bvpmMpiGBOSbA
提取码:vze7
复制这段内容后打开百度网盘手机App,操作更方便哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值