基于CC2530的温湿度传感器和基于C#的应用界面设计
来源:互联网 发布:windows官网镜像 编辑:程序博客网 时间:2024/05/16 09:12
1.问题提出
1.1、如何编写温湿度传感器实验程序
1.2、如何编写串口通信代码
1.3、如何利用c#的Serialport去获取串口传输的数据并完成上层应用界面设计
2.功能要求
2.1、设置温度报警值为26度,达到报警值时,红色闪亮,当低于报警值时,停止闪亮,同时,按下按钮,也可以解除报警;
2.2、将温湿度采集通过串口发送到电脑,上层用串口小助手查看,或者用VC等编程语言读取串口数据。
3.实验准备
3.1、IAR 安装
3.2、USB 转串口驱动安装
3.3、ZigBee 仿真器驱动安装
3.4、USBmini数据线、物联网基础实验箱、下载器
4.实验结果
4.1总体设计
4.2实验结果
描述:当温度高于26摄氏度时,Led闪烁警示,按下按键之后,报警解除,Led熄灭
4.3功能模块代码实现
void inttail(void){P1DIR |=0x03;PLED=0;}
static void delay( uint32 d ){uint32 i,j;for( i = 0; i < d; i ++ ){j = 1000;while( j-- );}}
void Init_IO_AND_LED(void){ P0INP &= ~0X0c; //配置P0口上拉下拉情况 P1INP &= ~0X40; //配置P1口上拉下拉情况 P0IEN |= 0X40; //P06为中断模式 PICTL |= 0X02; //下降沿 EA = 1; IEN1 |= 0X20; // P0IE = 1;开启P0口中断 P0IFG |= 0x00;};
void initUARTtest(void){ CLKCONCMD &= ~0x40; //晶振 while(!(SLEEPSTA & 0x40)); //等待晶振稳定 CLKCONCMD &= ~0x47; //TICHSPD128分频,CLKSPD不分频 SLEEPCMD |= 0x04; //关闭不用的RC振荡器 PERCFG = 0x00;//位置1 P0口 P0SEL = 0x3c;//P0用作串口 P2DIR &= ~0XC0; //P0优先作为串口0 U0CSR |= 0x80;//UART方式 U0GCR |= 10;//baud_e U0BAUD |= 216;//波特率设为57600 UTX0IF = 0;}
</pre><pre name="code" class="cpp">/*****************************************************************函数功能 :串口发送字符串函数****************************************************************/void UartTX_Send_String(char *Data,int len){int j;for(j=0;j<len;j++){U0DBUF = *Data++;while(UTX0IF == 0);UTX0IF = 0;}}
void main(void){uint16 sht; float sht11;intClock(); P2DIR |= 0x01; //打开电源P2 |= 0x01; initUARTtest(); SHT1X_INT();ugOled9616int(); //初始化OLed配置 inttail(); Init_IO_AND_LED(); delay(10); while(1){ char tempBuf[5]; sht = Read_SHT1X(3);sht&=0x3fff; sht11 = (float)(sht*0.01) - 39.60; sprintf( (void *)tempBuf,"%f",sht11); LcdPutString16_8(0,0,(uint8*)tempBuf,5,1); delay(10); if(m==0){ if(sht11>=29) { PLED=!PLED; } else PLED=1; } if(sht11<29) m=0; char humBuf[6]; sht = Read_SHT1X(5); sht&=0x0fff; sht11 = (float)(sht*0.0405) - 4 - (sht * sht * 0.000028); sprintf( (void *)humBuf,"%f",sht11); humBuf[5] = 37;//% LcdPutString16_8(48,0,(uint8*)humBuf,6,1); delay(10); UartTX_Send_String(tempBuf,5); delay(10); //延时 delay(10); UartTX_Send_String(humBuf,6); //串口发送数据 //串口发送数据 delay(10); //延时 delay(10); delay(10); }}
#pragma vector = P1INT_VECTOR __interrupt void P1_ISR(void){if(P0IFG>0) //按键中断{P0IFG = 0;PLED = 1;m=1;delay(10);}P0IF = 0; //清中断标志 }
基于c#的应用界面简单设计
代码实现
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.IO.Ports;using System.Text;using System.Threading;using System.Windows.Forms;using Microsoft.Win32;namespace CommAssist{ public partial class Form1 : Form { SerialPort Comm = new SerialPort("COM3", 57600, Parity.None, 8, StopBits.One); //初始化串口设置 public delegate void Displaydelegate(byte[] InputBuf); Byte[] OutputBuf = new Byte[128]; public Displaydelegate disp_delegate; public Form1() { disp_delegate = new Displaydelegate(DispUI); InitializeComponent(); comboBox1.SelectedItem = "COM3"; Comm.DataReceived += new SerialDataReceivedEventHandler(Comm_DataReceived); try { Comm.Open(); } catch { MessageBox.Show("你选择的串口被占用或不存在,请重新选择"); OpenSerialPort.Text = "打开串口"; textBox1.Text = " "; textBox2.Text = " "; } } /** *显示温度,湿度的值 **/ public void DispUI(byte[] InputBuf) { //textBox1.Text = Convert.ToString(InputBuf); ASCIIEncoding encoding = new ASCIIEncoding(); if (encoding.GetString(InputBuf).Contains("%")) { textBox1.Text = encoding.GetString(InputBuf); } else { textBox2.Text = encoding.GetString(InputBuf); } } /** *获取缓冲区数据 **/ void Comm_DataReceived(object sender, SerialDataReceivedEventArgs e) { Byte[] InputBuf = new Byte[128]; try { Comm.Read(InputBuf,0,Comm.BytesToRead); //读取缓冲区的数据直到“}”即0x7D为结束符 //InputBuf = UnicodeEncoding.Default.GetBytes(strRD); //将得到的数据转换成byte的格式 System.Threading.Thread.Sleep(50); this.Invoke(disp_delegate, InputBuf); } catch (TimeoutException ex) //超时处理 { MessageBox.Show(ex.ToString()); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) //选择串口的处理过程 { bool b_OpenFlag = Comm.IsOpen; if (b_OpenFlag == true) { Comm.Close(); Comm.PortName = comboBox1.SelectedItem.ToString(); if (!Comm.IsOpen) { Comm.Close(); try { Comm.Open(); } catch { MessageBox.Show("你选择的串口被占用或不存在,请重新选择"); OpenSerialPort.Text = "打开串口"; textBox1.Text = " "; textBox2.Text = " "; } } } else { Comm.PortName = comboBox1.SelectedItem.ToString(); } } private void OpenSerialPort_Click(object sender, EventArgs e) //点击“打开串口”按钮的操作 { if (OpenSerialPort.Text == "关闭串口") { Comm.Close(); OpenSerialPort.Text = "打开串口"; } else { OpenSerialPort.Text = "关闭串口"; try { Comm.Open(); } catch { MessageBox.Show("你选择的串口被占用或不存在,请重新选择"); OpenSerialPort.Text = "打开串口"; textBox1.Text = " "; textBox2.Text = " "; } } } }}
以上代码下载地址:
基于c#的串口通信获取温湿度传感器数据 http://download.csdn.net/detail/kevin_iot/9325183
基于CC2530的温湿度传感器及串口通信设计 http://download.csdn.net/detail/kevin_iot/9325203
1 0
- 基于CC2530的温湿度传感器和基于C#的应用界面设计
- 基于LPC11C14和DHT11的温湿度传感器编程
- 基于多传感器的温湿度检测系统
- 基于C8051F410的am2305温湿度传感器的驱动编写
- 基于C8051F410的DHT11温湿度传感器驱动编写
- 2.DHT11数字温湿度传感器的应用
- 基于Tiny4412的DHT11温湿度传感器的Linux设备驱动的简单实现
- 基于DHT11温湿度传感器的Android硬件访问服务的简单实现(一)
- 基于DHT11温湿度传感器的Android硬件访问服务的简单实现(二)
- 基于DHT11温湿度传感器的Android硬件访问服务的简单实现(三)
- 基于DHT11温湿度传感器的Android硬件访问服务的简单实现(四)
- 04 基于TI官方CC2530 BasicRF的简单应用
- 基于CC2530的zIgbee传感器无线数据采集系统开发(部分关键源码)
- 基于AT89S52单片机的温湿度报警系统
- 温湿度传感器DHT11的数据处理
- 基于CC2530的SPI通信调试笔记
- 基于ZigBee技术的无线传感器网络构建与应用
- 观察者与陀螺仪传感器的应用(基于PanoramaImageView)
- Makefile学习
- 跨境电商火爆 退换难题待解
- iOS xib simulated metrics size
- 最简单的基于librtmp的示例:发布(FLV通过RTMP发布)
- 通过位运算加密信息
- 基于CC2530的温湿度传感器和基于C#的应用界面设计
- Opencv Mat与Iplimage的相互转换
- 日本亚马逊海淘经验-2015
- USB-OTG
- Android VCard联系人备份恢复(导入/导出)详解
- python不用win32api获得windows日志的代码
- Open edX 学习、开发、运维相关链接整理
- 【剑指offer】之整数中1出现的次数
- 4.python学习笔记:python多线程下的threading模块