基于ZigBee技术的无线数据采集系统 - 图文(16)
江 苏 大 学 硕 士 学 位 论 文
按键采用ADC采样和直接读取电平两种方式,直接采集方式直接连接CC2430的I/O口,可以有很快的响应速度;而ADC采样可以节省I/O口的资源,通过几个电阻分压,可以判断按键值。其中halAdcSampleSingle(ADC_REF_AVDD, ADC_8_BIT, ADC_INPUT_JOYSTICK)为ADC采样函数。键盘扫描程序的实现代码详见附录。 4.3.3 液晶驱动程序
在完成系统的初始化之后,首先要改写OLED控制寄存器及地址寄存器,设置OLED的参数,配置Buffer的起始地址和Buffer大小等一些参数,然后清屏,最后是显示。与OLED相关的函数如下表4.2所示,函数的具体实现详见附录。
表4.2 OLED相关的函数 Tab.4.2 OLED relevant functions
函数名
void Lcdwritecom(int8u com) void Lcdwritedata(int8u dat) void InitLcd(void) void ClearScreen(void)
输入 com指令 dat数据 无 无
输出 无 无 无 无 无
功能描述 Oled写指令 Oled写数据 Oled初始化 清屏
显示6*8字符串
void Print6(INT8U xx, INT8U yy, xx ,yy 坐标,ch1待显示的INT8U ch1[], INT8U yn)
字符串,yn是否反黑
4.4 本章小结
根据本设计的要求,选择了星型网络拓扑作为应用的底层网络。本章首先介绍了星型网络的组建过程及其具体实现,接着详细介绍了ZigBee终端节点以及ZigBee协调器节点的软件的具体实现。
41
江 苏 大 学 硕 士 学 位 论 文
第五章 上位机应用软件的实现
5.1 软件的总体设计
考虑到软件的通用性及可操作性,软件是采用方便快捷的C++Builder语言编写的管理程序。Windows的通用图形界面的出现,使得计算机用户不必通过专门的学习就可以得心应手的使用各种Windows应用软件。但是众所周知,使用C或C++进行Microsoft Windows编程非常复杂,使人望而生畏。C++Builder编程语言的产生,使这一问题迎刃而解,它能让程序员集中精力在解决编程任务的方法和算法上,而不是集中在计算机硬件所需的建立上,其迅速为广大程序员所接受,成为极其高效的Windows开发系统,并被广泛用来制作测控软件的界面。
同时考虑到对于实时采集系统,通常会涉及到复杂的实时数据融合以及大量的历史数据处理。特别是系统经过长期运行后,所形成的数据量将更加庞大。因此采用何种技术手段,来组织和管理这些数据,将直接影响整个系统的性能。本系统利用Borland C++ Builder的数据库管理功能来实现对采集到的数据的管理,即以数据库的格式保存所采集的数据,这样大大提高了系统处理数据的效率。
上位机主要实现以下功能:(1)通过RS232串口通信完成与外设的通信;(2)数据实时显示;(3)数据库功能的实现。在本系统的应用程序中至少存在着数据采集和数据显示两个需要同时执行的任务。为了使界面操作不受数据采集的影响,程序至少需要两个线程——界面主线程和数据采集后台辅助线程。
5.2 多线程的实现
5.2.1 多线程概念
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源[37, 38]。
多线程是一种机制,它允许在程序中并发执行多个线程。对于单个CPU的
42
江 苏 大 学 硕 士 学 位 论 文
计算机,多个线程并不是真正同时运行,而是基于时间片轮转的方式一个一个的执行,由于时间片非常短,所以从宏观上看,多个线程是同时运行的。
线程的优点主要体现在系统管理开销小、线程间的切换快、并行程度高,以及通信上易实现。一个进程中的多个线程共享进程内的公共资源,同一进程的所有线程共享同样的虚拟地址空间、全局变量。因此,启动一个线程花费的空间远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需的时间。所以采用多线程技术能实现更高的效率。 5.2.2线程的创建
图5.1 创建一个多线程 Fig.5.1 Create a new thread
一个进程的主线程是由操作系统自动创建的,如果要让一个主线程创建额外的线程,首先,在C++Bulider中创建线程对象,其操作是在C++Builder IDE环境下选择菜单File|New,在New栏中选中Thread Object,如图5.1所示,按OK,接下来弹出输入框,输入TThread对象子类的名字Read232,这样C++Builder自动为创建了一个名为Tread232的TThread子类。同时编辑器中多了一个名为Unit2.cpp的单元,这就是创建的Tread232子类的原码。在Unit2.cpp中有个Execute函数区,这个区域是线程主要执行的地方,当线程被启动后,就
43
江 苏 大 学 硕 士 学 位 论 文
是执行这一区的程序代码。需要注意的是,每次执行时,都应该检查线程的Terminated属性,只有在此属性不为True时才执行程序代码。 5.2.3 线程的挂起和唤醒
当线程处于挂起状态时,CPU不会为其分配时间片,线程停止在挂起命令发出时的代码处,直到被允许执行。使用线程对象的Suspended方法可以控制线程的挂起,另外,也可以设置线程对象的Suspended属性为True。利用线程对象的Resume方法,可以唤醒挂起的线程。同样,也可以设置线程对象的Suspended属性为False。 5.2.4 线程的终止
当线程执行完Execute方法时,线程终止,触发OnTerminate事件,从而清除线程对象。也可以在线程运行过程中,由其它线程控制该线程的退出,这时需要调用线程对象的Terminate方法,并设置该线程对象的Terminate属性为True。要终止一个线程,也可以直接调用API函数TerminateThread。 5.2.5 线程的同步
C++Builder编程是建立在VCL类库的基础上的。但是VCL类库并不保证其中对象的属性和方法是线程访问安全的(Thread safe),访问VCL对象的属性或调用其方法可能会访问到不被别的线程所保护的内存区域而产生错误。因此,TThread对象提供了一个Synchronize方法,当需要在线程中访问VCL对象属性或调用方法时,通过Synchronize方法来访问属性或调用方法就能避免冲突,使各个线程之间协调而不会产生意外的错误。它的声明如下:
Void __fast call Synchronize (TThreadMethod &Method);
5.3 系统界面部分
系统界面直接面向用户,是系统控制软件的最上层。本系统具有良好的人机界面,一方面,对必须操作者完成的动作适时提示,同时还显示当前的工作状态、数据曲线显示等,以便用户可以通过界面选择所需内容来完成各种功能,
44
江 苏 大 学 硕 士 学 位 论 文
如串口的打开、设置,数据的实时显示,实时曲线显示,历史曲线显示等。
图5.2为上位机应用软件的界面图,其中用到的组件如表5.1所示:
图5.2 上位机应用软件的主界面图
Fig.5.2 Main interface graph of upper computer software
表5.1 上位机应用软件中用到的组件 Tab.5.1 Components used in upper computer software
组件 MainMenu
名称 MainMenu1
数目 作用 1 1 1
创建菜单
获取当前时间、日期 定时显示数据以及更新数据库
Chart Image DBGrid
Chart1
1
显示实时曲线 显示实时数据 显示数据库中的数据
DateTimePicker DateTimePicker1 Timer < …… 此处隐藏:2064字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [高等教育]公司协助某村精准扶贫工作总结.doc
- [高等教育]高二生物知识点总结(全)
- [高等教育]苏教版数学三年级下册《解决问题的策略
- [高等教育]仪器分析课程学习心得
- [高等教育]2017年五邑大学数学与计算科学学院333
- [高等教育]人教版七年级下册语文第四单元测试题(
- [高等教育]2018年秋七年级英语上册Unit7Howmuchar
- [高等教育]2017年八年级下数学教学工作小结
- [高等教育]湖南省怀化市2019届高三统一模拟考试(
- [高等教育]四年级下册科学_基础训练及答案教材
- [高等教育]城郊煤矿西风井管路伸缩器更换施工安全
- [高等教育]昆八中20182019学年度上学期期末考试
- [高等教育]项目部各类人员任命书
- [高等教育]上市公司经营水务产业的模式
- [高等教育]人教版高二化学第一学期第三章水溶液中
- [高等教育]【中考物理第一轮复习资料】四.压强与
- [高等教育]金坑水电站报废改建工程机电设备更新改
- [高等教育]高中生物教学工作计划简易版
- [高等教育]2017年西华大学攀枝花学院(联合办学)44
- [高等教育]最新整理超短爆笑英文小笑话大全
- 优秀教师继续教育学习心得体会
- 阳历到阴历的转换
- 留守儿童教育案例分析
- 华师17春秋学期《玩教具制作与环境布置
- 测速传感器新型安装装置的现场应用
- 人教版小学数学三年级下册第四单元
- 创业个人意向书
- 山东省潍坊市2012年高考仿真试题(三)
- [恒心][好卷速递]四川省成都外国语学校
- 多少人错把好转反应当成了病情加重处理
- 中外广播电视史复习资料整理
- 江苏省扬州市江都区宜陵镇中学2014-201
- 工程造价专业毕业实习报告
- 广西师范学院心理与教育统计
- aympkrq基于 - asp的博客网站设计与开
- 建筑业外出经营相关流程操作(营改增后
- 人治 德治 法治
- [精华篇]常识判断专项训练题库
- 中国共产党为什么要实行民主集中
- 小学数学第三册第一单元试卷(A、B、C




