版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录InstituteofTechnology. 1EastChinaJiaotongUniversity 1GraduationDesign(Thesis) 1第一章绪论 41.1什么是单片机 41.2目前单片机国内外发展现状 41.3波形发生器分类 51.4本课题研究内容 5第二章:函数信号发生器的设计 6第三章设计方案 73.1系统主要功能 73.2系统硬件构成及功能 73.2.1AT89C52单片机及其说明 73.2.2资源分配 103.2.3D/A转换模块部件 103.2.4外部控制模块部件74LS22 113.2.5放大部分LM324 123.3系统的软件设计及接口电路 12第四章仿真图及结果分析 164.1波形发生器的调试与测试 164.2仿真结果图 164.2.1三角波仿真图 164.2.2方波仿真图 174.2.3锯齿波仿真图 174.2.4正弦波仿真图 18第五章总结与展望 19参考文献 20附录 21摘要本课题一个基于单片机设计的函数的简单信号发生器。波形发生器设计方法众多,利用单片机设计的函数信号发生器编程简单而且容易控制,利用单片机设计的函数信号发生器能够产生正弦波,锯齿波,三角波,方波,并实现对频率和占空比的调节,以及液晶屏显示波形名称和波形频率,波形的切换和频率的调节以及占空比的改变都可以用按键实现。采用 C语言编写控制程序,优点是运行速度快。经过对系统的调试和运行测试,设计达到预期目标。关键词:单片机,波形发生器,
第一章绪论1.1什么是单片机单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域的广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的32位300M的高速单片机。1.2目前单片机国内外发展现状我国的单片机应用始于80年代,虽然发展迅速,但相对于世界市场我国的占有率还很低。到目前为止,由于我国的微电子技术和制造工艺都比较落后及国外单片机的竞争等原因,我国还没有设计生产出自己的单片机。国内的单片机目前注重的还只是低中档的应用,普遍采用的是8或16位的单片机,对宏单片机和DSP等高档的应用还处于初始阶段。单片机的发展趋势为:低功耗与高性能、低电压、低噪声与高可靠性、采用CMOS技术、外围电路内装、串行扩展技术等。同时,单片机的快速发展也带动着基于单片机的信号发生器的快速发展。随着电子技术的发展,单片机的产品已经渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的足迹。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、家用电器等,这些都离不开单片机。特别是大规模的集成电路的产生,给人们的生活带来了根本性的变化,函数发生器也称信号发生器,主要作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。信号发生器的应用越来越广,对信号发生器的频率稳定度、频谱纯度、频率范围和输出信号的频率微调分辨率提出越来越高的要求,普通的频率源已经不能满足现代电子技术的高标准要求。于是,国内外专家学者开始着手于设计制作先进的信号发生器,然而从实用价值来看,能设计出低成本、高精度的发生器并推广使用具有跨时代的意义。单片机自20世纪70年代问世以来,作为微计算机一个很重要的的分支,应用广泛,发展迅速。美国Intel公司生产的MCS-51系列单片机,由于它具有集成度高、处理功能强、可靠性好、系统结构简单、价格低廉、易于使用等优点被广泛使用。利用单片机采用程序设计的方法,以MCS-51单片机为核心,简单、低廉的元件为骨架,产生精度较高的三角波、正弦波、方波、锯齿波,同时还可以自由调整频率、振幅。相比于传统完全由硬件搭接形成的函数发生器,如不依靠单片机而采用555振荡电路发生正弦波、三角波和方波的电路相比,这种电路存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点。而利用单片机采用程序设计的方法产生低频信号,其具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,同时,还可以对波形进行细微的调整,使其满足要求。普及基于单片机的函数信号发生器也将成为未来发展的一种趋势。1.3波形发生器分类波形发生器应用广泛,类别众多,功能差异较大。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生器、高频波形发生器、甚高频波形发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器;非正弦信号发生器又包括:脉冲信号发生器,函数信号发生器、扫频信号发生器、数字序列波形发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分为一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类信号发生器。后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。1.4本课题研究内容本次设计的主要内容是设计函数信号发生器且可以输出四种波形:方波、三角波、正弦波、锯齿波。利用单片机设计程序,使其能够进行调整波形、改良波形并且满足系统要求。进行硬件系统和软件系统设计,最后进行测试。
第二章:函数信号发生器的设计利用AT89C52单片机采用程序设计方法产生三角波、正弦波、锯齿波以及方波4种波形,采用DAC0832模块将数字信号转换成模拟信号,经过设计的放大电路放大和增强模拟信号,最终由示波器显示出来,通过键盘来控制4种波形的类型选择、频率变化,最终输出显示其各自的类型以及数值。本课程设计需要实现如下几个目标:1、巩固单片机知识,提高综合及灵活运用单片机解决实际问题的能力。2、培养有关手册、图表及文献资料检索能力、实践编程、电路设计等能力。3、通过多种方案设计比较得出最优组合电路设计模型。4、掌握DAC0832、LCD、AT89C52等元器件的使用方法。5、熟悉掌握函数信号发生器的工作原理。本课程设计需要达到的要求:1熟悉组成系统中的实验模块原理,画出实验原理图。2写出完整的设计任务书:课题的名称、系统的功能、硬件原理图、软件框图、元件清单、程序清单、参考资料。3输出几种波形,实现对频率和占空比的调节。
第三章设计方案3.1系统主要功能该函数信号发生器可以输出四种波形,有正弦波,锯齿波,三角波,方波。在此基础上进一步实现对波形频率和占空比的调节,并用液晶屏分两行显示波形名称和波形频率。3.2系统硬件构成及功能函数信号发生器的设计总体框图如图所示,主要有单片机AT89C52,电源,键盘模块,LCD1602显示模块构成。按案件模块:由5个复位开关与74LS21组成的系统通过对单片机传输中断信号来实现波形切换及频率和占空比的调节。显示模块:用LCD1602,分行显示波形类型和波形频率的显示。电源模块:电源模块有220V市变电压经变压,整流,稳压得到+-5V,+-12V的电压,维持系统正常工作。系统的总体框图如图1所示:键盘显示控制器键盘显示控制器显示模块键盘模块波形输出模块电源源AT89C52图1系统框图3.2.1AT89C52单片机及其说明图2.PDIP封装的AT89C52引脚图AT89C52为8位通用微处理器,在内部功能及管脚排布上与通用的8XC52相同,其主要用于会聚调整时的功能控制。功能包括对IC内部寄存器、RAM存储器及外部接口部件等初始化,控制、中断、运算操作的等功能。主要管脚有:RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路,XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。P0~P3为可编程通用I/O脚,其功能用途由软件定义。在本设计中,P0端口(32~39脚)被定义为N1功能控制端口,分别与N1的相应功能管脚相连接,13脚定义为IR输入端,10脚和11脚定义为I2C总线控制端口,分别连接N1的SDAS(18脚)和SCLS(19脚)端口,12脚、27脚及28脚定义为握手信号功能端口,连接主板CPU的相应功能端,用于当前制式的检测及会聚调整状态进入的控制功能。各个引脚功能的功能如下:P0口:是一组8位双向I/O口,即地址/数据总线复用口。在访问程序存储器或者外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。作输出口用时,每位能通过电流驱动8个TTL逻辑门电路,端口P0写“1”时作为高阻抗输入端。在Flash编程时,P0口接收指令字节,而在程序校验时,要求外接上拉电阻,并且输出指令字节。P1口:P1同P0口一样,都是双向端口,但是P1可驱动(吸收或输出电流)4个TTL逻辑门电路。可以作为输入口和输出口使用,端口写“1”时,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,某个引脚被外部信号拉低时会输出一个低电流信号。P1接收低8位地址一般是在Flash编程和程序校验期间。P2口:P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口P2写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,引脚电平拉低后输出。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口会发送高8位地址数据。在和8位地址的外接设备(如执行MOVX@RI指令)接口通讯时,P2口输出内部锁存器数据。Flash编程或校验时,P2口传输一些控制信号和高位地址。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST:复位输入。就是在当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机各个寄存器恢复为原始状态。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)引脚用于锁存的低8位数据地址。一般情况下,ALE引脚始终以晶振频率的1/6输出固定的脉冲信号,其主要用于定时和给外部一种时钟信号发生器。需要提醒的是:每当访问外部数据存储器时将跳过一个ALE脉冲。在使用Flash存储器编程的时候,常常采用该引脚输出编程脉冲信号(PROG)。在硬性要求情况下,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,采用一条MOVX或者MOVC指令将ALE进行选通。值得注意的是,在该引脚会被微弱拉高之后,只有将ALE禁止位无效之后,单片机才可以执行外部程序。PSEN:该引脚输出作为外部程序存储器的读选通信号,在读外部ROM时PSEN低电平有效。在AT89C52通过外部程序存储器读取相关指令时或者数据时,每个机器周期中,会产生2次PSEN脉冲信号。EA/VPP:外部访问允许端口。若果CPU只需要访问外部程序存储器(地址为0000H—FFFFH),此时,必须将EA端口保持低电平或者接地。需注意的是:如果位LB1加密被编程,那么在复位时EA端将会处于锁存状态。当EA端口为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。Flash存储器编程时,该引脚加上+12V的编程允许电源Vpp。XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。特殊功能寄存器:在AT89C52片内存储器中,80H-FFH共128个单元为特殊功能寄存器(SFE),从80H—FFH共128个字节只有一部分被定义,还保留一部分没有定义。对这些未定义的单元进行读写操作都是无效的。不过这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。AT89C52除了与AT89C51所有的定时/计数器0和定时/计数器1外,还增加了一个定时/计数器2。定时/计数器2的控制和状态位位于T2CONT2MOD,寄存器对(RCAO2H、RCAP2L)是定时器2在16位捕获方式或16位自动重装载方式下的捕获/自动重装载寄存器。数据存储器:AT89C52有256个字节的内部RAM,80H-FFH高128个字节与特殊功能寄存器(SFR)地址是重叠的,也就是说在逻辑上,高128字节的RAM和特殊功能寄存器的地址是相同的,但是在物理上分开独立的。当指令访问7FH以上的内部地址单元时,指令使用肯定是不同的寻址方式,也即寻址方式决定是访问高128字节RAM还是访问特殊功能寄存器。如果指令是直接寻址方式则为访问特殊功能寄存器。3.2.2资源分配本设计中,AT89C52微处理器晶振为12MHZ。P1口的P1.0~P1.4分别与键盘的四个按键连接,分别实现控制波形切换、频率加、频率减,占空比加减等操作;其中P2口的P2.0~P2.7分别对应与数模转换器DAC0832的D0~D7数据输入端口;P3口用来控制DAC0832的输入寄存器选择信号CS。3.2.3D/A转换模块部件DAC0832芯片原理及管脚功能介绍(如图3所示)。图3DAC0832管脚图各个引脚功能介绍如下:ILE引脚为数据锁存允许控制信号输入线,高电平有效;CS为片选信号输入线(选通数据锁存器),低电平有效;DI7~DI0引脚为8位的数据输入端;WR1:负脉冲有效,数据锁存器写选通输入线,由ILE、CS、WR1的逻辑组合产生LE1,当LE1的负跳变时将输入数据锁存,为高电平时,数据锁存器状态随输入数据线变化;XFER,低电平有效,负脉冲有效,为数据传输控制信号输入线。IOUT1引脚为模拟电流输出端1,当DAC寄存器中数据全为0时,输出电流为0,当DAC寄存器中数据全为1时,输出电流最大。IOUT2为模拟电流输出端2,IOUT2与IOUT1的和为一个常数,即IOUT1+IOUT2=常数;WR2为DAC寄存器选通输入线,负脉冲有效,由WR2、XFER的逻辑组合产生LE2,当LE2负跳变时,将数据锁存器的内容打入DAC寄存器并开始D/A转换,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化;RFB:反馈电阻引出端,DAC0832内部已经有反馈电阻,所以RFB端可以直接接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。VREF:参考电压输入端,该端与D/A内部T形电阻网络相连,此端可接正、负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,电压范围在(+10~-10)V;Vcc:芯片供电电压,范围为(+5~+15)V;AGND:模拟量地,即模拟电路接地端;DGND:数字量地。3.2.4外部控制模块部件74LS22图474LS22引脚原理图74LS22为四输入双与门电子元件,在此系统中用来给单片机提供中断信号。其中的A1、B1、C1、D1、Y1为第一个与门的输入;A2、B2、C2、D2、Y2为第一个与门的输出。3.2.5放大部分LM324图5LM324引脚图LM324系列器件为带有真差动输入的四运算放大器(其中图5为其元件原理图),价格便宜,性能可靠良好,它有5个引出脚,其中“+”、“-”两个端口为信号输入端,“V+”、“V-”为正、负电源输入端口,“Vo”为信号输出端口。在两个信号输入端中,Vi+(+)为同相输入端,表示运放输出端Vo的信号与该输入端的相位相同,Vi-(-)为反相输入端,表示运放输出端Vo的信号与该输入端的位相反。共模输入范围包括负电源,因而消除了在许多应用场合中采用外部偏置元件的必要性。可以在低到3.0伏或者高到32伏的电源下工作,静态电流为MC1741的静态电流的五分之一。3.3系统的软件设计及接口电路3.3.1信号频率数据采集本设计采用中断、键盘接口按键改变采集信号的频率等技术控制输出信号,单片机内部处理器会通过接收到的外部请求执行输出相应的波形信号。整体电路设计简单,CPU开销较少。3.3.2正弦波产生程序通过读取程序中正弦波离散点数据,通过运算得出一个周期内正弦波信号值(包含256个采样值),而后对信号进行调频,通过输出的两点间的延时来实现。不断的循环输出,可得出正弦波。正弦波发生程序如下:voidsin()//正弦波{ unsignedinti; for(i=0;i<256;i++) { DAC0832=table2[i]; delay(pinlv/256); }}3.3.3三角波产生程序设个自变量i让它不断地自加1,使得t=i,直到增加到255时,t自变量不断地自减1,直到自变量t=0,循环不断的执行上述步骤即可得到希望的三角波。程序如下:voidtran()//三角波{ unsignedchari; for(i=0;i<255;i++) { DAC0832=i; delay(pinlv/64); } for(i=255;i>0;i--) { DAC0832=i; delay(pinlv/64); }}3.3.4方波产生程序设个自变量i=0使之延时一段时间T,而后使i=255,然后延时相同的时间,不断的重复上述过程,即可得到方波。程序如下:voidfang()//方波{DAC0832=0;delay(pinlv/2);DAC0832=0xff;delay(pinlv/2);}3.3.5锯齿波产生程序锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同的周期锯齿波。锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用延时法,来产生锯齿波,设个自变量i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程。程序如下:voidjvchi()//锯齿波{ unsignedchari; for(i=0;i<255;i++) {DAC0832=i; delay(pinlv/256);}}3.3.6信号放大模块设计由于从单片机中输出的数字信号经过DAC0832转换后,所得的模拟信号幅度值比较微弱,需要对其增强和放大。采用常规方法进行放大处理,本设计采用两片运放电路,最终版实现两级放大,设计的电路如图6所示。图6放大电路3.3.7数模转换模块设计本设计模数转换采用常见的芯片DAC0832进行直通方式进行模数转换。为了方便简洁,在仿真图中采用无网络节点背景进行布线,单片机P0口和模数芯片DAC0832的数据口连接来实现数据的传输和转换,如图7所示。图7DAC0832模块接口电路
第四章仿真图及结果分析4.1波形发生器的调试与测试本系统采用软件protues进行仿真,使用Keil编写单片机控制程序。最终实现整个系统的构建和仿真功能。在测试本系统是采用的是将设置的数值与示波器所测值进行对比,进而可以知道本系统的性能。频率测试数据:表1示波器参数设计设定频率(HZ)示波器测试频率(HZ)相对误差%3.93.961.57.87.931.2815.6316.133.194.2仿真结果图4.2.1三角波仿真图图8正弦波仿真图4.2.2方波仿真图图9三角波仿真图4.2.3锯齿波仿真图图10锯齿波仿真图4.2.4正弦波仿真图图10正弦波仿真图
第五章总结与展望通过这次毕业设计,主要涉及了AT89C52和DAC0832等电子元件,系统采用模块设计,简单方便,容易为后续的开发拓展及完善。用户可以通过模拟的开关进行选择波形发生器的信号类型和频率等参数。本系统的设计,采用的是C语言编写控制程序。C语言具有速度快,简洁高效,是最贴近硬件的高级编程语言,可以直接对硬件进行操作的优点,在控制中得到广泛应用。虽然在设计中遇到许多的问题以及困难,但是只要通过查阅相关文献和多通过实践可以找到很好解决办法。比如:在程序设计中如何实现程序结构的最优化,以达到较高的质量。这是以后设计中要注意的问题。通过这次课程设计,让我对波形发生器理论原理和设计有了比较深入的认知,同时在设计的过程中,接触了许多的元器件,知识面得到拓展,编程方面,巩固了C语言知识,达到学以致用的目的,使我获益匪浅。当然,动手能力得到很多的锻炼,认识到知识和实践的运用结合可以达到无法比拟的效果。
参考文献[1]鲜国勇.基于51单片机和DAC0832波形发生器的设计[N].电子报,2014-08-17(009).[2]石蕊,赵海阔,赵宇杰,刘昊.基于单片机的简易波形发生器的设计[J].无线互联科技,2013(10):162.[3]邓书豪.基于MSP430单片机的波形发生器设计[J].电子制作,2013(10):9.[4]吴小慧.基于MSP430单片机和MAX038芯片的信号发生器设计[D].苏州大学,2013.[5]谢增忠.基于单片机的波形发生器的硬件设计[J].数字化用户,2013,19(03):26-27+29.[6]洪惠宇.基于单片机的简易波形发生器电路的设计[J].南京工程学院学报(自然科学版),2012,10(04):67-72.[7]吴兴波,贾彬彬,赵亮.基于单片机的三相正弦波发生器设计[J].吉林化工学院学报,2012,29(09):86-89.[8]李季.基于C8051F120型单片机的任意波形发生器[J].仪表技术,2012(06):10-12+52.[9]李正周,郑微,田蕾,黄扬帆.基于DSP的波形发生器的课程设计分析[J].电气电子教学学报,2011,33(03):61-63.[10]管力锐,魏丽娜.单片机波形发生器的硬件系统设计[J].考试周刊,2011(35):140-141.
附录附录1源程序:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint//#defineFosc24000000/12000000//12分频后的频率#defineDAdataP0 //DA数据端口sbitDA_S1=P2^0;//控制DAC0832的8位输入寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbitDA_S2=P2^1;//控制DAC0832的8位DAC寄存器,仅当都为0时,可以输出数据(处于直通状态),否则,输出将被锁存sbitkey=P3^2;ucharwavecount;//'抽点'计数ucharTHtemp,TLtemp;//传递频率的中间变量//uintT_temp;ucharjudge=1;//在方波输出函数中用于简单判别作用ucharwaveform; //当其为0、1、2时,分别代表三种波ucharcodefreq_unit[4]={10,50,200,10};//三种波的频率单位 sawtoothucharidatawavefreq[4]={1,1,1,1}; //给每种波定义一个数组单元,用于存放单位频率的个数ucharcodelcd_hang1[]={"SineWave""TriangleWave""SquareWave""sawtoothWave""SelectWave:""pressNo.1key!"};ucharidatalcd_hang2[16]={"f=Hz"};/*ucharcodewave_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};uintcodewave_freq_adjust[]={//频率调整中间值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};*/ /*ucharcodewaveTH[]={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};ucharcodewaveTL[]={0xf2,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};*//***********这两组数组很重要,需要根据波形来调试,选择合适的值,使输出波形达到频率要求************/ucharcodewaveTH[]={0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe};ucharcodewaveTL[]={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};/*************************************************************************************************/ucharcodetriangle_tab[]={ //每隔数字8,采取一次 0x00,0x08,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,0x10,0x08,0x00};ucharcodesine_tab[256]={ //输出电压从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,0xf6,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,0x90,0x8d,0x89,0x86,0x83,0x80, //输出电压从0到最小值(正弦波1/4部分) 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,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //输出电压从最小值到0(正弦波1/4部分) 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,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};ucharcodesawtooth_tab[]={ 0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e, 0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e, 0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e};// 0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe,// 0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee};voiddelay(ucharz) {uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voidtriangle_out() //三角波输出{ DAdata=triangle_tab[wavecount++]; if(wavecount>64)wavecount=0; DA_S1=0;//打开8位输入寄存器 DA_S1=1;//关闭8位输入寄存器}voidsine_out() //正弦波输出{ DAdata=sine_tab[wavecount++]; DA_S1=0;//打开8位输入寄存器 DA_S1=1;//关闭8位输入寄存器}voidsquare_out()//方波输出{ judge=~judge;if(judge==1)DAdata=0xff; elseDAdata=0x00; DA_S1=0;//打开8位输入寄存器 DA_S1=1;//关闭8位输入寄存器}voidsawtooth_out()//锯齿波输出{ DAdata=sawtooth_tab[wavecount++]; if(wavecount>71)wavecount=0; DA_S1=0;//打开8位输入寄存器 DA_S1=1;//关闭8位输入寄存器}/************1602液晶的相关函数*************/#definelcd_portsP1sbitrs=P2^2;sbitrw=P2^3;sbitlcden=P2^4;voidwrite_com(ucharcom){ rs=0; //置零,表示写指令 lcden=0; lcd_ports=com; delay(5); lcden=1; delay(5); lcden=0; }voidwrite_date(uchardate){ rs=1; //置1,表示写数据(在指令所指的地方写数据) lcden=0; lcd_ports=date; delay(5); lcden=1; delay(5); lcden=0; }voiddisp_lcd(ucharaddr,uchar*temp1){ ucharnum; write_com(addr); delay(1);//延时一会儿??? for(num=0;num<16;num++) { write_date(temp1[num]);//或者这样写write_date(*(temp1+num)); delay(1); }}voidinit_lcd(){ //ucharnum; lcden=0;//可有可无??? rw=0;//初始化一定要设置为零,表示写数据 write_com(0x38);//使液晶显示点阵,为下面做准备 write_com(0x0c);//初始设置 write_com(0x06);//初始设置 write_com(0x01);//清零 write_com(0x80);//使指针指向第一行第一格disp_lcd(0x80,&lcd_hang1[4*16]);//在第一行显示disp_lcd(0xc0,&lcd_hang1[5*16]);//在第二行显示 /*for(num=0;num<16;num++) { write_date(table[num]); delay(5); } write_com(0x80+0x40);//给指针重新赋值,使之指向第二行第一格 for(num=0;num<16;num++) { write_date(table1[num]); delay(5); }*/ /*TMOD=0x01; //选用定时方式1 TH0=(65536-50000)/256;//赋初值 TL0=(65536-50000)%256; // EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //启动定时器*/ }/********************1602液晶函数声明结束*********************/voidmain(){uchari=0; DA_S2=0;//使DAC寄存器处于直通状态 DAdata=0; DA_S1=1;//关闭8位输入寄存器 init_lcd();
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑垃圾分拣工安全操作规程
- 2026年康复师物理因子疼痛治疗专项试卷及答案
- 冷凝器安全操作规程
- PCB电测岗位专业试题及详细答案
- 血栓后综合征肢体水肿长期管理共识
- 自身免疫性肝病骨代谢监测方案共识
- 2025内镜清洗消毒知识考核试题(护理、洗消)及答案
- 农田喷灌系统安装调试方案
- NPDP产品开发专业认证模拟试题
- 高压旋喷桩止水帷幕施工方案
- 2026重庆日报报业集团所属企业招聘2人笔试历年典型考点题库附带答案详解
- GB/T 31897.1-2025灯具性能第1部分:一般要求
- 武汉市建设工程文明施工管理办法
- 光伏电安全管理协议书
- 2025年bec初级真题答案解析
- 测绘地理信息安全保密管理制度
- 基本药物使用及采购情况统计分析
- 2025人教版高一化学全册知识点归纳总结(复习资料)
- 智能制造生产管理课件
- 北京市丰台区2024-2025学年八年级上学期期末考试生物试卷
- 场地平整土方施工合同范本
评论
0/150
提交评论