《基于AT9C单片机简易函数信号发生器设计技术文件.doc》由会员分享,可在线阅读,更多相关《基于AT9C单片机简易函数信号发生器设计技术文件.doc(30页珍藏版)》请在三一办公上搜索。
1、学 号: 51湖南文理学院机械工程学院课 程 设 计题 目基于AT89C52单片机的简易函数信号发生器设计专 业机械电子工程班 级机电08101班姓 名谭鹏辉指导教师陈卫国2011年12月07日课程设计任务书姓 名谭鹏辉学 号51班 级机电08101班课程名称单片机课程设计课程性质必修设计时间2011年 11 月 28日 2011年 12 月 9 日设计名称基于AT89C52单片机的简易函数信号发生器设计设计要求1) 以单片机为核心,经过D/A转换和放大电路的处理,最后输出信号;2) 要求能输出正弦波三角波锯齿波和方波四种信号;3) 输出信号可以通过按键来改变4) 完成系统电路设计;5) 完成
2、系统软件设计;6) 完成系统Proteus下的仿真5)完成课程设计报告 计划与进度时间:二周1) 方案设计 2天2) 电路设计 2天3) 软件设计 3天 4) 软硬件联调 2天 5) 系统仿真 2天6) 答辩 1天7) 完成报告 2天任课教师意 见年 月 日教研室主任签 名年 月 日说明平时考勤:20% 设计:30% 仿真:20% 答辩:10%设计报告:20% 共计100分 目 录目 录摘 要4第一章 绪论51.1单片机概述51.2信号发生器的分类51.3研究内容5第二章 函数信号发生器设计62.1课程设计的目的62.2课程设计要求6第三章 设计方案73.1系统主要功能73.2系统硬件构成及功
3、能7 2.2.1 AT89C52单片机及其说明7 3.2.2资源分配10 3.2.3 D/A转换模件部件11 3.2.4 外部控制模块部件 74LS2212 3.2.5 放大部分123.3系统软件设计及接口电路13 3.3.1 信号频率数据采集13 3.3.2 正弦波产生程序13 3.3.3 三角波产生程序14 3.3.4方波产生程序14 3.3.5 锯齿波产生程序.15 3. 3. 6信号放大模块设计.15 3. 3. 7 数模转换模块设计.16第四章 仿真图及及结果分析.17 4.1波形发生器的调试与测试.17 4.2仿真结果图.18第五章 总结与展望.20参考文献21附录一 元器件清单2
4、2附录二 程序清单23附录三 电路原理图.30摘要本次作品是一个基于单片机设计的函数信号发生器函数信号发生器的设计方法有多种,利用单片机设计的函数信号发生器具有编程灵活,功能更以扩充等实际的优点利用单片机设计的函数信号发生器能够产生正弦波,锯齿波,三角波,方波,并实现对频率和占空比的调节,以及液晶屏显示波形名称和波形频率,波形的切换和频率的调节以及占空比的改变都可以用按键实现在编程语言上,我们选择自身比较熟悉的C语言,这样在后期波形的调试及与硬件衔接方面更容易发挥出自身优势经过设计及后期长时间的调试,设计的所有功能均已实现关键词:单片机,函数发生器,液晶LCD 第一章 绪论1.1单片机概述随着
5、大规模集成电路技术的发展,中央处理器(CPU)随机存取存储器(RAM)只读存储器(ROM)(I/O)接口定时器/计数器和串行通信接口,以及其他一些计算机外围电路等均可集成在一块芯片上构成单片微型计算机,简称为单片机单片机具有体积小成本低,性能稳定使用寿命长等特点其最明显的优势就是可以嵌入到各种仪器设备中,这是其他计算机和网络都无法做到的9,101.2信号发生器的分类信号发生器应用广泛,种类繁多,性能各异,分类也不尽一致按照频率范围分类可以分为:超低频信号发生器低频信号发生器视频信号发生器高频波形发生器甚高频波形发生器和超高频信号发生器按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,
6、非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器扫频信号发生器数字序列波形发生器图形信号发生器噪声信号发生器等按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器前者指对输出信号的频率幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器后者是指其输出信号的频率幅度调制系数等在一定范围内连续可调,并且读数准确稳定屏蔽良好的中高档信号发生器1.3 研究内容本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波锯齿波矩形波正弦波的发生根据设计的要求,对各种波形的频率和幅度进行程序的编写,并将所写程序装入单片机的程序存储器中在程序运行中,当接收到来自外界的命令,需要输出
7、某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出第二章:函数信号发生器的设计设计一个基于单片机的函数信号发生器,该函数信号发生器可以输出四种波形,有正弦波,锯齿波,三角波,方波在此基础上进一步实现对波形频率和占空比的调节,并用液晶屏分两行显示波形名称和波形频率2.1课程设计的目的:1巩固加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决实际课题设计的能力2培养针对课题需要,选择和查阅有关手册图表及文献资料的能力,提高组成系统编程调试的动脑动手能力3通过对课题设计方案的分析选择比较,熟悉运用单片机系统开发软硬件设计的
8、方法内容及步骤4掌握DAC0832,LM324,74LS22的接口电路,及使用方法5熟悉掌握函数信号发生器的工作原理2.2 课程设计要求:1、 熟悉组成系统中的实验模块原理,画出实验原理图2 写出完整的设计任务书:课题的名称系统的功能硬件原理图软件框图元件清单程序清单参考资料3输出几种波形,实现对频率和占空比的调节,以1HZ作为步进进行调节第三章:设计方案3.1 系统主要功能该函数信号发生器可以输出四种波形,有正弦波,锯齿波,三角波,方波在此基础上进一步实现对波形频率和占空比的调节,并用液晶屏分两行显示波形名称和波形频率3.2 系统硬件构成及功能函数信号发生器的设计总体框图如图所示,主要有单片
9、机AT89C52,电源,键盘模块,LCD1602显示模块构成按案件模块:由5个复位开关与74LS21组成的系统通过对单片机传输中断信号来实现波形切换及频率和占空比的调节显示模块:用LCD1602,分行显示波形类型和波形频率的显示电源模块:电源模块有220V市变电压经变压,整流,稳压得到+ -5V, + -12V的电压,维持系统正常工作系统的总体框图如图1所示:键盘显示控制器显示模块键盘模块波形输出模块电 源源主控器AT89C52图1系统总体框图 3.2.1 AT89C52单片机及其说明 AT89C52为8 位通用微处理器 图2.PDIP封装的AT89C52引脚图采用工业标准的C51内核,在内部
10、功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制功能包括对会聚主IC 内部寄存器数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等主要管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成的复位电路VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源的正负端P0P3 为可编程通用I/O 脚,其功能用途由软件定义,在本设计中,P0 端口(3239 脚)被定义为N1 功能控制端口,分别与N1的相应功
11、能管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12 脚27 脚及28 脚定义为握手信号功能端口,连接主板CPU 的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能 P0 口 P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口作为输出口用时,每位能吸收电流的 方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻 在Flash 编程时,P0
12、 口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻 P1 口 P1 是一个带内部上拉电阻的8 位双向I/O 口, P1 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口作输入口使用时,因为内部存在上拉 电阻,某个引脚被外部信号拉低时会输出一个电流(IIL) 参见表1 Flash 编程和程序校验期间,P1 接收低8 位地址 P2 口 P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路对端口P2 写“1”,通过内部的上拉电阻把端
13、口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL) 在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容 Flash 编程或校验时,P2亦接收高位地址和一些控制信号 P3 口 P3 口是一组带有内部上拉电阻的8 位双向I/O 口P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻 辑门电路对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口此时,被外部拉
14、低的P3 口将用上拉电阻输出电流(IIL) P3 口除了作为一般的I/O 口线外,更重要的用途是它的第二功能 P3 口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号 RST 复位输入当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位 ALE/PROG 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字 节一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲 对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG
15、) 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作该位置位后,只有一条 MOVX 和MOVC指令才能将ALE 激活此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效 PSEN 程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数 据)时,每个机器周期两次PSEN 有效,即输出两个脉冲在此期间,当访问外部数据存储器,将跳过两次PSEN信号 EA/VPP 外部访问允许欲使CPU 仅访问外部程序存储器(地址为0000HFFFFH),EA 端必须保持低电平(接 地)需注意的是:如果
16、加密位LB1 被编程,复位时内部会锁存EA端状态 如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令 Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp XTAL1 振荡器反相放大器的及内部时钟发生器的输入端 XTAL2振荡器反相放大器的输出端 特殊功能寄存器 在AT89C52 片内存储器中,80H-FFH 共128 个单元为特殊功能寄存器(SFE),SFR 的地址空间映象如表2 所示 并非所有的地址都被定义,从80HFFH 共128 个字节只有一部分被定义,还有相当一部分没有定义对没有定义的 单元读写将是无效的
17、,读出的数值将不确定,而写入的数据也将丢失 不应将数据“1”写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单 元数值总是“0” AT89C52除了与AT89C51所有的定时/计数器0 和定时/计数器1 外,还增加了一个定时/计数器2定时/计数器2 的控 制和状态位位于T2CON(参见表3)T2MOD(参见表4),寄存器对(RCAO2HRCAP2L)是定时器2 在16 位捕获方式或16 位 自动重装载方式下的捕获/自动重装载寄存器 数据存储器 AT89C52 有256 个字节的内部RAM,80H-FFH 高128 个字节与特殊功能寄存器(SFR)地址是重叠
18、的,也就是高128 字节的RAM 和特殊功能寄存器的地址是相同的,但物理上它们是分开的 当一条指令访问7FH 以上的内部地址单元时,指令中使用的寻址方式是不同的,也即寻址方式决定是访问高128 字节 RAM 还是访问特殊功能寄存器如果指令是直接寻址方式则为访问特殊功能寄存器 例如,下面的直接寻址指令访问特殊功能寄存器0A0H(即P2 口)地址单元 MOV 0A0H,#data 间接寻址指令访问高128 字节RAM,例如,下面的间接寻址指令中,R0 的内容为0A0H,则访问数据字节地址为0A0H, 而不是P2 口(0A0H) MOV R0,#data 堆栈操作也是间接寻址方式,所以,高128 位
19、数据RAM 亦可作为堆栈区使用 定时器0和定时器1: 3.2.2 资源分配晶振采用12MHZP1口的P1.0-P1.4分别与四个按键连接,分别控制波形切换频率加频率减,占空比加,占空比减P2口与DAC0832的D0-D7数据输入端相连P3口用来控制DAC0832的输入寄存器选择信号CS3.2.3 D/A转换模块部件DAC0832芯片原理管脚功能介绍(如图6所示)图3 DAC0832管脚图DI7DI0:8位的数据输入端,DI7为最高位ILE:数据锁存允许控制信号输入线,高电平有效CS:选片信号输入线(选通数据锁存器),低电平有效WR1:数据锁存器写选选通输入线,负脉冲有效,由ILECSWR1的逻
20、辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变化,LE1的负跳变时将输入数据锁存XFER:数据传输控制信号输入线,低电平有效,负脉冲有效WR2:DAC寄存器选通输入线,负脉冲有效,由WR2XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换IOUT1:模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0IOUT2:模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数RFB:反馈电阻引
21、出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间VREF:参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10-10)VVREF端与D/A内部T形电阻网络相连Vcc:芯片供电电压,范围为(+5+15)VAGND:模拟量地,即模拟电路接地端DGND:数字量地3.2.4 外部控制模块部件 74LS22图474LS22为四输入双与门A1,B1,C1,D1为第一个与门的输入,Y1为第一个与门的输出A2,B2,C2,D2为第一个
22、与门的输入,Y2为第一个与门的输出在此系统中用来给单片机提供中断信号3.2.5 放大部分 LM324LM324引脚图(管脚图) 图5 LM324引脚图简介: LM324系列器件为价格便宜的带有真差动输入的四运算放大器与单电源应用场合的标准运算放大器相比,它们有一些显著优点该四放大器可以工作在低到3.0伏或者高到32伏的电源下,静态电流为MC1741的静态电流的五分之一共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性它有5个引出脚,其中“+”“-”为两个信号输入端,“V+”“V-”为正负电源端,“Vo”为输出端两个信号输入端中,Vi-(-)为反相输入端,表示运放输出端V
23、o的信号与该输入端的位相反;Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同3.3 系统的软件设计及接口电路3.3.1 信号频率数据采集本程序通过外部中断,接收减频或加频按键,单片机内部对接受的值经过运算得出波形的输出延时,从而产生频率的改变电路较为简单,成本较低3.3.2 正弦波产生程序输入正弦波的采样点,计算出256个(一个周期内)正弦波信号值然后通过输出的两点间的延时来实现调频依次循环输出,可得出正弦波采点值放在table2中,程序如下:void sin()/正弦波unsigned int i;for(i=0;i256;i+)DAC0832=table2i;dela
24、y(pinlv/256);3.3.3 三角波产生程序设个自变量i让它不断地自加1,直到加到255时,t=i,对t进行不断地自减1直到减到t=0,然后再不断地重复上述过程产生三角波程序如下:void tran()/三角波unsigned char i;for(i=0;i0;i-)DAC0832=i;delay(pinlv/64);3.3.4 方波产生程序设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后再重复上述过程程序如下:void fang()/方波DAC0832=0;delay(pinlv/2);DAC0832=0xff;delay(pinlv/2);3.3.
25、5 锯齿波产生程序锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线适当选择循环的时间,可以得到不同的周期锯齿波锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用延时法,来产生锯齿波,设个自变量i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程程序如下:void jvchi()/锯齿波unsigned char i;for(i=0;i255;i+)DAC0832=i;delay(pinlv/256);3.3.6信号放大模块设计从单片机中输出的数字信号
26、经过DAC0832转换后,由于信号的幅值比较小,所以需要放大采用常规的放大方式,采用两片运放,实现两级放大,设计的电路如图6:图6 图6放大电路接口3. 3. 7数模转换模块设计本设计模数转换采用常见的芯片:DAC0832,本设计采用直通方式进行模数转换为了简洁起见,在仿真图中采用网络节点的方式进行连线,从单片机P0口输出的数据直接连接到模数芯片DAC0832的数据口如图: 图7 DA转换接口电路 第四章 仿真图及结果分析 4.1波形发生器的调试与测试本系统是在protues下仿真,使用Keil C编程从而实现其设计及仿真在测试本系统是采用的是将设置的数值与示波器所测值进行对比,进而可以知道本
27、系统的性能频率测试数据: 设定频率(HZ)示波器测试频率(HZ) 相对误差%3.93.961.57.87.931.2815.6316.133.194.2仿真结果图正弦波仿真图 图8正弦波图三角波仿真图 图9三角波图锯齿波仿真图 图10锯齿波图方波仿真图 图11方波图第五章 总结与展望本次的设计中利用AT89C52和DAC0832以及放大器完成电路的设计,用开关来控制各种波形的发生及转换,用单片机输出后,经过模数转换器生成波形,最终可以通过示波器观察在这次的软件设计中,程序设计采用的是汇编语言汇编语言具有速度快,可以直接对硬件进行操作的优点,它可以极好的发挥硬件的功能但是汇编语言也存在编写的代码
28、非常难懂,不好维护,很容易产生 bug,难于调试的缺点因此,在大型程序的设计中,多采用C语言进行程序编译C语言简洁高效,是最贴近硬件的高级编程语言,经过多年的发展,现在已成熟为专业水平的高级语言而且,现在单片机产品推出时纷纷配套了C语言编译器,应用广泛不过就本次课程设计来说,汇编语言还是适用的由于真正意义上的程序设计还不多,因此还不是很得心应手,所以在设计中遇到一些问题和一些难点比如:在程序设计中如何实现程序结构的最优化,以达到较高的质量这是以后设计中要注意的问题 通过这次课程设计,我进一步了解了波形发生器的原理,在实际动手操作过程中,使我接触了许多我以前没接触过的元件,而且重新温习了刚学不久
29、的汇编语言,使我学得了许多知识,使我获益匪浅这次课程设计,使我的动手能力得到了很大的提高,更使我们懂得理论知识的重要性,没有理论的指导一切实际行动都是盲目的,且实际操作是我们得到的理论知识得到验证,更能增加对理论知识的理解参考文献1 程全.基于AT89C52实现的多种波形发生器的设计J.周口师范学院学报,2005.22(5):5758.2 周明德.微型计算机系统原理及应用M.北京:清华大学出版社,2002.341364.3 刘乐善.微型计算机接口技术及应用M.北京:北京航空航天大学出版社,2001.258264.4 童诗白.模拟电路技术基础M.北京:高等教育出版社,2000.171202.5
30、杜华.任意波形发生器及应用J.国外电子测量技术,2005.1:3840.6 张友德.单片微型机原理应用与实践M.上海:复旦大学出版社,2004.4044. 7 程朗.基于8051单片机的双通道波形发生器的设计与实现J.计算机工程与应用,2004.8:100103.8 张永瑞.电子测量技术基础M.西安:西安电子科技大学出版社,2006.61101.9 李叶紫. MCS-51单片机应用教程M.北京:清华大学出版社,2004.232238.附录1元器件清单元件名称数量备注AT89C52174LS221LM3241电阻310k排阻14.7K液晶显示屏1LCD1602滑动变阻器110K晶振112MHZ附
31、录2 程序清单#include#define uchar unsigned char#define uint unsigned int/#define Fosc 24000000/12000000 /12分频后的频率#define DAdata P0/DA数据端口sbit DA_S1= P20; / 控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit DA_S2= P21; / 控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbit key= P32;uchar wavecount;
32、/抽点计数uchar THtemp,TLtemp;/传递频率的中间变量/uint T_temp;uchar judge=1; /在方波输出函数中用于简单判别作用uchar waveform; /当其为012时,分别代表三种波uchar code freq_unit4=10,50,200,10; /三种波的频率单位 sawtoothuchar idata wavefreq4=1,1,1,1; /给每种波定义一个数组单元,用于存放单位频率的个数uchar code lcd_hang1=Sine Wave Triangle Wave Square Wave sawtooth Wave Select
33、Wave: press No.1 key! ;uchar idata lcd_hang216=f= Hz ;/*uchar code wave_freq_adjust= /频率调整中间值 0xff,0xb8,0x76,0x56,0x43,0x37,0x2e,0x26,0x20,0x1c, /正弦波频率调整中间值0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e,/三角波频率调整中间值0xff,0x8e,0x5a,0x41,0x32,0x28,0x20,0x1b,0x17,0x0e; uint code wave_freq_adjust= /频率调
34、整中间值 380,184,118,86,67,55,46,28,38,32,295,142, 90,65,50,40,32,27,23,14,295,142, 90,65,50,40,32,27,23,14; */*uchar code waveTH= 0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff;uchar code waveTL= 0xf2
35、,0x78,0xfb,0x3c,0x63,0x7d,0x8f,0x9d,0xa8,0xb1,0x17,0x0b,0xb2,0x05,0x37,0x58,0x70,0x82,0x90,0x9b, 0x4d,0xa7,0xc4,0xd3,0xdc,0xe2,0xe6,0xea,0xec,0xee;*/*这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求*/uchar code waveTH= 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0x
36、ff,0xff,0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe;uchar code waveTL= 0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, /正弦波频率调整中间值0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde,/三角波频率调整中间值0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c; /*/uchar code triangle_tab= /每隔数字8,采取一次0x00,0x08,
37、0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78,0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff,0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80,0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,
38、0x10,0x08,0x00;uchar code sine_tab256=/输出电压从0到最大值(正弦波1/4部分)0x80,0x83,0x86,0x89,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,0
39、xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,/输出电压从最大值到0(正弦波1/4部分)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,