前言
课程设计报告以及IAR文件和C#上位机在文末。
一、设计内容及要求
ZigBee分为协调器和终端,终端把传感器采集到的数据发送给协调器,协调器把数据发送给上位机,上位机实时显示数据,达到监测水质的目的。
二、系统的硬件设计
传输节点为CC2530,一个作为协调器,两个作为终端DS18B20(温度传感器):用于测量水体温度
TSW-30(浊度传感器):用于测量水体浑浊度
2.1 CC2530
图2-1 CC2530引脚图
2.2 DS18B20
图2-2 DS18B20硬件接线图
表2-1 DS18B20引脚说明
DS18B20温度读取函数代码段,数字量读取
voidTemp_test(void)//温度读取函数{uint8V1,V2;Ds18b20Initial();Ds18b20Write(0xcc);Ds18b20Write(0x44);Ds18b20Initial();Ds18b20Write(0xcc);Ds18b20Write(0xbe);V1=Ds18b20Read();V2=Ds18b20Read();temp=((V1>>4)+((V2&0x07)*16));}
2.3TSW-30
表2-2 TSW-30引脚描述
TSW-30温度读取函数代码段,模拟量读取
uint16ReadData(void){uint16reading=0;P0DIR&=~0x20;//设置P0.5为输入方式//asm("NOP");asm("NOP");/*ClearADCinterruptflag*/ADCIF=0;ADCCON3=(0x20|HAL_ADC_DEC_064|HAL_ADC_CHANNEL_5);/*Waitfortheconversiontofinish*/while(!ADCIF);asm("NOP");asm("NOP");/*Readtheresult*/reading=ADCL;reading|=(int16)(ADCH<<8);reading>>=8;returnreading;}
三、系统的软件设计
3.1 系统流程框图
图3-1 系统流程图
4.2 上位机编写
4.2.1 切割数据
由于不同终端节点的数据接收时间无法完全同步,故不能准确区分数据来源,故采用标志位的方式,在终端发送数据时,增加标志位 ’/c’和 ’/d’后紧接数据,由此可以判断数据的来源。
通过组合发送数据的标志位 ’/c’和 ’/d’切割数据,详情见如下代码段第14行,分离出想要的数据位。
4.2.2 显示数据
根据不同的标志位得到不同的数据,根据分离得到数据进行具体显示,详情见如下代码段第15-42行。
private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e){try{string data = string.Empty;this.Invoke((EventHandler)(delegate{data = serialPort1.ReadExisting();byte[] decBytes = System.Text.Encoding.Default.GetBytes(data);string str1 = System.Text.Encoding.Default.GetString(decBytes);string[] info = data.Split('/');try{for (int i = 0; i < info.Length; i++){if (info[i] == "c"){//浊度float f1 = Convert.ToSingle(info[i + 1]);label6.Text = Convert.ToString((int)f1 * 50 / 127);chart1.Series["浊度"].Points.AddXY(zdx++, (int)f1 * 50 / 127);if (zdx > 20)chart1.Series["浊度"].Points.Clear();this.listBox1.Items.Add(Time_Count.Text + "," + "浊度," + Convert.ToString((int)f1 * 50 / 127));}else if (info[i] == "d"){//温度float f1 = Convert.ToSingle(info[i + 1]);label7.Text = Convert.ToString(f1);chart1.Series["温度"].Points.AddXY(wdx++, f1);if (wdx > 20)chart1.Series["浊度"].Points.Clear();this.listBox2.Items.Add(Time_Count.Text + "," + "温度," + Convert.ToString(f1));}}}catch{}}));}catch (Exception ex){//响铃并显示异常给用户System.Media.SystemSounds.Beep.Play();MessageBox.Show(ex.Message);}}
附录
百度网盘, 提取码:tv6a