毕业设计(论文)-基于MCS—51单片机在波形发生器中的设计.doc_第1页
毕业设计(论文)-基于MCS—51单片机在波形发生器中的设计.doc_第2页
毕业设计(论文)-基于MCS—51单片机在波形发生器中的设计.doc_第3页
毕业设计(论文)-基于MCS—51单片机在波形发生器中的设计.doc_第4页
毕业设计(论文)-基于MCS—51单片机在波形发生器中的设计.doc_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图纸,联系153893706基于mcs51单片机在波形发生器中的设计 摘 要:本系统是基于at89c51单片机的数字式低频信号发生器。采用at89c521单片机作为控制核心,外围采用数字/模拟转换电路(dac0832)、运放电路(lm365)、按键和8位数码管等。通过按键控制可产生方波、锯齿波、三角波、正弦波等,同时用数码管指示对应的波形。其设计简单、性能优良,可用于多种需要低频信号源的场所,具有一定的实用性。关键词: at89c51;dac0832;lm365;8位数码显示管the design of waveform generator base on mcs-51 single chip computerabstract:waveform the system is a digital signal generator based on single chip computer. at9c51 is used as a control microcontroller core.the system is composed by digital/analog comversion(dac0832), imply circuit,button and nixie tube.it can generate the square, triangle and sine wave,with nixie tube.the system can be used for a signal soure in the low-frequency signal soure.it is very practical.keywords:at89c51;da0832;lm324;8 nixie tube display1 前言波形发生器也称函数发生器,作为实验信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿波,正弦波,方波,三角波等波形。本设计为一个能产生一路正弦波、三角波、锯齿波或方波信号的波形发生器,要求输出波形幅度为0-10v,并可调整;输出波形频率在0-20khz范围内可调整。2 波形发生器的概括及其发展状况在电子工程、通信工程、自动控制、遥测控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。随着集成电路的迅速发展,用集成电路可很方便地构成各种信号波形发生器。用集成电路实现的信号波形发生器与其它信号波形发生器相比,其波形质量、幅度和频率稳定性等性能指标,都有了很大的提高3。波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。函数波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域15。在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、方波、三角波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节21。在 70 年代后,微处理器的出现,可以利用处理器、a/d/和 d/a,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对 dac的程序控制,就可以得到各种简单的波形。 90 年代末,出现几种真正高性能、高价格的函数发生器、但是hp公司推出了型号为 hp770s的信号模拟装置系统,它由 hp8770a任意波形数字化和 hp1776a波形发生软件组成。hp8770a实际上也只能产生8 中波形,而且价格昂贵。不久以后,analogic公司推出了型号为 data-2020的多波形合成器,lecroy 公司生产的型号为9100 的任意波形发生器等6。 到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过 ghz 的dds 芯片,同时也推动了函数波形发生器的发展,2003 年,agilent的产品 33220a能够产生 17 种波形,最高频率可达到 20m,2005 年的产品n6030a 能够产生高达 500mhz 的频率,采样的频率可达 1.25ghz。由上面的产品可以看出,函数波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面15:(1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的函数段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成 v=f (t)形式的波形方程的数学表达式产生。从而促进了函数波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如visual basic ,visual c 等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。 (2)与vxi资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的vxi模块。由于vxi总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用vxi系统测量产生复杂的波形,vxi的系统资源提供了明显的优越性,但由于开发vxi模块的周期长,而且需要专门的vxi机箱的配套使用,使得波形发生器vxi模块仅限于航空、军事及国防等大型领域。在民用方面,vxi模块远远不如台式仪器更为方便。 (3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半8。3 方案论证信号发生器的实现方法通常有以下几种:方案一;用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不稳定,不易调试。方案二;可以由晶体管、运放ic等通用器件制作,更多的则是用专门的函数信号发生器ic产生。早期的函数信号发生器ic,如l8038、ba205、xr2207/2209等,它们的功能较少,精度不高,频率上限只有300khz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。方案三;利用专用直接数字合成dds芯片的函数发生器:更够产生任意波形并达到很高的频率。但成本较高。方案四;采用at89c51单片机和dac0832芯片,直接连接键盘和显示。该种方案主要对at89c51单片机的各个i/o口的充分利用,p1口是连接键盘以及接显示器电路,p2口连接dac0832输出波形。这样总体来说,能对单片机各个接口都利用上,而不再多用其他芯片,从而减少了系统成本,也对按照系统便携式低频信号发生器的要求所完成。占用空间小,使用芯片少,低功耗。综合考虑,方案四各项性能和指标都优于其他几种方案,能使输出频率有较好的稳定性,充分体现了模块设计的要求,而且这些芯片及器件均为通用件,在市场上较常见,价格也低廉,样品制作成功的可能性比较大,所以本设计采用方案四。4 硬件电路的设计4.1 总体方案设计利用at89c51单片机外接数模转换器和运算放大电路,由用户通过按键选择输出实验室中经常使用到的几种基本波形:方波、锯齿波、正弦波和三角波。方波由at89c51单片机将最大值和最小值输出给进行转换,并由用户通过键盘选择波形周期。与微处理器兼容的8位数模转换器dac0832将数字量转换为模拟量电压信号,通过运放电路得到锯齿波、正弦波、三角波信号,波形保证了它的精度、平滑和稳定。可采用单片机程序产生以上4种波形,并通过一片转换器输出。另外,采用一片转换器来控制前一片a转换器的参考电压,从而可以改变输出波形幅值,见图1所示。通过外接键盘来设定波形的类型、幅值和频率,并在扩展的七段led显示器上显示响应的波形的类型、幅值和频率。at89c51单片机时钟电路采用内部方式,外接陶瓷谐振器(频率为12mhz),微调电容值为30pf。系统复位采用按键式外部复位方式,复位信号至少保持8us以上。通过按键由用户选择要输出的波形,按键选择占用p10p17口,采用独立式键盘结构,框图如图1所示。键盘单片机运算放大d/a转换d/a转换运算放大显示器 图1 波形发生器原理框图 fig 1 functiongal block diagram of waveform generator4.2 at89c51 单片机简介at89c51 是一种带4k 字节flash 存储器的低电压、高性能cmos 8 位微处理器,俗称单片机。该芯片具有优异的性价比,集成度高,体积小,可靠性强,控制功能强等优点。其外形及引脚排列如图2 所示。管脚功能说明vcc:供电电压。gnd:接地。p0 口:p0 口为一个8 位漏级开路双向i/o 口,每脚可吸收8ttl 门电流。当p0口的管脚第一次写1是,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址第八位。在fiash编程时,p0口作为源码输入口, 图 2 at89c51引脚图 fig 2 the pin chart of at89c51当p0 口的管脚第一次写1 时,被定义为高阻输入。p0 能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash 编程时,p0 口作为原码输入口,当fiash进行校验时,p0 输出原码,此时p0 外部必须被拉高;p1 口:p1 口是一个内部提供上拉电阻的8 位双向i/o 口,p1 口缓冲器能接收输出4ttl 门电流。p1 口管脚写入1 后,被内部上拉为高,可用作输入,p1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash 编程和校验时,p1 口作为第八位地址接收;p2 口:p2 口为一个内部上拉电阻的8 位双向i/o 口,p2 口缓冲器可接收,输出4个ttl 门电流,当p2 口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2 口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2 口当用于外部程序存储器或16 位地址外部数据存储器进行存取时,p2 口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2 口输出其特殊功能寄存器的内容。p2 口在flash 编程和校验时接收高八位地址信号和控制信号。p3 口:p3 口管脚是8 个带内部上拉电阻的双向i/o 口,可接收输出4 个ttl 门电流。当p3 口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3 口将输出电流(ill)这是由于上拉的缘故/psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。xtal2:来自反向振荡器的输入。4.3 dac0832芯片原理管脚功能介绍(如图3所示)di7di0:8位的数据输入端,di7为最高位。ile:数据锁存允许控制信号输入线,高电平有效。/cs:选片信号输入线(选通数据锁存器),低电平有效。/wr1:数据锁存器写选选通输入线,负脉冲有效,由ile、/cs、/wr1的逻辑组合产生/le1,当/le1为高电平时,数据锁存器状态随输入数据线变化,/le1的负跳变时将输入数据锁存。/xfer:数据传输控制信号输入线,低电平有效,负脉冲有效。/wr2:dac寄存器选通输入线,负脉冲有效,由/wr2、/xfer的逻辑组合产生/le2,当/le2为高电平时,dac寄存器的输出随寄存器的输入而变化,/le2的负跳变时将数据锁存器的内容打入dac寄存器并开始d/a转换。iout1:模拟电流输出端1,当dac寄存器中数据全为1时,输出电流最大,当 dac寄存器中数据全为0时,输出电流为0。iout2:模拟电流输出端2, iout2与iout1的和为一个常数,即iout1iout2常数。rfb:反馈电阻引出端,dac0832内部已经有反馈电阻,所以 rfb端 可以直图3 dac0832管脚图fig 3 the pin of dac0832 接到外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器的输出端和输入端之间。vref:参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,vref范围为(+10-10)v。vref端与d/a内部t形电阻网络相连。vcc:芯片供电电压,范围为(+5+15)v。agnd:模拟量地,即模拟电路接地端。dgnd:数字量地。 当wr2和xfer同时有效时,8位dac寄存器端为高电平“1”,此时dac寄存器的输出端q跟随输入端d也就是输入寄存器q端的电平变化;反之,当端为低电平“0”时,第一级8位输入寄存器q端的状态则锁存到第二级8位dac寄存器中,以便第三级8位dac转换器进行d/a转换。一般情况下为了简化接口电路,可以把wr2和xfer直接接地,使第二级8位dac寄存器的输入端到输出端直通,只有第一级8位输入寄存器置成可选通、可锁存的单缓冲输入方式。 特殊情况下可采用双缓冲输入方式,即把两个寄存器都分别接成受控方式。制作低频信号发生器有许多方案:主要有单缓冲方式,双缓冲方式和直通方式。单缓冲方式具有适用于只有一路模拟信号输出或几路模拟信号非同步输出的情形的优点,但是电路线路连接比较简单。而双缓冲方式适用于在需要同时输出几路模拟信号的场合,每一路模拟量输出需一片dac0832芯片,构成多个dac0832同步输出电路,程序简单化,但是电路线路连接比较复杂。根据以上分析,选择了单缓冲方式使用方便,程序简单,易操作。这里采用dac0832与单片机89s52的典型的单缓冲方式接口电路。ile接高电平,/wr1和/wr2相连后接89s52的/wr,/cs和/xfer相连后接89s52的地址高位,这样就同时片选了dac0832的数据锁存器和dac寄存器,89s52对dac0832执行一次写操作就把一个数据写入数据锁存器的同时也直接写入到了dac寄存器,模拟量输出随之变化。dac0832的输出是电流,使用运算放大器可以将其电流输出线性地转换成电压输出。根据运算放大器和dac0832的连接方法,运算放大器的输出可以分为单极性和双极性两种。这里采用双极性方式如图4所示。4.4 d/a转换器与单片机的接口电路在本设计中选用dac0832的单缓冲工作方式,它与单片机at89c51的接口电路如图5所示。按应用要求的不同,dac0832可以接成单极性电压输出和双极性电压输出,当数字量在00ff范围时,电压输出量若为0+xv或0-xv,这种输出方式称为单极性电压输出方式;若电压的输出为-xv-+xv,则为双极性电压输出方式。本课题根据实际要求选择ic3为单极性输出和ic4为双极性电压输出。波形输出电路主要由两片8位d/a转换器dac0832和相关运算放大器组成,见表1 中相应部分:图4 dac0832双极性电压输出电路fig 4 dac0832 dual polarity voltage output circuit表1 输入量于输出电压的关系 table 1 the relation of input circuit and output woltagemsb输入码lsb模拟输出电压1111111+127/128vref1000000+1/128 vref100000000111111-1/128 vref0000000-127/128 vref0000000-128/128 vref 图5 dac0832与单片机at89c51的接口电路fig 5 interface circuit of dac0832 and at89c51 其中一片dac0832(ic4)和单运算放大器(ic6)组成波形的输出部分,他采用双极性输出方式,这样给dac0832输入不同的数码,不难分析其输出电压范围为-vref+vref,见表1所示,vref为该片d/a转化器的参考电压。另一组dac0832(ic3)的参考电压接到+5电源上,它和单运算放大器(ic5)组成的单极性d/a转换电路,其输出电压加到前一片dac0832的参考电压端vref。当此片dac0832输入0255数字时,输出为0+5v,从而调节前一片dac0832的输出电压为-5+5v,达到改变输出波形输出值的目的。这两片dac0832都结成单缓冲器输入方式。4.5 晶振电路的设计单片机的晶振电路是一种典型电路,晶振频率一般选择在4mhz-12mhz之间,外接两个晶振电容,该电容的典型值为30pf。这里选用晶振频率为12mhz,晶振电容为33pf。如图6所示:图6 单片机的晶振电路fig 6 the crystal oscillating circuit of single chip computer4.6 复位电路设计单片机的复位电路和计算机的重复是一样的概念。一般的复位只需要8us的时间。如图7所示只需在单片机的rst引脚上加上高水平,时间不少于8us就可以时单片机复位。复位电路时单片机系统的典型外围电路。图7 复位电路fig 7 reset circuit4.7 输入电路键盘的接口电路在单片机控制系统中,为了实现人对系统的操纵控制及向系统输入参数,都需要为系统设置按键或键盘,实现简单的人机会话。键盘是一组(通常多于8个)按键的集合。键盘所使用的按键一般都是具有一对常开触点的按键开关,平时不按键时,触点处于断开(开路)状态,当按下按键时,触点才处于闭合(短路)状态,而当按键被松开后,触点又处于断开状态。根据键盘上闭合键的识别方法不同,键盘可分为非编码键盘和编码键盘两种。非编码键盘上,闭合键的识别采用软件实现;编码键盘上,闭合键的识别则由专门的硬件译码器产生按键的编号(即键码),并产生一个脉冲信号,以通知cpu接受键码。编码键盘使用较为方便,易于编程,但硬件电路较为复杂,因此在单片机的控制系统中应用较少。而非编码键盘几乎不需要附加什么硬件电路,因此在实际单片机控制系统中较多采用。从键盘的结构来分,键盘可分为独立式和矩阵式两类。当系统操作比较简单,所需键盘较少时,可采用独立式非编码键盘;而当系统操作比较复杂,需要数量较多的按键时,可采用矩阵式非编码键盘。在本课题设计中,采用的是独立式键盘。其电路图如图8所示。图8 键盘与单片机接口电路fig 8 interface circuit输出波形种类、幅值和频率的设定由键盘输入。由于单片机的pi口不作它用,可用它扩展一个4行*4列键盘。键盘的4根行线接到单片机的p1.0p1.3口线,4根列线接p1.4p1.7口线。16个按键分别定义为数字09和功能键enter(确认键)、clear(清除键)、wave(波形选择键)、frequenency(改变频率键)、amplitude(改变幅值键)和(小数点键)。4.8 显示电路的设计当前输出波形的种类、幅值和频率需要显示出来。由于单片机的串行不作它用,可用它接8片串入并出移位寄存器来扩展8位7段led显示器,l1l4用于显示输出波形的频率;l5l7用于显示输出波形的幅值,l6的小数点接+5v,常亮,则可显示0.0v到10.0v;l8用于显示波形的种类,1表示正弦波,2表示方波,3表示三角波,4表示锯齿波,如图9: 图9显示电路fig 9 display circuit5 软件模块的设计按照波形发生器的功能,其应用程序一般有初始化、波形产生、键盘管理和显示等几部分,现将各主要软件模块介绍如下。5.1 初始化模块初始化程序模块主要进行设置定时器、串行口的工作方式,设置波形的类型、幅值和频率,并在显示器上显示提示字符12345678等工作。这部分程序如下:mov tmod,#02h ;设置定时器0为方式2工作mov tl0,#7fh ;置初值mov th0,#7fhclr tr0 ;不启动mov scon,#00h ;将串行口初始化为方式0mov dptr,#0fffdh ;ic3的地址送dptrmov a,#0ffhmovx dptr,a ;输出波形的幅值初始化为10vmov dptr,#0fffeh ;ic4的地址送dptrmov a,#80hmovx dptr,a ;输出设定为0mov wavkd,#01h ;波形类型初始化为1,即正弦波5.2 波形产生模块四个基本波形的输出:正弦波、三角波、锯齿波、方波。正弦波采用定点来生成波形,即将一个周期的正弦波360等分为若干点,计算各点的正弦函数值,并转化为相应的d/a转化器输入数值,这样才得到一个正弦函数表。通过程序将该表存于单片机的程序存储器中,利用单片机的定时器来生成定时,每当定时时间到时,查表得到改点对应的输出值,然后通过d/a转换得到改点的对应电压值。如此,周而复始的查表输出,就得到所要的正弦波。三角波的产生类似于正弦波,在建立一个三角波的函数表就可以了。锯齿波的产生方法是:每隔一个时间段,就递增输出到d/a转换器中的数值。经过一个周期后,把输出到d/a转换器中的数值清零就得到锯齿波。方波的产生比较简单,只要交替地将最大值和最小值输出给到d/a转化器进行转换即可,他们的延续时间为周期的一半。5.2.1 正弦波产生程序由于正弦波的对称性,可将其分为四个相同部分,在这里称为四个象限。只要做第一象限的数据表即可,第二象限的数据表于第一象限相同,单输出时要反查表;第三第四象限输出只要将第一第二象限查表得到的数据取反即可。正弦波产生程序流程图如图10其程序清单如下:setb trosinwav: mov ro,#00h ;查表指针初始化为0 图10 正弦波产生程序流程图 fig 10 sine wave program flow chartmov a,r0 movc a,a+dptrsinlp1: mov dptr,#sintab ;正弦波函数表地址送dptrmov a,r0movc a,a+dptr ;mov dptr,#0fffeh ;ic4地址送dptrmovx dptr,a ;输出数据给d/aclr tfoinc rocjne ro,#13h,sintab ;sinlp2: jnb tfo,sinlp2 ;由定时器控制频率clr tfoinc rocjne ro,#13h,sintab ;mov a,romovc a, a,romovc a, a+dptr ;mov dptr,#fffeh ;ic4f 地址送dptrmovx dptr,a movc a, a,romovc a, a+dptr ;mov dptr,#fffeh ;ic4f 地址送dptrmovx dptr,a sinlp4:jnb tfo ,dinlp4 ;由定时器控制频率clr tfodec rocjne ro,#ooh,sinlp3 ;sinlp5: mov dptr,#sintab ;正弦波涵数表表地址送dptrmov a,ro movc a, a+dptr ;cpl a;取反mov dptr,#offfeh ;ic4地址送dptrmovx dptr,a ;输出数据给d/asinlp6: jnb tfo,sinlp6 ;由定时器控频率clr tfoinc rocjne ro,#13h,sinlp6 ;sinlp7:mov dptr,#sintab ;正弦波函数表地址送dptr mov a,r0 movc a,a+dptr ; cpl a ;取反 mov dptr,#0fffeh ;ic4地址送dptr movx dptr,asinlp8:jnb tf0,sinlp8 ;由定时器控制频率 clr tf0 dec r0 cjne r0,#00h,sinlp7 ; sjmp sinwav ;输出下一个周期sintab:db 7fh,89h,94h,9fh,0aah,0b4h,0beh,0c8h,0d1hdb 0e0h,0e7h,0edh,0f2h,0f7h,0fah,0fch,0feh,0ffh5.2.2 三角波产生程序三角波产生程序和正弦波类似,其流程图如图11程序清单如下: setb tr0triwav:mov r0,#00h ;查表指针初始化为0trilp1:mov dptr,#tritab ;正弦波函数表地址送dptr mov a,r0 movc a,a+dptr ; mov dptr,#0fffeh ;ic4地址送dptr movx dptr,a ;输出数据给d/a trilp2:jnb tf0,trilp2 ;由定时器控制频率 clr tf0图11 三角波产生程序流程图fig 11 trianglar wave program flow chartinc r0 cjne r0,#13h,trilp1 ;trilp3:mov dptr,#tritab ;正弦波函数表地址送dptrmov a,r0 movc a,a+dptr ; mov dptr,#0fffeh ;ic4地址送dptr movx dptr,atrilp4:jnb tf0,trilp4 ;由定时器控制频率 clr tf0 dec r0 cjne r0,#00h,trilp3 ;trilp5:mov dptr,#tritab ;正弦波函数表地址送dptr mov a,r0 movc a,a+dptr ; cpl a ;取反 mov dptr,#0fffeh ;ic4地址送dptr movx dptr,a ;输出数据给d/a trilp6:jnb tf0,trilp6 ;由定时器控制频率 clr tf0 inc r0 cjne r0,#13h,trilp6 ;trilp7:mov dptr,#tritab ;正弦波函数表地址送dptr mov a,r0 movc a,a+dptr ;查表 cpl a ;取反 mov dptr,#0fffeh ;ic4地址送dptr movx dptr,atrilp8:jnb tf0,trilp8 ;由定时器控制频率 clr tf0 dec r0 cjmp triwav ;输出下一个周期 cjne r0,#00h,trilp7 ;第四象限出完了吗? sjmp triwav ;输出下一个周期tritab:db 7fh,86h,8dh,94h,9bh,a2h,a9h,b0h,b7h,beh db c5h,cch,d3h,dah,e1h,e8h,efh,f6h,0fdh5.2.3 锯齿波的产生程序锯齿波的产生原理在设计思路已经讲过。为了使锯齿波的频率和正弦波、三角波保持一致,这里使锯齿波每一定时间增加量一次为3、4,每周期循环36次。锯齿波产生程序流程图如图12程序清单如下: setb tr0sowwav: mov dptr,#0fffeh ;ic4地址送dptr mov r0,#00h ;波形输出初值为0 inc r0 ;r0加1 mov a,r0movx dptr,a ;r0加4 cjne r1,#24h,sowlp1 ;计数36次为一周期 sjmp sowwavmov r1,#00h ;计数器初值为0sowlp1: mov a,r0 movx dptr,a ;输出数据给d/aclr tf0inc r0 ;r0加1 inc r0 mov a,r0sowlp2: jnb tf0,sowlp2 ;由定时器控制频率 clr tf0inc r0 ;r0加1 inc r0 mov a,r0inc r0 ;r0加1 mov a,r0时间到了吗?r0加4r0送d/ar0加3r0送d/ar0=00h开始时间到了吗?nyyny图12 锯齿波产生程序流程图fig 12 sawtooth wave program flow chartmovx dptr,a ;r0加2sowlp3: jnb tf0,sowlp3clr tf0 inc r0 ;r0加3 inc r1 ;计数器r1加1 cjne r1,#24h,sowlp1 ;计数36次为一周期 sjmp sowwavsowlp4: jnb tf0,sowlp2 ;由定时器控制频率 clr tf0inc r0 ;r0加1 inc r0 mov a,r0clr tf0 inc r0 ;r0加3 inc r1 ;计数器r1加1 cjne r1,#24h,sowlp1 ;计数36次为一周期r0加45.2.4 方波的产生程序方波的产生设计思路中已将讲过,只要交替地将最大值和最小值输出给到d/a转化器进行即可,他们的延续时间为周期的一半。这里的周期为72个设定时间。方波产生程序流程图如图13其程序清单如下: setb tr0boxwav:mov dptr,#0fffeh ;ic4地址送dptrboxlp1:mov a,#0ffh ;高脉冲movx dptr,a ;输出数据给d/aboxlp2:jnb tf0,boxlp2 ;由定时器控制频率 clr tf0开始offh送d/a时间到了吗?时间到了吗?00h送d/hnyny图13 方波产生程序流程图fig 13 square wave program flow chart inc r0 cjne r0,#36,boxlp2 ;计数36次为一周期mov a,#00h ;低脉冲 movx dptr,a ;输出数据给d/aboxlp3:jnb tf0,boxlp3 ;由定时器控制频率 clr tf0 dec r0cjne r0,#36,boxlp3 sjmp boxlp15.3 键盘管理模块输出波形种类、幅值、频率的设定由键盘输入。由于单片机的p1口不做它用,可以用它扩展一个4*4键盘。键盘的4根行线接到单片机p1-p1.3口线,4根列线接到接口p1.4-p1.7口线。16个按键分别定义为数字09和功能键enter、clear、wave、frequency、amp;itude和小数点。可采用“行扫描”方法对键盘进行管理,首先对键盘进行“全盘扫描”,判断是否有键按下。若有按键按下则对键盘进行“逐行扫描”,进行键译码,并将该键的键码读出来,然后按各命令键转到相应程序进行处理。5.3.1 键盘全盘扫描部分键盘的全盘扫描主要是判断是否有键按下,该子程序清单如下:scankey: mov a,#0f0h mov p1,a ;p1口行线置为全0列线置为全1 mov a,p1 ;读p1口 anl a, #ofoh ;列信号在高4位 xrl a,#ofoh ;判断有键合上否? jz dankey ;无键合上再扫描检查 lcall delay ;有键合上,调延时子程序去抖动mov a,#0f0h mov p1,a ;p1口行线置为全0列线置为全1 mov a,p1 ;读p1口 anl a, #ofoh ;列信号在高4位 xrl a,#ofoh ;判断有键合上否? jz dankey ;无键合上再扫描检查 ret5.3.2 键盘逐行扫描部分判断有键按下后,下一步是将判断具体是哪一个键按下,并将其码读出。不难得到其他按键的特征码,见表2所示:表2 按键与特征码的关系table 2 the relationship between keyswitch and condion code按键 0 1 2 3 4 5 6 7特征码 81h 82h 42h 22h 84h 44h 24h 88h按键 8 9 wave amplitude frequecy enter lear 。特征码 84h 28h 18h 14h 12h 11h 21h 41h按照上述原理,本逐行扫描程序先逐行扫描获取合上键的行信号和列信号,并组合成特征码,然后按此特征码查表识别该全上键的含义。程序如下:rdkey: movlinecod,#ofeh ;第一行线置为低电平,为扫描作准备keyb1: movxa,lincod ;逐行扫描 mov p1, a mova , p1 ;读列信号 anla,#ofoh ,读信号再高4位 mov rowcod,a ;列信号暂存rowcod cjne a,#ofoh,keyb2 ;该行有键合上,转键译码 mov a, linecod rl a ;为扫描下一行做准备 mov linecod, a xrl a,#0efh ;检查是否各行都扫描了一遍 jnz keyb1 ;未扫描完一次继续 sjmp keyrt ;退出 keyb2: movxa,lincod anla,#ofoh ,行信号在低4位 mov rowcod,a ;列信号暂存rowcod cjne a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论