您的当前位置:首页正文

基于单片机的函数信号发生器课程设计(毕业设计)完整版.

来源:个人技术集锦


综合实验课程报告

课题名称 基于单片机的函数信号发生器

摘 要

本文介绍一种用AT89C51单片机构成的波形发生器,可产生方波、三角波、正弦波、锯齿波等多种波形,波形的周期可用程序改变,并可根据需要选择单极性输出或双极性输出,具有线路简单、结构紧凑、性能优越等特点。文章给出了源代码,通过仿真测试,其性能指标达到了设计要求。

关键词:单片机;DAC ;信号发生器 目 录

摘 要 ............................................................... 目 录 ...............................................................

第一章 绪论 .......................................................... 1.1单片机概述 ...................................................... 1.2信号发生器的分类 ................................................ 1.3研究内容 ........................................................ 第二章 方案的设计与选择 .............................................. 2.1方案的比较 ...................................................... 2.2设计原理 ........................................................ 2.3设计思想 ........................................................ 2.4设计功能 ........................................................

第三章 硬件设计 ...................................................... 3.1硬件原理框图 .................................................... 3.2主控电路 ........................................................ 3.3数、模转换电路 .................................................. 3.4按键接口电路 .................................................... 3.5时钟电路 ........................................................ 3.6显示电路 ........................................................ 第四章 软件设计 ...................................................... 4.1程序流程图 ...................................................... 第五章 总结与展望 .................................................... 致 谢 ............................................................... 参考文献 ............................................................. 附录1电路原理

图 ..................................................... 附录2 源程序 . ........................................................ 附录 3 器件清单......................................................

第一章 绪论 1.1单片机概述

随着大规模集成电路技术的发展,中央处理器(CPU、随机存取存储器(RAM、只读存储器(ROM、(I/O接口、定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机。单片机具有体积小、成本低,性能稳定、使用寿命长等特点。其最明显的优势就是可以嵌入到各种仪器、设备中,这是其他计算机和网络都无法做到的[9,10]。

1.2信号发生器的分类

信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。

1.3 研究内容

本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、锯齿波、矩形波、正弦波的发生。根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中。在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。

第二章 方案的设计与选择 2.1 方案的比较

方案一:采用单片函数发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。

方案二:采用锁相式频率合成器,利用锁相环,将压控振荡器(VCO )的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。

方案三:采用单片机编程的方法来实现。该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。

鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。

2.2 设计原理

数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器CPU 、随机存取存储器RAM 、只读存储器ROM 、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示。

图2.1 信号发生器原理框图 89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。

2.3 设计思想

(1)利用单片机产生方波、正弦波、三角波和锯齿波等信号波形,信号的频率和幅度可变。

(2)将一个周期的信号分离成256个点(按X 轴等分),每两点之间的时间间隔为∆T ,用单片机的定时器产生,其表示式为:∆T=T/256。

如果单片机的晶振为12MHz ,采用定时器方式0,则定时器的初值为: X=213—∆T/Tmec (2.1 定时时间常数为:

TL =(8192—∆T )/MOD256 (2.2 TH=(8192∆T/256 (2.3 MOD32表示除32取余数

(3)正弦波的模拟信号是D/A转换器的模拟量输出,其计算公式为: Y=(A/2sin∆t )+A/2 (其中A=VREF (2.4 (2.5 ∆ t=N ∆

T (N=1~256

那么对应着存放在计算机里的这一点的数据为: Di =(Y ⨯255 /A = (sin∆t +1 ⨯255

2 (2.6)

(4)一个周期被分离成256个点,对应的四种波形的256个数据存放在以TAB

1--TAB4为起始地址的存储器中。 2.4 设计功能

(1)本方案利用8155扩展8个独立式按键,6个LED 显示器。其中“S 0”号键代表方波输出,“S 1”号键代表正弦波输出,“S 2”号键代表三角波输出,“S3” 号键代表锯齿波输出。

(2)“S 4”号键为10Hz 的频率信号,“S 5”号键为100Hz 的频率信号,“S 6”号键为500Hz 的频率信号,“S 7”号键为1KHz 的频率信号,6个LED 显示器输出信号的频率值,选用共阳极LED 。

(3)利用两片DAC0832实现幅度可调的信号源,(其中一片用来调节幅度,另外一片用来实现信号源的输出)。

(4)频率范围:10~1000Hz。 (5)输出波形幅度为0~5V 。 第三章 硬件设计 3.1 硬件原理框图

硬件原理方框图如图3.1所示。 图3.1 硬件原理框图 3.2 主控电路

AT89C51单处机内部设置两个16位可编程的定时器/计数器T0和T1,它们具有计数器方式和定时器方式两种工作方式及4种工作模式。在波形发生器中,将其作定时器使用,用它来精确地确定波形的两个采样点输出之间的延迟时间。模式1采用的是16位计数器,当T0或T1被允许计数后,从初值开始加计数,最高位产生溢出时向CPU 请求中断。

中断系统是使处理器具有对外界异步事件的处理能力而设置的。当中央处理器CPU 正在处理某件事的时候外界发生了紧急事件,要求CPU 暂停当前的工作,转而去处理这个紧急事件。在波形发生器中,只用到片内定时器/计数器溢出时产生的中断请求,即是在AT89C51输出一个波形采样点信号后,接着启动定时器,在定时器未产生中断之前,AT89C51等待,直到定时器计时结束,产生中断请求,AT89C51响应中断,接着输出下一个采样点信号,如此循环产生所需要的信号波形[6]。

如图3.2所示,AT89C51从P0口接收来自键盘的信号,并通过P2口输出一些控制信号,将其输入到8155的信号控制端,用于控制其信号的输入、输出。如果有键按下,则在读控制端会产生一个读信号,使单片机读入信号。如果有信号输出,则在写控制端产生一个写信号,并将所要输出的信号通过8155的PB 口输出,并在数码管上显示出来。

图3.2 主控电路图 3.3 数/模转换电路

由于单片机产生的是数字信号,要想得到所需要的波形,就要把数字信号转换成模拟信号,所以该文选用价格低廉、接口简单、转换控制容易并具有8位分辨率的数模转换器DAC0832。DAC0832主要由8位输入寄存器、8位DAC 寄存器、8位D/A转换器以及输入控制电路四部分组成。但实际上,DAC0832输出的电量也不是真正能连续可调,而是以其绝对分辨率为单位增减,是准模拟量的输出。DAC0832是电流型输出,在应用时外接运放使之成为电压型输出。

由图3.3可知,DAC0832的片选地址为7FFFH ,当P25有效时,若P0口向其送的数据为00H , 则U1 的输出电压为0V ; 若P0口向其送的数据为0FFH 时, 则U1

++

=0得:的输出电压为-5V . 故当U1 输出电压为0V 时,由公式V out R 1R 2R 3

= - 5V. 当输出电压为- 5V时,可得:V out = +5V,所以输出波形的电压变化范围为-

U 1U 2U 3

5V ~+ 5V. 故可推得,当P0所送数据为80H 时,V out 为0V [4]。 图3.3 数模转换电路 3.4 按键接口电路

图3.4为键盘接口电路的原理图,图中键盘和8155的PA 口相连,AT89C51的P0口和8155的D0口相连,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。其中“S0”号键代表方波输出,“S 1”号键代表正弦波输出,“S 2”号键代表三角波输出。 “S 3”号键代表锯齿波输出,“S 4”号键为10Hz 的频率信号,“S 5”号键为100Hz 的频率信号,“S 6”号键为500Hz 的频率信号,“S 7”号键为1KHz 的频率信号[3]。

图3.4 按键接口 3.5 时钟电路

8051单片机有两个引脚(XTAL1,XTAL2)用于外接石英晶体和微调电容,从而构成时钟电路,其电路图如图3.5所示。

电容C1、C2对振荡频率有稳定作用,其容量的选择为30pf ,振荡器选择频率为12MHz 的石英晶体。由于频率较大时,三角波、正弦波、锯齿波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形[9]。

图3.5 时钟电路 3.6 显示电路

显示电路是用来显示波形信号的频率,使得整个系统更加合理,从经济的角度出发,所以显示器件采用LED 数码管显示器。而且LED 数码管是采用共阳极接法,当主控端口输出一个低电平后,与其相对应的数码管即变亮,显示所需数据。其器件模型如图3.6所示。

图3.6 LED 显示电路

166、启动一个线程是用run(还是start(?

答:启动一个线程是调用start(方法,使线程所代表的虚拟处理机处于可运行状

态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run(方法可以产生必须退出的标志来停止一个线程。

167、接口是否可继承接口? 抽象类是否可实现(implements接口? 抽象类是否可继承实体类(concrete class?

答:接口可以继承接口。抽象类可以实现(implements接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

168、构造器Constructor是否可被override?

答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

169、是否可以继承String类?

答:String类是final类故不可以继承。

170、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

答:会执行,在return前执行。

171、两个对象值相同(x.equals(y == true,但却可有不同的hash code,这句话对不对?

答:不对,有相同的hash code。

172、swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

答:switch(expr1)中,expr1是一个整数表达式。因此传递

给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

173、当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

174、abstract的method是否可同时是static,是否可同时是native,是否可同

时是synchronized?

答:都不能。

175、List, Set, Map是否继承自Collection接口?

答:List,Set是Map不是

176、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals(? 它们有何区别?

答:Set里的元素是不能重复的,那么用iterator(方法来区分重复与否。equals(是判读两个Set是否相等。

equals(和==方法决定引用值是否指向同一对象equals(在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。

177、数组有没有length(这个方法? String有没有length(这个方法?

答:数组没有length(这个方法,有length的属性。String有有length(这个方法。

ava.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

178、String Stringbuffer和StringBuilder的区别?

要谈它们的区别,首先先说说它们之间的相同的地方,首先他们都是存储字符的集合,他们的最大长度是2G,他们在存储字符串数据结构都采用了字符数组,也就是说他们内部都定义了一个字符型数组,用于存储字符串的值。 它们的不同点有以下几点:

1) 字符型数组固定长度和可变长度的区别:

String型内部定义的数组是固定长度的,一旦使用者给字符串数组对象赋值后,它内部的字符型数组的长度就固定了;

StringBuff型数组内部数组也是固定长度的,但是在运行状态下,它能够自己动态的扩充字符型数组的容量。 2) 效率的区别:

String型数组在所有自身操作,都会比StringBuff效率高。但是如果做多字符串合并的操作时,StringBuff会比String效率高很多。

其原因就是Stirng每次都是重新创建新的String对象然后进行全字符串拷贝。而StringBuff在没有达到他的容量极限时,它之后进行部分字符串拷贝工作。

例如:String str1=”1234”; Str1=str1+”5678”;

它要作的工作是,首先重新创建一个str1对象,它的长度是8,然后

把”1234”拷贝到新的str1中,然后再把”5678”拷贝到新的str1中,这种对于大字符串操作时效率是非常的底,同时还会出现内存溢出的情况,应为原来的str1垃圾回收器可能没有及时的回收进行内存释放。 例如:StringBuff buff1 Buff1.append(“11111”;

它的操作是,首先判断内部字符型数组对象value的容量是否能装载要合并的字符串,如果能直接将新的字符串“11111”,直接拷贝过来,如果不能也要创建一个新的字符型数组对象,这个字符型数组对象是原来字符型数组对象value长度的两倍,然后把value内容拷贝过来,然后把新的字符串拷贝过来,最后把这个扩容的字符型数组对象赋值给value。

在大容量字符串数组操作时,这个要比String效率高很多。

3)线程安全的。在多线程环境下,对StringBuff对象的操作都是线程安全的,也就是说每一时刻只有一个线程能够处理StringBuff对象。

179、你在写复杂web界面的时候遇到的最大困难是哪些方面

其实,复杂页面最大的困难并非如何画出此界面,而是如何让此界面清晰有条理.我们做页面,并非仅显示数据,而是要准确/清晰地显示数据,想想看,如果用户要在此页面中查找一个数据,却杂乱无章,难以查看,你说用户会满意吗?

180、NET里面的datagrid翻页大多是先把数据读全部取到dataset里面,但是遇到10W条数据以上,这样的翻页事件开销会很大,页面执行起来反映很慢,你有什么好方法解决?

在数据量大的时候,有两个解决办法

1.使用存储过程.并且,并非因为存储过程比较快的原因.由于在数据库内部的存储过程,能够实现一些特殊的功能,比如说,可以直接根据当前的排序结果,仅仅取需要的几条数据,如此,无论数据是多少,它仅仅取需要的几条.

2.在实际的操作中,取出的数据,并非你有10万条,它就会把10万条全部取出来,而是受限于服务器的缓存,其实一次一般仅取1000条左右的记录,无论你数据多少,它仅会一次取这么多出来.所以,配合分页控件,再配合.NET提供的加载N条数据的方法,数据量大的情况下,不见得就会慢.

据我测试,真正慢的,是在取数据总共多少条这个步骤上.此操作在数据少时,没有影响,但在百万条记录以上时,求取数据总数,耗时就会大量增加.所以,大数据量条件下,即不应再显示\"共几条/当前第几条\"这样的信息.

181、权限控制方面问题:

从面向对象的角度讲,如果一个程序中,没有应用角色及角色组的话,那么这个程序是不合格的.一般来说,权限是由权限及流程角色组合而来的,如果仅有权限而没有角色,那么这个控制不灵活;如果仅有角色没有权限,那么这个控制不细致.

当然,用SESSION肯定是要的,但这个SESSION,应当只记录当前用户的个人信息,比如他的用户名.在需要判断的时候,根据他的用户名(唯一,至数据库中去取他的权限,或在类中编写权限/角色,根据此用户的用户号及当前模块号,计算当前用户是否对当前页面有操作权限.不过,如果把用户的权限也取出来放在SESSION中的话,这种做法一般仅在很小的网站中使用,稍大一点的系统,基本不允许这么做,而且也做不到

1.重载(Overload 和覆写(override的区别 答:

方法重载:当类包含两个名称相同但签名不同(方法名相同,参数列表不相同的方法时发生方法重载。用方法重载来提供在语义上完成相同而功能不同的方法。

覆写:在类的继承中使用,通过覆写子类方法可以改变父类虚方法的实现。 2.接口与继承的区别?什么时候使用接口,什么时候使用继承?

答: (1) 接口定义一个类型需要实现的方法,属性,索引和事件,包括可能的参数类型和返回值类型,而把具体的实现交由相应的类或结构来做,从而为组件提供多态能力。 (2) 继承常用于在一个现有父类的基础上的功能扩展,往往是我们将几个类中相同的成员提取出来放在父类中实现,然后在各自的子类中加以继承。

(3) 接口可以实现多接口继重,而继承只能实现单继承。

(4) 实现继承可继承父类型的实现,由于接口中没有定义方法的实现,因此必须实现继承后该接口的所有方法。

(5) 为父类型添加方法可能不影响使用继承自该类型实现的用户,而为接口添加方法导致用户必须为新方法添加实现。

(6) 当派生类和基类是is-a的关系是使用\"继承\",典型案例\"苹果 is-a 水果\",存在can-do的关系时使用\"接口\" 3.ado,ado.net的区别

答: 您可以通过将 ADO.NET 的各项功能与 ActiveX 数据对象 (ADO 的特定功能进行比较来理解 ADO.NET 的功能。 数据的内存中表示形式

在 ADO 中,数据的内存中表示形式为记录集。在 ADO.NET 中,它为数据集。它们之间有重要的差异。 表的个数

记录集看起来像单个表。如果记录集将包含来自多个数据库表的数据,则它必须使用 JOIN 查询,将来自各个数据库表的数据组合到单个结果表中。

相反,数据集是一个或多个表的集合。数据集内的表称为数据表;明确地说,它们是 DataTable 对象。如果数据集包含来自多个数据库表的数据,它通常将包含多个 DataTable 对象。即,每个 DataTable 对象通常对应于单个数据库表或视图。这样,数据集可以模仿基础数据库的结构。

数据集通常还包含关系。数据集内的关系类似于数据库中的外键关系,即它使多个表中的行彼此关联。例如,如果数据集包含一个有关投资者的表和另一个有关每个投资者的股票购买情况的表,则数据集可能还包含一个关系来连接投资者表的各个行和购买表的对应行。

由于数据集可以保存多个独立的表并维护有关表之间关系的信息,因此它可以保存比记录集丰富得多的数据结构,包括自关联的表和具有多对多关系的表。 数据导航和游标

在 ADO 中,您使用 ADO MoveNext 方法顺序扫描记录集的行。在 ADO.NET 中,行表示为集合,因此您可以像依次通过任何集合那样依次通过表,或通过序号索引或主键索引访问特定行。DataRelation 对象维护有关主记录和详细资料记录的信息,并提供方法使您可以获取与正在操作的记录相关的记录。例如,从 Investor 表的\"Nate Sun\"的行开始,可以定位到 Purchase 表中描述其购买情况的那组行。

\"游标\"是数据库元素,它控制记录导航、更新数据的能力和其他用户对数据库所做更改的可见性。ADO.NET 不具有固有的游标对象,而是包含提供传统游标功能的数据类。例如,在

ADO.NET DataReader 对象中提供只进、只读游标的功能。有关游标功能的更多信息,请参见

数据访问技术。

第四章 软件设计 4.1 程序流程图

本文中子程序的调用是通过按键的选择来实现,在取得按键相应的键值后,启动计时器和相应的中断服务程序,再直接查询程序中预先设置的数据值,通过转换输出相应的电压,从而形成所需的各种波形。

主程序的流程图如图4.1所示,在程序开始运行之后,首先是对8155进行初始化,之后判断信号频率值,如符合所需的频率,则重置时间常数,并通过显示器显示出来,不符则返回。在中断结束后,还要来判断波形是否符合,如符合,则显示其频率,不符则返回,重新判断。

图4.1 主程序流程图

图4.2为各波形子程序的流程图。如图所示,在中断服务子程序开始后,通过判断来确定各种波形的输出,当判断选择的不是方波后,则转向对正弦波的判断,如此反复。如果选择的是方波,则用查表的方法求出相应的数据,并通过D/A转换

器将数据转换成模拟信号,形成所需波形信号。 图4.2 子程序流程图 12

14

综合实验总结

在 ADO.NET 中,打开连接的时间仅足够执行数据库操作,例如 \"

参考文献

[1] 程全. 基于AT89C52实现的多种波形发生器的设计[J].周口师范学院学报,

2005.22(5:57~58.

[2] 周明德. 微型计算机系统原理及应用[M].北京:清华大学出版社,2002.341~364.

[3] 刘乐善. 微型计算机接口技术及应用[M].北京:北京航空航天大学出版社,2001.258~264.

[4] 童诗白. 模拟电路技术基础[M].北京:高等教育出版社,2000.171~202. [5] 杜华. 任意波形发生器及应用[J].国外电子测量技术,2005.1:38~40. [6] 张友德. 单片微型机原理、应用与实践[M].上海:复旦大学出版社,2004.40~44.

[7] 程朗. 基于8051单片机的双通道波形发生器的设计与实现[J].计算机工程与应

用,2004.8:100~103.

[8] 张永瑞. 电子测量技术基础[M].西安:西安电子科技大学出版社,2006.61~101. [9] 李叶紫. MCS-51单片机应用教程[M].北京:清华大学出版社,2004.232~238.

附录1 电路原理图

附录2 源程序 14

源程序: ORG 0000H AJM MAIN ORG 000BH LJMP TC0 ORG 0030H MAIN :MOV DPTR ,#9FFFH 指向DAC0832(1) MOV A ,70H ADO 中,记录集可以提供不连接的访问,但

判断是否“4”号键,若是则转输出10Hz 信号 判断是否“5”号键,若是则转输出100Hz 信号判断是否“6”号键,若是则转输出500Hz 信号判断是否“7”号键,若是则转输出1KHz 信号 设置6个LED 显示 选通第一位LED 数据 送显示缓冲区首址 指向C 口地址 位选通数据送A 位选通数据送C 口 选通下一位

位选通数据送R2中保存取键值

送LED 显示软件译码表首址 查表求出键值显示的段码

MOV DPTR ,#7F02H 指向B 口地址 MOV @DPTR ,A 段码送显示 LCALL LOOP1 调延时子程序

INC R1 指向下一位显示缓冲区地址 DJNZ R3,GN1 循环显示6个LED RET LOOP1:MOV R4,#08H LOOP :MOV R5,#0A0H DJNZ R5,$ DJNZ R4,LOOP RET

K10H :MOV 30H ,#00H MOV 31H ,#00H MOV 32H ,#00H MOV 33H ,#00H MOV 34H ,#01H MOV 35H ,#00H LCALL LED1 MOV TMOD ,#00H MOV TL0,#15H MOV TH0,#9EH

AJMP PD

K100H :MOV 30H ,#00H MOV 31H ,#00H MOV 32H ,#00H MOV 33H ,#01H MOV 34H ,#00H MOV 35H ,#00H LCALL LED1

MOV TMOD ,#00H 延时子程序 显示10Hz 调显示子程序 显示100Hz 调显示子程序

16

MOV TL0,#08H MOV TH0,#0F6H AJMP PD

K500H :MOV 30H ,#00H 显示500Hz MOV 31H ,#00H MOV 32H ,#00H MOV 33H ,#05H MOV 34H ,#00H

MOV 35H ,#00H LCALL LED1 MOV TMOD ,#00H MOV TL0,#01H MOV TH0,#0FEH AJMP PD

K1K :MOV 30H ,#00H MOV 31H ,#00H MOV 32H ,#01H MOV 33H ,#00H MOV 34H ,#00H MOV 35H ,#00H LCALL LED1 MOV TMOD ,#00H MOV TL0,#01H MOV TH0,#0FFH PD :JNB ACC.0,KE0 JNB ACC.1,KE1 JNB ACC.2,KE2

JNB ACC.3,KE3 LJMP PD

KE0:MOV R7,#00H 调显示子程序 显示1KHz 调显示子程序 判断是否“0”号键按下,若是则转方波输出 判断是否“1”号键按下,若是则转正弦方波输出判断是否“2”号键按下,若是则转三角波输出 判断是否“3”号键按下,若是则转锯齿波输出

17

LCALL LED1 调显示子程序 MOV R6,#00H AJMP GN

KE1:MOV R7,#02H LCALL LED1 调显示子程序 MOV R6,#00H AJMP GN

KE2:MOV R7,#02H LCALL LED1 MOV R6,#00H AJMP GN

KE3:MOV R7,#02H LCALL LED1

MOV R6,#00H GN : SETB TR0 SETB ET0 SETB EA

LOP1:JNB ACC.4,K10H JNB ACC.5,K100H JNB ACC.6,K500H JNB ACC.7,K1K AJMP LOP1

TC0:CJNE R7,#00H,TC1 MOV DPTR ,#TAB1 MOV A ,R6

MOVC A ,@A+DPTR MOV DPTR ,#0AFFFH MOVX @DPTR ,A MOV A ,R6

INC A 调显示子程序 调显示子程序 判断是否“4”号键,若是则转输出10Hz 信号 判断是否“5”号键,若是则转输出100Hz 信号判断是否“6”号键,若是则转输出500Hz 信号判断是否“7”号键,若是则转输出1KHz 信号 发送方波程序 送方波数据表首址 发送数据寄存器 指向DAC0832(2) DAC0832(2)输出

18

MOV R6,A CJNE A ,#32,QL1 MOV R6,#00H AJMP QL1

TC1:CJNE R7,#01H,TC2 发送正弦波程序 MOV DPTR ,#TAB2 送正弦波数据表首址 MOV A ,R6

MOVC A , @A+DPTR MOV DPTR ,#0AFFFH MOVX @DPTR ,A MOV A ,R6 INC A MOV R6,A CJNE A ,#32,QL1 MOV R6,#00H AJMP QL1

TC2:CJNE R7,#02H,QL1 MOV DPTR ,#TAB3

MOV A ,R6

MOVC A ,@A+DPTR MOV DPTR ,#0AFFFH MOVX @DPTR ,A MOV A ,R6 INC A MOV R6,A CJNE A ,#32,QL1 MOV R6,#00H AJMP QL1

TC3::CJNE R7,#03H,QL1

MOV DPTR ,#TAB4 指向DAC0832(2) DAC0832(2)输出 发送三角波程序 送三角波数据表首址 指向DAC0832(2) DAC0832(2)输出 发送锯齿波程序 送锯齿波数据表首址

19

MOV A ,R6

MOVC A , @A+DPTR

MOV DPTR ,#0AFFFH 指向DAC0832(2) MOVX @DPTR ,A DAC0832(2)输出

MOV A ,R6 INC A MOV R6,A CJNE A ,#32,QL1 MOV R6,#00H QL1: RETI

TAB : DB 0C0H,0F9H ,0A4H ,0B0H ,99H ,82H ,0F8H ,80H TAB1: DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH

DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH

DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 0FFH,0FFH ,0FFH ,0FFH ,0FFH ,0FFH , 0FFH , 0FFH DB 00H,20

DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,DB 00H,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H ,, 00H , 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H 00H

DB 00H, 00H , 00H , 00H , 00H , 00H , 00H , 00H DB 00H, 00H , 00H , 00H , 00H , 00H , 00H , 00H TAB2: DB 80H , 83H , 86H , 89H , 8DH ,90H ,93H ,96H DB 99H , 9CH , 9FH ,0A2H ,0A5H ,0A8H ,0ABH ,0AEH DB 0B1H , 0B4H ,0B7H ,0BAH ,0BCH ,0BFH ,0C2H ,0C5H DB 0C7H , 0CAH ,0CCH ,0CFH ,0D1H , 0D4H ,0D6H ,0D8H DB 0DAH , 0DDH ,0DFH ,0E1H ,0E3H , 0E5H ,0E7H ,0E9H

DB 0EAH , 0ECH ,0EEH ,0EFH ,0F1H , 0F2H ,0F4H ,0F5H DB 0F6H , 0F7H , 0F8H ,0F9H , 0FAH , 0FBH ,0FCH ,0FDH DB 0FDH , 0FEH ,0FFH ,0FFH ,0FFH , 0FFH ,0FFH ,0FFH

DB 0FFH , 0FFH ,0FFH ,0FFH ,0FFH , 0FFH ,0FEH ,0FDH DB 0FDH , 0FCH ,0FBH ,0FAH ,0F9H , 0F8H ,0F7H ,0F6H DB 0F5H , 0F4H ,0F2H ,0F1H ,0EFH , 0EEH ,0ECH ,0EAH DB 0E9H , 0E7H ,0E5H ,0E3H ,0E1H , 0DEH ,0DDH ,0DAH DB 0D8H , 0D6H ,0D4H ,0D1H ,0CFH , 0CCH ,0CAH ,0C7H DB 0C5H , 0C2H ,0BFH ,0BCH ,0BAH , 0B7H ,0B4H ,0B1H

DB 0AEH , 0ABH ,0A8H ,0A5H ,0A2H , 9FH , 9CH , 99H DB 96H , 93H , 90H , 8DH , 89H , 86H , 83H , 80H DB 80H , 7CH , 79H , 78H , 72H , 6FH , 6CH , 69H 21

DB 66H , 63H , 60H , 5DH , 5AH , 57H , 55H , 51H DB 4EH , 4CH , 48H , 45H , 43H , 40H , 3DH , 3AH DB 38H , 35H , 33H , 30H , 2EH , 2BH , 29H , 27H DB 25H , 22H , 20H , 1EH , 1CH , 1AH , 18H , 16H DB 15H , 13H ,DB 09H , 08H ,DB 02H , 01H ,DB DB DB DB DB DB DB DB TAB3: DB DB DB DB

, 10H ,, 06H ,, 00H ,, 0DH , 0BH , 0AH , 04H , 03H , 02H , 00H , 00H , 00H 11H 0EH 07H 05H 00H 00H

DB DB DB DB DB DB DB DB DB DB DB DB

DB 00H , 00H , 00H , 00H , 00H , 00H , 01H , 02H 02H , 03H , 04H , 05H , 06H , 07H , 08H , 09H 0AH , 0BH , 0DH , 0EH , 10H , 11H , 13H , 15H 16H , 18H , 1AH , 1CH , 1EH , 20H , 22H , 25H 27H , 29H , 2BH , 2EH , 30H , 33H , 35H , 38H 3AH , 3DH , 40H , 43H , 45H , 48H , 4CH , 4EH 51H , 55H , 57H , 5AH , 5DH , 60H , 63H , 66H 69H , 6CH , 6FH , 72H , 76H , 79H , 7CH , 80H 00H ,02H ,04H ,06H ,08H ,0AH ,0CH ,0EH 10H ,12H ,14H ,16H ,18H ,1AH ,1CH ,1EH 20H ,22H ,24H ,26H ,28H ,2AH ,2CH ,2EH 30H ,32H ,34H ,36H ,38H ,3AH ,3CH ,3EH 40H ,42H ,44H ,46H ,48H ,4AH ,4CH ,4EH 50H ,52H ,54H ,56H ,58H ,5AH ,5CH ,5EH 60H ,

62H ,64H ,66H ,68H ,6AH ,6CH ,6EH 70H ,72H ,74H ,76H ,78H ,7AH ,7CH ,7EH 80H ,82H ,84H ,86H ,88H ,8AH ,8CH ,8EH 0A0H ,0A2H ,0A4H ,0A6H ,0A8H ,0AAH ,0ACH ,0AEH 0B0H ,0B2H ,0B4H ,0B6H ,0B8H ,0BAH ,0BCH ,0BEH 0C0H ,0C2H ,0C4H ,0C6H ,0C8H ,0CAH ,0CCH ,0CEH 0D0H ,0D2H ,0D4H ,0D6H ,0D8H ,0DAH ,0DCH ,0DEH 0E0H ,0E2H ,0E4H ,0E6H ,0E8H ,0EAH ,0ECH ,0EEH 0F0H ,0F2H ,0F4H ,0F6H ,0F8H ,0FAH ,0FCH ,0FEH 0FFH ,0FEH ,0FCH ,0FAH ,0F8H ,0F6H ,0F4H ,0F2H 0F0H ,0EEH ,0ECH ,0EAH ,0E8H ,0E6H ,0E4H ,0E2H

22

DB 0E0H ,0DEH ,0DCH ,0DAH ,0D8H ,0D6H ,0D4H ,0D2H DB 0D0H ,0CEH ,0CCH ,0CAH ,0C8H ,0C6H ,0C4H ,0C2H DB 0C0H ,0BEH ,0BCH ,0BAH ,0B8H ,0B6H ,0B4H ,0B2H DB 0B0H ,0AEH ,0ACH ,0AAH ,0A8H ,0A6H ,0A4H ,0A2H DB 0A0H ,09EH ,9CH ,9AH ,98H ,96H ,94H ,92H

DB 90H ,8EH ,8CH ,8AH ,88H ,86H ,84H ,82H DB 80H ,7EH ,7CH ,7AH ,78H ,76H ,74H ,72H DB 70H ,6EH ,6CH ,6AH ,68H ,66H ,64H ,62H DB 60H ,5EH ,5CH ,5AH ,58H ,56H ,54H ,52H DB 50H ,4EH ,4CH ,4AH ,48H ,46H ,44H ,42H DB 40H ,3EH ,3CH ,3AH ,38H ,36H ,34H ,32H DB 30H ,2EH ,2CH ,2AH ,28H ,26H ,24H ,22H DB 20H ,1EH ,1CH ,1AH ,18H ,16H ,14H ,12H

DB 10H ,0EH ,0CH ,0AH ,08H ,06H ,04H ,02H TAB4: DB 00H,01H ,02H ,03H ,04H ,05H ,06H ,07H DB 08H,09H ,0AH ,0BH ,0CH ,0DH ,0EH ,0FH DB 10H,11H ,12H ,13H ,14H ,15H ,16H ,17H DB 18H,19H ,1AH ,1BH ,1CH ,1DH ,1EH ,1FH DB 20H,21H ,22H ,23H ,24H ,25H ,26H ,27H DB 28H,29H ,2AH ,2BH ,2CH ,2DH ,2EH ,2FH DB 30H,31H ,32H ,33H ,34H ,35H ,36H ,37H DB 38H,39H ,3AH ,3BH ,3CH ,3DH ,3EH ,3FH DB 40H,41H ,42H ,43H ,44H ,45H ,46H ,47H DB 48H,49H ,4AH ,4BH ,4CH ,4DH ,4EH ,4FH DB 50H,51H ,52H ,53H ,54H ,55H ,56H ,57H DB 58H,59H ,5AH ,5BH ,5CH ,5DH ,5EH ,5FH DB 60H,61H ,62H ,63H ,64H ,65H ,66H ,67H DB 68H,69H ,6AH ,6BH ,6CH ,6DH ,6EH ,6FH DB 70H,71H ,72H ,73H ,74H ,75H ,76H ,77H DB 78H,79H ,7AH ,7BH ,7CH ,7DH ,7EH ,7FH 23

DB 80H,81H ,82H ,83H ,84H ,85H ,86H ,87H

DB 88H,89H ,8AH ,8BH ,8CH ,8DH ,8EH ,8FH DB 90H,91H ,92H ,93H ,94H ,95H ,96H ,97H DB 98H,99H ,9AH ,9BH ,9CH ,9DH ,9EH ,9FH

DB 0A0H,0A1H ,0A2H ,0A3H ,0A4H ,0A5H ,0A6H ,0A7H DB 0A8H,0A9H ,0AAH ,0ABH ,0ACH ,0ADH ,0AEH ,0AFH DB 0B0H,0B1H ,0B2H ,0B3H ,0B4H ,0B5H ,0B6H ,0B7H DB 0B8H,0B9H ,0BAH ,0BBH ,0BCH ,0BDH ,0BEH ,0BFH DB 0C0H,0C1H ,0C2H ,0C3H ,0C4H ,0C5H ,0C6H ,0C7H DB 0C8H,0C9H ,0CAH ,0CBH ,0CCH ,0CDH ,0CEH ,0CFH DB 0D0H,0D1H ,0D2H ,0D3H ,0D4H ,0D5H ,0D6H ,0D7H DB 0D8H,0D9H ,0DAH ,0DBH ,0DCH ,0DDH ,0DEH ,0DFH DB 0E0H,0E1H ,0E2H ,0E3H ,0E4H ,0E5H ,0E6H ,0E7H DB 0E8H,0E9H ,0EAH ,0EBH ,0ECH ,0EDH ,0EEH ,0EFH DB 0F0H,0F1H ,0F2H ,0F3H ,0F4H ,0F5H ,0F6H ,0F7H DB 0F8H,0F9H ,0FAH ,0FBH ,0FCH ,0FDH ,0FEH ,0FFH END

附录3 器件清单

1. 89C51芯片..................................................1个 2. 8155芯片....................................................1个 3. DAC0832芯片...........................................2个 4. 3PF 电

容....................................................10个 5. 12MHZ 晶振.............................................1个 6. 8位拨码开关................................................1个

7. 万能版............................................................1个 8. 3位显示管....................................................2个

9. 运算放大器358...............................................2个

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