单片机在低频信号发生器中的应用.doc_第1页
单片机在低频信号发生器中的应用.doc_第2页
单片机在低频信号发生器中的应用.doc_第3页
单片机在低频信号发生器中的应用.doc_第4页
单片机在低频信号发生器中的应用.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

第1章 绪论1.1 概述波形发生器亦称函数发生器,作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,且波形种类有限,多为锯齿、正弦、方波、三角等波形。当今是科学技术及仪器设备高度智能化飞速发展的信息社会,电子技术的进步,给人们带来了根本性的转变。现代电子领域中,单片机的应用正在不断的走向深入,这必将导致传统控制与检测技术的日益革新。单片机构成的仪器具有高可靠性、高性能价格比,在智能仪表系统和办公自动化等诸多领域得以极为广泛的应用,并走入家庭,从洗衣机、微波炉到音响汽车,处处可见其应用。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。信号发生器作为一种常见的应用电子仪器设备,传统的一般可以完全由硬件电路搭接而成,如采用555振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。但是这种电路存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点。在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟机械振动等领域常常要用到低频信号源。而由硬件电路构成的低频信号其性能难以令人满意,而且由于低频信号源所需的rc要很大。大电阻,大电容在制作上有困难,参数的精度亦难以保证。体积大,漏电,损耗显著更是其致命的弱点。一旦工作需求功能有增加,则电路复杂程度会大大增加。利用单片机采用程序设计方法来产生低频信号,其频率底线很低。具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,并且能够对波形进行细微调整,改良波形,使其满足系统的要求。只要对电路稍加修改,调整程序,即可完成功能升级。1.2 设计要求本课题利用at89c51单片机和两片dac0832数模转换器,组成数字式低频信号发生器,要求:(1)该装置用键盘控制输出方波、三角波、正弦波;(2)用键盘控制输出幅度和频率的变化,并将幅值和频率用数码管显示,幅度范围1v5v,频率范围010khz。1.3硬件电路的实现原理与构思1.3.1at89c51单片机控制两片dac0832的原理图输出基准电压at89c51单片机dac0832dac0832图1.1 at89c51控制两片dac0832原理图因为at89c51单片机自身便有一个64k的程序存储器,所以不用扩展外加程序存储器。由单片机编程即可由单片机输出所需要信号的数字量,再由d/a数模转换器将数字量转化为模拟电流输出,通过运放转化为模拟电压输出。因为d/a数模转换器的最大输出电压是由其输入的基准电压来控制的,所以只要能控制d/a的基准电压便可以控制输出幅度,实现幅度可调。所以设计用两片dac0832来输出信号,第一片d/a用来输出信号,第二片d/a用来控制第一片d/a的基准点压。其中用p0口作为两片d/a的数据总线,p2口的p2.0和p2.1口用来控制两片d/a的选通。1.3.2键盘显示电路的构思由于本设计要求控制波形的幅度和频率,所需按键较多,所以设计选用p1口来扩展44键盘。由于44键盘的设计已很普遍,所以在本文中不加以介绍。本设计中要求用数码管显示输出信号的幅度和频率等信息,而这些信息在信号输出的时候是不需要时刻改变的,所以设计中选用静态数码管显示,由单片机的串行通信口输出显示数据。这样可以节省单片机的端口来做其它的用途,给予了装置可优化性。at89c51单片机74ls16474ls164数码管数码管图 1.2显示电路方框图图中只给出两位数码管的显示,可以按要求任意扩展n位数码显示,每扩展一片74ls164,可以增加一位led显示器。所要显示的数据由rxd串行发送出去,由74ls164转化为并行输出,再由led显示。这样,在显示数据输送完毕之后,主程序可以不必扫描显示器,从而使cpu能用于其它工作。1.4软件设计的构思1.4.1幅度控制由于d/a数模转换器输出的最大幅度可以用其基准电压来控制,所以控制第二片d/a数模转换器输出给第一片d/a数模转换器的电压值就可控制信号幅度。因此,送入第二片的值是几个固定的值。由于dac0832内部具有锁存器,所以只需向第二片d/a送值一次,直到下一次改变信号幅度。1.4.2频率控制单片机内部数据只有0、1之分,所产生的信号也都是离散信号。为了能够让单片机输出所需的数字信号,我们采用对信号采样、量化的方法来实现由单片机产生所需信号。在本设计中,对信号的四分之一周期采样19个幅度值,通过反复查表来输出幅度值,而整个信号是通过正查表和逆向查表来实现的。采样的点越密,信号失真度也就越小。两次采样点的输出时间间隔是由定时、计数器来控制的,因此,通过控制不同的计数初值就可以控制整个信号的频率。计数时间=信号周期/72。计数次数=计数时间/机器周期。对应的,计数初值=65536计数次数。单片机只能产生离散频率的信号,所以所得到的信号频率不是连续的,而是离散的频率点。由于这部分计算位数较多,不适合用单片机编程来计算计数初值,所以本设计中将各频率的计数初值算出,让单片机按控制命令来查表控制频率。正弦波和三角波的频率控制方法都与上述方法相同,而方波的频率控制是半周期计数,经过半周期只需改变输出为最大或最小电平即可。本设计为低频信号发生器,在频率只有几十赫兹的时候计数次数将很大,因此计数器的工作方式选为工作方式1,每次计数器溢出时需要重新装入计数初值。1.5 本章小结本章主要介绍了低频信号发生器目前的应用和发展现状。对课题进行了说明和论证,并提出了解决方案的初步方法,列出了总体方案框图。系统方案的论证是十分重要的,它是设计工作的开始,也给出了实现设计的工作步骤。有了充分的准备,设计才能有条不紊开始实施。第2章 硬件电路设计2.1 电路总体方框图输出单片机键盘电路显示电路d/a数模转换电路放大输出电路图2.1 电路总体方框图2.2 各部分电路设计2.2.1 输入电路设计按键是本设计的输入设备,是控制单片机的唯一途径。设计中与一共使用了17个按键,44键盘和一个复位键。44键盘中包含了09的数字键和三个波形选择键,一个清除键和一个确认键。由于功能键较多,所以在输入控制命令的时候非常方便。由于机械的弹性作用,一个按键开关在闭合时不会稳定的接通,在断开时也不会立即断开。因而在闭合和断开的时候,均会伴有一连串的抖动,抖动时间的长度一般在5ms10ms。由于按键抖动引起一次按键被误读多次,所以为了确保cpu的正确处理,必须对按键信息进行消除抖动处理。消抖的处理方法基本上分为软件消抖和硬件消抖两种方法。在本设计中,采用了软件消抖的方法。具体应用是在扫描键盘时,通过延时10ms后,再扫描键盘,确认的确是有键按下的时候,跳到读键值的子程序,等待按键的动作完成,然后才继续执行其它操作。2.2.2 复位电路的设计一个系统能否正常工作,首先要检查其复位电路是否工作正常。rst为外部复位信号的输入引脚。在mcs51器件内部,rst接到一个施密特触发器的输入端。这样可以滤掉低于施密特触发电平的噪声干扰信号。在振荡器运行时,rst引脚上保持至少两个机器周期的高电平输入信号,复位过程即可完成。为响应这一过程,cpu发出内部复位信号。内部复位操作是在发现rst为高电平后的第二个机器周期进行的,并且此后的每个周期都重复进行复位操作,直到rst变成低电平为止。外部复位信号与内部时钟是不同步的。rst引脚电平在每个机器周期的s5p2均被采样一次。采样到逻辑1后,各引脚可维持它们的现行活动长达19个振荡周期之久,即在外部复位信号加到rst引脚后,仍维持1930个振荡周期。复位电路的连接方法有很多,有上电复位电路、采用反向器的复位电路、按键电平复位和按键脉冲复位。本设计中采用的是按键电平复位,并带有上电复位功能,其设计简单,采用电阻分压的方式给rst提供高电平。这种设计使用元件少,而且计算简便,只要两个分压电阻的阻值选择适当,可以使得分压值达到复位需要,也可以使时间常数不太大,及时复位。具体电路如图2.2所示:图2.2 复位电路方框图2.2.3时钟电路部分考虑成本和性能问题,本设计采用内部时钟电路。利用at89c51内部一个高增益的反向放大器,把一个晶体振荡器和两个电容器组成自激振荡电路,接于xtal1和xtal2之间,电路如图所示。图2.3 外部时钟电路原理图图中晶体振荡器是石英晶体或陶瓷结构,振荡频率一般选在1.2mhz12mhz之间,单片机常选择6mhz或12mhz,c1,c2在30pf左右;对于陶瓷振荡器,c1,c1约为47pf左右。2.2.4显示电路的设计显示数据由单片机串口输出,因此必须有由移位寄存器来驱动数码管显示。本设计中采用74ls164移位寄存器来实现串行数据转化为并行数据。由于采用静态显示方法,为了减轻单片机的负载,选用共阳型的led数码管显示,并且在每个数码管的共阳极接一个保护电阻来保护电路。图2.4 显示电路图2.2.5d/a转换器连接电路和运算放大电路的设计本设计中产生的信号幅度为-5v+5v,所以两片d/a的输出均采用双极性电压输出,采用的运算放大器选用的是lf356,电路图如图2.5所示:第二片d/a转换器输出的信号经过运算放大器转换成电压信号后作为第一片d/a转换器的基准电压,这样就可以达到控制输出幅度的作用。图2.5 输出电路图此电路的电压特性是:输出v=(b-128)。2.3 单片机简介at89c51是一种低功耗、高性能的片内含有4kb快闪可编程/擦除只读存储器的8位cmos微控制器,使用高密度、非易丢失存储技术制造,并且与80c51引脚和指令系统完全兼容。芯片上的flash存储器允许在线编程或采用通用的非易丢失存储编程器重复编程。at89c51将具有多种功能的8位cpu与flash存储器结合在一个芯片上,为很多嵌入式控制应用提供了非常灵活而又价格适宜的方案,其性能价格比远高于8751。1. 89c51的性能及特点89c51的主要性能包括: 与msc51微控制器产品系列兼容。 片内有4kb可在线重复编程的快闪擦写存储器。 存储器可循环写入/擦除1000次。 存储数据保存时间为10年。 宽工作电压范围:vcc可为2.7v6v。 全静态工作:可从0hz至16hz。 程序存储器具有3级加密保护。 1288位内部ram。 32条可编程i/o线。 两个16位定时器/计数器。 中断结构具有5个中断源和2个优先级。 可编程双工串行通道。 空闲状态维持低功耗和掉电状态保存存储内容。2. 片内快闪存储器由于eeprom具有在线改写,并在掉电后仍能保存数据的特点,可为用户的特殊应用提供便利。但是,擦除和写入对于要求数据高速吞吐的应用还显得时间过长,这是eeprom芯片的主要性能缺陷。表2.1给出了几种典型eeprom芯片的主要性能特点。由表2.1可见,所列各种芯片的字节擦除时间和写入时间基本上为10ms,这样长的时间对于许多实际应用是不能接受的。因此,为了将存储器集成到微控制器芯片内,设法缩短此类存储器的擦除和写入时间是一个首要问题。片内快闪存储器的概念就是在这种背景下提出来的。表2.1几种典型eeprom芯片主要性能型号28162816a28172817a去数时间/ms250200/250250200/250擦/写电压/v215215字节擦除时间/ms109151010写入时间/ms1091510103. 89c51的基本组成在89c51芯片上,集中了微型计算机的各个组成部分,它包括: 一个8位微处理器。 片内数据存储器ram,用于存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。 片内快闪存储器eeprom,用于存放程序、一些原始数据和表格。 四个8位并行i/o接口。 两个16位定时器/计数器。 五个中断源的中断控制系统。 一个全双工uart的串行i/o口,用于实现单片机与微机之间的串行通信。 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡器频率为24mhz。4. 89c51的内部结构和一般微处理器相比,89c51增加了四个8位i/o口,一个串行口,4kb fperom,128b ram,很多工作寄存器及特殊功能寄存器。各部分的功能如下。(1) 中央处理单元cpu是89c51的核心,是计算机的控制和指挥中心,由运算器和控制器两个部分电路组成。 运算器运算器包括一个可进行8位算术运算和逻辑运算的单元alu,8位的暂存器1、暂存器2,8位的累加器acc,寄存器b和程序状态寄存器psw等。alu:可对4位、8位和16位数据进行操作,能做例如加、减、乘、除、bcd数十进制调整及比较等算术运算和与、或、异或、求补码及循环移位等逻辑操作。acc:累加器acc经常作为一个运算数暂存器2进入alu的输入端,与另一个来自寄存器1的运算数进行运算,运算结果又送回acc。在指令中用助记符a来表示。psw:程序状态字寄存器,8位,用于指示指令执行后的状态信息,相当于一般微处理器的标志寄存器。psw中各位状态供程序查询和判别用。b:8位寄存器,在乘、除运算时它用来存放一个操作数和运算后的一部分结果;不做乘、 除运算时,作通用寄存器使用。 控制器控制器包括程序计数器pc、指令寄存器ir、指令译码器id、振荡器及定时电路等。程序计数器pc:由两个8位的计数器pch及pcl组成,共16位。pc实际上是程序的字节地址计数器,pc中的内容是将要执行的下一条指令的地址。改变pc的内容就可以改变程序执行的方向。指令寄存器ir及指令译码器id:由pc中的内容指定rom地址,取出来的指令经指令寄存器ir送至指令译码器id,由id对指令译码并送pla产生一定序列的控制信号,以执行指令所规定的操作。振荡器及定时电路:89c51单片机片内振荡电路,只需外接石英晶体和频率微调电容,其频率范围为1.2mhz12mhz。该脉冲信号作为89c51工作的基本节拍及时间的最小单位。(2) 存储器89c51的存储器有片内外之分。片内存储器集成在芯片内部;片外存储器又称外部存储器。片内和片外存储器中,又有rom和ram之分。 rom存储器89c51片内程序存储器容量为4kb,地址从0000h开始,用于存放程序和表格常数。 ram存储器89c51的ram存储器有片内外之分:片内ram共128b,地址范围为00h7fh;片外ram共64kb,地址范围为0000hffffh。为了指示是到片内ram寻址还是到片外ram寻址,89c51的指令系统设计了不同的数据传送指令符。 特殊功能寄存器sfrcpu访问片内rom指令用mov,访问片外ram指令用movx。片内ram共128b,分为工作寄存器区、位寻址和便签区。1工作寄存器区这32个ram单元共分四组,每组占8个ram单元,分别用代号r0r7表示。r0r7可以指向四组中任一组,由psw中rs1、rs2的状态决定。2位寻址区这16个ram单元具有双功能。它们既可以像普通ram单元一样按字节存取,也可以对每个ram单元中的任何一位单独存取,就是位寻址。3便签区便签区共有80个ram单元,用于存放用户数据或作堆栈区使用。89c51对便签区中每个ram单元是按字节存取的。在21个sfr寄存器中,用户可通过直接寻址指令对它们进行字节存取,也可以对acc、b、psw等11个寄存器进行位寻址。(3) i/o端口i/o端口又称为i/o接口,是89c51对外部实现控制和信息交换的必经之路,它们都是双向端口。每个端门各有8条i/o线,均可输入/输出。可以把i/o口当作一般特殊功能寄存器来寻址。图2.6 at89c51单片机引脚图5. 89c51的引脚及其功能at89c51采用了40管脚双列直插封装形式。其引脚分为电源引脚、输入/输出端口引脚、控制信号引脚和时钟电路引脚这四类。其引脚如图2.6所示: 电源引脚vcc:为+5v供电电压引脚。 gnd:为接地引脚。 i/o端口引脚89c51共有四个并行i/o端口,每个端口有8个端口线,用于传送数据/地址。由于每个端口的结构不相同,因此它们在功能和用途上的差别很大。p0口:p0口共有8个引脚,其中p0.7为最高位,p0.0为最低位。这8条引脚有两种不同的功能,分别使用于两种不同情况。第一种情况是89c51不带片外存储器,p0口可以作为通用i/o口使用,p0.0p0.7用于传送cpu的输入/输出数据。这时,输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89c51带片外存储器,p0.0p0.7在cpu访问片外存储器时用于传送片外存储器的低8位地址,然后传送cpu对片外存储器的读写数据。p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,其缓冲器可接收输出4ttl门电流。p1口管脚写入“1”后,被内部上拉为高电平,用作输入;被外部下拉为低电平时,将输出电流。p2口:p2口的第一功能和p0口的第一功能相同,即它可以作为通用i/o口使用。它的第二功能和p0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不能像p0口那样还可以传送存储器的读写数据。p3口:作输入/输出时同p1口。p3口也可作为89c51的一些特殊功能口。如表2.2所示: 控制信号引脚rst:复位信号输入端,高电平有效。它可以使89c51处于复位工作状态。复位后,89c51的四个端口p0、p1、p2、p3为全高,即它们的值均为ffh。ale/prog:地址锁存允许/编程端。在flash编程期间,此引脚用于输入编程脉冲。平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡频率的1/6。因此,它可用作外部输出的脉冲。/psen:外部程序存储器的选通信号端。在外部程序存储器取址期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。/ea/vpp:外部程序存储器地址允许输入端/编程电压输入端。 时钟电路引脚xtal1:反向振荡放大器的输入及内部时钟工作电路的输入端。在采用外部时钟时,该引脚必须接地。xtal2:来自反向振荡器的输出。若采用外部时钟电路时,该引脚输入外部时钟脉冲。表2.2 p3口第二功能p3口第二功能注 释p3.0rxd串行数据接收口p3.1txd串行数据发送口p3.2into外部中断0输入p3.3int1外部中断1输入p3.4t0计数器0计数输入p3.5t1计数器1计数输入p3.6wr外部ram写选通信号p3.7rd外部ram读选通信号6. 定时器/计数器89c51内部有两个16位可编程的定时器/计数器,命名为t0和t1。t0由两个8位寄存器tho和tlo拼装而成,其中tho为高8位,tlo为低8位。t1也和t0类同。tho、tlo、th1和tl1均为特殊功能寄存器中的一个,用户可以通过指令对它们存储数据。t0和t1的最大计数值为65535,即需要65535个脉冲才能把它们从全“0”变为全“1”。下面介绍定时器的控制。定时器共有两个控制字,由软件写入tmod和tcon两个8位寄存器,用来设置t0、t1的操作模式和控制功能。当89c51系统复位时,两个寄存器所有位都被清零。 工作模式寄存器tmodtmod用于控制t0和t1的工作模式,其各位的定义格式如表2.3所示。表2.3 工作模式寄存器tmod的位定义tmod d7 d6 d5 d4 d3 d2 d1 d0gatec/tm1m0gatec/tm1m0其中低四位用于t0,高四位用于t1。以下介绍各位的功能。m1和m0:操作模式控制位。两位可形成四种编码,对应于四种操作模式,见表2.4。表2.4 定时器/计数器的工作模式m1 m0工作模式功能描述0 0模式013位计数器0 1模式116位计数器1 0模式2自动再装入8位计数器1 1模式3定时器0:分成两个8位计数器c/t:计数器/定时器方式选择位。c/t=0,设置为定时方式。定时器计数89c51片内脉冲,亦即对机器周期计数。c/t=1,设置为计数方式。gate:门控位。gate=0时,只要用软件使tro置1就可以启动定时器,而不管into的电平是高还是低。gate=1时,只有into引脚为高电平且由软件使tro置1时,才能启动定时器工作。 控制寄存器tcon定时器控制寄存器tcon除可用于字节寻址外,各位还可位寻址。各位的定义格式如下表所式:表2.5 控制寄存器tcon的位定义tcon8fh8eh8dh8ch8bh8ah89h88h(88h)tr1tf0tf0tr0ie1it1ie0it0tf1:t1溢出标志位。当t1溢出时,由硬件自动使tf置“1”,并且申请中断。响应中断进入中断服务程序后,tf1又被硬件自动清0。tf1也可被软件清0。tf0:t0溢出标志位。其功能和操作情况同tf1。tr1:t1运行控制位。可通过软件置1或清0启动或关闭t1。在程序中用指令“setb tr1”使tr1位置1,定时器t1便开始计数。tro:t0运行控制位。其功能和操作情况同tr1。ie1、it1、ie0、it0:外部中断请求及请求方式控制位。2.4 其它芯片简介2.4.1 dac0832功能简介1、芯片简介d/a转换器的功能在于把对其输入的数字信号转换成与此数值成正比的模拟电压或电流。dac0832是以cmos工艺制造的8位d/a转换芯片,价格低廉,接口简单,在单片机制系统中得到了广泛的应用。dac0832主要由两个8位寄存器和一个8位d/a转换器组成。其运作原理可从它的20个引脚之功能中领略到。d0d7:8位数据输入引脚,d7为最高位。ile:输入数据锁存允许信号,输入,高电平有效。cs:芯片选择信号,输入,低电平有效。wr1:输入锁存器的写选通信号,输入,低电平有效。从上述三信号的逻辑关系中可以看出,当ile为高电平,cs和wr1均为低电平时,输入锁存器的锁存允许信号ie1将为高电平。此时输入锁存器的内容根据输入数据变化,但当le1由于三输入信号的变化而跳变成低电平时,则来自d0d7的输入数据被锁定在输入锁存器中。wr2:寄存器的写选通信号,输入,低电平有效。xfer:数据传送控制信号,输入,低电平有效。若wr2和xfer两信号均为低电平,则dac寄存器的锁存信号le2为高电平,此时输入锁存器的输入数据被传送至dac寄存器中;但当le2因上述两信号的变化而跳变成低电平时,第二级,即dac寄存器中的数据被锁定。d/a转换器随时对dac寄存器中的数据进行d/a转换。vref:基准电压(可为-10v+10v)输入引脚。基准电压决定d/a转换器输出电压的范围:若vref接+10v,则输出电压范围为0-10v;若接-5v,则输出电压为+5v0v。rfb:内部反馈电阻对外引脚,用以输入来自片外运算放大器的反馈信号。iout1和iout2:电流输出引脚。dac0832属电流输出型,且两输出电流之和为常数。欲得到与输入数字量成正比的电压输出,必须外接运算放大器,把此两引脚输出电信号转换成电压形式。对于这类d/a转换器,通常以电流建立时间来表示其转换速度。所谓电流建立时间,系指输入数字量由全0变成1时,输出电流自初始值达到满量程lsb/2所需要的时间。本芯片的电流建立时间为1s。vcc:供电电源引脚,可接+5v+10v电压。dgnd:数字量地,即vcc、数据、地址及控制信号的0电平输入引脚。agnd:模拟量地,即vref及模拟电压的地线。 2、与mcs51单片机的接口从前面对dac0832内部结构的讲述中得知,其前级输入锁存器和dac寄存器可允许数据进入其中,亦可锁定数据,拒绝新数据进入。这拒绝于内部信号le1和le2各自受外部信号控制的情况。据此我们可归纳出三点:单缓冲方式:le2和le1受控于同一组外部信号,两级积存器同时锁存数据。双缓冲方式:le2和le1分别受不同信号控制,两级寄存器先后接收数据。直通方式:le1和le2均恒为1,外来数据直接通过前两级到达d/a转换器。2.4.274ls164简介双列直插式74ls164引脚定义:qaqh为并行输出的数据,单片机串口输出的数据从ab输入;clr信号用于清除输出数据(通常用在移位完成时);内部数据移位依靠时钟clk信号上升沿(由单片机tx提供)控制。2.4.3 led数码管简介欲显示十进制或十六进制数字及某些其他简单字符,可选用七段led显示器。ag七段及十进制小数点dp均为一发光二极管。若系共阳结构,则它们的阳极为一公共点,接电源正极。八只发光二极管的阴极互相独立,哪一段阴极接地,哪一段即发光,阴极也接高电平者便成暗状。如果是共阴结构,那么阴极公共点接地,各阳极独立,接高电平者发光,阳极接地者呈暗状。根据以上讨论可知,欲在一个led显示器上显示某特定字符,必须向某公共点及各段施加正确的电压。对公共点的施压操作称为位选;对各段的操作为段选。段选码亦称字形码。2.5 本章小结本章主要介绍了实现设计目的的硬件解决方案。文中对各部分电路进行了细致的论证。介绍了主要应用的集成芯片的使用方法和基本资料。第3章 软件部分的设计3.1 软件总体流程软件是整个系统的灵魂。如果没有软件,整个系统就是一个空壳。本设计中软件分为初始化模块、显示模块、键盘扫描模块、键值处理模块和波形产生模块。整个软件的流程图如图3.1:图3.1 整体软件流程图3.2 各部分软件设计3.2.1 初始化模块的设计初始化模块的作用是将用户需要的内存单元清0,清除系统原始数据对系统的影响。之后在显示电路中显示全0,对以后的观察数据输入情况有很大帮助。本设计中主要用到了30h到50h的内存空间。因此,此部分主要对这部分单元清0,并且将数据存储指针置数。具体程序如下:org 0000hajmp start org 0050hstart: acall firsta ;调用初始化main: acall keysca;调用键盘扫描acallkeyred;调用读键值acallkeypc;调用键值处理acall display;调用显示ajmp main ;出错处理ajmp startfirsta:mov r0, #30h;初始化mov r1, #20h;30h50h循环清零clloop:mov r0, #00h;(r1为个数指针)inc r0djnz r1, clloopmov weicod, #43h acall displayret3.2.2 显示模块的设计显示模块的作用是让用户了解系统内部的数据存储情况。可以判断是否有误操作。本设计中共显示5位,有波形、幅度和频率。由于采用的输出方式为串行输出方式和静态led显示,最先输出的数据将距离串行口越远,所以在输出时可以按用户需要从高地址开始输出,提高可视化。设计中将输入数据存放在40h到44h的地址空间,所以只要按顺序将它们依次送到串行口输出即可。程序如下:display:mov scon,#00hmov r1,#05h ;显示五位mov r0, #44h mov dptr, #distabloop: mov a, r0 movc a, a+dptr mov sbuf, a ;cpu自动开始发送wait: jnb ti, wait clr ti dec r0 djnz r1, loop retdistab:db 03h,9fh,25h,0dh,99h ;01234db 49h,41h,1fh,01,09h ;567893.2.3 键盘扫描程序的设计键盘扫描程序的作用是从键盘获取按键信息,根据按键信息来执行命令操作。这部分是用户对系统进行操作的唯一途径。这部分程序的正确编写是确保人机正常对话的前提保证。键盘扫描程序流程图如图3.2所示:图3.2 键盘扫描流程图键盘全扫描的作用是判断是否有按键按下。其方法是先在p1口输出0f0h,再从p1口读数据,若高四位不全为1的话,则说明有按键按下。由于采用的按键是机械按键,会有一定的抖动,一般抖动持续510ms,影响判断。为了消除干扰,在判断有按键按下后要调用延时程序消除抖动,然后再判断是否有按键按下。键盘逐行扫描的作用是在已经判断有键按下之后确定键值。其方法是使p1的行线依次为0,其余各位均为1,然后读p1口,保存行字,屏蔽掉低四位,如果高四为不全为1,则本行有按键按下。保存列字,再与行字组合,取反后就得到按键的特征值。最后用查表的方法就可以得到键值。3.2.4 键值处理的程序设计键值处理的作用是按照键值来选择命令操作,以达到操作的目的。键值处理是否合理,直接影响人机对话的顺利进行。因为设计中一共只有16个按键,所以首先要判断键值是否合法,若键值大于16则视为非法,返回主程序。判断键值合法后还要判断按键是功能键还是数字键,之后再选择相应的操作。数字键处理程序:由于本设计中为了简化程序,要求必须首先选择波形,当波形未设置时,数字键是无效的,必须返回。所以本段程序要首先判断波形位是否已经设定。若数字键合法,就按照输入的先后顺序将键值送入规定的地址单元。当5位数据送满之后,系统虽然扫描键盘,但对数字键只做放弃处理。功能键处理程序:功能键包括三个波形按键、一个清除键和一个确认键。波形键按下时,将向波形存储单元送入相应的数值。正弦波为1,三角波为2,方波为3。清除键的作用是对用户所用的地址单元清0,以便重新输入键值。确认键的作用比较关键。一旦确认键按下,则系统不再进行键盘扫描,而是按照输入的数据进行信号是幅度和频率选择处理,然后进入相应的波形输出程序。由于设计的整个系统比较简单,用途也只是使用于一般场合,所以系统中没有采用中断的方法来改变系统的运行。当系统开始输出信号之后,相当于系统已经进入了一个不断输出信号的死循环程序。用户只能通过复位键才能停止系统并重新操作。这样大大简化了程序设计,但并不影响系统的性能。对于这种不太复杂的系统,采用这种简单的程序操作是十分有利的。频率的处理是系统信号可调性的一个关键。由于系统的时钟和采样密度的限制,本设计在频率点的选择上并没有均等地设定频率点。而是选择10hz、20hz100hz、200hz800hz。根据这一特性,采用列表的方法将这些频率点依次列出,并且在最前面加上0频率的值。然后在查表处理的时候先判断频率百位是否为0,如果百位不为0,则将百位的数据加9,再进行查表。如果百位为0,则直接用其数据作为变址查表。具体程序如下:frcy: mov a, 42h ;取频率 cjne a, #00h, hund2 ;看百位是否为0 mov a, 41h mov dptr, #frctab rl a mov r0, a movc a, a+dptr inc r0 mov r6, a mov a, r0 movc a, a+dptr mov r5, a lcall fdclyhund2: mov dptr, #frctab ;百位有数据 mov a, 42h add a, #9 rl a mov r0, a movc a, a+dptr inc r0 mov r6, a mov a, r0 movc a, a+dptr mov r5, a lcall fdclyfrctab:db 00h,00h,0fah,93h,0fdh,4ah,0feh,31hdb 0feh,0a5h,0feh,0eah,0ffh,19hdb 0ffh,3ah,0ffh,52h,0ffh,66h,0ffh,75h db 0ffh,0bbh,0ffh,0d2h,0ffh,0ddhdb 0ffh,0e4h,0ffh,0e9h,0ffh,0ech,0ffh,0efh;10-800hz,三角波和正弦波17个频率点计数初值对于这种频率间隔较大的列表采用了这种查询方法,如果对于密集的频率点就要采用比较复杂的查询方法。对于本设计而言,重在讨论实现参数可调的信号输出的方法,所以在细节方面略有欠缺。只要在此基础上调整一些细节程序便可以增多频率点。3.2.5 波形产生模块的设计波形产生模块是设计是否实现的关键。本次设计要求输出三种波形,其精度如何,关键都在于波形产生模块设计的合理性。本设计中采用的是用单片机产生信号,而单片机只能产生数字信号,无论是信号频率还是信号幅度都是离散的点,所以采用按照控制要求查表输出的方法来输出信号。其中方波的产生方法比较简单只要定时地向外输出0ffh和00h即可。正弦波和三角波的产生原理比较相近,在此以正弦波产生方法为例加以介绍。正弦波的产生是通过对标准正弦波进行采样输出而得到的,采样间隔越小,正弦波的输出精度就越高,失真度越小。本设计中为了提高信号的精度,对信号的四分之一周期采样19个点。每隔一定的时间间隔送出一个幅度值,幅度值可以用查表的方法得到。信号的频率可以用控制每两个输出的时间间隔来完成。这部分控制是由定时计数器来实现的。向计数器装入计数初值,当计数器溢出时就表示时间到,查表输出下一个数。各个频率点的计数初值是人工计算列表,在用程序查表得到的。这一部分程序是在确认键处理中进行的。由于所计算的时间间隔是一个理论值,在实际中会因为系统的传输延时而使频率略微偏离所设计的频率点。同样的,点的输出是靠程序实现的,而程序指令的执行也是需要一定的机器周期的,而且不同的指令执行需要的机器周期是不同的,所以在频率控制这一方面很难达到十分精准,只能尽量降低误差。正弦波的软件流程图如图3.3。3.3 本章小结本章主要介绍了系统的软件解决方案,详细给出了对课题的理解和解决思路。对整体软件进行了分模块阐述,对大部分内容附加了流程图加以详解。 图3.3 正弦波产生流程图第4章 系统的安装与调试4.1 系统设计的安装与调试。设计是最终要投入实际应用的,因此,整个设计的安装、调试便是设计的重要环节。系统的调试分为硬件焊接和软件调试。硬件焊接是整个调试的基础,而软件调试又是系统是否正常工作的核心内容。因此,这两部分调试要按照严格的顺序,并要有严格认真的态度来对待。4.2 系统的各部分调试4.2.1 系统的硬件调试硬件的调试要从硬件电路焊接开始,硬件电路的焊接也是整个调试过程的基础。在硬件焊接之前,我们仔细检查了根据自己的电路图所需要的各个元件,核对其型号和数值,以免出现错焊的现象。在检查之后,尽量按照电路模块摆放各元件,使电路美观,并且为各部分留出充裕的空间,这样会为电路的调试和检查电路提供很大的方便。在这些准备工作做好后,开始焊接电路。焊接的时候是一部分一部分的焊上去,焊完之后要仔细检查电路的焊接情况,用万用表检查电路是否有短路现象,尤其是电源和地之间的短路现象,如果短路现象没有被发现的话,将导致整个系统的非正常工作,甚至是系统崩溃。检查无误后,可以用伟福仿真器来将相应的程序部分在电路上进行仿真,这样可以检查电路的工作情况,也是分级调试的重要方法。在整个电路焊接完成后,首先测量系统的整体内阻,一个正常的系统都会有一定的内阻,如果内阻为0,则必须立即找到短路点,否则将导致电源的损坏。硬件的检查还要将一些元件通电测试,看其是否工作正常。例如:电路焊接好后,要将单片机插在插座上,通电,然后用示波器看其晶体振荡器两端是否有方波产生。如果出现方波,则表示晶体振荡器完好。之后还要测量单片机的30引脚,看它是否也会输出方波,并且其输出频率是晶体振荡器的1/6。这些工作都是保证单片机能够正常工作的前提。4.2.2 系统的软件调试系统的软件相当于系统的内脏,软件的正确编写是系统能否按要求工作的前提。由于对软件知识的缺乏,对最初的软件调试出现了很多困难。在对程序指令及运行时序的了解之后,程序完成的比较顺利。在软件编写的开始,我先画了软件的流程图,然后按照程序流程图来编写相应的子程序,使程序易于理解和更正。程序的编写要层次分明,尽量减少复杂多变的跳转指令,因为伴随着跳转指令的增加,系统执行指令的时序常常出现错乱,并且经常出现逻辑错误。在发现这个问题之后,尽量运用一些可重复调用的子程序,尽量避免程序的错乱。最先进行调试的模块是键盘模块。在这部分调试中,用仿真器仿真,在计算机中可以很明了的看到系统的内存单元是否按照要求存入按键的相应信息,如果没有检测到任何信息,说明硬件部分没有响应,一定出现了电路故障,通过这样的检查可以反复检测系统。由于有了计算机的帮助,在仿真调试的时候可以了解到系统每执行完一条指令后的状态,程序运行的步骤,也更加了解了程序。这对今后的编程都有很大的帮助。在显示模块的调试中,首先测量数码管是否有坏段,确认数码管不亮的地方不是由软件及其他电路引起的故障。然后用仿真器仿真,观察显示是否正常。开始时,进行单步仿真,可以清楚的看到显示的移位,如果没有正常的移位的话,则是时钟信号或移位寄存器的连接有问题。在实际的调试中,由于电路没什么大的问题,这部分电路调试比较顺利。单片机与d/a的转化、波形产生部分的程序调试比较复杂。这部分的仿真调试主要是查看波形产生程序的工作是否正常,还有监视数据输出端口,也就是p0口是数据是否变化。对两片d/a的选通信号也是重要的监视对象。4.3 在调试过程中遇到的问题在键盘的调试中,发现第三列的键都不能被系统检测。而通过单片机的行线和列线的连通情况看却没有问题。用万用表测量按键的连接也没有问题,最后发现与vcc连接的上拉电阻短路,这表明无论这一列键是否有按下,p1.6口始终为高电平,所以系统无法识别。找到原因后就开始找短路点,电路连线并不多,但却没有发现焊接造成的短路,但故障原因不会错,最终,发现是万用板本身有两个不该连的点连上了,导致了电路的短路。在把连接点断开后,一切正常。故障得到了解决。在显示电路的调试中,发现数码管不能接收数据。首先用万用表检查移位寄存器的各管脚的电压,发现8、9管脚总是相等,测量电阻则显示短路。发现这一问题后立即查找短路点,结果还是一个板子上的短路,而非人为短路。解决这一问题后一切正常。通过对这两个故障的排查,总结出电路短路是调试中的最大问题,所以在今后的调试中都要仔细排查这一问题。在波形产生模块的调试中,发现d/a始终无法接收的数据。用仿真器单步仿真的过程中发现p0口根本没有变化。根据这个现象,仔细检查了软件的编写。问题出在没有向p0口送数据,原来的程序指令是向d/a的地址里送数据,这种方法我也是第一次使用,结果不能实现。在此情况下我更改了指令,直接向p0口送数据,结果p0口开始按要求传送数据,故障解决。由此问题我学到了关于编程的解决问题,指令也许没有错,但是在特定的功能上有些指令是不能替代的,也必须多加调试才能解决。调试的过程中,当信号不能正常输出时,很难判断问题出在哪里。这个时候,将软件仿真暂停,然后可以用万用表测量由单片机输出给d/a转换器各位的电平,也可以测量d/a转换器的输出管脚,看输出的电平是否符合理论要求。用这种方法可以检测到具体是哪个电路出了问题,是检查电路的一个好方法。在实际接收波形信号时,发现频率总是和要求有一定差距。分析其原因是计数器的定

温馨提示

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

评论

0/150

提交评论