科技创新[2]-第074组设计报告_第1页
科技创新[2]-第074组设计报告_第2页
科技创新[2]-第074组设计报告_第3页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

1、完成时间: 2006-5-30科技创新 2 设计报告项 目 名 称 : 可 控 增 益 放 大 器 , 函 数 信 号 发 生 器 及其控制系统设 计 小 组 编 号 : 第 74 组设 计 小 组 名 单 : 王 愈 喜 (组 长 )徐昊王永哲汤逸纯姓名班级学号具体负责的工作联系方式王愈喜F04030285040309811总体设计、软件编程、实验报告撰写徐昊F04030295040309815软件编程、实验报告撰写王永詰F04030285040309803硬件设计与焊接实验报告撰写汤逸纯F04030295040309835硬件设计与焊接实验报告撰写摘 要:本设计报告包括了可控增益放大器,

2、函数信号发生器, 液晶显示三个模块的主要功 能、系统框图,系统硬件以及软件的设计和实现方法,系统的技术指标,调试分析,针 对用户操作的详细说明, 对系统中某几个部分的深入扩展研究, 心得体会, 问题调试和 实物照片等等,包括了与此相关的理论和实践中的各种问题。关键词:可控增益放大器,函数信号发生器,液晶显示Abstract:This report includes detailed explanations of inner workings of the controllable gain amplifier, signal generator and LCD displayer; whic

3、h include the designing and implementations of its control systems, major functions, required hardware and software and technical index of system. The design specifications, plus the debugging process and testing, as well as detailed user-oriented instructions manual, and pictures of object are also

4、 attached in the report.KEYWORDS:controllable gain amplifier, signal generator LCD displayer目次1. 概述 11.1编写说明 11.2名词定义 12. 系统总述 22.1系统组成 22.2系统的主要功能 23. 增益可控放大器(基础部分)的硬件设计 33.1主要功能 33.2系统设计指标 33.3设计原理 33.4主要部分设计及参数 4主要元件 43.4.1.1 主要元件 CD4066 43.4.1.2 主要元件 LM741 6外围电路设计 64. 液晶显示(拓展部分一)的硬件设计 84.1主要功能 8

5、4.2系统设计指标 84.3主要部分设计和参数 8主要元件 8点阵式LCD显示器 84.3.1.2 芯片 8255 9液晶模块整体电路设计 114.3.2.1 电路图 11电路说明 125. 函数信号发生器(拓展部分二)的硬件设计 135.1主要功能 135.2主要器件 135.3电路具体实现及参数 136. 单片机子系统的软件设计 156.1软件的主要功能 156.2软件总体框架 156.3全局变量说明 166.4主要模块描述 196.4.1 定时中断0描述 196.4.2 主菜单模块函数描述 206.4.3 可控增益线性放大器模块函数描述 216.4.4 信号发生器模块函数描述 256.4

6、.5 液晶模块函数描述 287. 致谢 358参考文献 369. 附录A开发环境 379.1 软件环境 379.2 硬件环境 3710. 附录B软件程序清单 3811. 附录C系统操作说明书 5111.1系统用途 5111.2简要技术指标 5111.3使用前准备 5111.4操作方法和步骤 5111.5注意事项 5212. 附录D 测试和分析 5312.1 测试电路的搭建 5312.2 测试项目和方法 5312.3 测试的资源 5312.4 测试结果及分析 53可控增益放大器的实际增益 5312.4.2 液晶显示模块 5412.4.3 函数信号发生器模块 5513. 附录E 心得体会和问题调试

7、 5613.1 心得体会 5613.2 问题与调试 5714. 附录F 实物图 601概述1.1 编写说明此报告为大二下学期科技创新关于单片机实现可控增益线性放大器、函数信号发生器、 液晶屏幕显示的设计报告。供对该系统感兴趣的读者阅读。1.2 名词定义单片机:包括 CPU(进行运算、控制)、RAM (数据存储)、ROM(程序存储)、输入/输出设备(串行口、并行输出口等)的一块集成电路。七段显示数码管 :abcdefg 七段,通过给某些段加上驱动电压或电流来使这些段发光。占空比 : 在信号的一个周期内 , 高电平信号所占的时间比例。 可控增益放大器:将输入的直流电压转换成增益后的直流电压输出,其

8、中增益可控制 函数信号发生器:产生三角波,方波,正弦波等信号2.系统总述2.1系统组成本系统主要由可控增益放大器,函数信号发生器,液晶屏幕显示三个模块组成系统组成框图如图2.1所示:图2.1系统组成框图2.2系统的主要功能本系统是由单片机控制以实现可控增益放大器,函数信号发生器,同时通过液晶提供良好的人机操作界面。3 增益可控放大器(基础部分)的硬件设 计3.1主要功能(1) 将输入的直流电压转换成增益后的直流电压输出;(2) 增益为线性的,增益等级可控的;(3) 通过按键来控制增益等级。3.2系统设计指标输入电压Vi= 1V输出电压-1.5V < Vo< -0.1V增益等级:0.

9、1V3.3设计原理增益可控放大器设计原理图见图3.1图3.1 增益可控放大器原理图Vo。Vo = - (Rf/Ri ) Vi ,加在Vi端的直流电压1v经过反相放大器电路放大得到输出电压设Ri为接入运放反向端的等效电阻。由于反相放大电路的输出电压所以只要改变Rf/Ri,就可以改变增益。可以由CD4066实现可控开关。可以通过单片机控制CD4066。3.4主要部分设计及参数主要元件3.4.1.1 主要元件CD4066CD4066内部结构见图 3.2。图 3.2 CD4066BC 内部结构(摘自 CD4066 datasheet)工作原理:CD4066是一种双向模拟开关,在集成电路内有4个独立的能

10、控制数字及模拟信号传送的模拟开关。每个开关有一个输人端和一个输出端,它们可以互换使用,还有一个选通端(又称控制端),当选通端为高电平时,开关导通;当选通端为低电平时,开关 截止。管脚定义:CD4066的管脚图见图3.3:12345678911111Dual-ln-Line PackageCUflfRtfL tIM OUT图 3.3 CD4066 管脚定义图(摘自 CD4066 datasheet)IN/OUT : SWITCH A的输入输出端:OUT/IN :SWITCHA的输出输入端(与亍1相对应)OUT/INSWITCH B的输出输入端IN/OUTSWITCH B的输入输出端(与3相对应)

11、CONTROL SWITCH B的控制端(加高电平的时候开关闭合)CONTROL SWITCH C的控制端(加高电平的时候开关闭合)Vss 接地端:IN/OUTSWITCH C的输入输出端:OUT/INSWITCH C的输出输入端(与9相对应)0: OUT/INSWITCH D的输出输入端1: IN/OUTSWITCH D 的输入输出端(与 11相对应)2: CONTROL D SWITCH D的控制端(加高电平的时候开关闭合)3: CONTROL A SWITCH A的控制端(加高电平的时候开关闭合)4: Vdd电源端(+5V)3.4.1.2 王要元件: LM741精品文档工作原理:LM74

12、1集成运算放大器是一种高放大倍数、高输入阻抗、低输出阻抗的直接耦合多级放大电路,具有两个输入端和一个输出端,可对直流信号和交流信号进行放大。外接负反馈电路后,输出电压Vo与输入电压Vi的运算关系仅取决于外接反馈网络与输入的外接阻抗,而与运算放大器本身无关。管脚定义LM741的管脚定义见图3.4DuaMn>Line or S.0, Package图3.4 LM741管脚定义图(摘自 LM741 datasheet)1: OFFSET NULL调零端2:INVERTING INPUT反相输入端3:NON-INVERTING INPUT 同相输入端4:V-电源电压负端5:OFFSET NULL

13、调零端6:OUTPUT输出端7:V+电源电压正端外围电路设计设计电路图见图3.5图3.5外围电路设计元件参数R1=10 K QR2=20 K QR3=40 K QR4=80 K QRf=8 K Q参数选择1、 Vi为输入电压,定为+1.0V。2、R1,R2,R3和R4用于产生二进制信号。3、Rf是反馈电阻,大小经计算和老师的建议取 8K Q。4、 Vo是输出电压,经过放大后等于-(Rf/R1 ) Vi。4. 液晶显示(拓展部分一)的硬件设计4.1主要功能:在液晶显示屏上实现 16 x( 2行)各种ASCII码字符的显示和滚屏、反显等。4.2系统设计指标:LCD驱动电压:5V。工作温度:室温。4

14、.3主要部分设计和参数:主要元件点阵式LCD显示器工作原理:在液晶板上排列着若干 5X 7或5 X 10点阵的字符显示位,每个显示位可显示1个字 符,从规格上分为每行 8,16,20,24,32,40位,有一行俩行及四行三类。单片机输出信号经过 总线扩展后输入到液晶电路模块,在板上显示相应字符。电路图及说明LCD图4 .1字符型模块电路图(摘自字符模块使用手册)它由HD44780,HD44100及几个电阻电容组成。HD4410是扩展显示字符位用的 (例如:16 字符X 1行模块就不用HD44100,16字符X 2行模块就要用1片HD44100)。在接口方面,有8 条数据线,三条控制线。可与微处

15、理器或微控制器相连,通过送入数据和指令,就可使模块正常 工作.液晶模块引脚功能引线号符号名称功能1Vss接地0V2Vdd电路电源5V ±10%3Vee液晶驱动电压保证VDD-VEE=4.5如V电压差4RS寄存器选择信号H:数据寄存器L:指令寄存器5R/W读/写信号H:读L:写6E片选信号下降沿触发,锁存数据7I14DB0|DB7数据线数据传输表4 .1 (摘自字符模块使用手册)4.3.1.2 芯片 8255工作原理8 2 5 5是可编程I/O口扩展芯片。对8 2 5 5输入不同的指令可改变I/O口的工作方式。8 2 5 5 工作方式由程序设定,图4.2为8 2 5 5的引脚图。8 2

16、 5 5内部有4个寄存器:分别为寄存器A、E、C和控制寄存器°A、E、C寄存器的数据就是引脚PA7PAO、 PE7PEO、 PC7PCO上输入或输出的数据。而控制寄存器的数据则表明PA、PE、PC的工作方式。通过CS、AO、A1、RD和WR对4个 寄存器进行操作。管脚定义:如图4.2精品文档口匚匚匚匚匚匚匚匚匚匚匚匚匚匚匚匚匚匚匚1 3 3 * 5 -s T 9 1 I t I I 1 I 1 1 I 2rLnnjnnnnnnjnp图4.2 8255管脚定义图(摘自 8255 datasheet)内部结构和外部接线图践砍D7D0器A9A2ALAQ 总Ft-1 -K82命内部结构与外部

17、接线图RLMill ,數据缓冲藩*片逸1_译鸥A1A0片內 译码5口 A-1!端口B£0控制口+SVGXD图4.3内部结构和外部接线图(摘自东南大学微机系统与接口 讲义)8255引脚功能:RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成输入方式。CS: 片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向 CPU发送数据或状态信息,即 CPU从8255读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU将数

18、据或控制字写入 8255。DOD7:三态双向数据总线,8255与CPU数据传送的通道,当 CPU执行输入输出指 令时,通过它实现 8位数据的读/写操作,控制字和状态信息也通过数据总线 传送。PA0PA7:端口 A输入输出线,一个 8位的数据输出锁存器/缓冲器,一个8位数据输 入锁存器。PBOPB7:端口 B输入输出线,一个 8位的I/O锁存器, 一个8位输入输出缓冲器。PCOPC7:端口 C输入输出线,一个 8位的数据输出锁存器/缓冲器,一个8位数据输 入缓冲器。端口 C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个 4位的锁存器,分别与端口 A和端口 B配合使用,可作为控制

19、信号输出或状态信号输入端口。4.3.2.液晶模块整体电路设计电路图见图4.44.3.2.2 电路说明 :期中液晶电路模块脚接地 脚接 Vcc (+5v) 电压脚接一小于 5v 的电压,用于调节对比度脚为液晶电路的RS 脚,与 8255扩展出来的I/O 口 PC 口的第5 脚相连5 脚为液晶电路的RW 脚,与 8255 扩展出来的I/O 口 PC 口的第6 脚相连6 脚为液晶电路的E 脚,与 8255 扩展出来的I/O 口 PC 口的第7 脚相连7-14 为液晶电路的DB0-DB7, 与 8255 扩展出来的 I/O 口 PB 口的八个引脚相连15,16 脚为背光,本实验中我们没有联接5. 函数

20、信号发生器(拓展部分一)的硬件设 计5.1主要功能:通过设计电路,使其可输出正弦波、三角波、锯齿波、矩形波(方波)等等的数学函 数波形。难点在于需编写程序达到周期性动态连续地改变放大器增益的效果。通过按键控制菜单。5.2主要器件:该电路比可控增益放大器电路增加了一片4066,其内部电路及管脚定义见上。5.3电路具体实现及参数:图5.1函数信号发生器电路图 其中:R1=8K Q ;R2= 16K Q ;R3=32K Q ;R4=64K Q ;R5=128K Q ;R6=256K Q ;R=6.9K Q .6. 单片机子系统的软件设计6.1软件的主要功能1增益可键控的线性放大器:增益可键控的线性放

21、大器电路,并通过单片机小系统控制 其直流增益等级的变化,增益等级从0.1到1.5。在单片机小系统板上提供人机操作界面,使操作者能通过按键操作,设置放大器的增益等级, 相应的增益值在数码管上显示。2函数信号发生器:电路可输出正弦、三角、矩形(方波)等数学函数波形3液晶显示:实现菜单显示,提供友好的人机界面。6.2软件总体框架液晶显示当前增益6.3 全局变量说明/* 定时器初值*/#define V_T10xfd /*SCOM 9600 baud, ! notice: crystal 11.0592MHz */#define V_TH00xee /* 5ms ,! notice: crystal

22、11.0592MHz */#define V_TL00x00/* 1s 软件定时器溢出值,两百个 5ms*/#define V_T1s 200数码管显示使用的全局变量 unsigned char xdata digi_scaner; unsigned char bdata output_sel; #define ADDR_8SEG #define ADDR_SELXBYTE0x2000XBYTE0x4000数码管扫描驱动指针数码管位驱动信号输出缓存数码管段驱动寄存器地址数码管段和指示灯驱动寄存器地址按键定义:单片机小系统中的四个按键分别使用了 P1 口的四个引脚sbit KEY仁P1A0;sb

23、it KEY2=P"1;sbit KEY3=P1A2;sbit KEY4=P1A3;P3 口的四个引脚可控增益放大器中使用的全局变量 可控增益放大器中 4066 四个控制开关,分别使用了 sbit D0=P3A2;sbit D1=P3A3;sbit D2=P3A4;sbit D3=P3A5;unsigned char xdata counter=1; 增益等级液晶显示模块使用的全局变量#define COM8255 XBYTE0xe003#define PA8255#define PB8255#define PC8255#define DataPortXBYTE0xe000XBYTE

24、0xe001XBYTE0xe002PB82558255COM 口地址8255PA 口地址8255PB 口地址8255PC 口地址8255PB 口地址sbit P14 =P1A4;电路图中P1的第四个引脚与8255的reset端连接在一起信号发生器模块使用的全局变量unsigned char xdata sindata=31,36,41,46,50,54,57,60,61,63,63,63,61,60,57,54,50,46,41,36,32,27,22,17,13,9 ,6 ,3 ,2 ,0 ,0 ,0 ,2 ,3 ,6 ,9 ,13,17,22,27;正弦信号数据点unsigned char

25、 xdata sinindex=0; 标识当前正弦波采样地数据点 unsigned char xdata squareflag=0; 标识方波的高低电平 unsigned char xdata trigain=1; 三角波的增益等级 unsigned char xdata triflag=0; 标志三角波的正负斜率 unsigned char xdata triinc=0x01; 三角波的增益分量 unsigned char xdata funcflag=0; 标志输出波形的类型菜单显示中使用的全局变量unsigned char xdata genmenuflag=1; 标志是否显示主菜单un

26、signed char xdata menuflag=0; 标志是否显示可控增益放大器菜单 unsigned char xdata menu1flag=0; 标志是否显示函数信号发生器菜单函数声明延时函数void delay0 ();void delay50();void delay400 ();void delay5 ();键盘扫描函数void GenMenu (); 总菜单时扫描键盘void Menu(); 可控增益放大器菜单时扫描键盘void Menu1(); 信号发生器菜单时扫描键盘数码管显示函数unsigned char NUMTOSEG7a(unsigned char );unsi

27、gned char NUMTOSEG7b(unsigned char );void display ();可控增益放大器模块所定义的函数void Switch (unsigned char counter); 用于控制可控增益放大器模块中的 4066液晶显示模块所定义的函数void init8255 (); 初始化 8255void LcdInit(); 液晶初始化void LcdClean (); 清屏void LcdWriteCommand (unsigned char ); 为液晶输入指令void Disp_XY (unsigned char ,unsigned char ); 液晶定位

28、函数void LcdWriteData (unsigned char ); 输出字符void DispOneChar (unsigned char x, unsigned char y, unsigned char Wdata) 在指定位置输 出一个字符void DispStr(unsigned char x, unsigned char y, unsigned char * str,unsigned char n) 在指定 位置输出一串字符串void DispGenMenu(); 液晶显示总菜单void DispMenu (); 液晶显示可控增益放大器菜单void DispMenu1();

29、液晶显示信号发生器菜单void DispWel (); 液晶显示 welcomevoid DispOut (); 液晶显示增益等级信号发生器所使用的函数void SinSig (); 输出正弦波void TriSig (); 输出三角波void SquareSig(); 输出方波void SigOut (unsigned char ); 用于控制信号发生器模块中的 40666.4 主要模块描述定时中断 0描述函数名timer0 ( ) interrupt 1 using 0功能描述实现 5ms 秒的硬件定时中断。主要用于:每 5ms 检测一次液晶显示菜单的标志,以此决定液晶显示哪一级菜单每隔

30、5ms 输出信号发生器产生信号的一个点 定时器初值的设定V_TH0=oxeeV_TL0=0x00定时时间为 5ms。检测液晶显示菜单标志在本系统中采用每 5ms 间隔对各个液晶显示菜单标志检测一次Genmenuflag 、 menuflag、 menu1flag 分别标志液晶当前所需显示的主菜单、可控增益 放大器菜单、信号发生器菜单。如果其中有一个标志为 1,则调用相应程序使液晶屏幕显示该菜单。信号发生器数值点输出 其中信号发生器菜单较为特殊,它其中还包含了输出相应波形的程序部分。 funcflag 用于标 志信号发生器所当前输出的波形, 液晶会显示相应波形的英文名称以提示用户, 并且每 5m

31、s 间隔输出所选波形的一个点。由SinSig()输出正弦波的点,由SquareSig()输出方波的点,由TriSig()输出三脚波的点。这三个函数的详细描述请见信号发生器部分。6.4.2 主菜单模块函数描述函数名void GenMenu ()功能描述此函数的主要功能是显示主菜单并根据用户的选择调用相应模块,即每5ms 扫描一次键盘, 按照用户通过按键输入的指令分别进入帮助菜单、 可控增益线性放大器模块、 信号发 生器模块。输入输出项输入项: KEY1 、 KEY2KEY1 、KEY2 分别记录前两个按键的信息。数值有效范围为 0 或 1 。 0 表示有键按下, 1 表示没有按键按下如果KEY1

32、被按下,则进入可控增益线性放大器模块,调用Menu()。同时将全局变量genmenuflag 置为 0 以关闭主菜单的液晶显示, 并将全局变量 menuflag 置为 1 以启动可控增 益线性放大器模块的菜单显示。如果 KEY2 被按下,则进入信号发生器模块,调用 Menu1() 。同时将全局变量 genmenuflag 置为 0 以关闭主菜单的液晶显示, 并将全局变量 menuflag1 置为 1 以启动信号发生器模块的 菜单显示。按键消抖:由于用户操作或是按键本身特性, 在按键刚刚按下时输出的电平不稳定, 有毛刺, 要过一段 时间输出的电平才会稳定。因此如果KEY1 、KEY2 、KEY3

33、 、KEY4 中任何一个键被按下,要先用延时函数 delay50() 消去按键抖动,然后再进行相应函数调用。防止按键跳动: 在程序相应用户按键要求,调用完相应函数后,还有一段 while 语句的循环。这是我们在经 过调试后,为了使按键操作更加友好而添加的。调试时,我们发现有时由于手的轻微颤抖, 会使系统将一次按键误认为两次甚至是多次, 造成不必要的麻烦。 所以, 我们加入了以下语 句: while (KEY4=0) display(); 即当按键未放开前, 程序不会跳出循环执行后续操作, 也就避免了一次按键引起多次函数调 用的错误。6.4.3 可控增益线性放大器模块函数描述通过以下函数实现一个

34、可控增益线性放大器, 根据用户的按键操作, 选择相应增益等级, 能 在数码管和液晶屏幕上实时显示提示与数据,输出增益后的信号。函数名void Menu()功能描述此程序为线性放大器的主要函数。通过中断程序的控制,如果用户选择放大器模块,则每5ms 进入该程序一次。 程序负责扫描四个按键, 若用户按下任何一个按键, 则调用相应程序 以完成用户所需要的要求,并在液晶屏幕上做出实时显示。输入项: KEY1 、 KEY2 、 KEY3 、 KEY4KEY1 、KEY2 、KEY3 、 KEY4 分别记录四个按键的信息。精品文档数值有效范围为 0 或 1。 0 表示有键按下, 1 表示没有按键按下。KE

35、Y1 为复位键,按下后程序会将增益等级复位到最低位0.1,并将用于记录增益等级的全局变量 count 重新置为 1。同时通过 DispOut() 函数在液晶屏上实时显示当前增益等级, display() 函数在数码管上实时显示当前增益等级。KEY2 控制增益等级增加 0.1,按下后程序会将增益等级从当前值增加0.1,并将用于记录增益等级的全局变量 count 同时增加 1。如果当前增益已经达到最大增益等级1.5,则按下 KEY2后增益等级变为 0.1,进行循环,同时修改全局变量count。通过DispOut()函数在液晶屏上实时显示当前增益等级,display。函数在数码管上实时显示当前增益等

36、级。KEY3 控制增益等级减少 0.1,按下后程序会将增益等级从当前值减少 0.1 ,并将用于记录增益等级的全局变量 count同时减少1。如果当前增益已经达到最小增益等级0.1,则按下KEY2后增益等级变为1.5,进行循环,同时修改全局变量count。通过DispOut()函数在液晶屏上实时显示当前增益等级,display()函数在数码管上实时显示当前增益等级。KEY4 控制帮助菜单,按下后液晶屏幕重新显示各按键相应功能以提示用户。函数名void Switch (unsigned char counter)功能描述将十进制数转化为二进制输出,并且将结果输出到P3 口的四个引脚,以此控制可控增

37、益放大器中 4066 四个控制开关,控制与放大器相连的电阻值,从而使放大器输出相应增益等级 的信号。P3 口的第二个引脚已设为全局变量D0,它是二进制的最低位。输入项Counter 为需要转化的十进制数,即标志增益等级的全局变量。输出项D0到D3依次为目标二进制数的最低到最高位,即P3 口的四个引脚,用以控制可控增益放大器中 4066 四个控制开关。sbit D0 = P3A2;sbit D1 =卩3人3;sbit D2 = P3A4;sbit D3 =卩3人5;算法描述采用十进制到二进制转换所使用的除二取余法为基本原理。数码管显示模块描述 通过以下函数完成用两个数码管轮流扫描以显示相应数字、

38、字母、符号的功能 函数名void display ()功能描述display () 主要配合本次实验基础模块线性可控增益放大器的实现并且控制数码管的显示。变量说明用全局变量 digi_scaner 标志数码管扫描驱动指针, 全局变量 output_sel 标志数码管位驱动位,XBYTE0x2000 标志数码管段驱动寄存器地址, XBYTE0x4000 标志数码管段和指示灯驱 动寄存器地址变量初始化首先将初值 0xf0 赋给标志数码管位驱动位的全局变量 output_sel ,令数码管驱动位无效, 指示灯全灭。数码管扫描用一个 if 语句,通过改变全局变量 digi_scaner 的值来完成第三

39、和第四个数码管间的轮流扫 描。由于每 5ms 扫描一次,所以虽然两个数码管不是同时显示数据,但人眼的视觉暂留使 其看来像是同时显示。当 digi_scaner 为 3 时,标志选中第三个数码管。将全局变量 output_sel 置为 0x04 以驱动第 三个数码管。调用 NUMTOSEG7b() 函数并将 counter/10 作为输入项,这样第三个数码管将 显示增益等级的个位。并 NUMTOSEG7b() 函数的输出值送到锁存器 U5。当 digi_scaner 为 4 时,标志选中第四个数码管。将全局变量 output_sel 置为 0x08 以驱动第 四个数码管。 调用 NUMTOSEG

40、7a() 函数并将 counter10 作为输入项, 这样第四个数码管将 显示增益等级的小数位。并 NUMTOSEG7a() 函数的输出值送到锁存器 U5 。最后将 output_sel 的值输出到锁存器 U6 。 配合线性可控增益放大器的输出最后调用Switch (),将增益等级值作为输入项,以此通过P3 口的四个引脚控制 4066的四个控制开关,从而输出相应增益等级的信号。 Switch ()函数的具体实现详见线性可控增益放大 器模块函数描述。函数名:unsigned char NUMTOSEG7b(unsigned char DATA)功能描述:此函数主要是用于显示增益等级的个位和小数点

41、。输入输出项unsigned char DATA 为数码管所要显示的个位数字。 由于本次实验数码管主要用于显示线性 可控增益放大器的增益等级,而增益等级从 0.1到 1.5,所以个位只有 0或者 1。如果为 0, 则数码管显示数字 0 和小数点;如果为 1,则数码管显示数字 1 和小数点。否则无显示。函数名:unsigned char NUMTOSEG7a(unsigned char DATA)功能描述:此函数主要是用于显示增益等级的小数位。可以令数码管显示数字0到9,字母A到F,以及破折号、下划线和消隐。输入项unsigned char DATA 为数码管所要显示的小数位数字。算法描述讲数码

42、管管段的相应高低电平译成十六进制数, 输入该十六进制数即得所需输出的数字、 字 母或是符号。符号相应十八进制数0OxcO10xf920xa430xb040x9950x9260x8270xf880x8090x90A0x88B0x83C0xc6D0xa1E0x86F0x8e破折号0xbf下划线0xf7消隐0xff6.4.4信号发生器模块函数描述通过以下函数完成正弦信号、三角波信号和方波信号的输出 函数名void SigOut (un sig ned char i)功能描述该函数主要负责信号发生器中各个数值点的输出。由于焊接电路时我们将 PA0 口焊到了最 小的电阻值上, 因此在我们的系统中将 PA

43、0 对应了最高位,所以通过这个函数作一个转换。 首先将所要输出的数值点从十进制转换为二进制,d0到d5,其中d0为i的二进制码最低位。然后将d0到d5顺序颠倒,使d0为j的二进制码最低位,相应输出到PA5。最后将结果j输出到 8255PA 口,以此控制信号发生器器中两片 4066 的六个开关,控制与放大器相连的 电阻值,从而使放大器输出相应数值的信号。变量说明全局变量 #define PA8255 XBYTE0xe000 标志了 8255PA 口地址d0,d1,d2,d3,d4,d5 为程序内部转换数值时,标志各二进制数位数字的临时变量。j为转换好的数值,将其赋值给PA8255,从而控制与电阻

44、相连的开关的闭合,使放大器输出相应增益等级的信号。函数名:SinSig ()功能描述主要用于产生正弦信号的数值点。 该程序输出不同的增益等级到放大器, 因此实际正弦信号 的数值是增益等级乘以当前的输入信号。该正弦信号周期为200ms,峰峰值为1.5Vi (Vi为输入电压值)。一个周期中,一共选取了 40 个点以形成该正弦信号。变量说明变量 i 记录当前输出的正弦波上一点的增益等级,作为 SigOut() 函数的输入项。全局变量unsigned char xdata sindata为一个周期正弦信号数据点增益等级的集合全局变量 unsigned char xdata sinindex 标识当前正

45、弦波采样的数据点是一个周期中的第几个 点。每 5ms 输出一个点,一个周期共计 40 个点。当 sinindex 为 40 时,表明输出完一个周 期,则将 sinindex 置为 0,开始新一周期的输出。周期计算当用户选择信号发生器模块的正弦波信号后,每5ms调用一次该函数,即每5ms输出一个正弦波信号的点,我们共在一个周期中选择了40个点,所以周期为 5msX 40 = 200ms。算法描述:正弦信号数值点取值由于一共采用 6个开关,则其不同开关的有效状态共有 63种,因此有 63 个不同增益等级可 以利用。首先利用程序模拟出这 63 个开关的有效状态,并计算出与这些状态一一对应的增 益等级

46、。 然后另写一个程序完成以下功能: 根据我们所需要输出的正弦波图形, 在一个周期 中等间隔的取出 40 个点,将这些点的取值与已计算出的增益等级比较,取出最接近值所对 应的开关状态,记录下来形成sindata 。从而得到最终得到一个周期内正弦信号数据点增益等级的集合。函数名:TriSig ()功能描述主要用于产生三角波信号的数值点。 。该程序输出不同的增益等级到放大器, 因此实际三角波信号的数值是增益等级乘以当前的输入信号。该三角波信号周期为630ms,峰峰值为1.5Vi(Vi为输入电压值)。一个周期中,一共选取了63X 2即126个点以形成该三角波信号。变量说明全局变量 triflag 记录

47、当前输出的三角波是处于上升还是下降状态,即标志三角波的正负斜率。 triflag 为 0 表示三角波在上升状态; triflag 为 1,表示三角波在下降状态。全局变量 triinc 记录每两个三角波采样的数据点间的增益值,预先设为 0x01。全局变量 trigain 用于产生当前三角波采样的数据点的大小,即记录三角波的增益等级。如 果三角波在上升状态,即 triflag 为 0,则当前三角波采样的增益等级为前一采样点增益等级 值加上增益值triinc。并且若增益等级 trigain增加到0x3f (63)则达到最大值,将 triflag置 为 1,开始递减。如果三角波在下降状态,即 trif

48、lag 为 1,则当前三角波采样的增益等级为 前一采样点增益等级值减去增益值triinc。并且若增益等级trigain减小到0x01 (1),则达到最小值,将 triflag 置为 0,开始递增。调用函数说明计算出当前三角波的增益等级 trigain 后,调用 Sigout ()并将 trigain 作为其输入,从而实 现三角波的输出。周期计算当用户选择信号发生器模块的三角波信号后,每 5ms 调用一次该函数,即每 5ms 输出一个 三角波信号的点,在一个周期中选择了上升状态从0x01 (1)到 0x3f (63),下降状态从0x3f (63)到 0x01 (1),共 126 个点,所以周期为

49、 5msX 126= 630ms。函数名:SquareSig ()功能描述主要用于产生方波信号的数值点。 该程序输出不同的增益等级到放大器, 因此实际方波信号的数值是增益等级乘以当前的输入信号。该方波信号周期为10ms,峰峰值为1.5Vi (Vi为输入电压值),占空比 50。一个周期中,一共选取了2个点以形成该方波信号。变量说明全局变量 squareflag 记录当前输出的方波是处于高电平还是低电平状态。 squareflag 为 0,表 示方波在低电平状态; squareflag 为 1,表示方波在高电平状态。方波在低电平状态时,输 出 0 并且将 squareflag 置为 1,为下次输出

50、高电平的半个周期作准备。 方波在高电平状态时, 输出 1 并且将 squareflag 置为 0,为下次输出低电平的半个周期作准备。调用函数说明根据当前方波的高低电平状态,调用Sigout ()并将高电平时的0xff或者低电平时的0作为其输入,从而实现方波的输出。周期、占空比计算当用户选择信号发生器模块的方波信号后,每5ms调用一次该函数,即每 5ms输出一个方波信号的点,在一个周期中选择了 2个点,所以周期为 5msX2=100ms。 由于方波信号高低电平持续期各占一半,所以占空比为50。6.4.5 液晶模块函数描述通过以下函数实现在液晶屏幕上实时显示以上各模块的菜单和输出量。函数名void

51、 init8255 ()功能描述精品文档初始化 8255 芯片。变量说明全局变量sbit P14 =P1A4,电路图中P1的第四个引脚与 8255的reset端连接在一起,所以P14是8255芯片的reset位。通过将其置为 0->1->0,形成脉冲,使 8255芯片复位。全局变量 COM8255 XBYTE0xe003是 8255COM 口地址。将 COM8255 置为 0x80,选择模 式0,艮卩PA、PB、PC 口都作为output。函数名LcdWriteCommand (unsigned char CMD )功能描述向液晶中的芯片写入命令变量说明全局变量 PC8255为XB

52、YTE0xe002,标志8255PC 口地址。将 PC8255置为0x80,即将液 晶使能端置为高电平。 由于此使能端是下降沿触发, 因此将使能端置为高电平是为后续的触 发做准备。全局变量 DataPort定义为8255PB 口地址。将DataPort置为输入变量 CMD,即是将命令 CMD 送到液晶数据口 db0 到 db7 的寄存器,等到脉冲下降沿的时候, 液晶中的芯片会处理该命令。 在程序最后,将 PC8255置为0x00,即送出下降沿,使液晶中的芯片处理CMD中所包含的命令。函数调用说明需要调用延时函数 delay5()。因为液晶处理命令需要一定的时间,为了协调CPU的处理速度和液晶处

53、理速度,需要延时函数用于等待。函数名LcdInit()功能描述初始化液晶部分函数调用说明按照所查有关液晶初始化的资料上的提示,调用微液晶芯片输入指令的函数LcdWriteCommand () ,并依次输入指令 0x30->0x30->0x30->0x38->0x08->0x01->0x06->0x0f ->0x01 ,从而完成液晶初始化。函数名LcdClean ()功能描述用于液晶屏幕的清屏调用函数说明调用向液晶内部芯片写入指令的函数LcdWriteCommand () ,向液晶芯片写入清屏指令 0x01。调用延时函数 delay5() 以协调

54、CPU 的处理速度和液晶处理速度,确保实现清屏。函数名Disp_XY (unsigned char posx,unsigned char posy)功能描述确定输入液晶芯片的字符在液晶屏幕上的位置变量说明输入变量 posx 表示字符在液晶屏幕上的列位置,是十进制数。输入变量 posy 表示字符在液晶屏幕上的行位置,也是十进制数。由于液晶屏幕只有两行,所以只有 0或者 1 两个值。变量 x0 是记录字符在液晶屏幕上的列位置的十六进制代码变量 x1 是记录字符在液晶屏幕上位置的十六进制代码,通过以下语句的转换:x1=x0+posx;x1=x1+0x80 ;恰好可以将字符在液晶屏幕上位置的十六进制代码计算出来,并且赋值给变量 x1

温馨提示

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

评论

0/150

提交评论