您的当前位置:首页正文

单片机——波形发生器

2020-12-19 来源:意榕旅游网


河南理工大学

《单片机应用与仿真训练》设计报告

题目

姓 名: 学 号: 专业班级: 电气08-4班 指导老师: 刘 巍 所在学院: 电气工程与自动化学院

2011年6月 日

- 0 -

摘要

波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为方波,三角波,梯形波,正弦波等波形。

本系统是基于AT89C51单片机的数字式低频信号发生器。采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键和8位数码管等。通过按键控制可产生方波、三角波、正弦波等,同时用数码管指示其对应的频率。其设计简单、性能优好,可用于多种需要低频信号的场所,具有一定的实用性。

各种各样的信号是通信领域的重要组成部分,其中正弦波、三角波和方波等是较为常见的信号。在科学研究及教学实验中常常需要这几种信号的发生装置。为了实验、研究方便,研制一种灵活适用、功能齐全、使用方便的信号源是十分必要的。 本设计使用AT89S51单片机、DAC0832转换芯片以及LM324放大器等元件组成硬件电路,编写产生方波、三角波、锯齿波、梯形波等多种波形程序。通过单片机P1口开关输入所要产生波形的信号,单片机根据输入信号的判断调用相应的子程序产生数字信号波形,从P0输出到DAC0832芯片,运用DA转换技术,将数字信号转换成模拟信号到达LM324中处理并输出最终所需的波形。最后将整个电路在PROTUES和WAVE软件中进行仿真,通过示波器可以直接观测到所需的波形,同时也可以反过来修改程序的参量以实现所需的波形的参数要求。

文中简要介绍了DAC0832数模转换器的结构原理和使用方法,AT89C51的基础理论,以及与设计电路有关的各种芯片。文中着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。信号频率幅度也按要求可调。

本次关于产生不同低频信号的信号源的设计方案,不仅在理论和实践上都能满足实验的要求,而且具有很强的可行性。该信号源的特点是:体积小、价格低廉、性能稳定、实现方便、功能齐全。

关键词:AT89S52 单片机,DAC0832芯片,LM324运算放大器,PROTEUS和WAVE仿真软件等。8位数码管显示

- 1 -

目录

1 波形发生器概述 .............................................................................................................................. - 2 -

1.1波形发生器的发展状况 ........................................................................................................ - 2 - 1.2国内外波形发生器产品比较 ................................................................................................ - 3 - 1.3关于波形发生器认识与设计想法 ........................................................................................ - 4 - 2.系统总体方案及硬件设计 .............................................................................................................. - 5 -

2.1 MCS-51单片机的内部结构 .................................................................................................. - 6 -

2.1.1内部结构概述 ............................................................................................................ - 6 - 2.1.2 CPU结构.................................................................................................................... - 7 - 2.1.3存储器和特殊功能寄存器 ........................................................................................ - 8 - 2.2 P0-P3口结构........................................................................................................................ - 8 - 2.3 时钟电路和复位电路 ........................................................................................................... - 9 -

2.3.1时钟电路.................................................................................................................... - 9 - 2.3.3单片机的复位状态 .................................................................................................... - 9 - 2.4 DAC0832的引脚及功能 ...................................................................................................... - 10 - 2.5 LM324芯片........................................................................................................................ - 12 - 3 软件原理 ........................................................................................................................................ - 13 -

3.1 主流程图 ............................................................................................................................ - 13 - 3.2子程序单元及流程图 .......................................................................................................... - 14 -

3.2.1方波发生子程序流程图 .......................................................................................... - 14 - 3.2.2.三角波子程序及流程图: ..................................................................................... - 14 - 3.2.3.梯形波子程序及流程图 .............................................................................................. 15 3.2.4正弦波子程序及流程图 ............................................................................................... 15

4实验仿真 .............................................................................................................................................. 16

4.1 方波仿真图 ............................................................................................................................. 16 4.2 三角波仿真图.......................................................................................................................... 17 4.3 梯形波波仿真图 .................................................................................................................... 18 4.4 正弦波仿真图.......................................................................................................................... 19 5课程设计体会 ...................................................................................................................................... 20 参考文献 ................................................................................................................................................. 21 附1 源程序代码 .................................................................................................................................. 22 附2 系统原理图 ................................................................................................................................ 26

1 波形发生器概述

在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高。

1.1波形发生器的发展状况

波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。

在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。

在 70 年代后,微处理器的出现,可以利用处理器、A/D/和 D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对 DAC的程序控制,就可以得到各种简单的波形。

90 年代末,出现几种真正高性能、高价格的函数发生器、但是HP公司推出了型号为 HP770S的信号模拟装置系统,它由 HP8770A任意波形数字化和 HP1776A波形发生软件组成。HP8770A实际上也只能产生8 中波形,而且价格昂贵。不久以后,Analogic公司推出了型号为 Data-2020的多波形合成器,Lecroy 公司生产的型

- 2 -

号为9100 的任意波形发生器等。

到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过 GHz 的DDS 芯片,同时也推动了函数波形发生器的发展,2003 年,Agilent的产品 33220A能够产生 17 种波形,最高频率可达到 20M,2005 年的产品N6030A 能够产生高达 500MHz 的频率,采样的频率可达 1.25GHz。由上面的产品可以看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:

(1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成 v=f (t)形式的波形方程的数学表达式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如Visual Basic ,Visual C 等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。

(2)与VXI资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台式仪器更为方便。

(3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。

1.2国内外波形发生器产品比较

早在 1978 年,由美国 Wavetek 公司和日本东亚电波工业公司公布了最高取样频率为 5MHz ,可以形成 256 点(存储长度)波形数据,垂直分辨率为8bit,主要用于振动、医疗、材料等领域的第一代高性能信号源,经过将近30年的发展,伴随着电子元器件、电路、及生产设备的高速化、高集成化,波形发生器的性能有了飞速的提高。变得操作越来越简单而输出波形的能力越来越强。波形操作方法的好坏,是由

- 3 -

波形发生器控制软件质量保证的,编辑功能增加的越多,波形形成的操作性越好。 1.3关于波形发生器认识与设计想法

在日常的工作和学习中,波形发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。目前使用波形发生器大部分是利用分立元件组成的起体积大,可靠性差,准确度低。目前我们实验室用的较多的波形发生器主要有两种:低频正弦波发生器和通用多波形发生器,前者只能产生正弦波,调节范围不大,但是信号稳定,失真度底,主要用在对波形有很高的要求的实验中;后者能产生正弦波、方波和三角波,也有的能产生三种以上波形。这两种波形发生器都比较昂贵,而在我们很多的实验中有的要求产生更多的波形种类,有很多对于波形的要求不是很高,有的只是演示一下,在本课题中将这两方面的缺点结合起来加以改进,最大限度地利用单片机资源。

本次课程设计将以AT89S51 单片机为核心,采用AD/DA 转换接口技术构成的波形发生器可产生方波、三角波、锯齿波、梯形波等多种波形,波形的周期可以用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、价格低廉、性能优越等优点。在本设计的基础上,加上开关键盘控制和LED显示,则可开关键盘输入选定所需要的波形,并用相应的LED显示。利用AT89S51单片机产生方波、锯齿波、三角波及梯形波,并可以在不同的波形之间任意切换,并可以根据实际情况的需要在波形存储器中写入不同的波形,可以随时添加,能满足一般的实验及演示的需要,并且成本很低,操作简洁方便。

- 4 -

2.系统总体方案及硬件设计

依据应用场合.需要实现的波形种类,波形发生器的具体指标要求会有所不同。依据不同的设计要求选取不同的设计方案。通常,波形发生器需要实现的波形有正弦波、方波、三角波和锯齿波。有些场合可能还需要任意波形的产生。各种波形共有的指标有:波形的频率、幅度要求,频率稳定度,准确度等。对于不同波形,具体的指标要求也会有所差异,例如,占空比是脉冲波形特有的指标。波形发生器的设计方案多种多样,大致可以分为三大类:纯硬件设计法、纯软件设计法和软硬件结合设计法。

软硬件结合法软硬件结合的波形发生器设计方法同时兼具软硬件设计的优势:既具有纯硬件设计的快速、高性能,同时又具有软件控制的灵活性、智能性。如以单片机和单片集成函数发生器为核心(如图2.1)。辅以键盘控制、液晶显示等电路,设计出智能型函数波形发生器,采用软硬件结合的方法可以实现功能较全、性能更优的波形发生器,同时还可以扩展波形发生器的功能,比如通过软件编程控制实现波形的存储、运算、打印等功能,采用USB接口设计。使波形发生器具有远程通信功能等。目前,实验、科研和工业生产中使用的信号源大多采用此方法来实现。

复位键 DAC0832 AT89C51单片机 键盘 数码管显示

图 2.1软硬件结合的波形发生器

波形的产生是通过AT89S52单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。

AT89S52单片机的最小系统有三种联接方式。一种是两级缓冲器型,即输入数据经过两级缓冲器型,即输入数据经过两级缓冲器后,送D/A转换电路。第二种是单级缓冲器型,输入数据经输入寄存器直接送入DAC寄存器,然后送D/A转换电路。第三

- 5 -

种是两个缓冲器直通,输入数据直接送D/A转换电路进行转换。本电路仿真的总图如下:

图3.1 系统电路图

2.1 MCS-51单片机的内部结构 2.1.1内部结构概述

典型的MCS-51单片机芯片集成了以下几个基本组成部分。 1 一个8位的CPU

2 128B或256B单元内数据存储器(RAM) 3 4KB或8KB片内程序存储器(ROM或EPROM) 4 4个8位并行I/O接口P0~P3。 5 两个定时/计数器。

6 5个中断源的中断管理控制系统。

7 一个全双工串行I/O口UART(通用异步接收、发送器) 8 一个片内振荡器和时钟产生电路。

- 6 -

图3.2 单片机引脚

2.1.2 CPU结构

CPU 是单片机的核心部件。它由运算器和控制器等部件组成。 1. 运算器

运算器以完成二进制的算术/逻辑运算部件ALU为核心。它可以对半字节(4)、单字节等数据进行操作。例如,能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算,完成与、或、异或、求反、循环等逻操作,操作结果的状态信息送至状态寄存器。

运算器还包含有一个布尔处理器,用以处理位操作。它以进位标志位C为累加器,可执行置位、复位、取反、位判断转移,可在进位标志位与其他可位寻址的位之间进行位数据传诵等操作,还可以完成进位标志位与其他可位寻址的位之间进行逻辑与、或操作。

2.程序计数器PC

PC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,PC有自动加1功能,即完成了一条指令的执行后,其内容自动加1。

3.指令寄存器

指令寄存器用于存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送如指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。

- 7 -

2.1.3存储器和特殊功能寄存器

1.存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。

2.特殊功能寄存器

特殊功能寄存器(SFR)的地址范围为80H~FFH。在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带*号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0~P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及。 2.2 P0-P3口结构

P0口功能:P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7—P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7—P0.0在CPU访问片外存储器时用于传送片外存储器de低8位地址,然后传送CPU对片外存储器的读写

P1口 功能:P1口的功能和P0口de第一功能相同,仅用于传递I/O输入/输出数据。

P2口的功能:2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。它的第二功能和P0口引脚的第二功能相配合,作为地址总线用于输出片外存储器的高8位地址。

P3口功能:P3口有两个功能:第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。

P3.0—RXD串行数据接收口

P3.1—TXD串行数据发送口 P3.2—INT0外中断0输入 P3.3—INT1外中断1输入 P3.4—T0计数器0计数输入 P3.5—T1计数器1计数输入 P3.6—WR外部RAM写选通信号 P3.7—RD外部RAM读选通信号

- 8 -

2.3 时钟电路和复位电路

单片机的时钟信号用来提供单片机内各种微操作的时间基准;复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。

2.3.1时钟电路

单片机的时钟信号通常用两种电路形式得到:内部振荡和外部振荡方式。

图3.3 时钟部分电路图

在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷谐振荡器,构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自积振荡,并产生振荡时钟脉冲。晶振通常选用6MHZ、12MHZ、或24MHZ。 2.3.2单片机的时序单位

振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。

状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此一个状态周期包含2个振荡周期。

机器周期:1个机器周期由6个状态周期12个振荡周期组成,是计算机执行一种基本操作的时间单位。

指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依据指令不同而不同.

2.3.3单片机的复位状态

当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,根据应用的要求,复位操作通常有两种基本形式:上电复位和上电或开关复位。上电复位要求接通电源后,自动实现复位操作。上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。上电后,由于电容C3的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。

- 9 -

图3.4 复位电路

单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。51单片机在系统复位时,将其138DI7VREF14内部的一些重要寄存器设置为特定的值,至于内部RAM内部的数据则不变。 DI68位DAC寄存器8位输入寄存器8位DAC转换器DI52.4 DAC083216的引脚及功能 15IOUT111LE1用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制AGND3电路构成。 19HLE2 .DAC0832的主要特性参数如下: 20VCC DAC0832芯片的原理:DAC0832是双列直插式8位D/A转换器。能完成数字10分量输入到模拟量(电流)输出的转换。图1为DAC0832的引脚图。其主要参数如下:1DGNDCS辨率为82位,转换时间为1μs,满量程误差为±1LSB,参考电压为(+10~-10)V,供WR1电电源为(+5WR2~+15)V,逻辑电平输入与TTL兼容。在DAC0832中有两级锁存器,第一1817XFELR级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。 DAC0832内部结构和引脚图LE2DI4412DI3OUT21 .DAC0832芯片: 5DI2DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA69芯片DI1RBF7以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应DI0

3 .DAC0832结构:

D0~D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);

ILE:数据锁存允许控制信号输入线,高电平有效; CS:片选信号输入线(选通数据锁存器),低电平有效; WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;

XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;

WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。

- 10 -

IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;

IOUT2:电流输出端2,其值与IOUT1值之和为一常数;

Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度; Vcc:电源输入端,Vcc的范围为+5V~+15V;

VREF:基准电压输入线,VREF的范围为-10V~+10V; AGND:模拟信号地 DGND:数字信号地

4.DAC0832工作方式: (1)直通方式 :当ILE接高电平,CS、WR1、WR2和XFER都接数字地时,DAC处于直通方式,8位数字量一旦到达DI7~DI0输入端,就立即加到8位D/A转换器,被转换成模拟量。例如在构成波形发生器的场合,就要用到这种方式,即把要产生基本波形的数据存在ROM中,连续取出送到DAC去转换成电压信号。

(2)单缓冲方式 :只要把两个寄存器中的任何一个接成直通方式,而用另一个锁存器数据,DAC就可处于单缓冲工作方式。一般的做法是将WR2和XFER都接地,使DAC寄存器处于直通方式,另外把ILE接高电平,CS接端口地址译码信号,WR1接CPU的WR信号,这样就可以通过一条MOVX指令,选中该端口,使CS和WR1有效,启动D/A转换。本设计就是采用单缓冲方式控制DAC0832

电路连接如下所示:

地址译码输出CSDI0总线DI7WR1- 11 -

(3)双缓冲方式 :主要在以下两种情况下需要用双缓冲方式的D/A转换。在需要同步进行D/A转换的多路DAC系统中,采用双缓冲方式,可以在不同的时刻把要转换的数据打入各DAC的输入寄存器,然后由一个转换命令同时启动多个DAC转换。先用3条输出指令选择3个端口,分别将数据写入各DAC的输入寄存器,当数据准备就绪后,再执行一次写操作,使XFER变低同时选通3个D/A的DAC寄存器,实现同步转换。

2.5 LM324芯片

LM324是四运放集成电路,它采用14脚双列直插塑料封装,外形如图所示。它的内部包含四组形式完全相同的运算放大器,

除电源共用外,四组运放相互独立。每一组运算放大器可用图1所示的符号来表示,它有5个引出脚,其中“+”、“-”为两 个信号输入端,“V+”、“V-”为正、负电源端,“Vo”为输出端。两个信号输入端中,Vi-(-)为反相输入端,表示运放

输出端Vo的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同。

LM324的引脚排列见图2

图 1 图 2

LM324的特点:1.短跑保护输出 2.真差动输入级

3.可单电源工作:3V-32V 4.低偏置电流:最大100nA(LM324A) 5.每封装含四个运算放大器。 6.具有内部补偿的功能。 7.共模范围扩展到负电源 8.行业标准的引脚排列 9.输入端具有静电保护功能

由于LM324四运放电路具有电源电压范围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。

- 12 -

3 软件原理

系统软件由主程序和产生波形的子程序组成,软件设计主要是产生各种波形的子程序的编程,通过编程可得到各种波形。周期的改变可采用插入延时子程序的方法来实现。主程序和几种常用波形子程序的流程图如图所示。 3.1 主流程图

束 结

图4.1 主程序流程图

波形转换否 调波形发生子程 驱动相应的数码 波形判别 读取波形选择开关状态 开 始 初 始 化 信号的产生:

利用8位D/A转换器DAC0832,可以将8位数字量转换成模拟量输出。数字量输入的范围为0~255,对应的模拟量输出的范围在VREF-到VREF+之间。根据这一特性,可以利用单片机的并行口输出的数字量,产生常用的波形。例如,要产生幅度为0~5V的锯齿波,只要将DAC0832的VREF-接地,VREF+接+5V,单片机的并行口首先输出00H,再输出01H、02H,直到输出FFH,再输出00H,依此循环,这样在图4.2所示的Vout端就可以看到在0到5V之间变化的锯齿波。

- 13 -

3.2子程序单元及流程图 3.2.1方波发生子程序流程图

如果a5=245 如果a5=0 开始 给P0赋值b2 b2=255 b2=0 a5自动减1 a5自动加1 3.2.2.三角波子程序及流程图:

开始 给P0赋值ha 如果ha=200 如果ha=0 a1=0 a1=1 ha自动减1 ha自动加1

- 14 -

3.2.3.梯形波子程序及流程图 开始 给P0赋值b1 如果b1等于254 如果b1等于0 a2=0;a3=1;a4=254;b1自动减1 a2=1;a3=1 如果a2等于0且a3等于0 如果a2等于0且a3等于0 如果a3等于1 a4自动减1 a4自动减1 a4自动减1 如果a4等于1 a3=0 3.2.4正弦波子程序及流程图

开始 定义变量k 给P0赋值uca_SinaCode[ucCount] 判断ucCount是否为61

ucCount等于0

15 ucCount自动加1 for(k=0;k<5;k++)

4实验仿真

4.1 方波仿真图

方波程序如下: void time3() {

P0=b2; if(a5==245) {

b2=255; }

if(a5==0) {

b2=0; }

if(b2==255) a5--; if(b2==0) a5++; }

// 方波

16

4.2 三角波仿真图

三角波程序如下:

void time1() //三角波形 {

P0=ha;

if(ha==200) a1=0; if(ha==0) a1=1; if(a1==0) ha--; if(a1==1) ha++; }

17

4.3 梯形波波仿真图

梯形波程序如下:

void time2() {

// 梯形波形

P0=b1;

if(b1==254)

{a2=0;a3=1;a4=254;b1--; }

if(b1==0) {a2=1;a3=1;} if(a3==1) {

a4--;

if(a4==1) a3=0; }

if((a2==0)&(a3==0)) b1--;

if((a2==1)&(a3==0)) b1++; }

18

4.4 正弦波仿真图

正弦程序如下: void time0() {

//正弦波形

unsigned int k;

P0=uca_SinaCode[ucCount]; if(ucCount==61) ucCount=0; else

ucCount++;

for(k=0;k<5;k++); }

19

5课程设计体会

经过将近三周的单片机课程设计,终于完成了我们的波形发生器的设计,基本达到设计要求,从心底里来说,还是很高兴的,毕竟这次设计把实物都做了出来。但高兴之余不得不深思呀!

在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多。对于单片机设计,其硬件电路是比较简单的,主要是解决程序设计的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟悉。因此可以说单片机的设计是软件和硬件的结合,二者是密不可分的。

通过这次单片的单片机课程设计,让我真正的认识到课程设计的重要性,不但可以通过具体课题的设计工作学习到相关的新知识,而且可以课堂上所学习的知识用于实践。当在实际运用单片机的时候,才发现原来自己所学的知识并不熟悉,运用起来更是生疏,没有实现学以致用的目的,而且还发现了原来很多存在的疏忽,如简单的指令一直都用错了。这次波形发生器的课程设计基本运用了单片机学习中的很多知识,如单片机的结构及基本原理,指令系统和C语言程序设计,DA转换接口技术等等。电路设计和程序设计都 参考了教材上的实例,但是在实际仿真的过程中却发现有些不妥只处,不能实现预期的结果,这样也提醒了自己书本不一定都是对的,所学的知识必须要充分理解再加以灵活的运用,更要注意具体问题具体分析解决。此外,通过实际的仿真操作,更加熟悉了PROTEUS和WAVE软件的操作流程,为以后的更好地学习和运用创造了条件。

要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。完成这次设计后,我在书本理论知识的基础上又有了更深层次的理解。

同时在本次设计的过程中,我还学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节。

最后还要在此感谢指导老师们和我的组员们,他们在整个过程中都给予了我充分的帮助与支持。

20

参考文献

[1] 余发山、王福忠. 单片机原理及应用技术. 中国矿业大学出版社.2008年6月第1版 [2] 杨凌霄. 微型计算机原理与应用,中国矿业大学出版社.2008年8月第一版 [3] 康华光. 电子技术基础(数字部分),高等教育出版社.第五版 [4] 邓红. 单片机实验与应用设计教程 出版日期:2004年05月第1版 [5] 张洪润,易涛.单片机应用技术教程[M].清华大学出版社.第三版 [6] 以及其他的网上资源

21

附1 源程序代码

#include #include sbit P3_0=P3^0; sbit INT_0=P3^2;

unsigned char uca_SinaCode[]=

{0x7F,0x8C,0x9A,0xA6,0xB3,0xBF,0xCA,0xD4,0xDE,0xE6,0xED,0xF3,0xF8,0xFC,0xFE,0xFE ,0xFE,0xFC,0xF8,0xF3,0xED,0xE6,0xDE,0xD4,0xCA,0xBF,0xB3,0xA6,0x9A,0x8C,0x7F,0x72 ,0x64,0x58,0x4B,0x3F,0x34,0x2A,0x20,0x18,0x11,0x0B,0x06,0x02,0x00,0x00,0x00,0x02 ,0x06,0x0B,0x11,0x18,0x20,0x2A,0x34,0x3F,0x4B,0x58,0x64,0x72,0x7F};

unsigned char displayseg7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//七段数码管 unsigned char ucCount=0; unsigned char ha=0,a1=0; unsigned char b1=0,a2=0,a3=0,a4; unsigned char b2=0,a5=0,a6; unsigned char

xianshi[]={0,1,2};

unsigned char bitcode[]={0xF7,0xEF,0xDF}; unsigned char h1; unsigned char butter; unsigned int i,j; unsigned char boxing; unsigned int pin; void time0(); void time1(); void time2(); void time3(); void scan(); void main() {

pin=12; P3_0=0; boxing=0;

//开AD转换器 //波形初始化为0

TMOD=0x01; //设置模式为定时器T0的模式1 (8位自动重装计数初值的计数值)

TH0=0xfc; //设置计数器初值 TL0=0xb0; ET0=1;

//开启定时器T0中断允许

TR0=1;//启动

EA=1; while(1)

22

{

if(boxing==0) P0=0; if(boxing==1)

time3(); if(boxing==2) time1(); if(boxing==3) time2(); if(boxing==4) time0(); if(boxing==5)

{P0=0;boxing=0;} if(pin>999) pin=0; if(pin==0)

pin=999; for(i=0;i}

}

void time0() //正弦波形{

unsigned int k; P0=uca_SinaCode[ucCount]; if(ucCount==61) ucCount=0;

else

ucCount++; for(k=0;k<5;k++);

}

void time1() //三角波形

{ P0=ha; if(ha==200) a1=0; if(ha==0)

23

a1=1; if(a1==0) ha--; if(a1==1) ha++; }

void time2() // 梯形波形

{ P0=b1; if(b1==254)

{a2=0;a3=1;a4=254;b1--; } if(b1==0) {a2=1;a3=1;} if(a3==1) { a4--; if(a4==1) a3=0;

}

if((a2==0)&(a3==0)) b1--;

if((a2==1)&(a3==0)) b1++; }

void time3() // 方波

{ P0=b2; if(a5==245) { b2=255; }

if(a5==0)

{ b2=0; }

if(b2==255) a5--;

24

if(b2==0) a5++; }

void key() interrupt 1 {

TH0=0xfc; //设置计数器初值 //按键中断更改

TL0=0xb0; P1=0xff; butter=P1; if(butter!=0xff) {

switch (butter) {case 0xfe

: boxing++;break;

case 0xfd: pin=pin+1;break; case 0xfb: pin=pin-1;break; default :; } }

while(butter!=0xff) { P1=0xff; butter=P1; } }

25

附2 系统原理图

26

因篇幅问题不能全部显示,请点此查看更多更全内容