版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 湖南文理学院 课程设计报告课程名称: 嵌入式系统课程设计 专业班级: 自动化2班 学生姓名: 石 扬 指导教师: 杨民生 完成时间: 报告成绩: 评阅意见: 评阅教师 日期 序 基于嵌入式系统的无线传感器网络的应用研究随着半导体技术、传感器技术、嵌入式技术以及通信技术的飞速发展,具有感知、计算、存储和通信能力的无线传感器网络的应用越来越广泛。无线传感器网络作为一种嵌入式设备能够实时监测、感知和采集网络分布区域内监视对象的各种信息,并加以处理。本文提供了一种基于CC2420的无线传感器网络的硬件节点设计方案,通过选择芯片,设计硬件接口,构建了一个完整的无线传感器网络节点。经仿真调试,该节点在试
2、验中应用良好,电路板可以实现两个节点间的通信,能由LED指示发送、接收或应答信息,基本达到了设计要求,在煤矿监控系统的实验中应用良好,能采集精度较高的温度、压力等数据信息,并实现准确的数据交互,实现了传感器网络所需的外形小、集成度高、低功耗,为将来实际应用研究提供了一个实验平台,具有一定的应用价值。目录TOC o 1-3 h u HYPERLINK l _Toc22010 1.设计要求 PAGEREF _Toc22010 2 HYPERLINK l _Toc8707 2.设计的作用与目的 PAGEREF _Toc8707 2 HYPERLINK l _Toc32731 3.无线传感器网络应用研
3、究的设计方案 PAGEREF _Toc32731 4 HYPERLINK l _Toc32750 3.1 体系结构 PAGEREF _Toc32750 4 HYPERLINK l _Toc21647 3.2 节点结构 PAGEREF _Toc21647 5 HYPERLINK l _Toc13071 4.系统硬件设计 PAGEREF _Toc13071 5 HYPERLINK l _Toc12697 4.1 无线传感器网络节点组成及工作流程 PAGEREF _Toc12697 5 HYPERLINK l _Toc6733 4.2 无线传感器网络节点设计 PAGEREF _Toc6733 6 H
4、YPERLINK l _Toc23530 4.2.1 处理器模块 PAGEREF _Toc23530 7 HYPERLINK l _Toc27096 4.2.2 通信模块 PAGEREF _Toc27096 8 HYPERLINK l _Toc13806 4.2.3 能量供应模块 PAGEREF _Toc13806 10 HYPERLINK l _Toc25982 5.设计流程 PAGEREF _Toc25982 11 HYPERLINK l _Toc31489 6心得体会及建议 PAGEREF _Toc31489 14 HYPERLINK l _Toc28366 6.1 心得体会 PAGER
5、EF _Toc28366 14 HYPERLINK l _Toc21400 6.2 建议 PAGEREF _Toc21400 14 HYPERLINK l _Toc3354 7参考文献 PAGEREF _Toc3354 151.设计要求无线传感器网络是集成了传感器、嵌入式系统、网络和无线通信四大技术而形成的一种全新的信息获取和处理技术它是一种新型的无基础设施的无线网络能够实时监测、感知和采集各种环境或监测对象的信息并对其进行处理、传送到需要这些信息的用户。2.设计的作用与目的无线传感器网络在环境、健康、家庭和其他商业领域有广阔的应用前景,在军事、空间探索和灾难拯救等特殊领域有其得天独厚的技术优
6、势。以军事应用为例,传感器网络将会成为C41SRT系统不可或缺的一部分。C41SRT系统的目标是利用先进的高科技技术,为未来的现代化战争设计一个集命令、控制、通信、计算、智能、监视、侦察和定位于一体的战场指挥系统受到了军事发达国家的普遍重视。因为传感器网络是由密集型、低成本、随机分布的节点组成的,自组织性和容错能力使其不会因为某些节点在恶意攻击中的损坏而导致整个系统的崩溃,这一点是传统的传感器技术所无法比拟的,也正是这一点,使传感器网络非常适合应用于恶劣的战场环境中,包括监控我军兵力、装备和物资,监视冲突区,侦察敌方地形和布防,定位攻击目标,评估损失,侦察和探测核、生物和化学攻击。在战场,指挥
7、员往往需要及时准确地了解部队、武器装备和军用物资供给的情况,铺设的传感器将采集相应的信息,并通过网关将数据送至指挥所,再转发到指挥部,最后融合来自各战场的数据形成我军完备的战区态势图。在战争中,对冲突区和军事要地的监视也是至关重要的,通过铺设传感器网络,以更隐蔽的方式近距离地观察敌方的布防;当然,也可以直接将传感器节点撤向敌方阵地,在敌方还未来得及反应时迅速收集利于作战的信息,传感器网络也可以为火控和制导系统提供准确的目标定位信息。在生物和化学战中,利用传感器网络及时、准确地探侧爆炸中心将会为我军提供宝贵的反应时间,从而最大可能地减小伤亡。传感器网络也可避免核反应部队直接暴露在核辐射的环境中。
8、在军事应用中,与独立的卫星和地面雷达系统相比,传感器网络的潜在优势表现在以下几个方面:(1)分布节点中多角度和多方位信息的综合有效地提高了信噪比,这一直是卫星和雷达这类独立系统难以克服的技术问题之一。(2)传感器网络低成本、高冗余的设计原则为整个系统提供了较强的容错能力。(3)传感器节点与探侧目标的近距离接触大大消除了环境噪声对系统性能的影响。(4)节点中多种传感器的混合应用有利于提高探测的性能指标。(5)多节点联合,形成覆盖面积较大的实时探测区域。(6)借助于个别具有移动能力的节点对网络拓扑结构的调整能力,可以有效地消除探测区域内的阴影和盲点。由于无线传感器网络巨大的科学意义和应用价值,已经
9、引起了世界发达国家学术界、军事部门和工业界的极大关注。从2001年开始,DARPA(美国国防部高级研究计划署)已把智能传感器网络作为一项优先发展的研究计划,出资近7亿美元,在众多大学和研究机构展开传感器网络的基础研究,以求获得五角大楼想要的所谓战区“超视觉”数据。2002年8月,NSF(美国国家科学基金会)一期资助4000万美元在UCLA成立了传感器网络研究中心,联合周边大学(包括UCB、USC和USR等)展开“嵌入式智能传感器”的研究项目,以求利用传感器网络对我们生活的物理世界实现全方位的测试与控制,这也是美国国情咨文中有关NGI最主要的远景规划之一。美国英特尔公司、微软公司等信息工业界巨头
10、也开始了传感器网络方面的工作,纷纷设立或启动相应的行动计划。日本、英国、意大利、巴西等国家也对传感器网络表现出了极大的兴趣,纷纷展开了该领域的研究工作。无线传感器网络与传统的无线网络(如WLAN和蜂窝移动电话网络)有藿不同的设计目标,后者在高度移动的环境中通过优化路由和资源管理策略最大化带宽的利用率,同时为用户提供一定的服务质量保证。而无线传感器网络中除少数节点需要移动外,大部分节点都是静止的。因为它们通常运行在人无法接近的恶劣,甚至危险的远程环境中,能源无法替代,设计有效的策略延长网络的生命周期成了无线传感器网络的核心问题。在研究初期,人们曾经一度认为成熟的Intemet技术加上Ad hoe
11、路由机制对无线传感器网络的设计是足够充分的,但深入的研究表明无线传感器网络与传统无线网络有着明显不同的技术要求,前者以数据为中心,后者以传输数据为目的。一些为自组织的Adhoc网络设计的协议和算法并不适合传感器网络的特点和应用的要求。节点标识(如地址等)的作用在传感器网络中就显得不是十分重要,因为应用程序不怎么关心单节点上的信息;中间节点上与具体应用相关的数据处理、融合和缓存倒显得非常必要。在密集性的无线传感器网络中,相邻节点间的距离非常短,低功耗的多跳通信模式节省功耗,同时增加了通信的隐蔽性,也避免了长距离的无线通信易受外界噪声干扰的影响。这些独特的要求和制约因素为无线传感器网络的研究提出了
12、新的技术问题。3.无线传感器网络应用研究的设计方案3.1 体系结构无线传感器网络结构如图2所示,无线传感器网络系统通常包括传感器节点(Sensor node)、Sink网关节点(Sink node)和管理节点。大量传感器节点随机部署在监测区域(Sensor field)内部或附近,能够通过自组织方式构成网络。传感器节点监测的数据沿着其他传感器节点逐跳进行传输,在传输过程中监测数据可能被多个节点处理,经过多跳路由到Sink网关节点,最后通过互联网或卫星到达管理节点。用户通过管理节点对无线传感器网络进行配置和管理,发布监测任务以及收集监测数据。传感器节点通常是一个微型的嵌入式系统它的处理能力、存储
13、能力和通信能力相对较弱,通过携带能量有限的电池供电。从网络功能上看,每个传感器节点兼顾传统网络节点的终端和路由器双重功能,除了进行本地信息收集和数据处理外,还要对其他节点转发来的数据进行存储、管理和融合等处理,同时与其他节点协作完成一些特定任务。目前传感器节点的软硬件技术是无线传感器网络研究的重点。Sink网关节点的处理能力、存储能力和通信能力相对比较强,它连接无线传感器网络与Intemet等外部网络,实现两种协议栈之间的通信协议转换,同时发布管理节点的监测任务,并把收集的数据转发到外部网络上。Sink网关节点既可以是一个具有增强功能的传感器节点,有足够的能量供给和更多的内存与计算资源,也可以
14、是没有监测功能仅带有无线通信接口的特殊网关设备。3.2 节点结构无线传感器网络(W ireless Sensor Network,WSN)是由部署在地理区域内大量的廉价微型传感器组成,用来协作地感知、采集和处理网络覆盖区域中感知对象的信息,并以无线通信方式把数据发送给观察者。无线传感器网络具有三个基本要素:传感器、观察者和感知对象。其中传感器由感知部件、存储器、嵌入式处理器、通信部件、电源和软件这几部分构成。观察者是无线传感器网络中感知信息的接受和应用者。感知对象是借助于节点中内置的传感器探测到湿度、温度、光、压力等大量观察者感兴趣的物质现象。无线传感器网络将逻辑上的信息世界与客观上的物理世界
15、融合在一起,改变人类与自然界的交互方式。无线传感器网络的基本单位是节点,它们的性能是整个无线网络可靠性的基本保证。根据实际应用和推广的需要,节点的体积和质量都应该比较小。无线传感网络的节点应用ARM处理器,简化了节点的硬件设计,提高了无线传感网络的通信能力、数据存储能力和可靠性。本文设计了一种基于Philips公司的32位微控制器LPC2138和在2.4GHz频带上工作的无线收发模块CC2420,结合外围传感器,具有电量检测功能的无线传感器网络节点,并可以运用在实际中。4.系统硬件设计4.1 无线传感器网络节点组成及工作流程无线传感器网络节点是一个微型的嵌入式系统,一般由传感器模块、处理器模块
16、、无线通信模块和能量供应模块组成,如图1所示。图中的箭头代表数据的流向。传感器模块由传感器和A/D转换器组成,负责对感知对象信息的采集和数据转换;处理器模块由微处理器、存储器和应用模块组成,负责控制整个传感器节点的操作,存储和处理数据,通信协议管理等;无线通信模块由网络模块、MAC模块和通信射频模块组成,通过内部各个模块的协调作用与其他节点进行无线通信,交换控制信息和收发数据业务;能量供应模块一般采用微型电池,负责为传感器节点提供运行所需的能量。图1 无线传感器节点结构图无线传感器网络节点的工作流程:(1)传感器采集到的信息一般是模拟数据,通过A/D模块把模拟数据转换为数字信号,并将数字信号输
17、入到CPU中作进一步的处理。(2)在处理器模块中对数据进行初步的处理,如在簇头的节点,收集该簇内所有节点所采集到的信息;在汇聚节点进行数据的部分融合、转发等。(3)发送数据前,无线通信模块通过MAC协议形成一个自组织网;并根据路由算法,建立和维护路由表。经处理器模块处理后,将数据送入无线通信模块;并根据预先建立的路由表,将数据发送给网关节点,由网关节点将数据发送给目的节点。综上所述,本设计依据传感器节点功耗低、成本低、体积小等硬件限制条件,采用基于射频芯片CC2420和微处理器ARM7为核心的无线传感器网络的硬件节点。4.2 无线传感器网络节点设计 设计中用到的传感器主要是温度传感器和压力传感
18、器,为提高节点的集成度,将传感器模块集成到处理器模块中。因此无线传感器网络节点将分为处理器模块、通信模块和供电模块3个部分。其中处理器模块选用ARM7作为处理器芯片,通信模块选用CC2420作为通信芯片,在电源方面,采用1节电池提供5V供电。4.2.1 处理器模块处理器模块是无线传感器节点的核心,负责整个节点的设备控制、任务分配与调度、数据整合与传输等关键任务,因此处理器性能的好坏决定了整个节点的性能10。本设计使用的微控制器是广州周立功公司开发的ARM7芯片。ARM芯片是基于ARM7TDMI-S核、单电源供电、LQFP64封装的LPC213811,具有JTAG仿真调试、ISP编程等功能。AR
19、M7TDMI-S核是通用的32位微处理器内核,采用冯诺依曼结构,它具有高性能和低功耗的特性。ARM结构是基于精简指令集计算机(RISC, Reduced Instruction SetComputer)原理而设计的,指令集和相关的译码机制比复杂指令集计算机要简单得多,由此可见使用一个小的、廉价的处理器核就能非常容易实现很高的指令吞吐量和实时的中断响应。LPC2138的主要特性:(1) 16/32位ARM7TDMI-S核,超小LQFP64封装。(2)8/16/32kB的片内静态RAM和32/64/128/256/512kB的片内Flash程序存储器。(3)通过片内boot装载程序实现在系统编程和
20、应用编程(ISP/IAP)。(4)2个8路10位的A/D转换器提供16路模拟输入,且每个通道具有低至2. 44us的转换时间。(5)1个10位的D/A转换器,可产生不同的模拟输出。(6)PWM单元(6路输出)、2个32位定时器/外部事件计数器(4路比较通道和带4路捕获)和看门狗。(7)多个串行接口,包括2个高速I2C总线(400kbps)、2个16C550工业标准UART、SPI和具有数据长度可变功能和缓冲作用的SSP。(8)低功耗实时时钟具有独立的电源和特定的32kHz时钟输入。通过外部中断或BOD将处理器从掉电模式中唤醒。4.2.2 通信模块在无线传感器网络中,节点之间通过无线通信来完成数
21、据的交互,数据的接收和发送消耗了节点的能量。为节省能量,延长节点寿命,需选择一块低能耗的通信芯片。本设计采用Chipcon/TI公司开发的一款低功耗通信芯片CC242012-13作为射频收发器,CC2420唤醒时延短的特点使它能有更多的时间处于睡眠状态,从而大大降低了节点的能耗。CC2420是IEEE 802. 15. 4标准的低成本、低功耗单片高集成度的解决方案。它的工作频率为2. 4GHz。CC2420符合欧洲ETSIEN300328、EN 300 440 class 2和日本ARIB STD-T66标准。CC2420的主要特点:(1)具有250bkps的有效数据传输速率和2Mchip/s
22、直接扩频序列基带调制解调。(2)具有独立的128字节发射、接收数据缓冲器。适合简化功能装置和全功能装置操作;低电流消耗;接收19. 7mA,发射17. 4mA;低电源电压要求;使用内部电压调节器时2. 1-3. 6V,使用外部电压调节器时1. 6-2. 0V;可编程输出功率。(3)可监控电池电量,QLP-48封装,外形尺寸只有7* 7mm,适用于各种恶劣的环境。从上述分析可知,该芯片具有良好的性能,尤其是它极低的电流消耗和封装尺寸,可以满足无线传感网络中节点体积小、质量轻、功耗小、成本低等特点。经测试发现该芯片在本系统中工作良好,功能比较完善。CC2420能够非常方便地与ARM7处理器连接。C
23、C2420使用SFD, FIFO, FIFOP和CCA四个引脚表示收发数据的状态;而处理器通过SPI接口与CC2420收发数据,写入或读取配置信息等。ARM7的4个SPI通信接口: SSEL,MOSI,MISO和SCLK分别对应于CC2420的4个SPI通信接口: CSN, S1, SO和SCLK。由于CC2420只有从机模式,因此ARM7处理器只能采用主机模式。ARM7和CC2420引脚连接如图2所示。节点在发送和接收数据时,处理器的SCLK引脚提供时钟频率; SSEL引脚控制数据收发的同步性,CSN引脚置为低电平。MOSI与MISO分别是数据输出和输入的引脚。在接收模式下,当节点接收到帧开
24、始分隔符后,将SFD引脚置为高电平。然后接收地址,如果地址错误,则SFD引脚被置为低电平,如果地址识别功能禁止或地址接收正确,则SFD引脚直到所有数据发送完成后才降为低电平。与CC2420的RXFIFO(接收数据存储区)相关的两个信号是FIFO和FIFOP。当RXFIFO缓冲区变成空时, FIFO引脚重新被置为低电平。因此当CC2420中是否有接收到的数据,ARM7处理器通过读取FIFO引脚的电平来进行判断。当节点接收到的数据长度小于门限值时,则在MPDU最后一个数据被接收完后, FI-FOP引脚输出高电平。如果接收的数据长度大于门限值,则在接收到的数据长度等于门限值时, FIFOP引脚变成高
25、电平。一旦从RXFIFO缓冲区中读出数据时,FIFOP引脚变成低电平。为了防止ARM7在CC2420的地址识别完成前读取那些可能无效的数据,当CC2420的地址识别功能时,FIFOP引脚只有到地址识别成功后才会发挥作用。在给定的时间内,RXFIFO最多能保存128个字节的数据。如果RXFIFO缓冲区溢出,则FIFO引脚变成低电平,同时FIFOP引脚变成高电平。处理器可以通过查询FIFO引脚和FIFOP引脚的状态来判断CC2420是否处于溢出状态。为了尽量避免RXFIFO缓冲区溢出,可将FIFOP引脚与ARM7处理器的一个外部中断引脚连接,使ARM7处理器及时读取CC2420的RXFIFO中的数
26、据。4.2.3 能量供应模块电能是无线传感器网络中非常宝贵的资源,节点电能一旦耗尽,即宣布其寿命终止并退出网络,剩余的节点需要重新组网。因此,在系统设计中要充分考虑到功耗的最小化。为节约能源,延长电池的寿命,节点上所有工作模块没有必要一直保持正常的工作状态14。当无数据发送、接收及转发时,无线传感器网络节点会调整为休眠状态,而处于休眠状态时芯片的能耗极低。CC2420芯片采用低电压供电(2. 1V-3.6V)和休眠模式,且从休眠模式被激活的时延短,因此有更多的时间处于休眠状态。同时,ARM7也是一款采用低电压供电的芯片。5.设计流程本次开发环境是ADSL1. 2集成开发环境。使用LPC2138
27、专门工程模板的ARM Executable forLPC2138建立工程。图4所示的是CC2420芯片的初始化。 图4 CC2420初始化流程图CC2420内部有33个16位配置寄存器,初始化CC2420时需要对这些寄存图3 CC2420初始化进行设置,这些寄存器在芯片复位时都已设置了一些初始值,在实际使用时,根据需要对初始值进行修改。 图4发送节点流程图图5所示的是节点发送数据的流程图。数据包类型有信标帧、数据帧、ACK帧和MAC命令帧。发送数据时,需要先通过微控制器的SPI接口把需要传送的数据发送到CC2420的缓冲区中存储起来,这里根据IEEE 802.15. 4的帧格式来发送,缓存好数
28、据后就可以启动发送数据;同时发送节点要表明要不要接收节点返回ACK信息以便判断本次传输是否成功图5 发送节点流程图图6所示的是节点接收数据的流程图。接收数据时,会把数据存入到接收缓存区RXFIFO中,并改变FIFO和FIFOP引脚的状态,处理器通过FIFOP的引脚中断读RXFIFO寄存器来依次读取整个数据包,同时由于CC2420的RXFIFO缓冲区只有128字节,为防止接收数据长度大于128字节,判断RXFIFO缓冲区是否溢出。 图6 接收节点流程图6心得体会及建议6.1 心得体会经过2周的设计,通过不断地努力与完善,终于完成了基于嵌入式系统的无线传感器的应用研究。从一开始的确定课题,到后来的
29、资料查找、理论学习,这一切都使我的理论知识和动手能力进一步得到提高。在选择课题、原理分析、调试过程中不可避免地遇到各种问题,这要求保持沉着冷静,联系书本理论知识积极地思考,遇到解决不了的可以请教同学或指导老师,虽然在设计过程中不可避免地遇到很多问题,但是最后还是在老师以及同学的帮助下圆满解决了这些问题,实现了整个系统设计与最后调试,相关指标达到期望的要求,很好地完成了。经过这次的课程设计,使得我对嵌入式知识的掌握进一步的增强,深了对嵌入式知识的理解,并对嵌入式产生了浓厚的兴趣, 经过这次课程设计培养了我的设计能力以及全面的考虑问题能力。虽然设计的过程是痛苦的但是收获成功的喜悦却是如此的让人激动
30、。相信这次课程设计对我以后的学习及工作都会产生积极深远的影响。6.2 建议本文设计的嵌入式无线传感器网络节点具备无线传感器网络要求的基本功能它可以为无线传感器网络相关技术的深入研究提供了平台,为无线传感器网络的应用开发提供了参考。未来的研究工作,可以从以下几个方面入手:1.无线传感器网络节点硬件设计的测试,系统集成化、小型化.2.基于ZigBee的节点组网,路由等上层软件的研究与开发。3.节点的能量管理和整个无线传感器网络的能量管理。4.节点的RSSI定位试验,数据的分析和节点定位算法的研究和实现。5.网络的可靠性和安全性等。7参考文献1 任丰原,黄海宁,林闯.无线传感器网络J.软件学报,20
31、03, 14(7): 1282-1291.2 Akyildiz IAN F,Melodia Tommaso,ChowdhuryKaushik R.A survey on wirelessmultimedia sensornetworksJ.Com-puterNetworks, 2007, 51(4): 921-960.3 王姝,阎毓杰,胡富平.无线传感器网络的理论及应用M.北京:北京航空航天大学出版社, 2007.4 高超,张頔,罗嵘.一种用于无线传感器网络的模块化设计方法J.电子技术应用, 2009, 35(5): 39-42, 46.5 马华东,陶丹.多媒体传感器网络及其进展J.软件学报,
32、 2006, 17(9): 2013-2028.6 吴猛,程良伦.一种无线传感器网络节点及其实现方法J.仪表技术与传感器, 2008(12): 14-16.7 孙利民,李建中,陈渝,等.无线传感器网络M.北京:清华大学出版社, 2005.8 任枫轩,李伟.嵌入式无线网络节点的设计J.国外电子测量技术, 2008, 27(6): 50-53.9 高英明,金仁成,王立鼎,等.嵌入式无线传感器网络节点设计与通信研究 J.大连理工大学学报, 2008, 48(5): 749-753.附录资料:不需要的可以自行删除 C语言图形模式速成第一节 图形模式的初始化Turbo C 提供了非常丰富的图形函数,所有
33、图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*.BGI,同时将集成开发环境options/Linker中的Graphics lib选为on,只有这样才能保证正确使用图形函数。 不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作。设置
34、屏幕为图形模式,可用下列图形初始化函数:void far initgraph(int far *gdriver, int far *gmode,char *path);其中gdriver和gmode分别表示图形驱动器和模式,path是指图形驱动程序所在的目录路径。有关图形驱动器、图形模式的符号常数及对应的分辨率见graphics. h。图形驱动程序由Turbo C出版商提供,文件扩展名为.BGI。 根据不同的图形适配器有不同的图形驱动程序。例如对于EGA、 VGA 图形适配器就调用驱动程序EGAVGA.BGI。#include stdio.h#include graphics.hint mai
35、n()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*画一长方体*/getch();closegraph();return 0;有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序用于不同图形驱动器,Turbo C 提供了一个自动检测显示器硬件的函数,其调用格式为:void far detectgraph(int *gdriver, *gmode);其中gdriver和gmode的意义与上面相
36、同。 自动进行硬件测试后进行图形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自动测试硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*输出测试结果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根据测试结果初始化图形*/bar3d(100, 100, 300, 250, 50, 1); /*画一长
37、方体*/getch();closegraph();return 0;上例程序中先对图形显示器自动检测,然后再用图形初始化函数进行初始化设置,但Turbo C提供了一种更简单的方法, 即用gdriver=DETECT 语句后再跟initgraph()函数就行了。采用这种方法后,上例可改为:#include stdio.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegr
38、aph();return 0;另外,Turbo C 提供了退出图形状态的函数closegraph(),其调用格式为:void far closegraph(void);第二节 屏幕颜色的设置和清屏函数对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数: 设置背景色: void far setbkcolor(int color);设置作图色: void far setcolor(int color);其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见graphics.h。清除图形屏幕内容但不清除图
39、形背景使用清屏函数,其调用格式如下: voide far cleardevice(void);#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI); /*图形初始化*/setbkcolor(0); /*设置图形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*设置不同作图色*/circle(320, 240, 20+i*10); /*画半径不同的圆*
40、/getch();for(i=0; i=15; i+)setbkcolor(i); /*设置不同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();return 0;另外,TURBO C也提供了几个获得现行颜色设置情况的函数。 int far getbkcolor(void); 返回现行背景颜色值。int far getcolor(void); 返回现行作图颜色值。int far getmaxcolor(void); 返
41、回最高可用的颜色值。第三节 基本画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。 、画点. 画点函数 void far putpixel(int x, int y, int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640 x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,0),右下角坐标为(639, 479),水平方向
42、从左到右为x 轴正向,垂直方向从上到下为y轴正向。TURBO C的图形函数都是相对于图形屏幕坐标,即象元来说的。关于点的另外一个函数是: int far getpixel(int x, int y); 它获得当前点(x, y)的颜色值。 II、有关坐标位置的函数 int far getmaxx(void);返回x轴的最大值。int far getmaxy(void);返回y轴的最大值。int far getx(void); 返回游标在x轴的位置。void far gety(void); 返回游标有y轴的位置。void far moveto(int x, int y); 移动游标到(x, y)点
43、,不是画点,在移动过程中亦画点。void far moverel(int dx, int dy); 移动游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点。、画线I. 画线函数TURBO C提供了一系列画线函数: void far line(int x0, int y0, int x1, int y1); 画一条从点(x0, y0)到(x1, y1)的直线。void far lineto(int x, int y); 画一作从现行游标到点(x, y)的直线。void far linerel(int dx, int dy); 画一条从现行游标(x,y)到按相对增量确
44、定的点(x+dx, y+dy)的直线。void far circle(int x, int y, int radius); 以(x, y)为圆心,radius为半径,画一个圆。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示)画一段圆弧线。在TURBO C中规定x轴正向为0 度,逆时针方向旋转一周, 依次为90,180, 270和360度(其它有关函数也按此规定,不再重述)。 void ellipse(int x, in
45、t y, int stangle, int endangle,int xradius,int yradius);以(x, y)为中心,xradius,yradius为x轴和y轴半径,从角stangle 开始到endangle结束画一段椭圆线,当stangle=0,endangle=360时, 画出一个完整的椭圆。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)为左上角,(x2, y2)为右下角画一个矩形框。 void far drawpoly(int numpoints, int far *polypoints); 画一个
46、顶点数为numpoints,各顶点坐标由polypoints给出的多边形。polypoints整型数组必须至少有2 倍顶点数个无素。每一个顶点的坐标都定义为x,y,并且x在前。值得注意的是当画一个封闭的多边形时,numpoints 的值取实际多边形的顶点数加一,并且数组polypoints中第一个和最后一个点的坐标相同。下面举一个用drawpoly()函数画箭头的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,9
47、3,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*设置作图颜色*/drawpoly(8, arw); /*画一箭头*/getch();closegraph();return 0;II、设定线型函数在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下
48、面介绍有关线型的设置函数。void far setlinestyle(int linestyle,unsigned upattern,int thickness);该函数用来设置线的有关信息,其中linestyle是线形状的规定,见graphics.h。对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此时uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。 void far getlinesettings(struct linesettingstypefar *lin
49、einfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面两句程序可以读出当前线的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);该函数规定画线的方式。如果mode=0,则表示画线时将所画位置的原来信息覆盖了(这是TURBO C的默认方式)。如果mode=1, 则
50、表示画线时用现在特性的线与所画之处原有的线进行异或(XOR)操作,实际上画出的线是原有线与现在规定的线进行异或后的结果。因此,当线的特性不变,进行两次画线操作相当于没有画线。有关线型设定和画线函数的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setl
51、inestyle(0, 0, 3); /*设置三点宽实线*/setcolor(2);rectangle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*设置一点宽用户定义线*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;第四节 基本图形的填充填充就是用规定的颜色和图模填满一个封闭图形。 一般是先画轮廓再填充。TURBO C提供了一些先画出基本图形轮廓, 再按规定图模和颜色填充整个封闭图形的函数。在
52、没有改变填充方式时,TURBO C 以默认方式填充。 void far bar(int x1, int y1, int x2, int y2);确定一个以(x1,y1)为左上角,(x2,y2)为右下角的矩形窗口,再按规定图模和颜色填充。说明:此函数不画出边框,所以填充色为边框。void far bar3d(int x1, int y1, int x2, int y2,int depth,int topflag);当topflag为非0时, 画出一个三维的长方体。当topflag为0时,三维图形不封顶,实际上很少这样使用。说明: bar3d()函数中,长方体第三维的方向不随任何参数而变,即始终为
53、45度的方向。void far pieslice(int x,int y,int stangle,int endangle,int radius);画一个以(x, y)为圆心,radius为半径,stangle为起始角度,endangle 为终止角度的扇形,再按规定方式填充。当stangle=0,endangle=360 时变成一个实心圆,并在圆内从圆点沿X轴正向画一条半径。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);画一个以(x, y)为圆心分别以xradius, yradius为
54、x轴和y轴半径,stangle 为起始角,endangle为终止角的椭圆扇形,再按规定方式填充。第五节 设定填充方式TURBO C有四个与填充方式有关的函数。下面分别介绍: void far setfillstyle(int pattern, int color); color的值是当前屏幕图形模式时颜色的有效值。pattern的值及与其等价的符号常数见graphics.h。除USER_FILL(用户定义填充式样)以外,其它填充式样均可由setfillstyle() 函数设置。当选用USER_FILL时,该函数对填充图模和颜色不作任何改变。 之所以定义USER_FILL主要因为在获得有关填充信
55、息时用到此项。void far setfillpattern(char * upattern,int color); 设置用户定义的填充图模的颜色以供对封闭图形填充。其中upattern是一个指向8个字节的指针。这8个字节定义了8x8点阵的图形。每个字节的8位二进制数表示水平8点,8个字节表示8行,然后以此为模型向个封闭区域填充。void far getfillpattern(char * upattern); 该函数将用户定义的填充图模存入upattern指针指向的内存区域。void far getfillsetings(struct fillsettingstypefar * fillin
56、fo); 获得现行图模的颜色并将存入结构指针变量fillinfo中。其中fillsettingstype结构定义如下:struct fillsettingstypeint pattern; /* 现行填充模式 * /int color; /* 现行填充模式 * /; 有关图形填充图模的颜色的选择,请看下面例程。#include stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用户定义图模*/int gdriver,gmode,i;struct fillsettingstype save;/*定义一个用来存
57、储填充信息的结构变量*/gdriver=DETECT;initgraph(&gdriver,&gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;i13;i+)setcolor(i+3);setfillstyle(i,2+i); /* 设置填充类型 */bar(100,150,200,50); /*画矩形并填充*/bar3d(300,100,500,200,70,1); /* 画长方体并填充*/pieslice(200, 300, 90, 180, 90);/*画扇形并填充*/sector(500,300,180,270,200,1
58、00);/*画椭圆扇形并填充*/getch();cleardevice();setcolor(14);setfillpattern(str, RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300,0,360,100,50);getch();getfillsettings(&save);/*获得用户定义的填充模式信息*/closegraph();clrscr();printf(The pattern is %d, The color of filling is
59、%d,save.pattern, save.color);/*输出目前填充图模和颜色值*/getch();第六节 任意封闭图形的填充截止目前为止,我们只能对一些特定形状的封闭图形进行填充,但还不能对任意封闭图形进行填充。为此,TURBO C 提供了一个可对任意封闭图形填充的函数,其调用格式如下: void far floodfill(int x, int y, int border); 其中:x, y为封闭图形内的任意一点,border为边界的颜色,也就是封闭图形轮廓的颜色。调用了该函数后,将用由函数setfillstyle()规定的颜色和模式填满整个封闭图形。注意:a. 如果x或y取在边界上
60、,则不进行填充。b. 如果不是封闭图形则填充会从没有封闭的地方溢出去,填满其它地方。c. 如果x或y在图形外面,则填充封闭图形外的屏幕区域。d. 由border指定的颜色值必须与图形轮廓的颜色值相同, 但填充色可选任意颜色。下例是有关floodfill()函数的用法,该程序填充了bar3d()所画长方体中其它两个未填充的面。#include stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东深圳海天中学2026-2027学年第一学期九年级英语9月阶段学情自测(含答案)
- 水文站观测员岗位技能考试试卷及答案
- 小学三年级阅读素养测评试题及答案
- 乳化机操作工岗位技能考试试卷及答案
- 外贸营销员岗前趋势考核试卷含答案
- 玻璃制品热加工工岗前基础操作考核试卷含答案
- 2026年十八项医疗核心制度考试题库(含参考答案)
- 高炉配管工安全素养知识考核试卷含答案
- 己内酰胺装置操作工岗前应急准备考核试卷含答案
- 丁苯橡胶装置操作工岗中操作评估考核试卷含答案
- 湖北省武汉市2027届高三上9月调研考试地理试卷( 含答案)
- 移动智慧家庭工程师(家客L3)等级认证备考试题及答案
- 2025绵阳东辰本部小升初数学考试试题库(含答案)
- 2026 年秋季校园传染病案例警示教育
- 2026银行业务创新研究与服务模式分析与发展方向研究报告
- 丰田TSC 7000G-2023中文版(丰田汽车电气电子部件环境测试标准)
- 县级管理档案实施方案
- 肠梗阻诊疗指南(2024版)
- 2026中国金融基础设施现代化建设与运营效率提升研究报告
- 《固态电力变压器第1部分技术规范》
- 医保局保密工作制度
评论
0/150
提交评论