《基于单片机的函数信号发生器设计毕业论文设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的函数信号发生器设计毕业论文设计.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、河南工业职业技术学院毕业设计任务书设计题目: 函数信号发生器设计系 部: 电子工程系 专 业: 应用电子技术 学 号: 0503100102 姓 名: 指导教师: 2012年11月摘 要信号发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。目前使用的信号发生器大部分是函数信号发生器,且特殊波形发生器的价格昂贵。所以本设计使用的是AT89C51单片机构成的发生器,可产生三角波、方波、正弦波等多种特殊波形和任意波形,波形的频率可用程序控制改变。在单片机上加外围器件距阵式键盘,通过键盘控制波形频率的增减以及波形的选择,并用了LCD显示频率大小。在单片机的输出端口接DAC0
2、832进行D/A转换,再通过运放进行波形调整,最后输出波形接在示波器上显示。本设计具有线路简单、结构紧凑、价格低廉、性能优越等优点。在介绍DAC0832芯片特性的基础上,论述了采用DAC0832芯片设计数字函数信号发生器的原理以及整机的结构设计。对其振荡频率控制、信号输出幅度控制以及频率和幅度数显的实现作了较详细的论述。该函数信号发生器可输出三角波,方波和正弦波。关键词: 信号发生器 单片机 DAC0832 波形调整 LEDAbstract Signal-generator is a kind of signal source in common use, broadly applied at
3、 the electronics electric circuit, auto control system and teaching experiment etc. Currently used mostly function signal generator signal generator, waveform generator and a special price of expensive . So the dissertation is usage of the AT89s51 single-chip microcomputer constitute of wave-form ge
4、nerator, which can generate triangle wave, square wave, sine wave etc variety wave-form, the period of wave can be controlled by procedure, at outer circle spare part of the machine, plus independence type keyboard , which can control wave increase or decrease of form-frequency and the choice of wav
5、e-form, at the same time LED display frequency size. The output of the machine connect DAC0832 to carry on a DA conversion,again pass operation amplifier to put an end exportation wave-form. This design has advantage of simple circuit, tightly packed structure, cheap price, superior function etc. Ba
6、sed on the introduction of MAX038 , we discussed the principle and the whole frame of the digital function signal generator. We described the control of the oscillatory frequent , amplitude and the digital display in detail. Thegenerator can output three kinds of waves : sine wave , square wave , tr
7、iangle wave. Keywords: signal generator MCU DAC0832 wave-form adjustment LED目 录摘 要2第1章 绪论1.1 课题的来源与技术背景51.2 研究信号发生器的目的及意义51.3 主要研究内容6第2章 电路方案的确定2.1 方案的提出和选择82.2 电路框图及工作原理9第3章 单元电路设计3.1 单片机模块103.2 电源模块113.3 D/A转换模块123.4 键盘输入模块153.5 显示模块163.6 I/V转化模块17第4章 电路软件设计4.1 系统总框图194.2 显示子程序204.3 按键子程序21第5章 设计实
8、现与总结致 谢26参考文献27附 录28第1章 绪论1.1 课题的来源与技术背景不论是在生产还是在科研与教学上,信号发生器都是电子工程师仿真实验的最佳工具。随着我国经济和科技的发展,对相应的测试仪器和测试手段也提出了更高的要求,信号发生器己成为测试仪器中至关重要的一类,因此开发信号发生器具有重大意义。传统的信号发生器采用专用芯片,成本高,控制方式不灵活。本设计充分利用单片机灵活的控制、丰富的外设处理能力,采用DDS技术,实现频率、幅值可调的函数波形的输出,同时可以根据需要方便地实现各种比较复杂的调频、调相和调幅功能,具有良好的实用性。根据其频率发生方法又可分为谐振法和合成法两种。一般的传统发生
9、器都是采用的谐振法,即用具有频率选择性的回路来产生正弦振荡,来获得所需频率,也可以根据频率合成技术来获得所需频率。利用频率合成技术制成的合成波形发生器,通常被称为频率合成器或频率综合器。频率综合器是指利用频率合成技术合成的频率源,它常常是没有调制的,也没有足够宽的和足够准确的输出电平调节,其工作范围往往也不宽,最小频率间隔也比较大,一般做专用设备使用,或做某一个系统中的一个组成部分。1.2 研究信号发生器的目的及意义波形发生器是信号源的一种,主要给被测电路提供所需要的己知信号(各种波形),然后用其它仪表测量感兴趣的参数。可见信号源在各种实验应用和试验测试处理中,它的应用非常广泛。它不是测量仪器
10、,而是根据使用者的要求,作为激励源,仿真各种测试信号,提供给被测电路,以满足测量或各种实际需要。目前我国己经开始研制波形发生器,并取得了可喜的成果。但总的来说,我国波形发生器还没有形成真正的产业。就目前国内的成熟产品来看,多为一些PC仪器插卡,独立的仪器和VXI系统的模块很少,并且我国目前在波形发生器的种类和性能都与国外同类产品存在较大的差距,因此加紧对这类产品的研制显得迫在眉睫。函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面: (1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的
11、输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成v=f(t)形式的波形方程的数学表达式产生。从而促进了波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如Visual Basic, Visual C等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。(2)与VXI资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块
12、。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台式仪器更为方便。(3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。1.3 主要研究内容(1)理论基础分析。了解波形发生器的相关理论,包
13、括几种常用波形,如正弦波、方波等,然后介绍了波形发生器的主要方案及原理。(2)硬件系统设计。主要包括以下几个模块:串口电路;键盘、LED显示电路;单片机系统;DAC芯片和放大电路设计。 (3)软件系统设计。主要有:系统总体流程设计;串口程序设计;单片机程序设计;键盘响应程序设计;LED显示程序设计;DAC控制程序设计。(4)系统仿真调试。通过计算机进行模拟仿真调试。常用波形介绍函数波形的一般表达式可以表示为 ,下面来介绍几种常用的函数波形3:正弦函数正弦信号与余弦信号,两者只是在相位上相差2,可以统称为正弦信号。其一般形式为 f (t)=Asin(t+ ) (1)式中,A 为振幅, 是角频率,
14、 为初相位。上述三量是正弦信号的三要素。它的波形见图1。正弦信号是周期信号,其周期T 与频率f 及角频率 之间的关系为: (2)图1 正弦波形 在实际应用中经常遇到单边指数衰减的正弦信号,其波形如图2所示,表达式为: (3)图2 指数衰减的正弦信号波形方波波形函数 方波函数是一种常用的波形函数,其表达式为: (4)方波的波形如图2-3所示:图3 方波波形第2章 电路方案的确定2.1 方案的提出和选择 方案一:采用单片函数发生器(如8038),8038可同时产生正弦波、方波等,而且方法简单易行,用D/A转换器的输出来改变调制电压,也可以实现数控调整频率,但产生信号的频率稳定度不高。方案二:采用锁
15、相式频率合成器,利用锁相环,将压控振荡器(VCO)的输出频率锁定在所需频率上,该方案性能良好,但难以达到输出频率覆盖系数的要求,且电路复杂。方案三:采用单片机编程的方法来实现,利用数模转换器DAC0832通过查表得方式输出需要的波形,该方法可以通过编程的方法来控制信号波形的频率和幅度,而且在硬件电路不变的情况下,通过改变程序来实现频率的变换。此外,由于通过编程方法产生的是数字信号,所以信号的精度可以做的很高。鉴于方案一的信号频率不够稳定和方案二的电路复杂,频率覆盖系数难以达标等缺点,所以决定采用方案三的设计方法。它不仅采用软硬件结合,软件控制硬件的方法来实现,使得信号频率的稳定性和精度的准确性
16、得以保证,而且它使用的几种元器件都是常用的元器件,容易得到,且价格便宜,使得硬件的开销达到最省。 2.2 电路框图及工作原理数字信号可以通过数/模转换器转换成模拟信号,因此可通过产生数字信号再转换成模拟信号的方法来获得所需要的波形。89C51单片机本身就是一个完整的微型计算机,具有组成微型计算机的各部分部件:中央处理器、CPU、随机存取存储器RAM、只读存储器ROM、I/O接口电路、定时器/计数器以及串行通讯接口等,只要将89C51再配置键盘及其接口、显示器及其接口、数模转换及波形输出、指示灯及其接口等四部分,即可构成所需的波形发生器,其信号发生器构成原理框图如图2.1所示。 输出滤波放大D/
17、A转换器接口电路89C51单片机图2.1 信号发生器原理框图89C51是整个波形发生器的核心部分,通过程序的编写和执行,产生各种各样的信号,并从键盘接收数据,进行各种功能的转换和信号幅度的调节。当数字信号经过接口电路到达转换电路,将其转换成模拟信号也就是所需要的输出波形。- 33 -第3章 单元电路设计3.1 单片机模块 本次设计选用的单片机芯片是AT89C51单片机。AT89C51是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易
18、失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元。 AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶休或陶瓷谐振器一起构成自激振荡器。外接石英晶体(或陶瓷诺振器)及电容C1, C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1, C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,这里选择使用石英晶休,我们的电容使用30pF。如使用陶瓷谐振器的话,应选择40pF士
19、10pF的容值的电容。也可以采用外部时钟。采用外部时钟的电路的情况时,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。 图3-1:单片机最小系统1、主电源引脚(2根) VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线2、外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端3、控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31
20、):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。4、可编程输入/输出引脚(32根)AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32 根。每一根引脚都可以编程。 PO口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.73.2电源模块图3-2-
21、1:单片机的电源模块 函数信号发生器的电源包括两部分,包括单片机和外部电路用的电压+5V和运算放大器的电压+-12V,所以电源模块选择了常用的三端稳压器7805,7912和7812,由市电220V经变压器输出24V电压,通过7812和7912输出正负12V的电压用于运算放大器的供电,7812的输出端接7805将输出的12V电压转为5V用于单片机和其他外设电路的供电使用。图3-2-2:7805的原理图 通过差分对管和负反馈电路,使得输出的电压稳定在+5V。3.3 D/A转换模块 本次试验选择的D/A转化器是DAC0832,是一款8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价
22、格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。图3-3-1:DAC0832内部结构图 DAC0832内部有输入寄存器和DAC寄存器,所以无需外部连接专门的锁存器。图3-3-2:DACA0832引脚图各引脚的功能如下:D0D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);ILE:数据锁存允许控制信号输入线,高电平有效;CS:片选信号输入线(选通数据锁存器),低电平有效;WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、
23、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;XFER:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;WR2:DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。由WR1、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。IOUT1:电流输出端1,其值随DAC寄存器的内容线性变化;IOUT2:电流输出端2,其值与IOUT1值之和为一常数;Rfb:反馈信号输入线,改变Rfb端外接电阻值可调整
24、转换满量程精度;Vcc:电源输入端,Vcc的范围为+5V+15V;VREF:基准电压输入线,VREF的范围为-10V+10V;AGND:模拟信号地DGND:数字信号地DAC0832主要性能参数1. 分辨率为8位;2. 电流稳定时间1us;3. 可单缓冲、双缓冲或直接数字输入;4. 只需在满量程下调整其线性度;5. 单一电源供电(+5V+15V);6. 低功耗,200mW。 通常DAC0832有三种不同的工作方式,主要依据对数据锁存器和DAC锁存器的控制方式划分:直通方式,单缓冲方式和双缓冲方式。其中直通方式CS,XFER,WR1和WR2直接接低电平,DAC0832随时转换输入的数据,这种方式比
25、较简单,占用的I/O口也比较少,但是当需要I/O口做扩展的时候容易受到干扰。 单缓冲方式者把数据锁存器和DAC锁存器的使能端接在一起,只需要一组信号就能同时控制两个寄存器的。 双缓冲方式是将数据锁存器和DAC锁存器分开单独控制,这种做法容易占用大量的I/0口。综上所诉,本次设计采用了单缓冲控制方式。图3-3-3.DAC0832的单缓冲方式连线图 3.4键盘输入模块本系统采用的键盘连接电路图如下: 图(6)键盘图中键盘引出的线分别接单片机的P2.4-P2.7口,因此在程序初始化时P2.7脚给低电平。如图开关1用来切换输出波形、开关2和3用来调节频率的加减。当按开关2时输出波形的频率增加,按开关3
26、时输出波形的频率减小。开关4是用来显示波形的种类和频率的。3.5 显示模块 本次设计要求对输出波形的频率,幅值和波形进行输出,所以要扩展显示模块,常用的显示模块LCD有7端数码管,LCD1602和12864等液晶显示屏。为了降低设计的成本和扩展的难度,本次设计选择使用7段数码管。图3-5-1.数码管原理图常用的数码管包括共阴极和共阳极两种。其中共阴极数码管的编码方式如下:0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0 1 2 3 4 50x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,6 7 8 9 A B0x39 , 0x
27、5e , 0x79 , 0x71 , 0x00C D E F 无显示 LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示
28、的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。图3-5-2.7段数码管动态显示电路图3.6 I/V转化模块由于DA转化器输出的是电流信号,所以还需要将其转化为电压信号,为了各种波形的双极性输出还需要连接双极性转化电路。图3-6.双极性转化电路 如图为常用的双极性转化电路,第一个运算放大器将电流信号转变为电压信号,第二个运算放大器和电阻R1,R2共同组成方向加法器,由于电流输出接的是第一个运算放大器的反相输出端,所以当满足2*R2=R1且R2=R3的时候输出电压为Vout=Vi-(Vref/2)当要实现双极性输出的时候幅值的二进制码要转为偏移二进制码,即将二进制码对应的
29、零值偏移到80H,在偏移之后,只有幅值二进制码大于128的输出才为正,后则为负。通常要得到偏移二进制码,可以通过求原有二进制的补码,再加上80H,并舍弃其进位,使得其成为偏移二进制码。第四章 电路软件设计4.1系统总框图图4-1.系统总的框4.2 显示子程序显示部分采用动态输出的方式,通过控制两个锁存器来控制实现单个I/O分时控制输出输出数码管的段选(字形的选择)和位选(位权的选择)。如图3-5-2显示电路图中P0用于输出数据,而P20和P21用来控制寄存器的通断来控制是输出字段信息还是位权信息。中断入口定时器重转初值打开锁存器,送段选信号,然后关闭打开锁存器送位选信号,然后关闭位选标志位左移
30、一位返回图4-2:显示流程图通常的数码管动态显示程序都要进行延时,然后靠人眼的余光实现数据的输出,当延时时间太小的时候会出现数码闪烁甚至乱码,当延时时间设定的太大的时候,有可能出现输出断续的可能,通常需延时5ms,6位数据显示就是30ms,而按键的消抖时间不过10ms,所以时间片轮法的话会大大影响电路的正常工作,甚至不能检测出按键输入,或则按键输入的时候出现显示断续的情况,所以本才设计采用了中断显示的方法,利用定时器进行延时,设定好定时器的初值,在固定的延时时间上溢出,然后调用显示子程序显示当前的输出情况,由于定时器中断程序 执行一次只能显示一位数据,所以要设定一个全局变量的显示缓冲区和全局变
31、量的位选标志。4.3 按键子程序本次设计由于要求对幅值和频率进行控制,所以要求用相关的按键输入,前面已经介绍了各种按键的优缺点,最后选择了独立式键盘,分别为+-频率,+-幅值,模式选择5位,共占用5个IP口,选择单片机的P2.4-P2.7口作为按键输入。 图4-3:按键子程序框图Mode:模式选择位,用于选择输出的波形。Ampl+:幅值+位,步进为0.5,系统的基准电压为+-2.5V。Ampl-:幅值-位。Freq+:频率+位,用于调整中断时间。Freq-:频率-位。程序中的模式选择是通过MODE位输入,通过设定一个模式标志位,当执行一次模式位按键程序,标志位自动+1,并指向其所指定的波形。幅
32、值选择通过按键AMPL+和AMPL-输入,当执行了幅值子程序的时候,系统通过改变X9511抽头的位置,改变其Vw的输出电压,通过VREF改变输出电压的幅值。频率的选择则是通过FREQ+和FREQ-进行选择的,当执行频率调节子程序的时候,通过改变定时的初值实现的,当使用12M晶振时候,正弦表位256位时,理想中最大的频率可以达到4KHz,当频率为10Hz的时候,计数初值为390。由于系统采用的最低的初值时间为100,所以最高只能产生20Hz的频率。第五章 设计实现与总结输出波形的种类与频率的测试测量仪器:稳压电源、示波器、数字万用表。测量说明:正弦波、矩形波、三角波,锯齿波信号的输出,通过键盘来
33、实现其的不同波形的输出以及其频率的改变。四种波形的仿真波形图如下: 图(8)正弦波图形图(9)三角波图形图(10)矩形波图形图(11)锯齿波图形波形种类及频率显示如下:总 结课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,我仍感慨颇多。的确,从选题到定稿,从理论到实践,在好几个星期的日子里,可以说得是苦多于甜,但是可以学
34、到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机C语言编程掌握得不好通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程
35、设计终于顺利完成了,在设计中遇到了很多编程问题,最后在邢鹏康老师的辛勤指导下,终于游逆而解。同时,在刑阳老师那里我学得到很多实用的知识,在此我表示感谢!同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献1 朱清慧、张凤蕊 .PROTEUS教程-电子线路设计、制版与仿真.清华大学出版社 20112 王静霞 单片机应用技术(C语言版).电子工业出版社 2009 3 周明德 微型计算机系统原理及应用(第四版).北京:清华大学出版社 2002 4 杜华 任意波形发生器及应用J.国外电子测量技术 2005 5 李相伟 微机系统原理与接口技术 北京:国防工业出版社 2005 6 李群芬
36、 肖看.单片机原理、接口及应用-嵌入式系统技术基础.武汉:清华大学出版社 2005附录A:系统程序/*- 名称:基于单片机的函数信号发生器 编写:maxiao 日期:2012.11 内容:通过单片机程序控制,产生三角波、方波、正弦波、锯齿波等-*/#include #include #define uchar unsigned char#define DA0832 XBYTE0xffffuchar code tab10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;uchar code tosin256=0x80,0x83,0x86,0x8
37、9,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xf
38、f,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8
39、d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x0
40、2,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0
41、x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ;/*正弦波码 */uchar fun=1,b=0,c=0,d=0,e=0,tl,th;sbit P3_0=P30;sbit P3_1=P31;sbit P3_2=P32;void key1(void);void key2(void);void key3(void);void key4(void);void judge(void);void main(void)TMOD=0X01;th=0xff;tl=0x00;TH0=th;TL0=tl;ET0=1;EA=1;TR
42、0=1;while(1) judge(); void judge(void) uchar line,de1,de2,keym;P2=0xff;keym=P2;if(keym=0xff)return;for(de1=0;de1200;de1+) for(de2=0;de2125;de2+);P2=0xff;keym=P2;if(keym=0xff)return;P2=0xff;line=P2; if(P2=0xfe) key1(); if(P2=0xfd) key2(); if(P2=0xfb) key3(); if(P2=0xf7) key4();void key1(void) /键选择发波类
43、型,1为正弦波,2为三角波,3为方波,4为锯齿波。fun+;if(fun=5)fun=0x01;void key2(void) /键加大频率if(th0x00)th-;void key4(void) /键显示频率double t;int f;TR0=0;/的区别while (P2=0xf7)t=(65535-th*256-tl)*0.5;f=(int)(15625/(t*4);P3_0=0; P3_1=0; P3_2=0;P1=tabf%10;f=f/10;P3_0=1; P3_1=0; P3_2=0;P1=tabf%10;f=f/10;P3_0=0; P3_1=1; P3_2=0;P1=tabf%10;f=f/10;P3_0=1; P3_1=1; P3_2=0;P1=tabf;TR0=1;void time0_int(void) interrupt 1 /中断服务程序TR0=0;if(fun=1) DA0832=tosinb; /正弦波 b+; else if(fun=2) /三角波