课程设计-单片机波形发生器_第1页
课程设计-单片机波形发生器_第2页
课程设计-单片机波形发生器_第3页
课程设计-单片机波形发生器_第4页
课程设计-单片机波形发生器_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、波形发生器设计PAGE PAGE 27课 程 设 计 课 程 单片机课程设计 题 目 波形发生器设计 院 系 电气信息工程学院测控系 专业班级 学生姓名 学生学号 指导教师 2011年 4月 6日任务书课程 单片机课程设计 题目 波形发生器设计 专业 测控技术与仪器 姓名 学号 一、任务 设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波和锯齿波信号可以在以上基础上任意发挥。二、设计要求1 设计制作一个波形发生器,该波形发生器能产生正弦波、方波、三角波等。2 通过对AT89S51单片机的编程,了解不同波形的产生原理和设计方案,画出硬件电路图,编程完成软件部分,最后调试观察产生不同类

2、型的波形信号。3 写出详细的设计报告。4 附有电路原理图及程序流程图,以及程序清单。三、参考资料1 杜华.任意波形发生器及应用J.国外电子测量技术,2005.1:3840.2 程全.基于AT89C52实现的多种波形发生器的设计J.2005.22(5):5758.3 胡鸿豪,李世红.基于单片机和DDS的信号发生器设J.设计参考,2006 (12)4 徐建军.MCS-51系列单片机应用及接口技术M .人民邮电出版社, 2003.5 高峰.单片机应用系统设计及实用设计J.北京:机械工业出版社,2004年:96-100完成期限 2011.3.28至2011.4.8 指导教师 专业负责人 2011年 3

3、月 28 日目录 TOC o 1-2 h z u HYPERLINK l _Toc289679038 第1章 绪论 PAGEREF _Toc289679038 h 3 HYPERLINK l _Toc289679039 1.1 波形发生器的概述 PAGEREF _Toc289679039 h 3 HYPERLINK l _Toc289679040 1.2 本设计任务 PAGEREF _Toc289679040 h 3 HYPERLINK l _Toc289679041 第2章 总体方案论证与设计 PAGEREF _Toc289679041 h 4 HYPERLINK l _Toc2896790

4、42 2.1 总体方案选择与论证 PAGEREF _Toc289679042 h 4 HYPERLINK l _Toc289679043 2.2 系统设计基本原理图与分析 PAGEREF _Toc289679043 h 5 HYPERLINK l _Toc289679044 第3章 系统硬件电路的设计 PAGEREF _Toc289679044 h 6 HYPERLINK l _Toc289679045 3.1 单片机最小系统的设计 PAGEREF _Toc289679045 h 6 HYPERLINK l _Toc289679047 3.2资源分配 PAGEREF _Toc289679047

5、 h 6 HYPERLINK l _Toc289679048 3.3各模块电路的设计 PAGEREF _Toc289679048 h 7 HYPERLINK l _Toc289679049 3.4按键和波形指示灯电路 PAGEREF _Toc289679049 h 8 HYPERLINK l _Toc289679050 3.5电流电压转换电路 PAGEREF _Toc289679050 h 9 HYPERLINK l _Toc289679051 第4章 系统的软件设计 PAGEREF _Toc289679051 h 10 HYPERLINK l _Toc289679052 4.1主程序模块 P

6、AGEREF _Toc289679052 h 10 HYPERLINK l _Toc289679053 4.2锯齿波程序模块 PAGEREF _Toc289679053 h 11 HYPERLINK l _Toc289679054 4.3三角波程序模块 PAGEREF _Toc289679054 h 11 HYPERLINK l _Toc289679055 第5章 系统调试与测试结果分析 PAGEREF _Toc289679055 h 13 HYPERLINK l _Toc289679056 5.1软件仿真 PAGEREF _Toc289679056 h 13 HYPERLINK l _Toc

7、289679057 5.2仿真结论分析 PAGEREF _Toc289679057 h 14 HYPERLINK l _Toc289679058 5.3硬件测试结果分析 PAGEREF _Toc289679058 h 14 HYPERLINK l _Toc289679059 结 论 PAGEREF _Toc289679059 h 15 HYPERLINK l _Toc289679060 参考文献 PAGEREF _Toc289679060 h 16 HYPERLINK l _Toc289679061 附录1 程序 PAGEREF _Toc289679061 h 17 HYPERLINK l _

8、Toc289679062 附录2 整体电路原理图 PAGEREF _Toc289679062 h 24 HYPERLINK l _Toc289679063 附录3 仿真效果图 PAGEREF _Toc289679063 h 25第1章 绪论波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。作为一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的

9、电路。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。1.1 波形发生器的概述波形发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。随着集成电路的迅速发展,用集成电路可很方便

10、地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。1.2 本设计任务 本设计通过分析比较后采用传统的方法来实现多功能波形发生器。借助高性能单片机运算速度高,系统集成度强的优势,设计的这种信号发生器,比以前的数字式信号发生器具有硬件简单,理解及实现起来较容易,该方案的设计思路较为清晰,且容易对频率和幅值进行控制等优点。第2 章 总体方案论证与设计依据应用场合需要实现的波形种类,波形发生器的具体指标要求会有所不同。依据不同的设计要求选取不同的设计方案。通常,波形发生器需要实现的波形有正弦波、方波、三角波和锯齿

11、波。有些场合可能还需要任意波形的产生。各种波形共有的指标有:波形的频率、幅度要求,频率稳定度,准确度等。2.1 总体方案选择与论证对于不同波形,具体的指标要求也会有所差异,例如,占空比是脉冲波形特有的指标。波形发生器的设计方案多种多样,大致可以分为几大类:纯硬件设计法、纯软件设计法和软硬件结合设计法。2.1.1方案一:波形发生器设计的纯硬件法早期,波形发生器的设计主要是采用运算放大器加分立元件来实现。实现的波形比较单一,主要为正弦波、方波和三角波。工作原理也相对简单:首先是产生正弦波,然后通过波形变换(正弦波通过比较器产生方波,方波经过积分器变为三角波)实现方波和三角波。在各种波形后加上一级放

12、大电路,可以使输出波形的幅度达到要求,通过开关电路实现不同输出波形的切换,改变电路的具体参数可以实现频率、幅度和占空比的改变。通过对电路结构的优化及所用元器件的严格选取可以提高电路的频率稳定性和准确度。通过调整外部元件的参数实现频率,幅值,占空比的调整,但是由于元件太过分散,即使使用单片压控函数发生器,参数与外部条件有关。因而产生的波形稳定性差,精度低,抗干扰能力差,价格高,且灵活性差。2.1.2 方案二:软硬件结合法软硬件结合的波形发生器设计方法同时兼具软硬件设计的优势:既具有纯硬件设计的快速、高性能,同时又具有软件控制的灵活性、智能性。如以单片机和单片集成函数发生器为核心。辅以键盘控制、液

13、晶显示等电路,设计出智能型函数波形发生器,采用软硬件结合的方法可以实现功能较全、性能更优的波形发生器,同时还可以扩展波形发生器的功能,采用单片机(AT89S51)和数模转换芯片(DAC0832)实现波形的产生,波形的产生由程序控制,向D/A的输入端按一定的规律发送数据,经过D/A和MC1458产生100Hz频率波形,通过查询键盘或中断控制不同波形的产生。此方案通过编程简化了外部电路,原理简单,容易实现。方案选择:经比较,方案二明显更适合实现课程设计题目的要求。通过编程实现不同波型的产生,并且可以通过按键实现波形的切换。该方案线路简单,结构紧凑,系统稳定,易控制,容易调试等优点,综上分析,选择方

14、案二实现课题要求。2.2 系统设计基本原理图与分析2.2.1系统原理框图如图2-1 波形指示电流/电压转换 AT89S51输出 键盘A/D转换 电源基准电压 图2-1波形发生器系统框图2.2.2原理框图分析:该波形发生器主要由单片机(AT89S51),数模转换电路(DAC0832),电流/电压转换电路(MC1458),按键和波形指示灯电路,ISP接口等组成。其工作原理为当按下四个按键当中的任何一个按键,就会产生相对应的波形,并且四个LED灯作为不同波形的指示。第3章 系统硬件电路的设计3.1 单片机最小系统的设计AT89S51是片内有ROM/EPROM的单片机,因此,这种芯片构成的最小系统简单

15、可靠。用AT89S51单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图3-1 AT89S51单片机最小系统所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点:有可供用户使用的大量I/O口线;内部存储器容量有限;应用系统开发具有特殊性。图3-1 AT89S51单片机最小系统3.2资源分配软硬件设计是设计中为了满足功能和指标要求,现分配资源如下:晶振采用12MHz,内存分配:P0口与DAC0832的DI0-DI7数据输入;P1口的P1.0P1.3分别与四个按键相连,分别控制相应波形的输出,每输出一个波形,点亮对应的LED灯端相连;P2口与DAC0832

16、的输入寄存器选择信号CS,输入寄存器写选通信号WR1及DAC寄存器写选通WR2和数据传送信号XFER使CPU开始工作的方法就是给CPU一个复位信号,复位信号结束后,CPU从程序存储器“0000H”开始执行程序。AT89S51高电平复位,采取手动复位。设置一个复位按钮,当操作者按下按钮时产生一个复位信号。3.3各模块电路的设计3.3.1 D/A转换电路DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。其主要参数如下:分辨率为8位,转换时间为1s,满量程误差为1LSB,参考电压为(+10-10)V,供电电源为(+5+15)V,逻辑电平输入与TTL兼容。图3-2

17、 DAC0832引脚图3.3.2 DAC0832工作原理DAC0832主要由8位输入寄存器、8位DAC寄存器、8位D/A转换器以及输入控制电路四部分组成。8 位输入寄存器用于存放主机送来的数字量,使输入数字量得到缓冲和锁存,由加以控制;8位DAC寄存器用于存放待转换的数字量,由加以控制;8位D/A转换器输出与数字量成正比的模拟电流;由与门、非与门组成的输入控制电路来控制2个寄存器的选通或锁存状态。DAC0832与反相比例放大器相连,实现电流到电压的转换,因此输出模拟信号的极性与参考电压的极性相反。图3-3 D/A转换器双极性输出电路图3-3中,运算放大器U3B的作用是把运算放大器U3A的单向输

18、出电压转换成双向输出电压。DAC0832主要是用于波形的数据的传送,是本题目电路中的主要芯片。3.4按键和波形指示灯电路原理图如下图3-4 采用中断的方式对波形的切换对于查询方式对波形的切换,当按键按下时,输出相应波形,并点亮相应的LED灯,对于中断方式,利用两个外部中断实现对波形的切换。中断与查询相结合的方式可以进行扩展,查询方式不是实时的,而中断时实时的。3.5电流电压转换电路原理图如下:图3-5 I/V转换电路实现I/V转换最简单的方法就是直接在1out1和Iout2之间跨界一电阻,这样就很容易的实现了I/V转换,但是这种方法忽略了一个阻抗问题。对于DAC0832来说,R的取值应尽可能大

19、,能够保证获得更多的电压,对于与输出电压相连的后续电路来说,R的取值应尽可能的小,以降低输出阻抗,这两方面是矛盾的,所以这种方式欠合理。而合理的方式是应用运算放大器实现I/V转换,也解决了阻抗的问题。第4章 系统的软件设计根据功能,系统软件设计分成几个模块编程:主程序模块,锯齿波程序模块,三角波程序模块,正弦波程序模块,方波程序模块,延时程序模块。4.1主程序模块主程序流程图 开始KEY1按下了? 输出锯齿波KEY3按下了?KEY2按下了?KEY4按下了? N N N N NYYYY 输出三角波 输出正弦波 输出方波 图4-1主程序流程图主程序中主要实现利用按键来控制不同波形的输出,当按键KE

20、Y1(P1.0)按下时波形发生器就输出锯齿波,对应的LED(P1.4)点亮;当按键KEY2(P1.1)按下时,波形发生器就输出三角波,对应的LED(P1.5)点亮;当按键KEY3(P1.2)按下时,波形发生器就输出正弦波,对应的LED(P1.6)点亮;当按键KEY4(P1.3)按下时,波形发生器就输出方波,对应的LED(P1.7)点亮。通过按键可以以任意循环方式输出不同波形。4.2锯齿波程序模块程序流程图图4-2锯齿波程序流程图锯齿波产生首先将DAC0832口地址至为2FFFH,然后将00H送入寄存器A中,DAC0832输出A中的内容,当A中的内容等于FFH返回开始,当A中的内容不为FFH时,

21、A中的内容累加,从而输出波形。4.3三角波程序模块程序流程图图4-3 三角波程序流程图三角波产生首先将DAC0832口地址至为2FFFH,通过A中数值的加一递升,当A中的内容为0时,与0FFH相比,相等时A中的内容减一递减,从而循环产生三角波。4.4正弦波程序模块和方波程序模块程序流程图图4-4正弦波程序流程图 图4-5方波程序流程图正弦波波形通过查表指令得出。方波产生首先将DAC0832口地址至为2FFFH,当A中的内容为0时,输出对应模拟量,然后延时,当A中的内容为0FFH时,同样输出对应模拟量,再延时相同时间,从而得到方波。第5章 系统调试与测试结果分析5.1软件仿真图5-1锯齿波仿真图

22、图5-2三角波仿真图图5-3正弦波仿真图图5-4方波仿真图5.2仿真结论分析从软件仿真的结果上看,波形存在一定的的失真,这主要跟程序的设计有关,没有做到那么精确,再者,我认为仿真软件本身也会给测试结果一定的误差。5.3硬件测试结果分析硬件测试结果显示,示波器显示的波形比仿真软件模拟甚至还标准,而且对按键的响应比仿真响应快。这在一定程度上,告诉我们,仿真软件只是一个我们研究的工具,我们不能完全依赖于于仿真软件。结 论本次的设计中利用AT89S51和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察。在这次的软件

23、设计中,程序设计采用的是汇编语言。汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能。通过这次课程设计使我对课程所学理论知识的深化和提高。并且本次课程设计,使我了解和掌握单片机应用系统的软硬件设计过程、方法及实现,培养了我分析问题和解决问题的能力,为以后设计和实现更难的应用系统打下良好基础。在本次设计的过程中,我发现很多的问题,虽然以前还做过其他的课程设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部

24、分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。同时在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,

25、在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。在实践中应用的深刻理解,通过把波形在计算机上实现,知道和理解该理论在计算机中怎样执行的,对该理论在实践中的应用更深刻的理解,这次课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我学得了许多知识,使我获益匪浅。参考文献1 朱定华,马爱梅,林卫. 微机应用系统设计M. 武汉:华中科技大学出版社.1999:130-133.2 顾德英,张健,马淑华. 计算机控制技术M. 北京:北京邮电大学出版社.2006:64-70.3 夏扬. 计算机控制技术M. 北京:机械工业出版社.2004:11-924 刘

26、国钧,陈绍业,王凤翥.图书馆目录M.北京:高等教育出版社.1957.15-18.5 刘润华,刘立山.模拟电子技术J.山东:石油大学出版社.2003.6 潘永雄,沙河,刘向阳.电子线路CAD实用教程M.西安:西安电子科技大学出版社.2001.13-118. 7 朱定华,戴汝平等.单片微机原理与应用M.北京交通大学出版社.清华大学出版社.8 彭介华.电子技术课程设计指导J.北京:高等教育出版社.1997.9张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计M.哈尔滨:哈尔滨工业大学出版社.1997.53-61.10 HYPERLINK /search?channel=search&sw=(

27、美)Richard&Field=2 t _blank (美)Richard HYPERLINK /search?channel=search&sw=Blum&Field=2 t _blank Blum著 HYPERLINK /search?channel=search&sw=;马朝晖&Field=2 t _blank ,马朝晖等译.汇编语言程序设计M 北京市:机械工业出版社.11杜华.任意波形发生器及应用J.国外电子测量技术.2005.1:38-40.12 程全.基于AT89C52实现的多种波形发生器的设计J.2005.22(5):57-58.13 胡鸿豪,李世红.基于单片机和DDS的信号发生

28、器设J.设计参考.2006(12)14 徐建军.MCS-51系列单片机应用及接口技术M.人民邮电出版社.2003.15 高峰.单片机应用系统设计及实用设计J.北京:机械工业出版社.2004年:96-100.16江思敏,陈明. Protel电路设计教程M. 北京:清华大学出版社.附录1 程序源程序;*;课程设计题目:波形发生器设计;实 现 功 能:能产生正弦波,三角波,锯齿波,方波; 可通过按键能对各波形的切换,频率为:100HZ;按键查询方式;*;*;对按键进行设定;*KEY1EQUP1.0KEY2EQUP1.1KEY3EQUP1.2KEY4EQUP1.3ORG0000HLJMPMAINORG

29、0030HMAIN:MOVSP,#60H;设置堆栈区;*;按下KEY1生成锯齿波程序;*B1:MOVA,#00HLP1:CLRP1.4SETBP1.5SETBP1.6SETBP1.7MOVDPTR,#2FFFH;对MOVXDPTR,ALCALLDELYB1CJNEA,#0FFH,ADD1JNBKEY2,B2JNBKEY3,B3JBKEY4,D0LJMPB4D0:SJMPB1ADD1:INCA;SJMPLP1;*;按下KEY2生成三角波程序;*B2:MOVA,#00HUP1:CLRP1.5SETBP1.4SETBP1.6SETBP1.7MOVDPTR,#2FFFHMOVXDPTR,ALCALLD

30、ELYB2INCAJNZUP1DOWN1:DECAMOVXDPTR, ALCALLDELYB2JNZDOWN1JNBKEY1,B1JNBKEY3,B3JBKEY4,C0LJMPB4C0:SJMPUP1;*;KEY3按下生成正弦波;*B3:MOVR1,#00HLOOP1:CLRP1.6SETBP1.5SETBP1.4SETBP1.7MOVA,R1MOVDPTR,#SETTABMOVCA,A+DPTRMOVDPTR,#2FFFHMOVXDPTR,ALCALLDELYB3INCR1JNBKEY1,B1JNBKEY2,B2JBKEY4,E0LJMPB4E0:AJMPLOOP1SETTAB: ;正弦表格

31、DB 80H,83H,86H,89H,8DH,90H,93H,96HDB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8HDB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9HDB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5HDB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDHDB 0FDH,0FEH,

32、0FFH,0FFH,0FFH, 0FFH,0FFH,0FFHDB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH,0FDHDB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6HDB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAHDB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAHDB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7HDB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1HDB 0AEH,0ABH

33、,0A8H,0A5H,0A2H, 9FH, 9CH, 99HDB 96H, 93H, 90H, 8DH, 89H, 86H, 83H, 80HDB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69HDB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51HDB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AHDB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27HDB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16HDB 15H, 13H, 11H, 10H, 0

34、EH, 0DH, 0BH, 0AHDB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02HDB 02H, 01H, 00H, 00H, 00H, 00H, 00H, 00HDB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02HDB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09HDB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15HDB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25HDB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H,

35、 38HDB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EHDB 51H, 55H, 57H, 5AH, 5DH, 60H, 63H, 66HDB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80HRET;*;按下KEY4生成方波;*B4:MOVA,#00HLP2:CLRP1.7SETBP1.4SETBP1.5SETBP1.6MOVDPTR,#2FFFHMOVXDPTR,ALCALLDELYB4MOVA,#0FFHMOVXDPTR,ALCALLDELYB4JBKEY1,J0LJMPB1J0:JBKEY2,J1LJMPB2J1:JBKEY3

36、,J2LJMPB3J2:LJMPB4;*;下面为延时程序的编写;*;延时26usDELYB1: MOV R3,#01HDL0: MOV R2,#0AH DJNZ R2,$ DJNZ R3,DL0 RET;延时10usDELYB2:MOV R5,#01HDL1: MOV R4,#02H DJNZ R4,$ DJNZ R5,DL0RET;延时17usDELYB3: MOV R5,#07H DJNZ R5,$ RET;延时5msDELYB4: MOV R6,#13HDL3: MOV R5,#82H DJNZ R5,$ DJNZ R6,DL0 RETEND;*;采用中断方式实现波形的切换;*ORG 0

37、000HAJMP MAINORG 0003H;外部中断0入口地址AJMP JUCHIBO;方波,对应P3.2口ORG 0013H;外部中断1入口地址AJMP SANJIAO;三角波对应P3.3口ORG 0030HMAIN: SETB EX0;开外部中断0SETB EX1;开外部中断1MOV IP,#04H;外部中断1优先,P3.3CLR IT0;外部中断0触发方式(电平触发)CLR IT1;外部中断1触发方式(电平触发)SETB EA;开总中断LCALL ZHENGXUANSJMP MAINSANJIAO:MOV DPTR,#2FFFH ; 设置D/A口地址MOV A,#00H; LOOP1:

38、MOVX DPTR,A ; 输出对应于A内容的模拟量,2个机器周期LCALL DELAY3;2个机器周期,应该延时11usINC A;1个机器周期JNZ LOOP1;2个机器周期LOOP2:DEC A ;1个机器周期MOVX DPTR,A;2个机器周期LCALL DELAY3;2个机器周期,延时11usJNZ LOOP2;2个机器周期SJMP LOOP1RETIJUCHIBO: LOOP3:MOVDPTR,#2FFFH;设置D/A口地址 MOV A,#00H LOOP4: MOVXDPTR,A LCALLDELAY1;26us CJNEA,#0FFH,ADD1 SJMPLOOP3ADD1:IN

39、CASJMPLOOP4RETIZHENGXUAN: MOV R3,#00H ;取表格初值LOOP5: MOV A,R3;1个周期MOV DPTR,#SETTAB;2个周期MOVC A,A+DPTR;查表指令,2个周期MOVX DPTR,A; 输出对应于A内容的模拟量,2个周期LCALL DELAY1;2个周期,延时26usINC R3;1个周期SJMP LOOP5;2个周期;相邻两点之间指令占据时间为13us,这个时间应该要计算进去 SETTAB: ;正弦表格DB 80H,83H,86H,89H,8DH,90H,93H,96HDB 99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH

40、,0AEHDB 0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB 0C7H,0CAH,0CCH,0CFH,0D1H, 0D4H,0D6H,0D8HDB 0DAH,0DDH,0DFH,0E1H,0E3H, 0E5H,0E7H,0E9HDB 0EAH,0ECH,0EEH,0EFH,0F1H, 0F2H,0F4H,0F5HDB 0F6H,0F7H,0F8H,0F9H,0FAH, 0FBH,0FCH,0FDHDB 0FDH,0FEH,0FFH,0FFH,0FFH, 0FFH,0FFH,0FFHDB 0FFH,0FFH,0FFH,0FFH,0FFH, 0FFH,0FEH

41、,0FDHDB 0FDH,0FCH,0FBH,0FAH,0F9H, 0F8H,0F7H,0F6HDB 0F5H,0F4H,0F2H,0F1H,0EFH, 0EEH,0ECH,0EAHDB 0E9H,0E7H,0E5H,0E3H,0E1H, 0DEH,0DDH,0DAHDB 0D8H,0D6H,0D4H,0D1H,0CFH, 0CCH,0CAH,0C7HDB 0C5H,0C2H,0BFH,0BCH,0BAH, 0B7H,0B4H,0B1HDB 0AEH,0ABH,0A8H,0A5H,0A2H, 9FH, 9CH, 99HDB 96H, 93H, 90H, 8DH, 89H, 86H, 83H,

42、80HDB 80H, 7CH, 79H, 78H, 72H, 6FH, 6CH, 69HDB 66H, 63H, 60H, 5DH, 5AH, 57H, 55H, 51HDB 4EH, 4CH, 48H, 45H, 43H, 40H, 3DH, 3AHDB 38H, 35H, 33H, 30H, 2EH, 2BH, 29H, 27HDB 25H, 22H, 20H, 1EH, 1CH, 1AH, 18H, 16HDB 15H, 13H, 11H, 10H, 0EH, 0DH, 0BH, 0AHDB 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02HDB 02H, 01

43、H, 00H, 00H, 00H, 00H, 00H, 00HDB 00H, 00H, 00H, 00H, 00H, 00H, 01H, 02HDB 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09HDB 0AH, 0BH, 0DH, 0EH, 10H, 11H, 13H, 15HDB 16H, 18H, 1AH, 1CH, 1EH, 20H, 22H, 25HDB 27H, 29H, 2BH, 2EH, 30H, 33H, 35H, 38HDB 3AH, 3DH, 40H, 43H, 45H, 48H, 4CH, 4EHDB 51H, 55H, 57H, 5AH,

44、5DH, 60H, 63H, 66HDB 69H, 6CH, 6FH, 72H, 76H, 79H, 7CH, 80HRET;延时26usDELAY1: MOV R6,#01HDL0: MOV R5,#0AH DJNZ R5,$ DJNZ R6,DL0RET;延时11usDELAY3: SETB RS0SETB RS1 MOV R7,#01HDL3: MOV R6,#01HDL2: MOV R5,#01H DJNZ R5,$ DJNZ R6,DL2 DJNZ R7,DL3RETEND附录2 整体电路原理图附录3 仿真效果图附录资料:不需要的可以自行删除 C语言图形模式速成第一节 图形模式的初始

45、化Turbo C 提供了非常丰富的图形函数,所有图形函数的原型均在graphics. h 中,本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图形窗口以及图形模式下的文本输出等函数。另外,使用图形函数时要确保有显示器图形驱动程序*.BGI,同时将集成开发环境options/Linker中的Graphics lib选为on,只有这样才能保证正确使用图形函数。 不同的显示器适配器有不同的图形分辨率。即是同一显示器适配器,在不同模式下也有不同分辨率。因此,在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,2

46、5行字符模式),此时所有图形函数均不能工作。设置屏幕为图形模式,可用下列图形初始化函数: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#i

47、nclude graphics.hint main()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

48、);其中gdriver和gmode的意义与上面相同。 自动进行硬件测试后进行图形初始化:#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,

49、 300, 250, 50, 1); /*画一长方体*/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、, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出图形状态的函数closegraph(),其调用格式为:void far closegraph(void);第二节 屏幕颜色的设置和清屏函数对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。在Turbo C中分别用下面两个函数: 设置背景色: void far setbkcolor(int color);设置作图色: void far setcolor(int color);其中color 为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见

51、graphics.h。清除图形屏幕内容但不清除图形背景使用清屏函数,其调用格式如下: 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, 2

52、40, 20+i*10); /*画半径不同的圆*/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

53、far getmaxcolor(void); 返回最高可用的颜色值。第三节 基本画图函数基本图形函数包括画点,线以及其它一些基本图形的函数。本节对这些函数作一全面的介绍。 、画点. 画点函数 void far putpixel(int x, int y, int color); 该函数表示有指定的象元画一个按color 所确定颜色的点。对于颜色color的值可从表3中获得而对x, y是指图形象元的坐标。在图形模式下,是按象元来定义坐标的。对VGA适配器,它的最高分辨率为640 x480,其中640为整个屏幕从左到右所有象元的个数,480为整个屏幕从上到下所有象元的个数。屏幕的左上角坐标为(0,

54、0),右下角坐标为(639, 479),水平方向从左到右为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

55、 x, int y); 移动游标到(x, y)点,不是画点,在移动过程中亦画点。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 d

56、y); 画一条从现行游标(x,y)到按相对增量确定的点(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度(其它有关函数也按此规定,不再重述)

57、。 void ellipse(int x, int 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, i

58、nt far *polypoints); 画一个顶点数为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,1

59、02,300,107,330,100,300,93,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 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有

60、两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论