常 州 大 学 毕业设计(论文) (2010届) 题 目 μC/OS-II下温度监控系统设计 学 生 王 彦 婕 学 院 信息科学与工程学院 专 业 班 级 通信061 校内指导教师 万 军 专业技术职务 讲 师 校外指导老师 专业技术职务
二○一○年六月
μC/OS-II 下温度监控系统设计
摘 要:随着信息化,智能化,网络化的进展,嵌入式系统技术也取得广漠的进展空间,前嵌入式技术已成为通信和消费类产品的主流技术。μC/OS-II是专为微控制器系统和软件开发而设计的公开源代码的抢占式实时多任务操作系统内核,和linux等其他实时操作系统相较具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点, 最小内核可编译至 2KB 。
本文详细论述了监控系统组成结构和软硬件设计。系统设计的硬件包括电源模块、显示模块、温度收集模块、超限报警模块、按键控制模块、JTAG电路和主处置芯片。系统软件设计第一完成μC/OS-II嵌入式实时操作系统的移植,并设计了4个任务,别离是温度检测任务、显示任务、报警设置任务和按键任务4个任务组成。检测任务收集温度送至控制器。显示任务实现温度实时显示。报警设置任务设置温度上限和下限,若是超出限值则报警。系统移植μC/OS-II嵌入式实时操作系统成功,按键响应及时,温度显示清楚稳固。
关键词:μC/OS-II; DS18B20;温度监控;STM32F103CBT6
μC / OS-II Temperature Monitoring System
Abstract:With the information, intelligence, network development, embedded systems
technology has won broad space for development. the former communications and embedded technology has become mainstream consumer products. μC / OS-II is designed for micro-controller system and open source software designed for preemptive multitasking real-time operating system with other real-time operating systems such as linux with the implementation of high efficiency, small footprint, real-time performance and superior scalability and so on. the minimum core can be compiled from 2KB.
This paper describes the structure and composition of the monitoring system software and hardware design. System hardware including power modules, display module, temperature data acquisition module, limit alarm module, key control module, JTAG circuit and the main processing chip. System software design to complete the μC / OS-II real-time embedded operating system migration. Second, the design of the four tasks namely the temperature detection task, showing task, Alarm set task and key tasks 4 tasks. The task of collecting temperature sent to the controller detected. The task of achieving real-time display shows temperature. Warning establishment duty establishment temperature maximum and minimum value, if surpasses the limiting value to report to the police. System Migration μC / OS-II real-time embedded operating system, the success of key response time, clear and stable temperature display.
Keywords: μC / OS-II; DS18B20; temperature monitoring; STM32F103CBT6
摘 要 ······················································································································· I 1 引言 ······················································································································· 1 2嵌入式 ····················································································································· 3
嵌入式系统 ··········································································································· 3 符合以上概念的嵌入式系统的第一个产品直到1971年以后才出现,这一年Inter发布了世界上第一块微处置器,4004,主要被日本Busicom公司用来生产上用的运算机。1969年,Busicom请Inter为他们的每一种新式计算机别离进行设计,而且设计了一种用在所有型号上的通用电路。那个通用途置器被设计来读取存在外部存储芯片里一系列指令(软件)。Inter的想法是通过软件的设计能够为每一种运算机提供各自的特性。这种微处置器在一晚上之间就成功了,而且在以后的十年中取得了普遍的应用。初期的嵌入式应用包括无人空间测探器、运算机控制的交通信号灯和航空灯光控制系统。整个80年代,嵌入式系统静偷偷的统治着微处置器时期,并把微处置器带入了咱们个人和职业生活的每一个角落。装有嵌入式系统的电子设备已经充斥了咱们的厨房(烤面包机、食物处置机、微波炉)、卧室(电视、音响、遥控器)和工作场所(传真机、电话、激光打印机、点钞机、信用卡读卡机)。 ···························································· 3 嵌入式系统的数量看起来肯定会继续迅速增加,一机构很多具有庞大市场潜力的嵌入式系统设备:能够被运算机控制的调光器和恒温器。当小孩子或矮个子的人在的时候不会充气的智能气囊,掌上电子记事薄和个人数字助理(PDA)、数码照相机和仪表导航系统。很明显,掌握必然技术而且愿意从事下一代嵌入式系统设计的人将会取得更多的机缘[1]。 ······················· 3
2.1.1嵌入式系统的分类 ····················································································· 3 依照“嵌入”方式的不同,嵌入式系统可分为以下几种: ··············································· 3 (1)整机式嵌入 ······································································································· 3 一个带有专用接口的运算机系统嵌入到一个控制系统中,成为控制系统的核心部份。一般这种运算机系统功能完整而壮大,完成系统中的核心关键工作,也具有较为完善的人机界面和外部设备。 ················································································································· 3 (2)部件式嵌入 ······································································································· 3 以部件式嵌入到一个控制设备中,完成某一处置功能,与设备的其他硬件耦合紧密、功能更专一。如雷达的数字处置部件,一般选用专用CPU或DSP。 ············································· 3 (3)芯片式嵌入 ······································································································· 3 一个芯片是一个完整的专用运算机,具有完整的输入输出接口,完成专一功能。如显示处置器、微波炉控制器等。一般为专门设计的芯片。随着微电子技术的进展,芯片式嵌入应用将愈来愈普遍。 ················································································································· 3
2.1.2嵌入式系统设计的特点 ··············································································· 3
按照英国电机工程师协会的概念,嵌入式系统控制、监视或设备、机械、乃至工厂运作的装置。它是一种运算机软件与硬件的综合体,而且特别强调量身定做的原则,也就是给予某种特殊的用途,会针对这项用途开发出截然不同的一个系统。能够从以下几个方面说明嵌入式系统设计方面的特点 ··········································································································· 3 (1)用户界面和控制面板 ··························································································· 4 在那个方面不同的系统因功能不同而有专门大的不同,有的系统可能只有几个简单的控制按键,而现实只需要几个示意的发光二极管就可以够了,有的系统却要求包括多个菜单和许多选项,乃至有的要求精准的图形用户界面,如GPS。 ····························································· 4
2.1.3相关处置器 ······························································································ 4 嵌入式操作系统μC/OS-II ························································································· 5
2.2.1 嵌入式操作系统 ······················································································· 5 2.2.2 实时操作系统 ·························································································· 5 2.2.3 μC/OS-II 嵌入式操作系统简介 ····································································· 6 2.2.4 嵌入式系统编程语言的选择 ········································································ 8
3 系统硬件设计 ··········································································································· 9
电源模块 ·············································································································· 9 显示模块 ············································································································ 10 超限报警模块 ······································································································ 11 按键控制模块 ······································································································ 11 输入控制模块 ······································································································ 11 温度收集模块 ······································································································ 12
3.6.1 DS18B20概述 ························································································· 12 3.6.2测温操作 ······························································································· 13 主处置芯片 ········································································································· 14 硬件PCB设计 ····································································································· 16 4系统软件设计 ·········································································································· 17
μC/OS-II 的移植 ·································································································· 17 板级移植驱动 ······································································································ 19 实时任务的编写 ··································································································· 19
按键设置任务 ································································································ 20 4.3.2显示任务 ······························································································· 20 4.3.3温度收集任务 ························································································· 21 4.3.4报警任务 ······························································································· 21 板级库文件的设计 ································································································ 21
4.4.1 KeyTask()函数 ························································································· 21 4.4.2 ShowTask()函数 ······················································································ 23
致 谢 ······················································································································· 25
1 引言
嵌入式系统开始于20世纪80年代单片机利用。此刻已经渗透到各个领域,且与人们的人常生活密不可分,给人们的生活和工业生产带来极大的方便,虽然普通的单片机的功能壮大,从信号收集、处置到传输都能由嵌入式系统完成。可是,随着网络时期的到来,许多电子设备需要联网和更智能化,更强的计算能力,比如音频、视屏的数据收集、处置和传输;丰硕的图形界面等,因此,嵌入式系统的运用更为普遍。
随着电子技术的进步,芯片的制造本钱大大降低,而功能却加倍壮大,16位和32位的嵌入式微处置器逐渐成为嵌入式系统设计的主流。可是,只有嵌入式微处置器是不够的,还需要有一个运行于嵌入式微处置器上的操作系统。其收入是操作系统要有良好的可移植性,能够用在按照应用要求选择的微处置器中。
现今嵌入式系统(单片机)集成愈来愈多资源,内部存储资源日趋丰硕,用户不需要扩充资源就可以够完成项目开发,不仅是开发简单,产品小巧美观,同时系统也加倍稳固,目前该方向既是进展为SOC(片上系统)。而且其抗干扰能力增强,使得它加倍适合工业控制领域,具有加倍广漠的市场前景。再次嵌入式系统(单片机)提供在线编程能力,加速了产品的开发进程,为企业产品上市博得宝贵的时刻。
随着嵌入式系统的进展在线仿真变得容易。用户一旦开发一个比较大的系统,开发调试变得超级复杂,同时由于嵌入式系统(单片机)资源有限,不能像PC一样直接调试自己的软件,于是出现了品种繁多的专业仿真器,为用户的开发提供了壮大功能,加速了开发进程,降低了开发难度,同时这种仿真器也给中小型用户带来繁重的经济负担,目前已经有公司推出了能够在线调试的嵌入式系统(单片机)这种嵌入式系统(单片机)采用标准JTAG接口,JTAG是一种标准(IEEE ),视为测试芯片而制定的,目的是用TCK、TDI、TD0和TMS四个信号来测试芯片的内部状态,为何测试芯片还需要专门制定标准呢?这是因为复杂的芯片引脚太多,专门是还有些芯片一旦安装到多层电路板上就无法看到引脚,更不要说测量了,这时就可以够在运算机软件的支持下通过JATA接口,对芯片进行测量,若是各个公司的芯片都符合该标准,就可以够将各个芯片的JTAG口串联起来(又称菊花链),无论是在电路板上有多少芯片,只需要4个引脚,就可以够测量电路板上的所有芯片。既然能够测量芯片,固然能够将数据写入芯片,在可编程逻辑器件的数据下载中也利用了JTAG接口,出现了在系统编程(ISP)的概念,也就是就是可编程逻辑器件安装到了系统中,也能够对其内部电路进行修改,JTAG技术和EDA软件的进步,使可编程逻辑器件的开发与利用取得快速的进展。
随着单片机的进展,人们对事物的要求愈来愈高,单片机的应用软件技术也发生了庞大的转变,从最初的汇编语言,开始演变到C语言开发,不但增加了语言的可读性,结构性,而且对于跨平台的移植也提供了方便,另外一些复杂的系统开始在单片机上采用操作系统,一些小的RTOS等,一方面加速了开发人员的开发速度,节约开发本钱,另外也为更复杂的实现提够了可能。当前比较流行的RTOS有:WINCE、uCLinux、Linux、 μC / OS-II等等。
目前低端定位的单片机仍然走俏,但高端的单片机(微处置器)却是风起云涌,SOC
技术的进展,现代电子技术应用中包括了硬件(HW)、硬件加软件(HW+SW)、固件(FW)3 个层次。这3 个层次也能够说是现代电子技术应用的3 个进展阶段。自1997 年以来,电子技术应用又增加了一个新的层次——片上系统(SOC)层次。SOC 技术概念和应用技术层次的出现,标志着现代电子技术应用进入了SOC 阶段。
在本次毕业设计中,设计者利用ARM 32位Cortex-M3为核心的STM32F103CBT6芯片移植μC / OS-II操作系统,各类外界扩展I/O话柄此刻操作系统上多任务实时任务的并发执行。
2嵌入式
嵌入式系统
“嵌入式系统”是指将应用程序和操作系统与运算机硬件集成在一路的系统。简单的说,所谓嵌入式系统就是用户自己开发设计电路板,电路板上有微处置器和各类芯片,其软件部份常常下载在ROM或Flash中,工作方式类似于BIOS。
符合以上概念的嵌入式系统的第一个产品直到1971年以后才出现,这一年Inter发布了世界上第一块微处置器,4004,主要被日本Busicom公司用来生产上用的运算机。1969年,Busicom请Inter为他们的每一种新式计算机别离进行设计,而且设计了一种用在所有型号上的通用电路。那个通用途置器被设计来读取存在外部存储芯片里一系列指令(软件)。Inter的想法是通过软件的设计能够为每一种运算机提供各自的特性。这种微处置器在一晚上之间就成功了,而且在以后的十年中取得了普遍的应用。初期的嵌入式应用包括无人空间测探器、运算机控制的交通信号灯和航空灯光控制系统。整个80年代,嵌入式系统静偷偷的统治着微处置器时期,并把微处置器带入了咱们个人和职业生活的每一个角落。装有嵌入式系统的电子设备已经充斥了咱们的厨房(烤面包机、食物处置机、微波炉)、卧室(电视、音响、遥控器)和工作场所(传真机、电话、激光打印机、点钞机、信用卡读卡机)。
嵌入式系统的数量看起来肯定会继续迅速增加,一机构很多具有庞大市场潜力的嵌入式系统设备:能够被运算机控制的调光器和恒温器。当小孩子或矮个子的人在的时候不会充气的智能气囊,掌上电子记事薄和个人数字助理(PDA)、数码照相机和仪表导航系统。很明显,掌握必然技术而且愿意从事下一代嵌入式系统设计的人将会取得更多的机缘[1]。 2.1.1嵌入式系统的分类
依照“嵌入”方式的不同,嵌入式系统可分为以下几种: (1)整机式嵌入
一个带有专用接口的运算机系统嵌入到一个控制系统中,成为控制系统的核心部份。一般这种运算机系统功能完整而壮大,完成系统中的核心关键工作,也具有较为完善的人机界面和外部设备。
(2)部件式嵌入
以部件式嵌入到一个控制设备中,完成某一处置功能,与设备的其他硬件耦合紧密、功能更专一。如雷达的数字处置部件,一般选用专用CPU或DSP。 (3)芯片式嵌入
一个芯片是一个完整的专用运算机,具有完整的输入输出接口,完成专一功能。如显示处置器、微波炉控制器等。一般为专门设计的芯片。随着微电子技术的进展,芯片式嵌入应用将愈来愈普遍。 2.1.2嵌入式系统设计的特点
按照英国电机工程师协会的概念,嵌入式系统控制、监视或设备、机械、乃至工厂
运作的装置。它是一种运算机软件与硬件的综合体,而且特别强调量身定做的原则,也就是给予某种特殊的用途,会针对这项用途开发出截然不同的一个系统。能够从以下几个方面说明嵌入式系统设计方面的特点
(1)用户界面和控制面板
在那个方面不同的系统因功能不同而有专门大的不同,有的系统可能只有几个简单的控制按键,而现实只需要几个示意的发光二极管就可以够了,有的系统却要求包括多个菜单和许多选项,乃至有的要求精准的图形用户界面,如GPS。
(2)软件代码高质量、高靠得住性
虽然半导体技术的进展是处置器速度不断提高,系统存储器容量不断增加,价钱也不断下降,但在大多数应用中,存储空间仍然是宝贵的,多数时候还存在实时性的要求。为此要求程序编写的编译工具的质量要高,以减少程序二进制代码长度,提高执行速度。
(3)制造本钱
制造本钱在很多情形下是十分重要的,尤其对于消费类电子产品,它由许多因素决定,比如处置器的种类,所需存储器的大小及需要哪些I/O设备,固然还有系统软件和应用程序的本钱。
(4)功率
嵌入式系统的产品很多都是由电池供电的,因此对于电源的管理能够说到了近乎苛刻的境界。即即是一些直接接入电网的设备,功耗一样是一个重要的指标,大功率意味着专门大的散热量,对系统的稳固工作是有专门大的影响的。而且,若是是大量利用,用电本钱也必需考虑[2]。 2.1.3相关处置器
随着信息技术和互联网技术的进展,嵌入式产品的功能日趋复杂,愈来愈多的应用系统了高性能的32 位微处置器,以知足产品的网络化功能。一般依照处置器的体系结构来看,在嵌入式系统领域中,几乎所有的处置器都是RISC 内核(本文只涉及32 位高级处置器,对于8 位和16 微处置器和DSP 不做讨论),一下列出了几种常常利用的处置器:
(1)MIPS
MIPS(Microprocessor without interlocked piped stages),“无内部互锁流水级的微处置器”,其机制是尽可能利用软件方式避免流水线中的数据有关问题,它是显著的特点是高速,而且有的还集成了许多内和结构,因此普遍应用与高端市场。
(2)ARM
ARM 公司是知识产权供给商,涉及的内核耗电少、本钱低、功能强,特有16/32 位上指令集。ARM 已经为移动通信、手持计算、多媒体数字消费等嵌入式解决方案的RISC 标准。在所有基于ARM 处置器系列中,基于ARM7 内核的处置器应用最普遍。
(3)PowerPC
PowerPC 体系结构规范由IBM、Apple 和Motorola 一路提出。PowerPC架构的特点是可伸缩性能好、方便灵活,它在高速和低功耗之间作了专门好的妥协,通常在外围集
成了丰硕的外围接口电路,被Motorola 公司大量应用于嵌入式通信市场,国内中兴和华为大量采用在其产品中。
(4)M68K/ColdFire
M68K 是最先普遍应用于嵌入式领域的内核,尤其在汽车制造领域。ColdFire 在其成了M68K 的基础上对其作了改良,并维持了对M68K 的兼容性,普遍应用于工业控制,机械人研究和家电控制领域。在本次毕业设计当选用的是ARM Cortex-M3为核心的STM32F103CBT6芯片。这是一个专门为嵌入式应用设计的32 位CPU。除这款处置其本身集合了ARM7与ARM9的许多长处之外,网上存在的大量相关的免费资源,包括从编译器到操作系统,到调试工具,都是咱们选用这款处置器的重要原因。 嵌入式操作系统μC/OS-II 2.2.1 嵌入式操作系统
早在 20 世纪60 年代,人们就已经开始了嵌入式操作系统的研究和开发工作。嵌入式操作系统在通信、电子、自动化等领域具有超级的优越性,其实时处置能力取得愈来愈多的重视,关于嵌入式操作系统的研究正在不断深切。
正是由于嵌入式处置器的多样性在成了嵌入式操作系统的多样性,对于嵌入式操作系统,很多人将其等同为实时操作系统,但实际上这是有不同的。一般情形下,嵌入式操作系统能够分为两类:一类是面向控制、通信领域的实时操作系统,如WindRiver 公司的VxWorks、ISI 的pSOS、QNX系列如建公司的QNX、AITI 的Nucleus 等,其特点是模块化,是实行好,性能稳固,但由于操作系统和开发环境都是专有的,所以价钱一般都比较高,而且不提供源代码,只提供二进制码,另一类是面向个人数字助理(PDA)、移动电话、机顶盒、电子书等消费类电子产品的非实时操作系统,如Palm 公司的Palm OS,微软的Windows CE,到目前为止,以掌上运算机和高级PDA 为代表手持设备市场是开发最为成熟的嵌入式设备市场,而Palm OS 和Windows CE 在这一领域占据着绝对的优势。
2.2.2 实时操作系统
这次毕业设计所作的课题是基于ARMCortex-M3的32位RISC内核的实时嵌入式设备,而嵌入式设备的运行好坏的另一个关键就是嵌入式操作系统。由此可见,在选用操作系统时,必然要选择一个好的实时嵌入式操作系统。如此,也有必要了解事实系统的大体结构和其与常常利用的通用操作系统的区别。
(1) 实时操作系统与分时操作系统的区别
“实时操作系统”是相对“分时操作系统”而言的,人们日常接触的通用操作系统(如Windows、Unix、linux 等)都是分时操作系统。实时操作系统的最大特点就是能及时(或即时)响应外部事件的请求,在规定的时刻内完成对该事件的处置,并控制所有实时任务协调一致地运行。与分时系统相较,具有多路性、性、及时性、交互性、靠得住性的特点。
对于实时操作系统,除要知足应用的功能需求之外,更重要的是还要知足应用提出
的实时性要求,而组成一个应用的众多实时任务对于实时性的要求是各不相同的。另外实时任务之间可能还会有一些复杂的关联和同步关系,如执行顺序、共享资源的互斥访问要求等,这就为系统实时性的保证带来了专门大的困难。因此,实时操作系统所遵循的最重要的设计原则是:采用各类算法和策略,始终保证系统行为的可预测性(predictability)。可预测性是指在系统运行的任何时刻,在任何情形下,实时操作系统的资源调配策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分派资源,使每一个实时任务的实时性要求都能取得知足。与通用操作系统不同,实时操作系统注重的不是系统的平均表现,而是要求每一个实时任务在最坏情形下都要知足其实时性要求。也就是说,实时操作系统注重的是个体表现,更准确地讲是个体最坏情形的表现。举例来讲,若是实时操作系统采用标准的虚存技术,则一个实时任务执行的最坏情形是每次访问内存都需要调页,如此累计起来的该任务在最坏情形下的运行时刻是不可预测的,因此该任务的实时性无法取得保证。
(2)实时操作系统的特点
由于实时操作系统与通用操作系统的大体设计原则不同专门大,因此在很多资源调度策略的选择上和操作系统实现的方式上二者郡具有较大的不同。
一个好的实时操作系统需要具有以下功能(必需但非充分): ·多任务和可抢占的; ·任务具有优先级; ·操作系统具有支持可预测的任务同步机制; ·支持多任务间的通信; ·操作系统具有消除优先级转置的机制; ·存储器优化管理(含ROM 的管理); ·操作系统的(中断延迟、任务切换、驱动程序延迟等)行为是可知的和可预测的 是指在全负载的情形下,最坏反映时刻可知的; ·实不时钟服务; ·中断管理服务。
2.2.3 μC/OS-II 嵌入式操作系统简介
之所以在本次毕业设计中采用μC/OS-Ⅱ嵌入式操作系统,是因为μC/OS-Ⅱ的功能十分壮大,它支持56 个用户任务。其内核为占先式,支持信号量、邮箱、消息队列等多种常常利用的进程间通信机制,现已成功的应用到各类商业嵌入式系统中,是一个成熟稳固的实时内核。更为重要的一点是与大多商用RTOS 不同,μC/OS-Ⅱ公开所有的源代码,而且μC/OS-Ⅱ90%的代码利用标准的ANSI C 语言书写,程序可读性强、移植性好;它可免费取得,即便商业应用也只收取少量的许可费用。
同时μC/OS-Ⅱ是一个占先式的内核,即已经预备就绪的高优先级任务能够剥夺正在运行的低优先级任务的CPU利用权。那个特点使得它的实时性比非占先式的内核要好。通常都是在中断服务程序中使高优先级任务进入就绪态(例如利用发送信号的方式),退出中断服务程序后,将进行任务切换,高优先级任务被执行[3]。以51 单片机为例,比
较一下就可以够发觉如此做的益处。假设需要用中断方式收集一批数据并进行处置,在传统的编程方式中不能在中断服务程序中进行复杂的数据处置,因为这会使得关中断时刻太长。所以常常采用的方式是置一标志位,然后退出中断。由于主程序是循环执行的,所以它总有机缘检测到这一标志并转到数据处置程序中去。可是因为无法肯定发生中断时程序到底执行到了什么地方,也就无法判断要通过量长时刻数据处置程序才会执行,中断响应时刻无法肯定,系统的实时性不强。若是利用μC/OS-Ⅱ,只要把数据处置程序的优先级设定的高一些并在中断服务程序中使它进入就绪态,中断结束后数据处置程序就会被当即执行。如此能够把中断响应时刻在必然的范围内。对于一些对中断响应时刻有严格要求的系统,这是必不可少的。可是若是数据处置程序简单,如此做就未必适合。因为μC/OS-Ⅱ要求在中断服务程序末尾利用OSINTEXIT函数以判断是不是进行任务切换,这需要花费必然的时刻。μC/OS-Ⅱ和大家所熟知的Windows 等分时操作系统不同,它不支持时刻片轮转法。它是一个基于优先级的实时操作系统。每一个任务必需具有不同的优先级(分析它的源码会发觉,μC/OS-Ⅱ把任务的优先级看成任务的标识来利用,若是优先级相同,任务将无法区分)。进入就绪态的优先级最高的任务第一取得CPU的利用权,只有等它交出CPU的利用权后,其他任务才能够被执行。所以只能说它是多任务,不能说是多进程,至少不是人们所熟悉的那种多进程。μC/OS-Ⅱ的这种特性是好是坏,主要看从什么角度来判断了。显而易见,若是只考虑实时性,它固然比分时系统好,它能够保证重要任务老是优先占有CPU。可是在应用系统中,重要任务毕竟是有限的,这就使得划分其他任务的优先权变成了一个让人劳神的问题。另外,有些任务交替执行反而对用户更有利。例如,用单片机控制两小块显示屏时,无论是编程者仍是利用者肯定希望它们同时工作,而不是显示完一块显示屏的信息以后再显示另一块显示屏的信息。这时,如果μC/OS-Ⅱ既能支持优先级法又能支持时刻片轮转法就更好了[4]。
μC/OS-Ⅱ对共享资源提供了保护机制。正如前文所述,μC/OS-Ⅱ是一个支持多任务的操作系统。一个完整的程序能够划分成几个任务,不同的任务执行不同的功能。如此,一个任务就相当于模块化设计中的一个子模块。在任务中添加代码时,只要不是共享资源就没必要担忧彼此之间有影响。对于共享资源(例如串口),μC/OS-Ⅱ也提供了专门好的解决办法。一般情形下利用的是信号量的方式。简单地说,先创建一个信号量并对它进行初始化。当一个任务需要利用一个共享资源时,它必需先申请取得那个信号量。而一旦它取得了此信号量,那就只有等它利用完了该资源,信号量才会被释放。在那个进程中即便有优先权更高的任务进入了就绪态,因为无法取得此信号量,也不能利用该资源。那个特点的益处显而易见,这里还拿传统的单片机程序来做比较。当显示屏正在显示信息的时候,外部产生了一个中断,而在中断服务程序中需要显示屏显示其他信息。如此,退出中断服务程序后,原有的信息就可能被破坏了。而在μC/OS-Ⅱ中采用信号量的方式时,只有显示屏把原有信息显示完毕后才能够显示新信息,从而能够避免那个问题。不过,采用这种方式是以捐躯系待统的实时性为代价的。若是显示原有信息需要花费大量时刻,系统只好等。从结果上看,等于延长了中断响应时刻,这对于未显示信息是报警信息的情形,无疑是致命的。发生这种情形,在μC/OS-Ⅱ中称为优先级反转。简
单地说,就是高优先级任务必需等待低优先级任务的完成。在上述情形下,在两个任务之间发生优先级反转是无法避免的。所以利用μC/OS-Ⅱ时,必需对所开发的系统了解清楚,才能选择对某种共享资源是不是利用信号量[5]。 2.2.4 嵌入式系统编程语言的选择
和其他语言相较,C语言已经成为嵌入式程序员的语言了。因为对于一个给定的项目来讲,选择一种语言对成功的开发是如此的重要,所以,当一种语言被证明能够同时适于8 位和 位处置器[6],适用于字节、千字节乃至兆字节的系统时,这种语言必然会被程序员所普遍采用的。C语言做到了这必然,相对于其他语言C是有很多优势的。它小而易学,在今天几乎每一种处置器都有C 的编译器,同时还拥有相当多的有经验的C 程序员。更重要的是,C语言是和处置器无关的,这就可以够让程序员能够着眼于算法和应用而不用考虑特定处置器结构的细节语言与其他语言比如Pascal 和FORTRAN 区别开的地方就是,C语言是一个超级“低级”的高级语言,C语言给与嵌入式程序员专门大程度的直接控制硬件的能力,却不会失去高级语言带来的益处。“低级”的内在本质是那个语言创建者的明显目的。很少有其他高级语言能够像C一样,为几乎所有的处置器生成经凑的、高效的代码,同时只有C与与程序员方便地和底层硬件打交道[7]。
固然,C语言并非是嵌入式程序言利用的唯一的语言。至少还有其他三种值得详细说明一下,即汇编语言、C++语言和Ada 语言。在初期的时候,嵌入式软件只能用目标处置器的汇编语言来书写。如此早市程序员能够完全控制处置器和其它硬件,固然也是有代价的。除更高的软件开发费用和缺乏移植性,汇编语言还有很多缺点。汇编语言此刻只用作高级语言的附件,通产只用在那些必需要求极高效率或超级紧凑,或是其他方式无法编写的小段代码里。C++使C语言的面向对象的超集,正在嵌入式程序员中变得愈来愈流行。他的核心语言特性和C语言完全一样,可是C++提供了更好的数据抽
象和面向对象形式的编程功能。这些新的特性对软件开发人员超级有帮忙,可是部份特性会降低可执行程序的性能,所以C++在大的开发队伍利用的最为普遍,在那里对程序员的帮忙要比程序效率的损失更为重要。Ada 也是一种面向对象的语言。不过和C++完全不同。Ada 开始是美国国防部为了开发面向任务的军用软件而设计的。虽然它曾两次被接纳为国际标准(Ada83 和Ada95),可是Ada 从来没有在防务和航空领域之外取得足够的应用。即即是这些领地这几年也在逐渐丧失,这是一件很不幸的情形,因为与C++比起来,Ada 有很多特性能够简化嵌入式软件的开发工作[8]。
3 系统硬件设计
系统体系结构是系统整体结构的一个计划,用于描述如何实此刻需求分析和规格说明中提出的功能的,而后用于设计搭建整个体系结构的构件。本系统的核心硬件是以ARM的 Cortex-M3 32位的RISC内核为核心的STM32F103CBT6芯片 ,为了实现系统的功能,设计中围绕那个核心处置器提供了多种接口,内置高速存储器(高达512K字节的闪存和K字节的SRAM),丰硕的增强I/O端口和联接到两条APB总线的外设、3个12位的ADC、4个通用16位按时器和2个PWM按时器,还包括标准和先进的通信接口:多达2个I2C接口、3个SPI接口、2个I2S接口、1个SDIO接口、5个USART接口、一个USB接口和一个CAN接口。整个系统的硬件结构框图如图所示:
电源模块LED显示模块温度采集模块STM32F103CBT6芯片超限报警模块按键控制模块JATA电路
图系统硬件结构框图
该系统硬件由电源模块、LED显示模块、温度收集模块、超限报警模块、按键控制模块、输入控制模块和主处置芯片组成 电源模块
图电源模块连接图
对于任何系统都需要进行供电,考虑到本系统采用的是贴片式的低电压处置器。电源模块电路连接图如图所示,如图外接一个变压器将220v电压转换为5v后输入P1。图中IC1器件为LM1117,LM1117是一个低压差电压调节器系列。其压差在输出,负载电流为800mA时为。LM1117有可调电压的版本,通过2个外部电阻可实现~输出电压范围,它提供电流和热保护,电路包括1个齐纳调节的带隙参考电压以确保输出电压的精度在±1%之内。通过电源模块为电路板提供电源。 显示模块
本设计显示模块是采用段7段四位LED数码管显示,LED显示电路图如图所示。
图 LED显示电路
图中7段四位LED共阳极数码管所示1、2、3、4、5、7、10、11引脚为数据传输口,6、8、9、12引脚为控制口。
超限报警模块
温度报警模块实现温度超过设定值报警功能,报警采用蜂鸣器。超限报警模块电路如图所示。
图超限报警模块电路 按键控制模块
本设计采用三个按键来控制温度的设定,即setkey、downkey、upkey。电路图如图所示。
图按键控制模块电路图
输入控制模块
本设计软件烧写口采用20路的JTAG接口,硬件连接电路图如图所示。
图输入控制模块
温度收集模块 3.6.1 DS18B20概述
本设计温度收集采用DS18B20可编程分辨率的单总线数字温度计,DS18B20 数字温度计提供9-12 位摄氏温度测量而且有一个由高低电平触发的可编程的不因电源消失而改变的报警功能。DS18B20通过一个单线接口发送或同意信息,因此在处置器和DS18B20 之间仅需一条连接线(加上地线)。它的测温范围为-55~+125℃,而且在-10~+85℃精度为±5℃。除此之外,DS18B20能直接从单线通信线上汲取能量,除去了对外部电源的需求。DS18B20引脚排列如图所示。
每一个 DS18B20 都有一个独特的 位序列号,从而允许多只DS18B20 同时连在一根单线总线上;因此,很简单就可以够用一个微控制器去控制很多覆盖在一大片区域的DS18B20。这一特性在HVAC 环境控制、探测建筑物、仪器或机械的温度和进程监测和控制等方面超级有效。DS18B20的特征有以下几个方面: ● 独特的单线接口仅需一个端口引脚进行通信;
●每一个器件有唯一的 位的序列号存储在内部存储器中; ●简单的多点散布式测温应用; ●无需外部器件; ●可通过数据线供电。供电范围为到;
●测温范围为-55~+125℃(-67~+257℉); ●在-10~+85℃范围内精准度为±5℃;
●温度计分辨率能够被利用者选择为9~12位; ●最多在 750ms 内将温度转换为12 位数字; ●用户可概念的非易失性温度报警设置;
●报警搜索命令识别并标志超进程序限定温度(温度报警条件)的器件; ●与DS1822兼容的软件;
●应用包括温度控制、工业系统、消费品、温度计或任何热感测系统[10]。
图 DS18B20引脚排列
表1 详细引脚说明
8 引脚SOIC 封装 TO-9 封装 符号 说明 5 1 GND 接地
4 2 DQ 数据输入/输出引脚。对
于单线操作:漏极开路当工作在寄生电源模式时用来提供电源(建
“寄生电源”节)。
3 3 VDD 可选的VDD 引脚。工作
与寄生电源模式时VDD必须接地。 3.6.2测温操作
DS18B20的核心功能是它的直接读数字的温度传感器。温度传感器的精度为用户可编程的9,10,11或12位,别离以0.5℃,0.25℃,0.125℃和0.0625℃增量递增。在上电状态下默许的精度为12位。DS18B20启动后维持低功耗等待状态;当需要执行温度测量和AD转换时,总线控制器必需发出[44h]命令。在那以后,产生的温度数据以两个字节的形式被存储到高速暂存器的温度寄放器中,DS18B20继续维持等待状态。当DS18B20由外部电源供电时,总线控制器在温度转换指令以后发起“读时序”,DS18B20正在温度转换中返回0,转换结束返回1。若是DS18B20由寄生电源供电,除非在进入温度转换时总线被一个强上拉拉高,不然将不会由返回值。
表2 温度/数据关系
温度℃ 数据输出(二进制) 数据输出(十六进制) +125 0000 0111 1101 0000 07D0h +85 0000 0101 0101 0000 0550h
+ 0000 0001 1001 0001 0191h + 0000 0000 1010 0010 0A2h + 0000 0000 0000 1000 0008h 0 0000 0000 0000 0000 0000h 1111 1111 1111 1000 FFF8h 1111 1111 0101 1110 FF5Eh 1111 1110 0110 1111 FE6Eh
-55 1111 1100 1001 0000F C90h
本设计硬件电路图如图所示。
图温度收集电路链接电路图
主处置芯片
本设计采用的是ARM的 Cortex-M3 32位的RISC内核为核心STM32F103CBT6芯片。该芯片工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰硕的增强I/O端口和联接到两条APB总线的外设。包括2个12位的ADC、3个通用16位按时器和1个PWM按时器,还包括标准和先进的通信接口:多达2个I2C接口和SPI接口、3个USART接口、一个USB接口和一个CAN接口。
这些丰硕的外设配置,使得STM32F103xx产品容量增强型系列微控制器适合于多种应用处合:
● 电机驱动和应用控制 ● 医疗和手持设备
● PC游戏外设和GPS平台 ● 工业应用:可编程控制器(PLC)、变频器、打印机和扫描仪 ● 警报系统、视频对讲、和暖气通风空调系统等
ARM的Cortex-M3处置器是最新一代的嵌入式ARM处置器,它为实现MCU的需要提供了低本钱的平台、缩减的引脚数量、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。 ARM的Cortex-M3是32位的RISC处置器,提供额外的代码效率,在通常8和16位系统的存储空间上发挥了ARM内核的高性能。
STM32F103CBT6增强型系列拥有内置的ARM核心,因此它与所有的ARM工具和软件兼容。芯片有K内置闪存存储器,用于寄存程序和数据;20K字节的内置SRAM,
CPU能以0等待周期访问(读/写)。
STM32F103CBT6增强型系列内置嵌套的向量式中断控制器,能够处置多达43个可屏蔽中断通道(不包括16个Cortex-M3的中断线)和16个优先级[10]。 ● 紧耦合的NVIC能够达到低延迟的中断响应处置 ● 中断向量入口地址直接进入内核 ● 紧耦合的NVIC接口 ● 允许中断的初期处置
● 处置晚到的较高优先级中断 ● 支持中断尾部链接功能 ● 自动保留处置器状态 ● 中断返回时自动恢复,无需额外指令开销
该模块以最小的中断延迟提供灵活的中断管理功能。
图芯片外围连接电路
外部中断/事件控制器包括19个边沿检测器,用于产生中断/事件请求。每一个中断线都能够地配置它的触发事件(上升沿或下降沿或双边沿),并能够单独地被屏蔽;有一个挂起寄放器维持所有中断请求的状态。EXTI能够检测到脉冲宽度小于内部APB2的时钟周期。多达80个通用I/O口连接到16个外部中断线。
系统时钟的选择是在启动时进行,复位时内部8MHz的RC振荡器被选为默许的CPU时钟,随后能够选择外部的、具失效监控的4~16MHz时钟;当检测到外部时钟失效时,它将被隔离,系统将自动地切换到内部的RC振荡器,若是使能了中断,软件能够接收到相应的中断。一样,在需要时能够采取对PLL时钟完全的中断管理(如当一个间接利用的外部振荡器失效时)。 多个预分频器用于配置AHB的频率、高速APB(APB2)和低速APB(APB1)区域。AHB和高速APB的最高频率是72MHz,低速APB的最高频率为36MHz。
通用输入输出接口(GPIO),每一个GPIO引脚都能够由软件配置成输出(推挽或开漏)、输入(带或不带上拉或下拉)或复用的外设功能端口。多数GPIO引脚都与数字或模拟的复用外设共用。除具有模拟输入功能的端口,所有的GPIO引脚都有大电流通过能力。
在需要的情形下,I/O引脚的外设功能能够通过一个特定的操作锁定,以避免意外的写入I/O寄放器。 在APB2上的I/O脚可达18MHz的翻转速度。芯片外围链接电路如图所示。
硬件PCB设计
本次设计硬件电路按照硬件原理图绘制成pcb版图进行制版,Pcb版图如图。
图 温度检测设计PCB制版图
绘制pcb版图都是按如实际元器件的封装绘制,硬件电路调试成功。
4系统软件设计
按照任务的性质,能够把软件设计分为μC/OS-Ⅱ 在ARM Cortex-M3 中的的移植和实时任务的编写两个部份。在设计移植方案和实时任务编写结构时应当第一熟悉μC/OS-Ⅱ软硬件体系统,其系统结构如图
μC/OS-II应用程序μC/OS-IIOS_CORE.COS_FLAG.COS_MBOX.COS_MEM.COS_MUTEX.COS_Q.COS_SEM.COS_TASK.COS_TIME.COS_TMR.CuCOS_II.HμC/OS-IICortex-M3 PortOS_CPU_C.COS_CPU_A.ASMOS_CPU.HOS_DEG.CBSPBSP.CBSP.HARM Cortex-M3/目标板图 μC/OS-Ⅱ的软硬件体系结构
图 说明了μC/OS-Ⅱ的软硬件体系结构。应用程序处于整个系统的顶层,每一个任务都能够以为自己独占了CPU,因此能够设计成为一个无穷循环。μC/OS-Ⅱ与处置器无关的的代码体μC/OS-Ⅱ的系统服务,应用程序能够利用这些API 函数进行内存管理、任务间通信及创建、删除任务等。大部份的μC/OS-Ⅱ代码时利用 ANSI C 语言书写的,因此μC/OS-Ⅱ的可移植性好。但是仍需要利用C 语言和汇编语言协议协处置器相关代码。
μC/OS-II 的移植
μC/OS-Ⅱ是一个免费的实时操作系统,其包括与处置起无关的代码和与处置器相关的代码。由于嵌入式实时操作系统是针对嵌入式处置器而言的操作系统,或说是针对各类不同的单片机的操作系统。由于各个嵌入式处置器厂商所采用途置器结构、指令都不同,乃至同一厂商所生产的不同系列的嵌入式处置器所采用的内部指令都不同,在某一个处置器上能够运行的代码不必然能在另一个处置器上运行通过。这就要求嵌入式实时
操作系统具有可移植性。
所谓的移植,就是使一个实时内核能在某个微处置器或微控制器上运行。为了方便移植,大部份的μC/OS-Ⅱ 代码是用C 语言写的,但仍需要用C 和汇编语言写一些与处置器相关的代码,这是因为μC/OS-Ⅱ在读写处置器寄放器时只能通过汇编语言来实现。由于μC/OS-Ⅱ在设计时就已经充分考虑了可移植性,所以μC/OS-Ⅱ的移植相对来讲是比较容易的[11]。
要使μC/OS-Ⅱ正常运行,处置器必需知足以下要求: (1)处置器的C 编译器能产生可重入代码; (2)用C 语言就可以够打开和关闭中断; (3)处置器支持中断,而且能产生按时中断; (4)处置器支持能够容纳必然量数据的硬件堆栈;
(5)处置器有将堆栈指针和其他CPU 寄放器读出和存储到堆栈或内存中的指令。 移植工作包括以下几个内容:
(1)设置 中与处置器和编译器相关的代码;
(2)用C 语言编写六个关于操作系统的函数(); (3)利用汇编语言编写四个与处置器相关的函数()
对于本设计,移植进程中主要按照处置器修改启动代码,系统初始化代码,堆栈函数,头文件,增加的特定函数。
启动代码是将标准库中的文件32f中的
PendSV_Handler 改成:OS_CPU_PendSVHandler; sTick_Handler 改成:OS_CPU_SysTickHandler; 并在文件前添加:
EXTERN OS_CPU_PendSVHandler; XTERN OS_CPU_SysTickHandler;
行完接口配置文件的修改后,即可进行μC/OS-Ⅱ 的内核代码的链接,其中包括文件,,,,,,,,,,[12]。
本设计μC/OS-II操作系统软件整体图如图所示。
DS18B20驱动文件板级库文件芯片库文件采集任务显示任务按键任务报警任务μC/OS-Ⅱ内核图μC/OS-Ⅱ操作系统整体图
板级移植驱动
连接完成μC/OS-Ⅱ 的内核代码后,还要添加板级移植驱动,才能驱动系统运行,其中包括连接文件和,其中文件主如果用来概念芯片外围连接端口;是驱动DS18B20数字温度计的。另外还要修改硬件相关的数据,如文件中OS_TICKS_PER_SEC时钟节拍设置常量的值设定为100,才能知足此设计中按不时钟,要按照具体应用来修改具体数值[13]。 实时任务的编写
因为μC/OS-Ⅱ是实时操作系统,系统会自动响应多个任务。所以对于任何一个任务都能够对其进行无穷循环处置,作为操作系统在多任务并发进行的时候会采用优先级调度算法来进行资源分派,当没有实时任务响应的时候,系统正常运行,当有实时任务时,μC/OS-Ⅱ会依照任务的优先级设定来处置任务[14]。如此,当有高优先级任务需要特别CPU 处置时,系统会把所有的资源分派给高优先级,直到其任务运行完毕。基于那个特性,μC/OS-Ⅱ具有很强的实时处置能力,专门是对于需要优先响应的任务,μC/OS-Ⅱ会当即自动中断其它任务,而对高优先级任务进行响应,这是分时处置系统所不能达到的。
在main中成立一个起始任务APP_TaskStart int main(void){ CPU_INT08U os_err; BSP_IntDisAll(); OSInit(); --初始化μC/OS-Ⅱ内核 os_err = OSTaskCreateExt((void(*)(void *)) App_TaskStart, (void *) 0, (OS_STK *) &App_TaskStartStk[APP_TASK_START_STK_SIZE - 1], (INT8U) APP_TASK_START_PRIO, (INT16U) APP_TASK_START_PRIO, (OS_STK *) &App_TaskStartStk[0], (INT32U) APP_TASK_START_STK_SIZE, (void *) 0, (INT16U) (OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));
#if (OS_TASK_NAME_SIZE >= 11)
OSTaskNameSet(APP_TASK_START_PRIO, (CPU_INT08U *) \"Start Task\#endif OSStart(); --启动多任务 return (0); }
用App_TaskCreate()函数成立4个任务,任务名别离为:App_TaskKEY(按键设置任务)、App_TaskLED(显示任务)、App_TaskTEMP(收集温度任务)、App_TaskWARN(报警任务)。
static void App_TaskCreate(void) --创建任务
{CPU_INT08U os_err;
os_err = OSTaskCreate((void(*)(void *)) App_TaskKEY, (void *) 0,--按键任务 (OS_STK *) &App_TaskKEYStk[APP_TASK_KEY_STK_SIZE - 1], (INT8U) APP_TASK_KEY_PRIO); #if (OS_TASK_NAME_SIZE >= 9)
OSTaskNameSet(APP_TASK_KEY_PRIO, \"TASK KEY\#endif
os_err = OSTaskCreate((void(*)(void *)) App_TaskShow, (void *) 0,--显示任务 (OS_STK *) &App_TaskLEDStk[APP_TASK_LED_STK_SIZE - 1], (INT8U) APP_TASK_LED_PRIO); #if (OS_TASK_NAME_SIZE >= 9)
OSTaskNameSet(APP_TASK_LED_PRIO, \"TASK LED\#endif
os_err = OSTaskCreate((void(*)(void *)) App_TaskTEMP, (void *) 0,收集任务 (OS_STK *) &App_TaskTEMPStk[APP_TASK_TEMP_STK_SIZE - 1], (INT8U) APP_TASK_TEMP_PRIO); #if (OS_TASK_NAME_SIZE >= 9)
OSTaskNameSet(APP_TASK_TEMP_PRIO, \"TASK TEMP\#endif
os_err = OSTaskCreate((void(*)(void *)) App_TaskWARN, (void *) 0,--报警任务
(OS_STK *) &App_TaskWARNStk[APP_TASK_WARN_STK_SIZE - 1], (INT8U) APP_TASK_WARN_PRIO); #if (OS_TASK_NAME_SIZE >= 9)
OSTaskNameSet(APP_TASK_WARN_PRIO, \"TASK WARN\#endif} 按键设置任务
为了代码加倍清楚明了,此设计编写时将各个任务编写的具体函数都放在板级库文件中供任务挪用。以下程序为按键任务挪用具体按键设置子函数的代码:
static void App_TaskKey(void *p_arg) --按键任务
{(void) p_arg;
while (DEF_TRUE)
{KeyTask(); --按键处置函数 OSTimeDlyHMSM(0, 0, 0, 5); } } --延时5毫秒 4.3.2显示任务
以下程序为显示任务挪用具体显示函数的代码:
static void App_TaskShow(void *p_arg) --显示任务
{ (void) p_arg;
while (DEF_TRUE) {
ShowTask();}} --显示处置函数
4.3.3温度收集任务
以下程序为温度收集任务挪用具体温度收集函数的代码: static void App_TaskTemp(void *p_arg) --温度收集函数 {(void) p_arg;
while (DEF_TRUE) {TempTask();
OSTimeDlyHMSM(0, 0, 1, 100); } --延时秒等待收集
4.3.4报警任务
以下程序为报警任务挪用具体报警函数的代码: static void App_TaskWarn(void *p_arg) --报警任务 {(void) p_arg;
while (DEF_TRUE)
{WarnTask(); --挪用报警函数
OSTimeDlyHMSM(0, 0, 0, 800); }}
板级库文件的设计
板级库文件包括所有任务挪用的子函数KeyTask()、ShowTask()、TempTask()、WarnTask()四个主要子函数。 4.4.1 KeyTask()函数
KeyTask()函数整体流程图如图。 KeyTask()相关程序主要代码如下: void KeyTask(void)
{static unsigned char CurrKey, iLoopCount = 0;
if (KeyDealFlag == KEYSCAN) --判断是不是要扫描按键
{if (ScanKey(&CurrKey) == 1)--读取键值判断按键是不是抬起 { KeyDealFlag = KEYEXEC;}} else
{if (iLoopCount == 0) KeyAction(CurrKey); ---按照按键键值执行相应操作 iLoopCount++;
if (iLoopCount >= 20)
{KeyDealFlag = KEYSCAN; iLoopCount = 0;}}}
初始化扫描否?是Currkey<=键值否Currkey≠7是按键完成是Down+set否down否Up +set否是up否set否结束是保存温度值显示状态当前温度值加一是设置上限温度值是当前温度值减一是设置下限温度值 KeyTask()流程图
unsigned char ScanKey(unsigned char * iKey) {unsigned char currkey;
static unsigned char oldkey = 0; static unsigned char keytask = 0;
unsigned char UpKey, DownKey, SetKey;
UpKey = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11); --读取按键端口值 DownKey = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10); SetKey = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0);
currkey = (DownKey << 2) + (SetKey << 1) + UpKey; 将三个按键的数值赋值给变量 switch (keytask) {case 0:
{if (currkey != 7) --是不是有正确的键按下 {keytask = 1; oldkey = currkey;} else keytask = 0;
break;} case 1:
{if (currkey == oldkey) --按键是不是抬起 {keytask = 2;} Else keytask = 0; break;} case 2:
{if (currkey != oldkey) {keytask = 0; *iKey = oldkey;
return 1;} break;}} return 0;} 4.4.2 ShowTask()函数
ShowTask()函数流程图如图所示。由于设计硬件电路图考虑到布局布线的问题,数码管的数据传输端没有连接到同一I/O口,故传输数据时,各个数字的显示需设计者概念编写。
ShowTask()函数代码如下: void ShowTask(void)
{ display_Num(CurrValue); } oid display_Num(short int numb) { unsigned char j[4], l;
unsigned short int tflag, aa; aa = numb;
if (aa < 0x0fff) tflag = 0; else
{ aa = ~aa + 1;
tflag = 1;} aa = aa * 10;
j[0] = aa / 1000; 4.4.34.4.4和请教33摄氏度30摄氏度1℃嵌入式实时系统[J]. 安徽工业
初始化当前需要显示的数值是正数是符号标志位0否符号标志位为1读取数值每一位判断每一位数值逐个扫描数码管控制口向数码管传输数据大学学报,2005,9(9):56-87. [2] 李郁松,郭裕顺. 嵌入式实时系统及其开发[J]. 杭州电子工业学院学报,2006,1(1):23-45.
[3] 刘亭,李日永.基于ARM的便携式气象站设计与实现[J].传感器的世界2009,1(1):
39-42.
[4] 于海业.温室环境自动检测系统[J].农业工程学报,1997,13(增):262—269. [5] 杨述斌.反馈式工业温度控制系统的设计与实现[J].科学技术与工程,2007,
23(7) :6080—6083.
[6] 潘峰.微型运算机原理与汇编语言[M]. 北京:电子工业出版社,2003.
[7] 刘乐善.微型运算机接口技术及应用[M].武汉:华中理工大学出版社,2004.
[8] Micbael 著,于志宏译.C/C++嵌入式系统编程[M].北京:中国电力出版社,2001. [9] 黄小波.基于ATS52单片机与DS18B20的温度监控系统 [J].微运算机信息,2008 ,
2(9):56-80. [10]32F32F sheet. [11] LABROSSE 著,邵贝贝译. μC/OS-Ⅱ— 源代码公开的实时嵌入式实时操作系统[M]. 北京:中国电力出版社,2003.
[12] 魏春杰.嵌入式操作系统μC/OS-Ⅱ应用技术研究[D].大连:大连海事大学,2004. [13] 任哲,潘树林,房红征.嵌入式操作系统基础uC/OS-—II和Linux[M].北京:北京航空航天大学出版社,2006.
[14] SUN temperature system of resistance stove. Sensor Technology, 2003,22(2):50-52.
致 谢
四年的大学生涯一晃而过,在咱们完成毕业设计以后,咱们就将辞别咱们的大学生涯。作为咱们在大学中的最后一门课程,毕业设计不仅让我巩固了大学里所学到的知识,还让我学习到了严谨而又踏实的工作作风。
在此我要感激我的指导老师万军老师,在整个的毕业设计进程当中,万军老师给了我专门大的指导,他给咱们分析所做的课题,指导咱们查阅资料,催促咱们所要完成的设计任务。万军老师身上的有着一名学者所特有的精神。他对待工作严谨而又认真;对待知识有一种钻研到底的精神;对待咱们这些学生,做为一名老师,传道授业解惑,他让我深深的感受到了那种师者的精神。
我还要感激那些提供帮忙的的师兄师姐们,他们严谨的工作态度是我感到收获颇丰,他们扎实的专业知识更是让我感到学无止境。我还要感激和我的同窗们,在这一段时刻里,咱们一路的工作,学习,探讨问题。他们的认真,他们的执著,都让我学到了很多的东西。
另外我还要感激,所有给我提供帮忙的朋友们,在我感到迷惑的时候,他们给我指点迷津,在我碰到困难的时候,他们给了我热心的帮忙。最后我要感激通信工程061 班的所有同窗们,四年的大学里,同窗们一路生活,一路学习。一路的喜怒哀乐,彼此关心,彼此帮忙。我的生活因为你们而出色。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务