为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 科技创新[2]-第074组设计报告

科技创新[2]-第074组设计报告

2011-04-18 50页 doc 1MB 26阅读

用户头像

is_776538

暂无简介

举报
科技创新[2]-第074组设计报告个人简历 完成时间:2006-5-30 科技创新[2]设计报告 项目名称: 可控增益放大器,函数信号发生器及其控制系统 设计小组编号:第74组 设计小组名单:王愈喜(组长) 徐昊 王永哲 汤逸纯 姓名 班级 学号 具体负责的工作 联系方式 王愈喜 F0403028 5040309811 总体设计、软件编程、实验报告撰写 stsupermouse@163.com 徐昊 F0403029 5040309815 软件编程、实验报告撰写 王永喆 F0403028 5040309803 硬件设计与焊接 实验报告撰写 汤逸纯 F04030...
科技创新[2]-第074组设计报告
个人简历 完成时间:2006-5-30 科技创新[2]设计报告 项目名称: 可控增益放大器,信号发生器及其控制系统 设计小组编号:第74组 设计小组名单:王愈喜(组长) 徐昊 王永哲 汤逸纯 姓名 班级 学号 具体负责的工作 联系方式 王愈喜 F0403028 5040309811 总体设计、软件编程、撰写 stsupermouse@163.com 徐昊 F0403029 5040309815 软件编程、实验报告撰写 王永喆 F0403028 5040309803 硬件设计与焊接 实验报告撰写 汤逸纯 F0403029 5040309835 硬件设计与焊接 实验报告撰写 摘 要: 本设计报告包括了可控增益放大器,函数信号发生器,液晶显示三个模块的主要功能、系统框图,系统硬件以及软件的设计和实现,系统的技术指标,调试分析,针对用户操作的详细说明,对系统中某几个部分的深入扩展研究,,问调试和实物照片等等,包括了与此相关的理论和实践中的各种问题。 关键词: 可控增益放大器,函数信号发生器,液晶显示 Abstract: This report includes detailed explanations of inner workings of the controllable gain amplifier, signal generator and LCD displayer; which 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 attached in the report. KEYWORDS: controllable gain amplifier, signal generator LCD displayer 目 次 1. 概述………………………………………………………………………………… 1 1.1 编写说明…………………………………………………………………………1 1.2 名词定义…………………………………………………………………………1 2. 系统总述 ……………………………………………………………………………2 2.1 系统组成…………………………………………………………………………2 2.2 系统的主要功能 …………………………………………………………………2 3. 增益可控放大器(基础部分)的硬件设计……………………………………… 3 3.1 主要功能…………………………………………………………………………3 3.2 系统设计指标……………………………………………………………………3 3.3 设计原理…………………………………………………………………………3 3.4 主要部分设计及参数……………………………………………………………4 3.4.1 主要元件……………………………………………………………………4 3.4.1.1 主要元件CD4066………………………………………………………4 3.4.1.2主要元件LM741…………………………………………………………6 3.4.2 外围电路设计……………………………………………………………… 6 4. 液晶显示(拓展部分一)的硬件设计………………………………………………8 4.1主要功能……………………………………………………………………………8 4.2 系统设计指标………………………………………………………………………8 4.3 主要部分设计和参数………………………………………………………………8 4.3.1 主要元件………………………………………………………………………8 4.3.1.1点阵式LCD显示器………………………………………………………8 4.3.1.2 芯片8255…………………………………………………………………9 4.3.2 液晶模块整体电路设计………………………………………………………11 4.3.2.1 电路图…………………………………………………………………11 4.3.2.2 电路说明………………………………………………………………12 5.函数信号发生器(拓展部分二)的硬件设计…………………………………………13 5.1主要功能……………………………………………………………………………13 5.2主要器件……………………………………………………………………………13 5.3 电路具体实现及参数………………………………………………………………13 6. 单片机子系统的软件设计………………………………………………………………15 6.1软件的主要功能……………………………………………………………………15 6.2 软件总体框架………………………………………………………………………15 6.3 全局变量说明………………………………………………………………………16 6.4 主要模块描述………………………………………………………………………19 6.4.1 〈定时中断0〉描述 …………………………………………………………19 6.4.2 主菜单模块函数描述………………………………………………………20 6.4.3 可控增益线性放大器模块函数描述………………………………………21 6.4.4 信号发生器模块函数描述…………………………………………………25 6.4.5 液晶模块函数描述…………………………………………………………28 7. 致谢……………………………………………………………………………………35 8 参考文献………………………………………………………………………………36 9. 附录A 开发环境……………………………………………………………………37 9.1 软件环境…………………………………………………………………………37 9.2 硬件环境…………………………………………………………………………37 10. 附录B 软件程序清单………………………………………………………………38 11. 附录C 系统操作说明书……………………………………………………………51 11.1 系统用途…………………………………………………………………………51 11.2 简要技术指标……………………………………………………………………51 11.3 使用前准备………………………………………………………………………51 11.4 操作方法和步骤…………………………………………………………………51 11.5 注意事项…………………………………………………………………………52 12. 附录D 测试和分析…………………………………………………………………53 12.1 测试电路的搭建………………………………………………………………53 12.2 测试项目和方法………………………………………………………………53 12.3 测试的资源……………………………………………………………………53 12.4 测试结果及分析………………………………………………………………53 12.4.1 可控增益放大器的实际增益……………………………………………53 12.4.2 液晶显示模块……………………………………………………………54 12.4.3 函数信号发生器模块……………………………………………………55 13.附录E 心得体会和问题调试………………………………………………………56 13.1 心得体会………………………………………………………………………56 13.2 问题与调试……………………………………………………………………57 14. 附录F 实物图………………………………………………………………………60 1.概述 1.1编写说明 此报告为大二下学期科技创新关于单片机实现可控增益线性放大器、函数信号发生器、液晶屏幕显示的设计报告。供对该系统感兴趣的读者阅读。 1.2名词定义 单片机:包括CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(串行口、并行输出口等)的一块集成电路。 七段显示数码管:abcdefg七段,通过给某些段加上驱动电压或电流来使这些段发光。 占空比:在信号的一个周期内,高电平信号所占的时间比例。 可控增益放大器:将输入的直流电压转换成增益后的直流电压输出,其中增益可控制 函数信号发生器:产生三角波,方波,正弦波等信号 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.1V 3.3 设计原理 增益可控放大器设计原理图见图3.1               图3.1 增益可控放大器原理图 加在Vi端的直流电压1v经过反相放大器电路放大得到输出电压Vo。 设Ri为接入运放反向端的等效电阻。由于反相放大电路的输出电压Vo = - (Rf/Ri ) Vi,所以只要改变Rf/Ri,就可以改变增益。 可以由CD4066实现可控开关。 可以通过单片机控制CD4066。 3.4 主要部分设计及参数 3.4.1 主要元件 3.4.1.1 主要元件――CD4066 CD4066内部结构见图3.2。      图3.2 CD4066BC内部结构(摘自CD4066 datasheet) 工作原理: CD4066是一种双向模拟开关,在集成电路内有4个独立的能控制数字及模拟信号传送的模拟开关。每个开关有一个输人端和一个输出端,它们可以互换使用,还有一个选通端(又称控制端),当选通端为高电平时,开关导通;当选通端为低电平时,开关截止。 管脚定义: CD4066的管脚图见图3.3: 图3.3 CD4066管脚定义图(摘自CD4066 datasheet) 1:[IN/OUT]SWITCH A 的输入输出端 2:[OUT/IN]SWITCH A 的输出输入端(与1相对应) 3:[OUT/IN]  SWITCH B的输出输入端 4:[IN/OUT]  SWITCH B 的输入输出端(与3相对应) 5:[CONTROL]  SWITCH B的控制端(加高电平的时候开关闭合) 6:[CONTROL]  SWITCH C的控制端(加高电平的时候开关闭合) 7:[Vss] 接地端 8:[IN/OUT]  SWITCH C的输入输出端 9:[OUT/IN]  SWITCH C 的输出输入端(与9相对应) 10:[OUT/IN]  SWITCH D的输出输入端 11:[IN/OUT]  SWITCH D 的输入输出端(与11相对应) 12:[CONTROL D]  SWITCH D的控制端(加高电平的时候开关闭合) 13:[CONTROL A]  SWITCH A的控制端(加高电平的时候开关闭合) 14:[Vdd] 电源端(+5V) 3.4.1.2主要元件: LM741 工作原理: LM741集成运算放大器是一种高放大倍数、高输入阻抗、低输出阻抗的直接耦合多级放大电路,具有两个输入端和一个输出端,可对直流信号和交流信号进行放大。外接负反馈电路后,输出电压Vo与输入电压Vi的运算关系仅取决于外接反馈网络与输入的外接阻抗,而与运算放大器本身无关。 管脚定义 LM741的管脚定义见图3.4 图3.4 LM741管脚定义图(摘自LM741 datasheet) 1: [OFFSET NULL] 调零端 2:[INVERTING INPUT] 反相输入端 3:[NON-INVERTING INPUT] 同相输入端 4:[V-] 电源电压负端 5:[OFFSET NULL] 调零端 6:[OUTPUT] 输出端   7:[V+] 电源电压正端 3.4.2 外围电路设计 设计电路图见图3.5 图3.5外围电路设计 元件参数 R1=10 KΩ R2=20 KΩ R3=40 KΩ R4=80 KΩ Rf=8 KΩ 参数选择 1、Vi为输入电压,定为 +1.0V。 2、R1,R2,R3和R4 用于产生二进制信号。 3、Rf是反馈电阻,大小经计算和老师的建议取8KΩ。 4、Vo 是输出电压,经过放大后等于 - (Rf/R1 ) Vi。 4. 液晶显示(拓展部分一)的硬件设计 4.1主要功能: 在液晶显示屏上实现16 x(2行)各种ASCII码字符的显示和滚屏、反显等。 4.2 系统设计指标: LCD驱动电压:5V。 工作温度:室温。 4.3 主要部分设计和参数: 4.3.1 主要元件 4.3.1.1点阵式LCD显示器   工作原理: 在液晶板上排列着若干5×7或5×10 点阵的字符显示位,每个显示位可显示1个字符,从规格上分为每行8,16,20,24,32,40位,有一行,两行及四行三类。单片机输出信号经过总线扩展后输入到液晶电路模块,在板上显示相应字符。 电路图及说明 图4.1字符型模块电路图(摘自字符模块使用手册) 它由HD44780,HD44100及几个电阻电容组成。HD4410是扩展显示字符位用的(例如:16字符×1行模块就不用HD44100,16字符×2行模块就要用1片HD44100)。在接口方面,有8条数据线,三条控制线。可与微处理器或微控制器相连,通过送入数据和指令,就可使模块正常工作. 液晶模块引脚功能 引 线 号 符 号 名 称 功 能 1 Vss 接地 0V 2 VDD 电路电源 5V±10% 3 VEE 液晶驱动电压 保证VDD-VEE=4.5∽5V电压差 4 RS 寄存器选择信号 H:数据寄存器 L:指令寄存器 5 R/W 读/写信号 H:读 L:写 6 E 片选信号 下降沿触发,锁存数据 7 | 14 DB0 | DB7 数据线 数据传输 表4.1(摘自字符模块使用手册) 4.3.1.2 芯片8255 工作原理 8255是可编程I/O口扩展芯片。对8255输入不同的指令可改变I/O口的工作方式。8255工作方式由程序设定,图4.2为8255的引脚图。8255内部有4个寄存器:分别为寄存器A、B、C和控制寄存器。A、B、C寄存器的数据就是引脚PA7~PA0、PB7~PB0、PC7~PC0上输入或输出的数据。而控制寄存器的数据则表明PA、PB、PC的工作方式。通过CS、A0、A1、RD和WR对4个寄存器进行操作。 管脚定义: 如图4.2 图4.2 8255管脚定义图(摘自 8255 datasheet) 内部结构和外部接线图 图4.3 内部结构和外部接线图(摘自东南大学<微机系统与接口>讲义) 8255引脚功能: RESET: 复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS: 片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。 RD: 读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR: 写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。 D0~D7: 三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指 令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线 传送。 PA0~PA7: 端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位数据输 入锁存器。 PB0~PB7: 端口B输入输出线,一个8位的I/O锁存器, 一个8位输入输出缓冲器。 PC0~PC7: 端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位数据输 入缓冲器。 端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 4.3.2. 液晶模块整体电路设计 4.3.2.1电路图见图4.4 图4.4 4.3.2.2 电路说明: 期中液晶电路模块 1 脚接地 2 脚接Vcc (+5v)电压 3 脚接一小于5v的电压,用于调节对比度 4 脚为液晶电路的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.函数信号发生器(拓展部分一)的硬件设计 5.1主要功能: 通过设计电路,使其可输出正弦波、三角波、锯齿波、矩形波(方波)等等的数学函数波形。难点在于需编写程序达到周期性动态连续地改变放大器增益的效果。 通过按键控制菜单。 5.2主要器件: 该电路比可控增益放大器电路增加了一片4066,其内部电路及管脚定义见上。 5.3电路具体实现及参数: 图5.1函数信号发生器电路图 其中: R1=8KΩ; R2= 16KΩ; R3=32KΩ; R4=64KΩ; R5=128KΩ; R6=256KΩ; R=6.9KΩ. 6. 单片机子系统的软件设计 6.1软件的主要功能 1增益可键控的线性放大器:增益可键控的线性放大器电路,并通过单片机小系统控制 其直流增益等级的变化,增益等级从0.1到1.5。在单片机小系统板上提供人机操作界 面,使操作者能通过按键操作,设置放大器的增益等级,相应的增益值在数码管上显示。 2.函数信号发生器:电路可输出正弦、三角、矩形(方波)等数学函数波形 3.液晶显示:实现菜单显示,提供友好的人机界面。 6.2 软件总体框架 6.3 全局变量说明 /* 定时器初值 */ #define V_T1 0xfd /*SCOM 9600 baud, ! notice: crystal 11.0592MHz */ #define V_TH0 0xee /* ~ 5ms , ! notice: crystal 11.0592MHz */ #define V_TL0 0x00 /* 1s软件定时器溢出值,两百个5ms*/ #define V_T1s 200 数码管显示使用的全局变量 unsigned char xdata digi_scaner; 数码管扫描驱动指针 unsigned char bdata output_sel; 数码管位驱动信号输出缓存 #define ADDR_8SEG XBYTE[0x2000] 数码管段驱动寄存器地址 #define ADDR_SEL XBYTE[0x4000] 数码管段和指示灯驱动寄存器地址 按键定义:单片机小系统中的四个按键分别使用了P1口的四个引脚 sbit KEY1= P1^0; sbit KEY2= P1^1; sbit KEY3= P1^2; sbit KEY4= P1^3; 可控增益放大器中使用的全局变量 可控增益放大器中4066四个控制开关,分别使用了P3口的四个引脚 sbit D0 = P3^2; sbit D1 = P3^3; sbit D2 = P3^4; sbit D3 = P3^5; unsigned char xdata counter=1; 增益等级 液晶显示模块使用的全局变量 #define COM8255 XBYTE[0xe003] 8255COM口地址 #define PA8255 XBYTE[0xe000] 8255PA口地址 #define PB8255 XBYTE[0xe001] 8255PB口地址 #define PC8255 XBYTE[0xe002] 8255PC口地址 #define DataPort PB8255 8255PB口地址 sbit P14 = P1^4; 电路图中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 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; 标志是否显示主菜单 unsigned 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 ); unsigned char NUMTOSEG7b(unsigned char ); void display (); 可控增益放大器模块所定义的函数 void Switch (unsigned char counter); 用于控制可控增益放大器模块中的4066 液晶显示模块所定义的函数 void init8255 (); 初始化8255 void LcdInit(); 液晶初始化 void LcdClean (); 清屏 void LcdWriteCommand (unsigned char ); 为液晶输入指令 void Disp_XY (unsigned char ,unsigned char ); 液晶定位函数 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(); 液晶显示信号发生器菜单 void DispWel (); 液晶显示welcome void DispOut (); 液晶显示增益等级 信号发生器所使用的函数 void SinSig (); 输出正弦波 void TriSig (); 输出三角波 void SquareSig(); 输出方波 void SigOut (unsigned char ); 用于控制信号发生器模块中的4066 6.4 主要模块描述 6.4.1〈定时中断0〉描述 函数名 timer0 ( ) interrupt 1 using 0 功能描述 实现5ms秒的硬件定时中断。 主要用于: 每5ms检测一次液晶显示菜单的标志,以此决定液晶显示哪一级菜单 每隔5ms输出信号发生器产生信号的一个点 定时器初值的设定 V_TH0=oxee V_TL0=0x00 定时时间为5ms。 检测液晶显示菜单标志 在本系统中采用每5ms间隔对各个液晶显示菜单标志检测一次 Genmenuflag、 menuflag、 menu1flag分别标志液晶当前所需显示的主菜单、可控增益放大器菜单、信号发生器菜单。 如果其中有一个标志为1,则调用相应程序使液晶屏幕显示该菜单。 信号发生器数值点输出 其中信号发生器菜单较为特殊,它其中还包含了输出相应波形的程序部分。funcflag用于标志信号发生器所当前输出的波形,液晶会显示相应波形的英文名称以提示用户,并且每5ms间隔输出所选波形的一个点。 由SinSig()输出正弦波的点,由SquareSig()输出方波的点,由TriSig()输出三脚波的点。这三个函数的详细描述请见信号发生器部分。 6.4.2 主菜单模块函数描述 函数名 void GenMenu () 功能描述 此函数的主要功能是显示主菜单并根据用户的选择调用相应模块,即每5ms扫描一次键盘,按照用户通过按键输入的指令分别进入帮助菜单、可控增益线性放大器模块、信号发生器模块。 输入输出项 输入项:KEY1、KEY2 KEY1、KEY2分别记录前两个按键的信息。 数值有效范围为0或1。0表示有键按下,1表示没有按键按下 如果KEY1被按下,则进入可控增益线性放大器模块,调用Menu()。同时将全局变量genmenuflag置为0以关闭主菜单的液晶显示,并将全局变量menuflag置为1以启动可控增益线性放大器模块的菜单显示。 如果KEY2被按下,则进入信号发生器模块,调用Menu1()。同时将全局变量genmenuflag置为0以关闭主菜单的液晶显示,并将全局变量menuflag1置为1以启动信号发生器模块的菜单显示。 按键消抖: 由于用户操作或是按键本身特性,在按键刚刚按下时输出的电平不稳定,有毛刺,要过一段时间输出的电平才会稳定。因此如果KEY1、KEY2、KEY3、KEY4中任何一个键被按下,要先用延时函数delay50()消去按键抖动,然后再进行相应函数调用。 防止按键跳动: 在程序相应用户按键要求,调用完相应函数后,还有一段while语句的循环。这是我们在经过调试后,为了使按键操作更加友好而添加的。调试时,我们发现有时由于手的轻微颤抖,会使系统将一次按键误认为两次甚至是多次,造成不必要的麻烦。所以,我们加入了以下语句:while (KEY4==0) { display(); } 即当按键未放开前,程序不会跳出循环执行后续操作,也就避免了一次按键引起多次函数调用的错误。 6.4.3 可控增益线性放大器模块函数描述 通过以下函数实现一个可控增益线性放大器,根据用户的按键操作,选择相应增益等级,能在数码管和液晶屏幕上实时显示提示与数据,输出增益后的信号。 函数名 void Menu() 功能描述 此程序为线性放大器的主要函数。通过中断程序的控制,如果用户选择放大器模块,则每5ms进入该程序一次。程序负责扫描四个按键,若用户按下任何一个按键,则调用相应程序以完成用户所需要的要求,并在液晶屏幕上做出实时显示。 输入项:KEY1、KEY2、KEY3、KEY4 KEY1、KEY2、KEY3、KEY4分别记录四个按键的信息。 数值有效范围为0或1。0表示有键按下,1表示没有按键按下。 KEY1为复位键,按下后程序会将增益等级复位到最低位0.1,并将用于记录增益等级的全局变量count重新置为1。同时通过DispOut()函数在液晶屏上实时显示当前增益等级,display()函数在数码管上实时显示当前增益等级。 KEY2控制增益等级增加0.1,按下后程序会将增益等级从当前值增加0.1,并将用于记录增益等级的全局变量count同时增加1。如果当前增益已经达到最大增益等级1.5,则按下KEY2后增益等级变为0.1,进行循环,同时修改全局变量count。通过DispOut()函数在液晶屏上实时显示当前增益等级,display()函数在数码管上实时显示当前增益等级。 KEY3控制增益等级减少0.1,按下后程序会将增益等级从当前值减少0.1,并将用于记录增益等级的全局变量count同时减少1。如果当前增益已经达到最小增益等级0.1,则按下KEY2后增益等级变为1.5,进行循环,同时修改全局变量count。通过DispOut()函数在液晶屏上实时显示当前增益等级,display()函数在数码管上实时显示当前增益等级。 KEY4控制帮助菜单,按下后液晶屏幕重新显示各按键相应功能以提示用户。 函数名 void Switch (unsigned char counter) 功能描述 将十进制数转化为二进制输出,并且将结果输出到P3口的四个引脚,以此控制可控增益放大器中4066四个控制开关,控制与放大器相连的电阻值,从而使放大器输出相应增益等级的信号。 P3口的第二个引脚已设为全局变量D0,它是二进制的最低位。 输入项 Counter为需要转化的十进制数,即标志增益等级的全局变量。 输出项 D0到D3依次为目标二进制数的最低到最高位,即P3口的四个引脚,用以控制可控增益放大器中4066四个控制开关。 sbit D0 = P3^2; sbit D1 = P3^3; sbit D2 = P3^4; sbit D3 = P3^5; 算法描述 采用十进制到二进制转换所使用的除二取余法为基本原理。 数码管显示模块描述 通过以下函数完成用两个数码管轮流扫描以显示相应数字、字母、符号的功能 函数名 void display () 功能描述 display ()主要配合本次实验基础模块——线性可控增益放大器的实现并且控制数码管的显示。 变量说明 用全局变量digi_scaner标志数码管扫描驱动指针,全局变量output_sel标志数码管位驱动位,XBYTE[0x2000] 标志数码管段驱动寄存器地址,XBYTE[0x4000] 标志数码管段和指示灯驱动寄存器地址 变量初始化 首先将初值0xf0赋给标志数码管位驱动位的全局变量output_sel ,令数码管驱动位无效,指示灯全灭。 数码管扫描 用一个if语句,通过改变全局变量digi_scaner的值来完成第三和第四个数码管间的轮流扫描。由于每5ms扫描一次,所以虽然两个数码管不是同时显示数据,但人眼的视觉暂留使其看来像是同时显示。 当digi_scaner为3时,标志选中第三个数码管。将全局变量output_sel置为0x04以驱动第三个数码管。调用NUMTOSEG7b()函数并将counter/10作为输入项,这样第三个数码管将显示增益等级的个位。并NUMTOSEG7b()函数的输出值送到锁存器U5。 当digi_scaner为4时,标志选中第四个数码管。将全局变量output_sel置为0x08以驱动第四个数码管。调用NUMTOSEG7a()函数并将counter%10作为输入项,这样第四个数码管将显示增益等级的小数位。并NUMTOSEG7a()函数的输出值送到锁存器U5。 最后将output_sel的值输出到锁存器U6。 配合线性可控增益放大器的输出 最后调用Switch (),将增益等级值作为输入项,以此通过P3口的四个引脚控制4066的四个控制开关,从而输出相应增益等级的信号。Switch ()函数的具体实现详见线性可控增益放大器模块函数描述。 函数名: unsigned char NUMTOSEG7b(unsigned char DATA) 功能描述: 此函数主要是用于显示增益等级的个位和小数点。 输入输出项 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为数码管所要显示的小数位数字。 算法描述 讲数码管管段的相应高低电平译成十六进制数,输入该十六进制数即得所需输出的数字、字母或是符号。 符号 相应十六进制数 0 0xc0 1 0xf9 2 0xa4 3 0xb0 4 0x99 5 0x92 6 0x82 7 0xf8 8 0x80 9 0x90 A 0x88 B 0x83 C 0xc6 D 0xa1 E 0x86 F 0x8e 破折号 0xbf 下划线 0xf7 消隐 0xff 6.4.4 信号发生器模块函数描述 通过以下函数完成正弦信号、三角波信号和方波信号的输出 函数名 void SigOut (unsigned char i) 功能描述 该函数主要负责信号发生器中各个数值点的输出。由于焊接电路时我们将PA0口焊到了最小的电阻值上,因此在我们的系统中将PA0对应了最高位,所以通过这个函数作一个转换。首先将所要输出的数值点从十进制转换为二进制,d0到d5,其中d0为i的二进制码最低位。然后将d0到d5顺序颠倒,使d0为j的二进制码最低位,相应输出到PA5。最后将结果j输出到8255PA口,以此控制信号发生器器中两片4066的六个开关,控制与放大器相连的电阻值,从而使放大器输出相应数值的信号。 变量说明 全局变量 #define PA8255 XBYTE[0xe000]标志了8255PA口地址 d0,d1,d2,d3,d4,d5为程序内部转换数值时,标志各二进制数位数字的临时变量。 j为转换好的数值,将其赋值给PA8255,从而控制与电阻相连的开关的闭合,使放大器输出相应增益等级的信号。 函数名: SinSig () 功能描述 主要用于产生正弦信号的数值点。该程序输出不同的增益等级到放大器,因此实际正弦信号的数值是增益等级乘以当前的输入信号。该正弦信号周期为200ms,峰峰值为1.5Vi(Vi为输入电压值)。一个周期中,一共选取了40个点以形成该正弦信号。 变量说明 变量i记录当前输出的正弦波上一点的增益等级,作为SigOut()函数的输入项。 全局变量unsigned char xdata sindata[]为一个周期正弦信号数据点增益等级的集合 全局变量unsigned char xdata sinindex标识当前正弦波采样的数据点是一个周期中的第几个点。每5ms输出一个点,一个周期共计40个点。当sinindex为40时,表明输出完一个周期,则将sinindex置为0,开始新一周期的输出。 周期计算 当用户选择信号发生器模块的正弦波信号后,每5ms调用一次该函数,即每5ms输出一个正弦波信号的点,我们共在一个周期中选择了40个点,所以周期为5ms×40=200ms。 算法描述: 正弦信号数值点取值 由于一共采用6个开关,则其不同开关的有效状态共有63种,因此有63个不同增益等级可以利用。首先利用程序模拟出这63个开关的有效状态,并计算出与这些状态一一对应的增益等级。然后另写一个程序完成以下功能:根据我们所需要输出的正弦波图形,在一个周期中等间隔的取出40个点,将这些点的取值与已计算出的增益等级比较,取出最接近值所对应的开关状态,记录下来形成sindata[]。从而得到最终得到一个周期内正弦信号数据点增益等级的集合。 函数名: TriSig () 功能描述 主要用于产生三角波信号的数值点。。该程序输出不同的增益等级到放大器,因此实际三角波信号的数值是增益等级乘以当前的输入信号。该三角波信号周期为630ms,峰峰值为1.5Vi(Vi为输入电压值)。一个周期中,一共选取了63×2即126个点以形成该三角波信号。 变量说明 全局变量triflag记录当前输出的三角波是处于上升还是下降状态,即标志三角波的正负斜率。triflag为0表示三角波在上升状态;triflag为1,表示三角波在下降状态。 全局变量triinc记录每两个三角波采样的数据点间的增益值,预先设为0x01。 全局变量trigain用于产生当前三角波采样的数据点的大小,即记录三角波的增益等级。如果三角波在上升状态,即triflag为0,则当前三角波采样的增益等级为前一采样点增益等级值加上增益值triinc。并且若增益等级trigain增加到0x3f(63)则达到最大值,将triflag置为1,开始递减。如果三角波在下降状态,即triflag为1,则当前三角波采样的增益等级为前一采样点增益等级值减去增益值triinc。并且若增益等级trigain减小到0x01(1),则达到最小值,将triflag置为0,开始递增。 调用函数说明 计算出当前三角波的增益等级trigain后,调用Sigout()并将trigain作为其输入,从而实现三角波的输出。 周期计算 当用户选择信号发生器模块的三角波信号后,每5ms调用一次该函数,即每5ms输出一个三角波信号的点,在一个周期中选择了上升状态从0x01(1)到0x3f(63),下降状态从0x3f(63)到0x01(1),共126个点,所以周期为5ms×126=630ms。 函数名: SquareSig () 功能描述 主要用于产生方波信号的数值点。该程序输出不同的增益等级到放大器,因此实际方波信号的数值是增益等级乘以当前的输入信号。该方波信号周期为10ms,峰峰值为1.5Vi(Vi为输入电压值),占空比50%。一个周期中,一共选取了2个点以形成该方波信号。 变量说明 全局变量squareflag记录当前输出的方波是处于高电平还是低电平状态。squareflag为0,表示方波在低电平状态;squareflag为1,表示方波在高电平状态。方波在低电平状态时,输出0并且将squareflag置为1,为下次输出高电平的半个周期作准备。方波在高电平状态时,输出1并且将squareflag置为0,为下次输出低电平的半个周期作准备。 调用函数说明 根据当前方波的高低电平状态,调用Sigout()并将高电平时的0xff或者低电平时的0作为其输入,从而实现方波的输出。 周期、占空比计算 当用户选择信号发生器模块的方波信号后,每5ms调用一次该函数,即每5ms输出一个方波信号的点,在一个周期中选择了2个点,所以周期为5ms×2=100ms。 由于方波信号高低电平持续期各占一半,所以占空比为50%。 6.4.5 液晶模块函数描述 通过以下函数实现在液晶屏幕上实时显示以上各模块的菜单和输出量。 函数名 void init8255 () 功能描述 初始化8255芯片。 变量说明 全局变量sbit P14 = P1^4,电路图中P1的第四个引脚与8255的reset端连接在一起,所以P14是8255芯片的reset位。通过将其置为0->1->0,形成脉冲,使8255芯片复位。 全局变量COM8255 XBYTE[0xe003]是8255COM口地址。将COM8255置为0x80,选择模式0,即PA、PB、PC口都作为output。 函数名 LcdWriteCommand (unsigned char CMD ) 功能描述 向液晶中的芯片写入命令 变量说明 全局变量PC8255为XBYTE[0xe002],标志8255PC口地址。将PC8255置为0x80,即将液晶使能端置为高电平。由于此使能端是下降沿触发,因此将使能端置为高电平是为后续的触发做准备。 全局变量DataPort定义为8255PB口地址。将DataPort置为输入变量CMD,即是将命令CMD送到液晶数据口db0到db7的寄存器,等到脉冲下降沿的时候,液晶中的芯片会处理该命令。 在程序最后,将PC8255置为0x00,即送出下降沿,使液晶中的芯片处理CMD中所包含的命令。 函数调用说明 需要调用延时函数delay5()。因为液晶处理命令需要一定的时间,为了协调CPU的处理速度和液晶处理速度,需要延时函数用于等待。 函数名 LcdInit() 功能描述 初始化液晶部分 函数调用说明 按照所查有关液晶初始化的资料上的提示,调用微液晶芯片输入指令的函数LcdWriteCommand (),并依次输入指令0x30->0x30->0x30->0x38->0x08->0x01->0x06->0x0f ->0x01,从而完成液晶初始化。 函数名 LcdClean () 功能描述 用于液晶屏幕的清屏 调用函数说明 调用向液晶内部芯片写入指令的函数LcdWriteCommand (),向液晶芯片写入清屏指令0x01。 调用延时函数delay5()以协调CPU的处理速度和液晶处理速度,确保实现清屏。 函数名 Disp_XY (unsigned char posx,unsigned char posy) 功能描述 确定输入液晶芯片的字符在液晶屏幕上的位置 变量说明 输入变量posx表示字符在液晶屏幕上的列位置,是十进制数。 输入变量posy表示字符在液晶屏幕上的行位置,也是十进制数。由于液晶屏幕只有两行,所以只有0或者1两个值。 变量x0是记录字符在液晶屏幕上的列位置的十六进制代码 变量x1是记录字符在液晶屏幕上位置的十六进制代码,通过以下语句的转换: x1=x0+posx; x1=x1+0x80;恰好可以将字符在液晶屏幕上位置的十六进制代码计算出来,并且赋值给变量x1。 函数调用说明 程序最后调用LcdWriteCommand (),并将字符位置的十六进制代码x1作为输入变量,以此将所要输出字符的具体位置赋值给液晶芯片,为后续输出字符作好准备。 函数名 DispOneChar (unsigned char x, unsigned char y, unsigned char Wdata) 功能描述 将一个有具体位置的字符显示在液晶屏幕上 变量说明 输入变量x表示字符在液晶屏幕上的列位置,是十进制数。 输入变量y表示字符在液晶屏幕上的行位置,也是十进制数。由于液晶屏幕只有两行,所以只有0或者1两个值。 输入变量Wdata表示要输入字符的代码。 调用函数说明 首先调用Disp_XY (),将表示字符在液晶屏幕上的行、列位置的变量x、y作为输入项,将其转换为表示位置的十六进制代码后,再写入液晶芯片中,确定输出字符的位置。 后调用LcdWriteData (),将表示要输入字符代码Wdata作为输入项,在液晶屏幕的已确定的位置上显示字符。 函数名 DispStr(unsigned char x, unsigned char y, unsigned char * str,unsigned char n) 功能描述 将一串有具体位置的字符串显示在液晶屏幕上 变量说明 输入变量x表示字符在液晶屏幕上的列位置。 输入变量y表示字符在液晶屏幕上的行位置。 输入变量str是需要显示的字符串。 输入变量n是字符串长度。 函数调用说明 使用for循环,并调用输出单个字符的DispOneChar ()函数,将当前输出字符str[i]和它的位置x、y作为输入项,依次输出整个字符串中的每一个字符。 函数名 DispWel() 功能描述 在液晶屏幕上显示开机时的欢迎画面 变量说明 unsigned char xdata str1[]=" W E L C O M E "; 函数调用说明 首先调用清屏函数LcdClean (),以擦去上次显示的内容。 调用字符串显示函数DispStr()使液晶屏幕显示str1中内容。 函数名 DispGenMenu() 功能描述 在液晶屏幕上配合单片机实时显示总菜单 变量说明 unsigned char xdata str7[]="B1-CONTROL VOLT"; unsigned char xdata str8[]="B2-FUNC GENE"; 函数调用说明 首先调用清屏函数LcdClean (),以擦去上次显示的内容。 调用字符串显示函数DispStr()使液晶屏幕上一行显示str7中内容,下一行显示str8中内容。 函数名 DispMenu () 功能描述 在液晶屏幕上配合单片机实时显示可控增益线性放大器的菜单 变量说明 unsigned char xdata str3[]=" B1-RES B2-DEC"; unsigned char xdata str4[]=" B3-INC B4-HELP"; 函数调用说明 首先调用清屏函数LcdClean (),以擦去上次显示的内容。 调用字符串显示函数DispStr()使液晶屏幕上一行显示str3中内容,下一行显示str4中内容。 函数名 DispMenu1() 功能描述 在液晶屏幕上配合单片机实时显示信号发生器的菜单 变量说明 unsigned char xdata str9[]="B1-SIN B2-SQUARE"; unsigned char xdata str10[]="B3-TRI B4-HELP"; 函数调用说明 首先调用清屏函数LcdClean (),以擦去上次显示的内容。 调用字符串显示函数DispStr()使液晶屏幕上一行显示str9中内容,下一行显示str10中内容。 函数名 DispOut () 功能描述 在液晶屏幕上配合单片机实时显示可控增益线性放大器的增益等级和相应提示 变量说明 a记录增益等级的个位数值 b记录增益等级的小数位数值 unsigned char xdata str2[]="OUTPUT VOLTAGE"; unsigned char xdata str5[]="VIN" unsigned char xdata str6[]="VOUT= " 全局变量flag:在菜单显示有变化时,用于标志是否需要改动整个液晶屏幕的显示,或者只要改动增益等级的数值即可。flag为0时,表示需要更改整个液晶屏幕的显示,重新显示新的项目和模块;flag为1时,表示仅仅需要改变当前显示中增益等级的数值即可,无需改动整个液晶屏幕的显示,以节省时间。 函数调用说明 首先调用清屏函数LcdClean (),以擦去上次显示的内容。 程序分为两部分: 当全局变量flag为0时,表示需要更改整个液晶屏幕的显示。调用字符串显示函数DispStr()使液晶屏幕上一行显示str2中内容,下一行前半部分显示str6中内容。并且调用单个字符显示函数DispOneChar()使液晶屏幕在str6显示当前增益等级。再调用DispStr()显示str5中的字符串。最后将全局变量flag置为1,表示后续改动只需要改变增益等级即可。 当全局变量flag为1时,表示仅仅需要改变当前显示中增益等级的数值。调用单个字符显示函数DispOneChar()使液晶屏幕在str6显示当前增益等级。 附: 液晶显示中各个字符串变量列表 str1[] " W E L C O M E "; str2[] "OUTPUT VOLTAGE" str3[] " B1-R
/
本文档为【科技创新[2]-第074组设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索