波形发生器的设计_第1页
波形发生器的设计_第2页
波形发生器的设计_第3页
波形发生器的设计_第4页
波形发生器的设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、波形发生器的设计摘 要文章设计了一种由at89c52单片机和dac0832转换器构成的波形发生器,对波形产生的原理、方法、频率控制进行了叙述,并对外围扩展电路如:电源电路、按键电路、复位电路和时钟电路做出了详细说明。给出程序中延时计算的具体方法和程序的书写方法。采用单片机生成波形,由于是软件滤波,所以不会有寄生的高次谐波分量,生成的波形比较纯净。给出了详细的硬件原理图,主程序流程图及部分子程序流程图,并写出了单片机源程序。关键词:单片机;波形发生器;d/a转换器;正弦波;方波 waveform generator designabstractthe article designed one k

2、ind of at89c52 microcontroller and the dac0832 switch constitute the waveform generator, the principle, the method, the frequency control which produced to the waveform has carried on the narration, and to periphery expander for example: the power circuit, the pressed key electric circuit, repositio

3、ned the electric circuit and the clock electric circuit has made the specify. produces in the procedure the time delay computation concrete method and the procedure written method. used the microcontroller production waveform, because was the software filter, therefore could not have parasitic the h

4、igher harmonic component, the production waveform quite was pure. has produced the detailed hardware schematic diagram, the master routine flow chart and the partial subroutines flow chart, and has written the microcontroller source program.key words: microcontroller; waveform generator; d/a switch;

5、 sine wave; quadrate wave 目 录第一章 综 述.11.1信号发生的用途.11.2 信号发生器的分类.11.3 信号发生器的发展情况及趋势.2第二章 器件介绍.32.1 主控制器.32.2 数模转换器.4第三章 硬件电路设计.63.1 硬件原理方框图.63.2 系统工作原理.63.3 外围器件扩展.73.3.1 按键接口电路73.3.2 时钟电路 83.3.3 复位电路 83.3.4 电源电路 9第四章 软件设计.104.1 存储器资源分配.104.2信号分析与计算.104.2.1正弦波信号计算与形成.104.2.2 三角波的形成.114.2.3 方波的形成.114.2

6、.4 锯齿波的形成.114.3 各部分子程序的编程思路.114.4 程序中的延时分析与计算.124.5软件流程图及注解.124.6源程序.15第五章 结束语.22参考文献.23致谢.24波形发生器的设计 综 述 第一章 综 述1.1信号发生的用途 在研制、生产、使用、测试和维修各种电子元件、部件以及整机设备时,都需要有信号源,由它产生不同频率、不同波形的电压、电流信号并加到被测器件、设备上,用其他测量仪器观察、测量被测者的输出响应,以分析确定他们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。除了电子技术尤其是电子测量,信号发生器在其他领域也有广泛应用,例如机械部门的超

7、声波探伤,医疗部门的超声波诊断、频谱治疗仪等。波形发生器是一种常用的信号源,广泛应用于科学研究、生产实践和教学实验等领域。在电子工程设计与测试中,常常需要一些复杂的、具有特殊要求的信号,要求其波形可任意产生,频率方便可调。而本文介绍了一种利用89c52构成的智能波形发生器,可产生三角波、正弦波、方波、锯齿波,信号产生灵活方便、功能扩展灵活、信号参数可调,实现了硬件电路的软件化设计。具有电路结构简单、实用性强、成本低廉等优点。在数字化时代的今天,经典的由模拟电路组成的信号发生器已经渐渐远离了人们,取而代之的是电路简洁、功能多样、功耗低的数字电路。目前能产生各种波形的硬件模块很多,但是这些模块产生

8、的波形都不是纯净的波形,会寄生一些高次谐波分量,采用其他的措施虽可滤除一些,但不能完全滤除掉。信号发生器是科研及工程实践中最重要的仪器之一,以往多用硬件组成,系统结构比较复杂,可维护性和可操作性不佳。随着计算机技术的发展,信号发生器的设计制作越来越多的是用计算机技术,且种类繁多,价格、性能差异很大。1.2 信号发生器的分类 信号发生器应用广泛,种类型号繁多,性能各异,分类也不尽一致。按照频率范围分类可以分为:超低频信号发生器、低频信号发生器、视频信号发生、高频信号发生器、甚高频信号发生器和超高频信号发生器。按照输出波形分类可以分为:正弦信号发生器和非正弦信号发生器,非正弦信号发生器又包括:脉冲

9、信号发生器,函数信号发生器、扫频信号发生器、数字序列信号发生器、图形信号发生器、噪声信号发生器等。按照信号发生器性能指标可以分一般信号发生器和标准信号发生器。前者指对输出信号的频率、幅度的准确度和稳定度以及波形失真等要求不高的一类发生器,后者是指其输出信号的频率、幅度、调制系数等在一定范围内连续可调,并且读数准确、稳定、屏蔽良好的中、高档信号发生器。除了上述几种分类形式外还有好多的分类方法,随着电子技术水平的不断发展,信号发生器的功能越来越齐全,性能越来越优良。1.3 信号发生器的发展情况及趋势 由于电子测量及其他部门对各类信号发生器的广泛需求及电子技术的迅速发展,促使信号发生器种类日益增多,

10、性能日益提高,尤其随着70年代微处理器的出现,更促使信号发生器向着自动化,智能化方向发展,现在许多信号发生器除带有微处理器,因而具备了自校、自检、自动故障诊断和自动波形形成和修正外,还带有ieee-488或rs232总线,可以和控制计算机及其他测量仪器一起方便地构成自动测量系统1。在70年代前,信号发生器主要有两类:正弦波和脉冲波,而函数发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上斜波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,由分立元件或模拟集成电路构成,其电路结构复杂,且仅能产生正弦波、方波、锯齿波和三角

11、波等几种简单波形,输出的波形具有良好的相位噪声、较低的寄生分量以及较快的开关速度等,但是模拟电路的漂移较大,使输出的波形的幅度稳定性差,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因而很难将频率调到某一固定值;二是脉冲的占空比不可调节,在70年代以后,微处理器的出现,可以利用微处理器、a/d、和d/a.硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对dac的程序控制,就可以得到各种简单的波形。例如,令微处

12、理器的累加器a自身循环增量,每增量一次即向dac送出一个数,使dac有一个输出。因为当a的内容达到最大值255时,再增量一次,a的内容就变为最小值,然后可以继续增加。如此,周而复始,就可以从dac输出端获得一个正相的阶梯波。用同样的方法还可获得方波、锯齿波、三角波等波形。软件控制波形的一个最大缺点就是输出波形的频率低,这主要是由cpu的工作速度决定的,如果想提高频率可以改进软件程序减少其执行周期时间或提高cpu的时钟周期,但这些办法是有限度的,根本的办法还是要改进硬件电路当时的信号处理器是专用于信号处理的微处理器。波形信号发生器的发展趋势是更高取样率,更高分辨率和更大存储量。3波形发生器的设计

13、 器件介绍 第二章 器件介绍2.1 主控制器本设计中主要采用atmel公司的at89c52型单片机,兼容标准mcs-51指令系统的at89c52单片机是一个低电压,高性能cmos 8位单片机,片内含8k bytes的可反复擦写的flash只读程序存储器和256 bytes的随机存取数据存储(ram),器件采用atmel公司的高密度、非易失性存储技术生产,片内置通用8位中央处理器和flash存储单元,功能强大的at89c52单片机可提供许多高性低比的系统控制应用领域2。at89c52有40个引脚,32个外部双向输入/输出(i/o)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工

14、串行通信口,2个读写口线,at89c52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和图2.1 at89c52引脚图flash存储器结合在一起,特别是可反复擦写的flash存储器可有效地降低开发成本。如果更改程序内容,可将芯片拿下重新烧写,或直接进行在线烧写。at89c52有pdip、pqfp、tqfp及plcc等四种封装形式,以适应不同产品的需求。它拥有完善的外部扩展总线,如并行总线(ab,db,cb)、串行总线通过这些总线可方便地扩展外围单元、外设接口等,本设计主要采用它的串行总线。2.2 数模转换器如图2.2,dac0832是一个20引脚采用双列直插式封装的芯片,由8位输

15、入锁存器,8位dac寄存器,8位da转换电路及转换控制电路构成,是一种具有两个输入数据寄存器的8位dac,它能直接与mcs51单片机接口。其主要特性参数如下:分辨率为8位,电流稳定时间1us,可单缓冲、双缓冲或直接数字输入,只需在满量程和下调整其线性度,单一电源供电(5v15v),低功耗。芯片内部带有两级独立缓冲寄存器即输入寄存器和dac寄存器dac0832最适合要求多片dac同时进行转换的系统。5个信号不同组合的控制下,可实现单缓冲,双缓冲和直通3中工作方式4。直通方式是将ile、/cs、/wr1、/wr2和/xfer控制信号预先设置为有效,使两个寄存器都处于开放状态,无需控制信号。dac0

16、832的输出随时跟输入数字的变化而变化,处于直通工作方式,8位数字量一旦输入,就直接进入dac寄存器进行d/a转换。图2.2 dac0832引脚图单缓冲工作方式是指两级缓冲器之一受cpu送来的控制信号控制,另一个寄存器为直通状态。如将/wr2和/xfer控制信号直接接地,或者将两个寄存器的控制信号连接在一起,并作一个使用。这一方式适用于只有一路模拟输出或几路模拟量不需要同步输出的系统。双缓冲工作方式指的是片内两个寄存器分别进行控制。使用时,首先通过ile、/cs、/wr1信号同时有效,把数据锁存到输入寄存器,然后通过/wr2和/xfer信号有效,再把数据打入dac寄存器,并进入d/a转换器进行

17、转换。本设计中采用的是单缓冲方式。硬件连接电路是将两级寄存器的控制信号并接输入数据。在控制信号作用下直接送入dac寄存器中。连接图如图2.3,2.3 dac0832连接图 dac0832是电流型输出,在应用时外接运放使之成为电压型输出。由图2.3可知,dac0832的片选地址为7fffh,当p2.7有效时,若p0口向其送的数据为00h,则u5的输出电压为0v;若p0口向其送的数据为0ffh时,则r5的输出电压为-5v。故当输出电压为0v时,由公式u5/r5+u6/r6+u7/r7=0得:vout=-5v。当输出电压为-5v时,可得:vout =+5v,所以输出波形的电压变化范围为-5v +5v

18、。故可推得,当p0所送数据为80h时,vout为0v10。7波形发生器的设计 硬件电路设计第三章 硬件电路设计3.1 硬件原理方框图本系统主要由主控元件at89c52、数模转换电路和电源电路、键盘电路、放大电路等电路构成。如图3.1单片机键盘电路数模转换电路放大电路波形输出电源电路时钟电路复位电路 图3.1 系统方框图3.2 系统工作原理 系统的整体电路图如图3.2,at89c52的p1口为准双向口,它的每一位都可以分别定义为输入线或输出线,在本设计中p1口被用做数据输入线。系统开始工作时,复位电路对整个系统进行复位,主控元件at89c52不停的对p1口进行扫描,当无键按下时,由图可知主控元件

19、at89c52的p1.0,p1.1,p1.2为带数据缓存器的高电平输出,置p1.3,p1.4,p1.5,p1.6为带上拉电阻的输入管脚,此时若有键按下,取p1.3,p1.4,p1.5,p1.6的数据将得到一个值,把此值保存下来,再置p1.3,p1.4,p1.5,p1.6为带数据反相器的高电平输出,置p1.0,p1.1,p1.2为带上拉电阻的输入管脚,此时若键仍没弹起,取p1.0,p1.1,p1.2的数据将得到另一个值,把这两个值组合是一个按键的键值,当主控元件扫描到有键按下时,通过程序判断出哪个键被按下,接着调用相应波形发生子程序,dac数字信号输入端d0d7与单片机的数据输出端口p0口相连,

20、p2.7接转换器的片选输入端口/cs,当dac0832的/cs端口被选通时,执行波形发生子程序,主控元件的p0口开始向数模转换器dac0832的数据口传输数据,dac0832处于单缓冲工作方式,由于dac0832是电流型输出,所以在它的两个输出端外接运放使之成为电压型输出9。3.2 整体电路图3.3 外围器件扩展3.3.1 按键接口电路本设计直接使用单片机的i/o口线pl口进行扩展,组成一个3*4键盘。在单片机中所需按键较少,多采用独立式键盘。此种键盘结构简单,每只按键接单片机的一条i/o线,通过查询即可示别出每只按键的状态来。但由于本系统按键较多,在这里采用矩阵式排列键盘,这样可以合理应用硬

21、件资源,把12只按键排列成3*4矩阵形式,用一个8位i/o口控制。把键盘上的列和行分别接在p1.0,p1.1,p1.2和p1.3,p1.4,p1.5,p1.6按键控制电路上3。1、2、3控制三角波且频率分别为30hz、50hz、100hz,4、5、6控制方波且频率分别为30hz、50hz、100hz,7、8、9控制正弦波且频率分别为30hz、50hz、100hz,0、a、b控制锯齿波且频率分别为30hz、50hz、100hz。 图3.3按键接口电路 3.3.2 时钟电路at89c52内部有一反相器,xtal1、xtal2分别为反相器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单

22、片机内部的各个部件。本时钟电路采用陶瓷谐振器,振荡器产生的时钟频率主要由sys参数确定,外接的两个电容的作用有两个:其一是使振荡器起振,其二是对振荡器的频率f起微调作用,一般地,两个电容的值取30pf8。由于频率较大时,三角波、正弦波、斜波中每一点的延时时间为几微秒,故延时时间还要加上指令时间才能获得较大的频率波形,该电路用12mhz晶振。3.3.3 复位电路at89c52单片机有一个复位引脚rst,它是施密特触发输入,当振荡器起振后,该引脚上出现2个机器周期以上的高电平,使器件复位,只要rst保持高电平,mcs-51保持复位状态。此时ale、/psen、p0、p1、p2、p3口都输出高电平。

23、rst变为低电平后,退出复位,cpu从初始状态开始工作复位以后出(sp)=07,p0,p1,p2,p3为0ffh外,其他寄存器都为0。mcs-51单片机通常采用上电复位和按键手动复位两种方式5。该电路主要特点是当单片机掉电时,使其能重新工作,从系统的可靠性考虑采用如图3.4所示的复位电路。 图3.4 复位电路连接图3.3.4 电源电路在电子电路及设备中,一般都需要稳定的直流电源供电。直流电源的输入为220v电网电压,一般情况下,所须直流电压的数值和电网电压的有效值相差较大,因而需要通过电源变压器降压后,再对交流电压进行处理。变压器的副边电压有效值决定于后面电路的需要。变压器的副边变压再通过整流

24、电路由交流电压转换成直流电压。如图3.5所示,本电源电路设计为了提高电源的稳定性,减小纹波,电压经过变压器和整流电路后通过低通滤波器电路滤波,将电压降为9v,再通过稳压管7805电压可稳定在+5v输出。这样,可防止因交流电的不稳定而造成输出的直流电压偏低,从而使单片机不能正常工作。图3.5 电源电路图12波形发生器的设计 软件设计第四章 软件设计该程序分为以下部分:主程序、按键处理子程序、延时处理子程序。波形频率的控制用插入延时子程序就的方法来实现,编一个延时子程序就可以使用所有波形。该延时子程序用一个循环子程序实现。它的循环次数,对于不同频率信号,循环次数也不一样。当不同的频率输入时,先转换

25、时间常数,存入固定的ram单元(该单元专门用来存放时间常数)。一旦转入波形输出子程序,该时间常数就可以被取出,而被赋给延时子程序,从而实现了每隔一定的时间就可以从固定的ram中取出一个波形编码送到dac进行d/a转换。4.1 存储器资源分配1、键的出口标志位存放于20h单元中。当为无效键时,20h单元为0ffh;当为有效键时,20h单元的内容为该按键的键码值。2、波形频率30hz、50hz、100hz延时子程序的延时时间分别存在21h、22h、23h中。4.2信号分析与计算4.2.1正弦波信号计算与形成由于信号都是周期性的,所以只要设计出一个完整周期的正弦波。在信号输出部分,采用了8位的d/a

26、变换器,其最大输出值为256。为了与d/a变换器相适应,在2一个周期内,将其输出信号的幅值、角频率量化,将正弦波向上平移,使其最低点为0。单片机的i/o输出均为+5 v的ttl电平,因此产生的正弦波幅值为+5 v。将一个周期内的正弦波形等分为n份,那么第1点的角度为0°,对应的正弦值为5sin0°;第2点的角度为360°/n,对应的正弦值为5sin (360°/n ) ,如此计算下去,将这些模拟量正弦值都转换为双极性方式下的数字量,得到一张按照点号顺序排列的数字量正弦值表格6。这里采用的256个采样点由查表逐个输入dac转换器。因为将整个正弦信号分成了2

27、56个点,那么点与点之间的延时时间就是 (4.1)正弦波信号的形成是通过查表来实现的,在输出时,整个信号被看成是由256个点组合而成,每输出一次就查表一次调用一个点,每个点代表一个电压值,输出一个点后就调用一次延时,如此循环就可以得到正弦波信号,延时时间和频率有关系,点与点之间延时时间越长就表示信号的周期越大,所以我们可以通过改变延时时间来改变输出信号的频率。4.2.2 三角波的形成三角波信号形成和正弦信号的产生不一样,这里把三角波半个周期分成256个阶梯由于阶梯很小从宏观上看它可以近似成三角波信号,在三角波信号上升阶段电压随时间而上升,阶梯之间的时间间隔就是延时时间,每输出一个阶梯就调用延时

28、,当输出256个上升阶梯时即电压到达峰值,接着电压又随时间下降,输出256个下降阶梯,如此反复便形成了三角波。我们可以通过改变延时时间来改变三角信号的频率。4.2.3 方波的形成方波信号形成比较简单,不需要把周期分开,通过延时即可实现。当接受到键盘命令需要输出方波信号时,就把高电平赋给输出端口,接着延时半个周期,即可输出方波的正半周期,然后把低电平赋给输出端口又延时半个周期就输出方波的负半周期,如此反复便形成方波。同样我们也可以通过改变延时时间来改变输出方波的频率。4.2.4 锯齿波的形成锯齿波信号的形成也比较容易,同样将锯齿波的整个周期分成256个点,首先将电压下限值赋给输出端口输出,输出一

29、次即调用一个点,每输出一个点就调用延时一次,同样电压也随时间而上升,直到输出256次,如此反复就可以形成锯齿波。同样地,我们可以改变点与点之间的延时时间来改变输出波形的频率。4.3 各部分子程序的编程思路1、按键值是通过对单片机p1口的扫描获取,程序中具体实现各按键的功能。2、正弦波的产生采用查表法。3、对于数字量来说,输出连续变化的频率(尤其是高频)是不易实现的,一般会出现频率的跳变。但是人们所需的频率是比较固定、常用的,本设计能输出几种常用的频率波形7。当输入一种波形的频率代号后,则输出与其对应的频率波形,所取频率分别为:30hz,50hz, 100hz。4、对于锯齿波、三角波、正弦波,为

30、了获得较为平滑的曲线,在设计中将一个周期分为256份。4.4 程序中的延时分析与计算如下是一段延时1s的程序中:delay:mov r1,#50del0:mov r2,#100del1:mov r3,#100djnz r3,$djnz r2,del1djnz r1,del0ret每执行 djnz rn,del指令一次,需要2个机器周期,单片机需耗时2us, 若忽略装数等语句,延时程序从开始到结束,单片机共耗时100*100*50*2us,既1000000us=1秒,若加上装数等语句的耗时,延时时间大于1秒5。在本设计中,由于有三种不同的频率,那么就要有三个延时子程序。例如在30hz的正弦信号中

31、,因为把整个周期看成是256个点,那么点与点之间的延时就是1/30*256,这个值约为130us,那么延迟程序就是:delay1: mov r5, #65 延迟130usloop0: djnz r5, loop0因为djnz指令需要2个周期,65*2=130,由于延迟的时间比较短,我们只需要一个循环即可,其他50hz,100hz的信号的延迟计算也和这个一样,程序的编写也差不多,只需改变赋给r5的值。4.5软件流程图及注解如图4.1为主程序流程图:开始工作后,单片机开始对p1口进行键盘扫描,如果没有按键被按下则继续扫描,有键闭合则读取键值,然后调用波形发生子程序。如图4.2正弦波发生流程图:如果

32、主程序调用正弦波发生子程序,首先启动d/a转换器,接着将0送到寄存器r6中,将正弦函数数据表送到累加器a中,并送选通地址输出,r6中的数据自增1,调用延时子程序,如果r6中的数据不为0则继续送选通地址输出,是0则返回开始循环。如图4.3为三角波发生流程图:如果主程序调用三角波发生子程序,首先启动d/a转换器,接着将0送到寄存器a中,然后调用延时子程序,r6中数据自增1,判断r6中数据是否为0即三角波的上升阶段是否完成,不是则循环上述过程直到r6为0;是,则r6中的数据自减1,再调用延时子程序,判断r6是否为0即下降过程是否完成,不是则继续自减循环,是则返回开始。如图4.4锯齿波发生流程图:如果

33、主程序调用锯齿波发生子程序,首先启动d/a转换器,接着将0送到寄存器r6中,送选通地址输出,调用延时自程序,r6中数据自减,循环输出即可。如图4.5方波发生流程图:如果主程序调用方波发生子程序,首先启动d/a转换器接着将0送到累加器a中,送选通地址输出,然后调用延时子程序延时半个周期时间,再将高电平送到a中,送选通地址输出,也调用延时子程序延时半个周期,循环即可得到方波。4.1主程序流程图nyyn波形转化否?调波形发生子程序读键盘输入有键闭合?键盘扫描初始化开始开始启动d/a转换器r600har6调延迟子程序r6r6+1r6=0?调延迟子程序r6r6-1r6=0?nnyyar6n开始启动d/a

34、转换器r600ha正弦函数数据表送选通地址输出r6r6+1调延迟子程序r6=0?y 图4.2 正弦波发生子程序 图4.3 三角波发生子程序r6r6-1调延迟子程序送选通地址输出r600h启动d/a转换器开始开始启动d/a转换器a0送选通地址输出调延迟子程序affh送选通地址输出调延迟子程序图4.4 锯齿波发生子程序图4.5方波发生子程序4.6源程序org 0250hmov 20h,#0mov 21h,#0mov 22h,#0mov 23h,#0key:mov p0,#10000111b ;上四位和下三位分别为行和列,所以送出高低电压检查有没有按键按下k10:jb p0.0,k20 ;扫描正式开

35、始,先检查列1四个键是否有键按下,如果没有,则跳到k20检查列2k11:mov,p0,#11110111b ;列1有键按下时,p0.0变低,到底是那一个键按下?现在分别输出各行低电平jb p0.0,k12 ;该行的键没按下时,p0.0为高电平,跳到k12,检查其它的行mov r0,#1 ;如果正好是这行的键按下,将寄存器r1写下1,表示1号键按下了k12:mov,p0,#11101111bjb p0.0,k13mov r1,#2 ;如果正好是这行的键按下,将寄存器r1写下2,表示2号键按下了k13: mov,p0,#11011111bjb p0.0,k14mov r1,#3 ;如果正好是这行的

36、键按下,将寄存器r1写下3,表示3号键按下了k14: mov,p0,#10111111bjb p0.0,kend ;如果现在四个键都没有按下,可能按键松开或干扰,退出扫描(以后相同)mov r1,#4 ;如果正好是这行的键按下,将寄存器r0写下4,表示4号键按下了jmp kend ;已经找到按下的键,跳到结尾吧k20: jb p0.1,k30 ;列2检查为高电平再检查列3、4 k21: mov p0,#11110111b ;列2有健按下时,p0.0会变低,到底是那一行的键按下呢?分别输出行的低电平jb p0.1,k22 ;该行的键没按下时p0.0为高电平,跳到k22,检查另外三行mov r1,

37、#5 ;如果正好是这行的键按下,将寄存器r1写下5,表示5号键按下了(以后相同)k22: mov p0,#11101111bjb p0.1,k23mov r1,#6k23: mov p0,#11011111bjb p0.1,k24mov r1, #7k24: mov p0, #10111111bjb p0.1,kendmov r1,#8jmp kend ;已经找到按下的键,跳到结尾(以后相同)k30: jb p0.2,k40k31: mov p0,#11110111bjb p0.2,k32mov r1,#9k32: mov p0,#11101111bjb p0.2,k33mov r1,#0k3

38、3: mov p0,#11011111bjb p0.2, k34mov r1,#0ahk34: mov p0,#10111111bjb p0.2,kendmov r1,#0bhjmp kendkend:xch r1,20h ;将按键值存入(20h)jz 20h,#01h,s1jz 20h,#02h,s1jz 20h,#03h,s1jz 20h,#04h,s2jz 20h,#05h,s2jz 20h,#06h,s2jz 20h,#07h,s3jz 20h,#08h,s3jz 20h,#09h,s3jz 20h,#00h,s4jz 20h,#0ah,s4jz 20h,#0bh,s4jmp kend

39、s1: mov dptr, #7fffh ;选通地址 str1: mov r6,#00h ;通过上升和下降来产生三角波电;压随时间上升str2: mov a,r6 movx dptr,a acall delayinc r6 cjne r6,#0ffh,str2 ;电压随时间下降/str3: dec r6 mov a,r6 movx dptr,a cjne r6,#00h,str3 ajmp str1 delay: jz 20h,#01h,delay1 jz 20h,#02h,delay2 jz 20h,#03h,delay3delay1: mov 21h, #65 ;延迟130usloop0:

40、 djnz 21h, loop0delay2: mov 22h, #39 ;延迟80usloop1: djnz 22h, loop1delay3: mov 23h, #13h ;延迟40usloop2: djnz 23h, loop2rets2: mov dptr,#7fffh ;通过高低电平地的变化来输出方波str4: mov a,0 movx dptr,a ;向选通地址送低电平地 acall delay0 mov a,#0ffh movx dptr,a ;向选通地址送高电平 acall delay0ajmp str4 delay0: jz 20h,#01h,delay4 jz 20h,#0

41、2h,delay5 jz 20h,#03h,delay6delay4: mov 21h, #65 ;延迟130usloop3: djnz 21h, loop3delay5: mov 22h, #39 ;延迟80usloop4: djnz 22h, loop4delay6: mov 23h, #13h ;延迟40usloop5: djnz 23h, loop5ret s3: mov a,r1 ;在表格里取数送到指定地址mov dptr,#settab movc a,a+dptr mov dptr,#7fffh movx dptr,a inc r1 ;表格加一 acall delay7delay7

42、: jz 20h,#01h,delay8 jz 20h,#02h,delay9 jz 20h,#03h,delay10delay8: mov 21h,#65 ;延迟130usloop6: djnz 21h, loop6delay9: mov 22h, #39 ;延迟80usloop7: djnz 22h, loop7delay10: mov 23h,#13h ;延迟40usloop8: djnz 23h, loop8ajmp s3 ;循环 settab: ;正弦表格db 80h,83h,86h,89h,8dh,90h,93h,96h db 99h,9ch,9fh,0a2h,0a5h,0a8h,

43、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

44、,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,

45、80h db 80h,7ch,79h,78h,72h,6fh,6ch, 69h 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,11h,10h,0eh,0dh,0bh,0ah db 09h,08h,07h,06h,05h,04h,03h,02h db 02h,01h,00h,00h,00h,00h,00h,00h db 00h,00h, 00h,00h,

温馨提示

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

评论

0/150

提交评论