收藏 分享(赏)

课程设计——信号发生器硬件及软件设计new.doc

上传人:dreamzhangning 文档编号:2209067 上传时间:2018-09-05 格式:DOC 页数:35 大小:420.50KB
下载 相关 举报
课程设计——信号发生器硬件及软件设计new.doc_第1页
第1页 / 共35页
课程设计——信号发生器硬件及软件设计new.doc_第2页
第2页 / 共35页
课程设计——信号发生器硬件及软件设计new.doc_第3页
第3页 / 共35页
课程设计——信号发生器硬件及软件设计new.doc_第4页
第4页 / 共35页
课程设计——信号发生器硬件及软件设计new.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、信号发生器硬件及软件设计11 绪论1.1 信号发生器概述目前,市场上的信号发生器多种多样,一般按频带分为以下几种:超高频:频率范围 1MHz 以上,可达几十兆赫兹。高频:几百 KHZ 到几 MHZ。低频:频率范围为几十 HZ 到几百 KHZ。超低频:频率范围为零点几赫兹到几百赫兹。超高频信号发生器,产生波形一般用 LC 振荡电路。高频、低频和超低频信号发生器,大多使用文氏桥振荡电路,即 RC 振荡电路,通过改变电容和电阻值,改变频率。用以上原理设计的信号发生器,其输出波形一般只有两种,即正弦波和脉冲波,其零点不可调,而且价格也比较贵,一般在几百元左右。在实际应用中,超低频波和高频波一般是不用的

2、,一般用中频,即几十 HZ 到几十 KHZ。用单片机 89S52,加上一片 DAC0808,就可以做成一个简单的信号发生器,其频率受单片机运行的程序的控制。我们可以把产生各种波形的程序,写在 ROM 中,装入本机,按用户的选择,运行不同的程序,产生不同的波形。再在 DAC0808 输出端加上一些电压变换电路,就完成了一个频率、幅值均可调的多功能信号发生器的设计。这样的机器体积小,价格便宜,耗电少,频率适中,便于携带。1.2 本论文主要研究的内容本设计采用 89S52 及其外围扩展系统,软件方面主要是应用 C 语言设计程序。系统以 89S52 单片机为核心,配置相应的外设及接口电路,用 C 语言

3、开发,组成一个多功能信号发生系统。该系统的软件可运行于 Windows XP 环境下,硬件电路设计具有典型性。同时,本系统中任何一部分电路模块均可移植于实用开发系统的设计中,电路设计具有实用性。本设计将完成以下几个方面的工作:(1)选芯片,尽量满足一般工业控制要求、以增强其实用性。信号发生器硬件及软件设计2(2)原理图设计在保证正确的前提下,尽量采用典型的电路设计。(3)印制板设计既要精巧,又要便于摆放及测试。(4)固化于单片机芯片中的软件采用模块设计,层次清楚,具有上电复位及初始化功能,具有很好的软件开发框架。(5)掌握单片机仿真软件 Proteus6.7 的使用。为此,论文包括以下内容:

4、绪论。主要介绍单片机发展概况和信号发生器的概述,为以后几章的介绍奠定基础。 系统总体方案设计。本章主要考虑系统性能、功能和器件选择。包括两个主要内容:系统分析和系统总体方案设计。其中系统分析包括问题定义、可行性研究和需求分析。问题定义中对设计的课题进行定义,详述设计环境。可行性分析中分别从经济可行性、元器件具备程度和对可能遇到的问题的可解决性几个方面论证设计是否可行。需求分析对系统功能要求、性能要求和运行环境要求说明。系统总体方案设计包括算法设计、系统总体框图设计以及系统中使用的主要芯片。 系统的硬件设计。本章完成系统的硬件总体设计,详细说明了设计思路。 系统软件设计实现。本章是系统的具体实现

5、,对系统按功能模块进行介绍。 系统测试报告。分别对系统的功能测试、调试过程和系统的使用方法进行介绍。 总结与展望未来。信号发生器硬件及软件设计32 系统设计方案2.1 系统分析2.1.1 问题定义基于单片机的信号发生系统是一个实际应用系统,可为相关实验及实际应用提供支持。本论文包括硬件系统的详细设计及 C 语言在基本控制中的应用。此系统具有的功能如下:硬件部分(1)8 位七段数码动态扫描显示;(2)24 的 8 位矩阵键盘;(3)时钟电路与复位电路;(4)具有 8 位精度的 D/A 转换功能;(5)波形产生功能;软件部分(1)系统复位初始化;(2)键盘扫描与处理;(3)按键服务程序;(4)定时

6、器 0 中断服务程序;(5)正弦波发生程序;(6)三角波发生程序;(7)方波发生程序;(8)锯齿波发生程序。2.2 系统需求分析2.2.1 系统功能要求系统具有 D/A 转换功能,信号幅度放大功能,8 位七段数码显示功能,上电自动复位功能,24 键盘输入接口。信号发生器硬件及软件设计42.2.2 系统性能要求(1)系统的 D/A 转换功能具有 8 位精度;(2)动态扫描七段数码显示器;(3)89S52 单片机时钟信号为 12MHZ;(4)系统上电自动复位;(5)系统具有 8 位行列扫描键盘。2.3 总体方案设计2.3.1 算法设计本设计涉及的算法较少,将在第四章软件设计中介绍。2.3.2 系统

7、总体结构框图设计图 2-1 主系统结构框图信号发生器硬件及软件设计53 硬件设计3.1 总体硬件设计(1)程序存贮器89S52 内部自带 8K 的 ROM,512B 的 RAM,所以不需要对其扩展存储器。(2)键盘接口系统采用矩阵键盘,用 I/O 线组成行、列结构,按键设置在行列的交点上,24 的行列结构可构成 8 个键的键盘,采用行列扫描法。(3)数码管驱动本设计实现了 89S52 的 I/O 口对 24 键盘和 8 位数码管显示的控制。为增加对数码管显示器的驱动能力及稳定性,在它与 89S52 之间设置了提高驱动能力的74LS373。(4)D/A 转换本设计 D/A 转换部分采用 DAC0

8、808 芯片,由于它不带锁存器,故在使用时必须加 74LS373 进行数据锁存。(5)信号变换部分对信号的变换部分采用四运放集成芯片 LM324,它采用 14 脚双列直插塑料封装,它的内部包含四组形式完全相同的运算放大器。(6)可靠性方面在使用应用系统时,可能会受到多种干扰的侵袭,直接影响到系统的可靠性,因此,本系统适当加入去耦电容,以减少干扰,确保精度。3.2 系统模块设计3.2.1 显示器接口设计 本机显示采用软件译码动态显示,系统显示电路如图 3-1 所示。采用软件译码动态显示的理由如下:1)如果用静态显示,单片机的接口资源肯定不够用,那么还信号发生器硬件及软件设计6要进行接口的扩展,增

9、加了系统的复杂度;2)如果要制成印刷线路板,得占相当大一块面积;3)另外,采用动态显示,可以明显的降低功耗,因为每一时刻只有一个LED 发光,其功耗为静态显示的 18。一个 LED 最大电流为 120mA,如用静态显示,8 个 LED 就耗电流 960mA 综上分析,采用动态显示才是最经济的方案。在显示的时候,只要把显示的字码输送到 P2 口,再经过 74LS373 进行数据锁存,P3 口作为位选控制信号。由于采用的是共阴极数码管,当需要显示哪一位的时候,只要在相应的位选控制信号输出低电平就行。例如,要在第一个数码管显示 P,那么在 P2 口就要输出 73H 字段码,同时 P3 口输出 FEH

10、 位选码。图 3-1 系统显示电路3.2.2 复位与时钟电路设计3.2.21 复位电路设计单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的 RST 引脚上出现 24 个时钟振荡脉冲(2 个机器周期)以上的高电平,单片机便实现初始化状态复位。为了保证应用系统可靠地复位,通常是 RST 引脚保持 10ms 以上的高电平。复位电路连接如图 3-2 所示。此电路仅用一个电容及一个电阻。系统上电时,在 RC信号发生器硬件及软件设计7电路充电过程中,由于电容两端电压不能跳变,故使 RESET 端电平呈高电位,系统复位。经过一段时间,电容充电,使 RESET 端呈低电位,复位结束 2。89S5

11、22+5VC1 R1图 3-2 复位电路3.2.2.2 时钟电路设计 8XX51 系列单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚 XTAL1 和 XTAL2 外接晶体振荡器(简称晶振) ,就构成了内部振荡方式。由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用 6MHZ、12MHZ 或 24MHZ。内部振荡方式如图 3-3所示。图中电容 C1、C2 起稳定振荡频率、快速起振的作用。电容值一般为530pF。内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。 外部振荡方式是把已有的时钟信号引入单片机内。这种方

12、式适宜用来使单片机的时钟与外部信号保持一致。外部振荡方式电路如图 3-4 所示。对 HMOS 的单片机(8031,8031AH 等) ,外部时钟信号由 XTAL2 引入;对于CHMOS 的单片机(8XCXX) ,外部时钟信号由 XTAL1 引入。图 3-3 内部振荡 图 3-4 外部振荡信号发生器硬件及软件设计83.2.3 键盘接口设计3-5 系统键盘实现工作原理如下:1检测键盘上是否有键按下:将行线送入低电平,列线送入高电平。读入 P1口的状态来判别。其具体过程如下:P1 口输出 0FH,即所有行线置成高电平,所有列线置成低电平,然后将 P1 口状态读入与 0FH 比较。如果有键按下,总会有

13、一根行线电平被拉至低电平,从而使行输入状态不全为 1。2识别键盘中哪一个键按下:确认有键按下后,保存行扫描时有键按下时的状态 X 。 P1 口输出 F0H,进行列扫描,保存列扫描状态 Y,取出键值 Z=X|Y.例如第一行第一列有键按下,那么行扫描读入的状态为 00001110,列扫描读入的状态为11100000,最后键值 Z=11101110=EEH,然后转去执行相应的服务程序。3.2.4 D/A 转换设计一、D/A 转换器概述D/A 转换器的性能指标 3:1.分辨率:输出模拟电压应能区分 02n-1 共 2n 个输入数字量。表示方法:(1)用输入二进制数的位数表示;如 8 位。(2) 用输出

14、模拟电压的最小值与最大值的比值表示。指最小输出电压和最大输出电压之比。DAC0808 的分辨率为 1/256。2精度:DAC 实际输出电压与理想的输出电压的偏差。 DAC0808 的最大满刻度偏差为+1LSB 。3线性度:DAC 实际传输特性曲线与理想的传输特性曲线的偏差。 DAC0808 的最大误差为+0.19% 。4温度灵敏度:在输入不变的情况下,输出模拟电压随温度变化产生的变化量。信号发生器硬件及软件设计9一般用满刻度输出条件下温度每升高 1,输出电压变化的百分数作为温度系数。5转换速度:用完成一次转换所需的时间建立时间 Tset 来衡量。建立时间:输入信号从开始变化到输出电压进入与稳态

15、值相差 1/2LSB 范围以内的时间。输入信号由全 0 变为全 1 所需时间最长。当外接运放时,转换时间还应加上运放的上升(下降)时间。(31)ROsTRSVtmaxmax式中 为转换时间 , 为建立时间, 输出最大电压值, 为运放输出转axstmaxoVRS换速率。二、D/A 转换器的分类D/A 转换器的品种繁多、性能各异。按输入数字量的位数分:8 位、10 位、12位和 16 位等;按输入的数码分:二进制方式和 BCD 码方式;按传送数字量的方式分:并行方式和串行方式;按输出形式分:电流输出型和电压输出型,电压输出型又有单极性和双极性;按与单片机的接口分:带输入锁存的和不带输入锁存的。三、

16、D/A 转换器的原理以倒 T 形电阻网络 D/A 转换器为例,介绍 D/A 转换器的原理。倒 T 形电阻网络D/A 转换器结构如图 3-6 所示。D D D D(LSB) (MSB)S S S S00112233R+Avoif16 82R2R +V2R R I4R4I REFI8 II2R 2R IRII I16 22图 3-6 倒 T 形电阻网络 D/A 转换器图中 S0 S3 为模拟开关,由输入数码 Di 控制,当 Di=1 时, Si 接运算放大器反相输入端(虚地) ,电流 Ii 流入求和电路;当 Di=0 时, Si 将电阻 2R 接地。所以,无论 Si 处于何种位置,与 Si 相连的

17、 2R 电阻均接“地” (地或虚地) 。流过各开关支信号发生器硬件及软件设计10路(从右到左)的电流分别为 I/2、 I/4、 I/8、 I/16。总电流:(32) 3041323140 22 iiiREFREF DVDDVi输出电压: (33)304iiREFffoViv将输入数字量扩展到 n 位,则有: 102niiREFffo DVv可简写为: (34)noBKv其中 , =nREFfnV2102iiD四、DAC0808 简介DAC0808 是八位电流输出型 D/A 转换器件,由 4 脚输出转换电流,其简化电路图及引脚结构如图 3-7 所示。VREF 为参考电源,VEE 负电压供电;D0

18、 是高数据位(MSB) ,D7 才是地数据位(LSB) 。DAC0808 的电源极性:VCC=+5V,VEE=-15V,VREF=+15V。D0D7 是数据输入端,I 0是电流输出端,COMP 是接电容进行补偿。在单片机应用系统中通常需要的是电压信号,电流信号与电压信号之间的转换可由运算放大器实现。DAC0808 不带锁存器,所以在使用时必须加一个 74LS373 进行数据锁存。NCD4D5D6D7 D0D1D2D3VC-VEIOGND COMP12345678 91016151413121-VREF+VREF信号发生器硬件及软件设计11图 3-7 DAC0808 简化电路框图和管脚排列根据

19、DAC0808 的特性设计出本系统的 D/A 转换电路如图 3-8 所示。图 3-8 系统 D/A 实现工作原理:本系统由 VREF提供参考电压,相应参考电流为 I=VREF/R1。电容 C4提供补偿,OUT 输出电流,经过 LM324 运算放大器转换成电压。所以输出电压:=5KVREF121Rf(35)iiiifo Dv 27087018 3.2.5 D/A 转换及电压变换1. D/A 转换原理D/A 转换器的原理很简单,可以总结为“按权展开,然后展开”几个字。换句话说,D/A 转换器要输入数字量中每位都按其权值分别转换成模拟量,并通过运算放大器求和相加。因此,D/A 转换器内部必须要有一个

20、解码网络,以实现按权值分别进行 D/A 转换。解码网络通常有两种:二进制加权电阻网络和 T 型电阻网络。在二进制加权电阻网络中,每位二进制 的 D/A 转 换 是 通 过 相 应 位 加 权 电 阻 实 现 的 , 这 必 然 造成 加 权 电 阻 阻 值 差 别 极 大 , 尤 其 在 D/A 转 换 器 位 数 较 大 时 更 不 能 容 忍 。 例如 , 若 某 D/A 转 换 器 有 12 位 , 则 最 高 加 权 电 阻 为 10k 2 =20M 。这么1大的电阻值在 VLSI 技术中是很难制造出来的。即便制造出来,其精度也是很难符合要求的。因此,现在的 D/A 转换器毫无例外地采

21、用 T 型电阻网络进行解码活动 5。为了说明 T 型电阻网络的原理,现以 4 位 D/A 转换器为例加以讨论。图 3-8 为此 4 位 D/A 转换器的原理框图。图中,虚框为 T 型电阻网络(桥上电阻均为 R,桥臂电阻均为 2R) ;OA 为运算放大器,也可外接,A 点为虚拟地,接近零伏;Vref 为参考电压,由稳压电源提供;S0,S1,S2,S3 为电子开关,受 4 位DAC 寄存器中 b0,b1,b2,b3 控制。为了分析问题方便,设 b0,b1,b2,b3 全为“1” ,故 S0,S1,S2,S3 全部和“1”端连接。根据克希荷夫定律,如下关系式成立:图 3-8 T 型电阻网络型 D/A

22、 转换器事实上,S0, S1,S2,S3 的状态是受 b0,b1b2,b3 的控制的,并不一定全是“1”。若它们中有些位为“0” ,S0,S1 ,S2,S3 中相应开关会因和“0”端相连接而无电流通过。为此,可以得到通式:选取 Rf=R,并考虑 A 点为虚拟地,故 Iref = -Iout1因此,可以得到对于 n 位 T 型电阻网络,上式可变为上 述 讨 论 表 明 : D/A 转 换 过 程 主 要 是 由 解 码 网 络 实 现 的 , 而 且 是 并 行工 作 的 。 换 句 话 说 , D/A 转 换 器 是 并 行 输 入 数 字 量 的 , 每 位 代 码 也 是 同 时被 转 换

23、 成 模 拟 量 的 。 这 种 转 换 方 式 速 度 快 , 一 般 为 微 秒 级 , 有 的 可 达 几 十 毫微 秒2DAC0832 的简介及接口DAC0832 为 8 位数模转换器,转换速度:1S;参考电压:3V 15V 。DAC0832 是由输入数据寄存器、DAC 寄存器和 D/A 转换器所组成的 CMOS 器件,其特点是片内设有二个独立的 8 位寄存器,即输入数据寄存器和 DAC 寄存器,因而又具有缓冲作用。被转换的数据寄存在 DAC 寄存器中,下一组输入数据又可装入数据寄存器中,这就可以根据需要快速修改 DAC0832 的输出。DAC0832 的各引脚的功能如下:片选信号,低

24、电平有效。它与 ILE 信号结合,可对 信号是否起CS CS作用进行控制。ILE:允许输入锁存信号,高电平有效。:写信号 1,用于将数字量输入锁存到输入数据寄存器中。在 、1WRILE 同时有效下, 由低电平到高电平的上升沿将输入数据线上的信号打入1WR输入数据寄存器。:写信号 2,用于将锁存在输入数据寄存器中的数据传送到 DAC 寄2R存器中。在 信号有效时, 由低电平到高电平的上升沿将输入数据寄XFE2存器中的信号打入 DAC 寄存器。:控制传送信号,低电平有效。用于控制 。2WRDI0DI7:8 位数据输入端。Iout1、Iout 2:DAC 电流输出端,Iout1、Iout2 之和为常

25、数。 Iout1 随 DAC 寄存器的内容线性变化。Rfb:反馈信号输入线,反馈电阻在芯片内部。Vrfe:基准电源输入端。Vcc:电源输入端。AGND:模拟量接地端。DGND:数字量接地端。DAC 0832 与 MCS-51 的接口如图 3-9 所示。图中, ILE 接+5V 以及使、 接地,故 0832 的“8 位 DAC 寄存器”处于直通方式下。8 位输入2WRXFE寄存器受 和 端信号控制 6。CS1R图 3-9 8031 与 DAC0832 的接口及电压变换原理在单片机应用系统中通常需要的是电压信号,电流信号与电压信号之间的转换可由运算放大器实现。由于 DAC0832 的输出是电流型的

26、,所以 0832 的Iout1 口输出的电流值,通过集成运算放大器转化成电压值。此电压值为 0V -5V。对上图的几点说明:1)波形零点可调的实现图 3-10 中,第一个运放接成电压跟随器,把把电位器上的分压传输到下一EA/VP31 X119X218 RESET9RD17 WR16INT012 INT113T014 T115P101 P112 P123P134 P145 P156P167 P178P00 39P01 38P02 37P03 36P04 35P05 34P06 33P07 32P20 21P21 22P22 23P23 24P24 25P25 26P26 27P27 28PSEN

27、 29ALE/P 30TXD11RXD 10U18031Vcc20Iout1 11lsbDI07 Iout2 12DI16 DI25Rfb 9DI34 DI416 Vref 8DI515DI614 msbDI713 ILE 19WR2 18CS1 WR1 2Xfer17U5DAC0832R61KR71KR14kR51KR81KR132KC40.1uFS14R92.2KR112KR122KR10POT2R210k+12V-12V+5VUoR142K+5V+5V 32 6U7uA74132 6U6uA741 32 6U8uA74132 6U9uA741级。第二个集成运放接成反向相加电路,把前一级的

28、波形信号与电位器上的分压相加,即在原来波形上叠加上一个直流恒定电压信号,电位器上的分压即是原来波形的新零点。所以,调节电位器的值,即可以调节波形的零点。图 3-10 零点调节电路原理图2)波形幅值可调电路DAC0832 输出的电流,经过运放的作用,变成 0V -5V 的电压信号。再经过图 3-11 所示的电路变化,就成为正负对称的波形。调节电路中的电位器 W,就可以改变波形的幅值。在图中,集成运放工作于深度负反馈状态,可以运用虚短的概念,即“A 点”电位等于地电位。那么,I1 恒定,I1 = (5-0)/2R = 5/2R根据基尔霍夫电流定律,I1 = I2 + I3I2 = (0 UI)R

29、= UIRI3 = I1 I2 = 5(2R) ( -UI R) = 5(2R) + UIR= (5 + 2UI )(2R)0 U0 = WI3U0 = WI3 = W (5 + 2 UI) = (5W)(2R) (WR)UI假设 W 恒定,则 (5W)(2R) = 常数 WR = 常数设 C1 = (5W)(2R) = 2.5 W R ,C2 = WR,则 U0 = C1 C2 UI = C2 ( 2.5 + UI ) (式 3-2)设 W = R,则 C1 = 2.5 ,C2 = 1则 UI(V)和 U0(V)的关系如表 3-3 所示。表 3-3 UI(V)与 U0(V )关系UI(V)

30、0 -1 -2 -2.5 -3 -4 -5U0(V) -2.5 -1.5 -0.5 0 0.5 1.5 2.5(1/3)RRRR+12V-12VUoR32 6 32 6Ui由(式 3-2)可以看出,C2 为一个常数,UI 为 0-5V 。则 2.5+ UI 必为+2.5V-2.5V,变成双极性。C2 ( 2.5 + UI )是把 C2 ( 2.5+ UI )的波形放大 C2 倍,C 2 ( 2.5 + UI )是再把所得的波形反向一次,所以这个电路可以实现波形幅值的可调 8。图 3-11 信号幅值可调电路原理2)滤波实现波形的平滑DAC0832 为数模转换器,由于数字信号是离散的,0832 产

31、生的电流信号也必定是离散的,所以要通过滤波电路滤除信号中的高次谐波。滤波电路应该越靠近 0832 越好,因为越向后,谐波被放大越多,越不容易滤除。在电压变换电路中,第一级放大器的输出电阻很小,滤波电容不能加在这;第二级的输入端电位近似等于低电位,电容在那起不了作用,因此电容只能加在 R5 和 R6 之间。而有些波形是不需要滤波的,像方波,脉冲波,所以需要加个开关,需滤波就合上开关,反之则打开。R61KR71KR14kW10k+5V32 6U8uA741UiI3I2UoI1第 4 章 系统软件编程4.1 软件总体设计在第 3 章中已经介绍了波形发生器的硬件实现问题,设计出了相应的电路图,现在只要

32、编写不同的程序便可以产生不同波形的模拟电压。应用系统中的应用软件是根据系统功能要求设计的,应该可靠地实现系统的各种功能。一个优秀的应用系统的软件应具有下列特点:(1)根据软件功能要求,将系统软件分成若干个相对独立的部分。设计出软件的总体结构,使其结构清晰、简捷、流程合理。(2)要树立结构化程序设计风格,各功能程序实现模块化、子程序化。既便于调试、链接,又便于移植、修正。(3)建立正确的数学模型。即根据功能要求,描绘出各个输入和输出变量之间的数学关系,它是关系到系统性能好坏的重要因素。(4)为提高软件设计的总体效率,以简明、直观的方法对任务进行描述,在编写应用软件之前,应绘制出程序流程图。(5)

33、要合理分配系统资源,包括 ROM、RAM、定时器/计数器、中断资源等。本系统的软件设计包括以下七个程序模块:(1)系统复位初始化;(2)键盘显示/扫描与处理;(3)MON 键中断程序;(4)锯齿波发生程序;(5)三角波发生程序;(6)方波发生程序;(7)正弦波发生程序;4.2 功能软件设计4.2.1 系统复位初始化程序复位程序完成如下工作:1改变 PSW 的 RS0、 RS1 两位值,选择第三组寄存器作为工作寄存器;2设置堆栈指针 SP70H;3设置显示缓冲区于 23H,22H,21H,20H 四位,使显示“GOOD”;4设置 28H,27H,26H,25H,24H 五个字节作为键盘输入的十进

34、制表示的频率;5置 P1 口输出 7FH 数据;6设置 2AH 表示需要产生的波形的代号,一字节,十进制数;7设置 2FH 为显示的当前位;8设置 2EH 为当前显示的字的地址,初始值(2EH)20H ;9设置 2CH 字节放置键扫描时输入的每位值;10键值表设于 3FF0H 开始处;11字形码表设于 3FE0H 开始处;12设置 2DH 字节表示输入的是一位波形代号还是 5 位的频率,复位程序置(2DH)00H 或 07H, 表示输入值应为波形代号(2DH)77H, 表示应该输入频率值或正在输入频率值(2DH)17H, 表示正在输出波形13设置 31H 字节记录输入的数字的数目。输入的数字最

35、多为 4 个;14置 TCON 寄存器第 2 位 8AH 位1,选择 下降沿触发形式;1INT15置中断允许触发器 IE86H,即(AFH)位1, 允许中断(AAH)位1, 允许 中断INT(A9H)位1, 允许定时器 0 中断16置定时器 0 工作于方式 0,即 13 位定时器方式,送入定时器 0 定时初值,启动定时器 0 工作;17转键盘扫描程序。4.2.2 键盘/显示扫描程序键盘/显示系统是单片机不可缺少的部件,它常有硬件电路和软件电路两部分组成。硬件电路如图 3-6 所示,软件程序有动态显示子程序、键盘扫描子程序和求键值子程序等组成 1。图 4-1 为键盘/显示系统的主程序流程图。键盘

36、/显示系统主程序为:ORG 0400HSTART: MOV DPTR,#8000H ;DPTR 指向命令/ 状态口MOV A,#05H ;方式字 05H 送 AMOVX DPTR,A ;送 8155 命令/状态口DSP: ACALL DISP1 ;调用显示子程序ACALL SCAN ;调用键盘扫描子程序JZ DSP ;若无键按下,则 DSPACALL KCODE ;若有键按下,则 KCODECJNE A,#10H,CONT ;是否是数字键? CONT: JC NUM ;若是,则 NUMMOV DPTR,#JTAB ;若 否 , 则 命 令 转 移 表 始 址 送DPTRSUBB A,#10H

37、;形成 JTAB 表地址偏移量RL A ;地址偏移量2JMP A+DPTR ;转入相应功能键分支程序JTAB: AJMP K1 ;转入 K1 程序AJMP K2 ;转入 K2 程序NUM: ;数字键处理程序SJMP DSP ;返回 DSPK1: ;小数点程序段SJMP DSP ;返回 DSPK2: ;EXE 键程序段SJMP DSP ;返回 DSPENDY系统初始化确有按键?调键盘扫描子程序调显示子程序显示一遍 LED有键按下?下?下?N开始结束YN开始置段/位选码初值8155 初始化位选码PA 口查段选码表段选码PB 口延时 1ms指向下一单元4 位显示完?返回选择下一位YN图 4-1 键盘

38、/显示主程序框图 图 4-2 动态显示子程序框图1动态显示子程序程序框图如图 4-2。DSP: MOV A,#03H ;8 155PA、 PB 口 为 输 出 , PC为 输 入MOV DPTR,#7F00H ;8155 命令口地址送DPTRMOVX DPTR,A ;写命令MOV R0,#50H ;5053H 单元存 4 个显示数据MOV R3,#7FH ;第一位 LED 的位选码7FHMOV A,R3 ;指向 PA 口AGAIN: MOV DPTR,#7F01H ;位选码送 PA 口MOVX DPTR,A ;取显示数据MOV A,R0 ;取段选码表首址MOVC A,A+DPTR ;取段选码M

39、OV DPTR,#7F02H ;指向 PB 口MOVX DPTR,A ;段选码送 PB 口ACALL DL1ms ;延时 1msINC R0 ;指向下一显示数据单元MOV A,R3JNB ACC.0,OUT ;4 位显示完,转 OUTRR A ;未完,调整为下一位选码MOV R3,AAJMP AGAIN ;继续显示下一位OUT: RET ;子程序返回DSEG: DB 3FH,06H,5BH ;显示 0,1,2DB 4FH,66H,6DH ;显示 3,4,5DB 7DH,07H,7FH ;显示 6,7,8DB 6FH ;显示 9DL1ms: MOV R7,#01H ;延时 1ms 子程序DL0:

40、 MOV R6,DL1DL1: DJNZ R6,DL1;DJNZ R7,DL0RET2键盘扫描子程序键盘扫描子程序框图如图 4-3 所示。在扫描键盘的过程中应兼顾显示器的显示。KEYSUB: MOV A,#03H ;8 155PA、 PB 口 输 出 ,PC 口 输 入MOV DPTR,#7F00H ;控制字地址送 DPTRMOVX DPTR,A ;向 8155 输出控制字BEGIN: ACALL DIS ;调显示子程序ACALL CLEAR ;清零显示器,即熄灭ACALLCCSCAN ;全 列 置 零 扫 描 , 判 有 无 键按 下JNZ INK1 ;有按键按下,转 INK1AJMP BE

41、GININK1: ACALL DIS ;调显示子程序,延时89msACALL DL1msACALL DL1ms ;共延时约 10ms 去抖ACALLCLEAR ;熄灭显示器ACALL CCSCAN ;全 列 置 零 扫 描 , 判 是 否 确有 键 按 下JNZ INK2 ;确有键按下,转 INK2AJMP BEGIN ;抖动引起,转回 BEGININK2: MOV R2,#0FEH ;扫描第 1 列,置第 1列为 0MOV R4,#00H ;列号送 R4Y开 始8155 初始化调显示子程序并熄灭显示器调全列置零扫描子程序有按键否?调显示子程序延时约 10ms调显示子程序并熄灭显示器调全列置零

42、扫描子程序确有按键?逐列扫描某行有按键?定位键号按键释放?结 束调全列置零扫描子程序四列完否?否?调整为下一列NYNYNNYYNCOLUM: MOV DPTR,#7F01H ;指向 PA 口MOV A,R2 ;扫描码送 AMOVX DPTR,A ;输出扫描码INC DPTRINC DPTR ;指向 PC 口MOVX A,DPTR ;读入 PC 口JB ACC.0,LONE ;第 1 行无键按下,转LONEMOV A,#00H ;第 1 行有键按下,行码送 AAJMP KCODE ;转 KCODE,定按键的键号LONE: JB ACC.1,LTWO ;第 2 行无按键按下,转LTWOMOV A,

43、#08H ;第 2 行有按键按下,行码送 AAJMP KCODELTWO: JB ACC.2,NEXT ;第 3 行无按键,转扫描下一列KCODE: ADD A,R4 ;行码加列号得键号PUSH A ;键号压栈保存KON: ACALL DIS ;调显示,等待按键释放ACALL CLEAR ;熄灭显示ACALL CCSCAN ;判按键是否仍按下JNZ KON ;键未释放,继续等待Y开 始8155 初始化调显示子程序并熄灭显示器调全列置零扫描子程序有键按下?调显示子程序延时约 10ms求取键值调全列置零扫描子程序确有按键?逐列扫描有键按下?关定时器 0 中断扫描到?四列完否?否?NYNYNNYYN

44、扫描 5 遍?是数字键?字形译码功能键处理程序YN键值(2AH)字形显缓“”处理 EXE 处理YNPOP A ;恢复键号到 A 中RET ;返回NEXT: INC R4 ;列号加 1MOV A,R2 ;列扫描码送 AJNB ACC.3,KERR ;全 4 列扫完,无按键,转 KERRRL A ;调整为下一列扫描码MOV R2,A ;保存扫描码AJMP COLUM ;继续扫描下一列KERR: AJMP BEGIN ;继续等待键输入3功能键处理程序功能键处理程序包括小数点处理程序和 EXE 键处理程序两部分,如图 4-4、图 4-5 所示。图 4-4 小数点处理程序框图 图 4-5 EXE 键处理

45、程序框图4键值译码子程序求键值子程序框图如图 4-6 所示,相应程序为:ORG 05A0HKCODE: MOV R1,#00H ;行序号寄存器 R1 清零MOV A,R3 ;行值送 ACLR C ;C 清零LOOP: RRC A ;行值右移 1 位JZ NEXT1 ;若行值为 0,则 NEXT1INC R1 ;行序号加 1SJMP LOOPNEXT1: MOV A,R1 ;行序号送 ASWAP A ;行序号移入高 4 位频率寄存区(28H)(25H)(27H)(24H)(26H) (25H) (24H)清零开 始数字计数器置满显缓高位清零,低两位向前移动 1 位,最低位空出,放入的字形码转主键

46、盘扫描程序KEYBOARDKEYBOARD延时 200ms关定时器 0 中断开 始置正在输出波形标志关显示调子程序,把十进制频率转换成十六进制频率选择第 0 组寄存器根据波形代号调试波形发生程序MOV R1,A ;暂存 R1MOV A,R4 ;列值送 AANL A,#0FH ;取出列值低 4 位ORL A,R1 ;求得关键字送 AMOV B,A ;存入 BMOV DPTR,#KTAB ;键值表始址送 DPTR图 4-6 键值译码子程序框图MOV R0,#00H ;键值计数器 R0 清零CLR A ;清零 AREPE: MOVC A,A+DPTR ;查键值表CJNE A,B,NEXT2 ;若未查

47、到,则 NEXT2SJMP RESV ;若查到,则 RESVNEXT2: INC R0 ;键值计数器加 1MOV A,R0 ;送入 ASJMP RESV ;继续查表Y行序列初值 0 送 R1行值右移一位行序号 R1 加 1行值 R3=0?行序号左移四位和列值底四位相加得关键字查到关键字?键值计数器加 1 送 A键值送 ANYNRESV: MOV A,R0 ;键值送 ARETEND4.2.3 MON 键中断程序图 4-7 MON 键服务程序框图本系统输入波形序号和频率值以及暂停波形输出这几个状态,全靠 MON 键来改变。其程序流程如图 4-7 所示。N开 始选择第三组寄存器为工作寄存器显示标志返

48、 回( 2DH) =07H ?( 2DH) =17H ?( 2DH) =00H ?重置返回地址开定时器 0 中断(2DH) 77H返 回返回键盘扫描返 回YNNYY4.2.4 锯齿波发生程序1反向锯齿波程序清单MSW: MOV DPTR,#0BFFFH ;指向 D/A 输入寄存器DA0: MOV R7,#80H ;置输出初值DA1: MOV A,R7 ;数字量送 AMOV DP TR,A ;送 D/A 转换DJNZ R7,DA1 ;修改数字量AJMP DA0 ;重复下一个波形2正向锯齿波程序清单PSW: MOV DPTR,#0BFFFH ;指向 D/A 输入寄存器DAP0: MOV R7,#80H ;置输出初值DAP1: MOV A,R7 ;数字量送 AMOV DPTR,A ;送 D/A 转换INC R7 ;修改数字量CJNE R7,#255,DAP1 ;数字量255,转 DAP1AJMP DAP0 ;重复下一个波形3双向锯齿波程序清单DSW: MOV DPTR,#0BFFFHMOV R7,#0DAD0: MOV A,R7MOVX DPTR,AINC R7AJMP DAD04.2.5 三角波发生程序SSW: MOV DPTR,#80BFFFHDAS0: MOV R7,#80HDAS1: MOV A,R7MOVX DPTR,AINC R7CJNE R7,#255,DA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报