欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    现代电子技术综合实验报告-熊万安(共29页).doc

    • 资源ID:7176900       资源大小:2.42MB        全文页数:30页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    现代电子技术综合实验报告-熊万安(共29页).doc

    精选优质文档-倾情为你奉上电子科技大学 通信与信息工程 学院实 验 报 告实验名称 现代电子技术综合实验姓名:学号:评分:教师签字电子科技大学教务处制电 子 科 技 大 学实 验 报 告学生姓名: 学号: 指导教师:熊万安实验地点: 科A333 实验时间:2016.3.7-2016.3.17 一、 实验室名称: 电子技术综合实验室二、 实验项目名称:电子技术综合实验 三、 实验学时: 32四、 实验目的与任务:1、 熟悉系统设计与实现原理2、 掌握KEIL C51的基本使用方法3、 熟悉SMART SOPC实验箱的应用4、 连接电路,编程调试,实现各部分的功能5、 完成系统软件的编写与调试五、 实验器材1、 PC机一台2、 SMART SOPC实验箱一套六、 实验原理、步骤及内容试验要求:1. 数码管第1、2位显示“1-”,第3、4位显示秒表程序:从8.0秒到1.0秒不断循环倒计时变化;同时,每秒钟,蜂鸣器对应发出0.3秒的声音加0.7秒的暂停,对应第8秒到第1秒,声音分别为“多(高音1)西(7)拉(6)索(5)发(4)米(3)莱(2)朵(中音1)”;数码管第5位显示“-”号,数码管第6、7、8位显示温度值,其中第6、7位显示温度的两位整数,第8位显示1位小数。按按键转到任务2。2. 停止声音和温度。数码管第1、2位显示“2-”,第3、4位显示学号的最后2位,第5位显示“-”号,第6到第8位显示ADC电压三位数值,按按鍵Key后转到任务3,同时蜂鸣器发出中音2的声音0.3秒;3. 数码管第1、2位显示“3-”,第3、4位显示秒表程序:从8.0秒到1.0秒不断循环倒计时变化;调节电压值,当其从0变为最大的过程中,8个发光二极管也从最暗(或熄灭)变为最亮,当电压值为最大时,秒表暂停;当电压值为最小时,秒表回到初始值8.0;当电压值是其他值时,数码管又回到第3、4位显示从8.0秒到1.0秒的循环倒计时秒表状态。按按鍵Key回到任务1,同时蜂鸣器发出中音5的声音0.3秒。1、 硬件设计核心板硬件资源如下:(1)50MHz 晶振;(2)5V、3.3V、2.5V 和 1.2V 电源;(3)一个 Xilinx 公司 Spartan3E 系列的 FPGA 器件,型号为 XC3S250E-144;(4)一片 32KB 的 SRAM 存储 IS61LV256AL;(5)基于 JTAG 的 FPGA 配置器件 XCF02S/04S;(6)基于 SPI(Serial Peripheral Interface)的 FPGA 配置器件 M25P16,含 2MB 空间;(7)JTAG 接口,可下载配置数据到 FPGA 和调试程序;(8)Flash 编程接口,对 SPI Flash 器件编程;(9)8 个用户 LED 灯和 8 位数码管;(10)8 位拨码开关和 4 个用户按键;(11)配置成功指示 LED;(12)重新配置按键,按下此按键后,FPGA 将重新配置;(13)一个全局时钟输入和输入输出接口;(14)通过 2 个 60 针接口将用户 I/O 口、8 位数据总线、15 位地址总线和读写信号引出,用于 实验底板的各外设功能扩展。 硬件结构图如下图1:图1实验平台核心板硬件结构Quick51电路原理图为下图2:图2 Quick51电路原理图 MC51单片机定制在FPGA芯片内实现,如下图3所示,在MC8051外添加了地址地址锁存模块,形成对单片机数据总线的拓展。添加了一个地址译码模块,形成了数据总线的复用,实验平台上的多种应用模块,可敬数据总线,通过外部寻址的方式进行访问。图3 片内MC8051单片机原理图其中FPGA与51单片机的引脚对应为下表一:2、 各部分硬件原理(1) 数码管动态扫描原理:图4 数码管的动态扫描动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。先把第一个数码管的显示数据送到数据线,同时打开第一个三极管,而其他数码管的对应的三极管关闭;延迟一段时间(通常不超过10ms),再把第二个数码管的显示数据送到数据线,同时打开第二个三极管,而其他数码管的对应的三极管关闭;延时一段时间,在显示下一个。注意:整个数码管的扫描频率应当大于50Hz,防止出现明显的闪烁。(2) I2C工作原理:图5 I2C电路图为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips开发了一个简单的双向两线总线实现有效的IC之间控制这个总线就称为Inter IC或I2C总线现在Philips包括超过150种CMOS和双极性兼容I2C总线的IC 可以执行前面提到的三种类型的功能所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C总线通讯这个设计概念解决了很多在设计数字控制电路时遇到的接口问题。(3) LM75特征及应用:图4 LM75应用电路LM75A是一个使用了内置带隙温度传感器和-模数转换技术的温度-数字转换器。它也是一个温度检测器,可提供一个过热检测输出。LM75A包含许多数据寄存器:配置寄存器(Conf),用来存储器件的某些配置,如器件的工作模式、OS工作模式、OS极性和OS故障队列等(在功能描述一节中有详细描述);温度寄存器(Temp),用来存储读取的数字温度;设定点寄存器(Tos & Thyst),用来存储可编程的过热关断和滞后限制,器件通过2线的串行I2C总线接口与控制器通信。LM75A还包含一个开漏输出(OS),当温度超过编程限制的值时该输出有效。LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。LM75A可配置成不同的工作条件。它可设置成在正常工作模式下周期性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。OS输出有2种可选的工作模式:OS比较器模式和OS中断模式。OS输出可选择高电平或低电平有效。故障队列和设定点限制可编程,为了激活OS输出,故障队列定义了许多连续的故障。温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125的精度。这个高精度在需要精确地测量温度偏移或超出限制范围的应用中非常有用。(4) 按键原理:图7 按键原理图由原理图可知,按键的另一端接地,当按键按下时,按键对应的接口对应低电平,为逻辑0,当按键抬起时,由于上拉电阻的存在,接口为高电平,为逻辑1,因此可以通过查询对应的接口状态来判断是否按键是否按下。(5) 蜂鸣器工作原理:图8 蜂鸣器电路原理图三极管有两个作用:一是根据开通或者关闭控制蜂鸣器发生与否;二是驱动蜂鸣器工作,因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以通过三极管放大驱动电流,从而可以让蜂鸣器发出声音。输出高电平,三极管导通,集电极电流蜂鸣器让蜂鸣器发出声音;当输出低电平时,三极管截止,没有电流流过蜂鸣器,不会发出声音。(6) LED显示原理:图9 LED显示原理由原理图可知,当输出低电压时,LED亮;输出高电平时,LED灭。在一个很短的时间间隙循环时,亮的时间占比越多,呈现的亮度越亮,从而可以通过亮的时间的占比达到控制亮度的目的。(7) AD实现原理:图TLC549串行ADC当/CS变为低电平后, TLC549芯片被选中, 同时前次转换结果的最高有效位MSB (A7)自 DATA OUT 端输出,接着要求自 I/O CLOCK端输入8个外部时钟信号,前7个 I/O CLOCK信号的作用,是配合 TLC549 输出前次转换结果的 A6-A0 位,并为本次转换做准备:在第4个 I/O CLOCK 信号由高至低的跳变之后,片内采样/保持电路对输入模拟量采样开始,第8个 I/O CLOCK 信号的下降沿使片内采样/保持电路进入保持状态并启动 A/D开始转换。转换时间为 36 个系统时钟周期,最大为 17us。直到 A/D转换完成前的这段时间内,TLC549 的控制逻辑要求:或者/CS保持高电平,或者 I/O CLOCK 时钟端保持36个系统时钟周期的低电平。由此可见,在自 TLC549的 I/O CLOCK 端输入8个外部时钟信号期间需要完成以下工作:读入前次A/D转换结果;对本次转换的输入模拟信号采样并保持;启动本次 A/D转换开始。3、 软件设计思考题: 按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。答:若按键改用外部中断模式,可以使用INT0、INT1,需要将按键(如按键KEY1、KEY2)分别用杜邦线连到INT0、INT1外部中断口,如下图:图11外部中断程序则做如下修改:各个函数无需调用按键扫描函数,但在主函数或者系统初始化函数,添加几段语句进行外部中断的初始化:EX0 = 1; /使能/INT0中断;EX1 = 1; /使能/INT1中断;EA = 1 /使能总中断; 中断服务程序为:void INT0SVC() interrupt 0 task+; for(;Key1=0;) Delay(81);七、 总结及心得体会八、 对本实验过程及方法、手段的改进建议九、 附录1、 程序程序包括main.c文件和修改过的Disp.c和Disp.h文件,其中Disp.c添加了利用定时器的软件延时函数void Delay(unsigned int t),而Disp.h添加了该函数的声明。main.c文件:/*main.c现代电子综合实验*/#include "VolTab.h"#include "Disp.h"#include "I2C.h"#include <reg51.h>#include <string.h>#define M20xFCEF/587.33#define M30xFD45/659.26#define M40xFD6C/698.46#define M50xFDB4/783.99#define M60xFDF4/880.00#define M70xFE2D/987.77#define H10xFE48/1046.5sbit BUZZER = P10;/交流蜂鸣器由P1.0管脚控制sbit KEY1 = P20;/按键1/定义TLC549操作接口sbit CS = P15;sbit DAT = P17;sbit CLK = P16;/定义PWM最大级数#define PWM_MAX26/定义PWM级数,分为0PWM_MAX-1级unsigned char PwmValue;unsigned int MusicTab = H1,M7,M6,M5,M4,M3,M2 ;/定义定时器T1重装值volatile char ReloadH;volatile char ReloadL;/定义任务、中断标志位unsigned int task,flg;/*函数:T0INTSVC()功能:定时器T0中断服务函数*/void T0INTSVC() interrupt 1 static unsigned char temp = 0;if(flg=3)TR0 = 0;TH0 = 0xFF;TL0 = 0x00;TR0= 1;temp+;if ( temp >= PWM_MAX ) temp = 0;if ( temp < PwmValue )P0 =0x00;elseP0= 0xff;elseTR0 = 0;TH0 = ReloadH;TL0 = ReloadL;TR0 = 1;BUZZER = !BUZZER;/*函数:Sound()功能:演奏一个音符参数:*note:音符指针,指向要演奏的音符*/void Sound(unsigned int note)/利用定时器T1发出音符的频率if ( note != 0 )ReloadH = (unsigned char)(note >> 8);ReloadL = (unsigned char)(note);TR0 = 0;TH0 = 0xFF;TL0 = 0xF0;TR0 = 1;flg=1;EA=1;ET0=1;/*函数:Delay()功能:延时1ms65.536s本函数只是简单延时函数,非秒表使用*/void Delays(unsigned int t) unsigned int t1;do for(t1=1200;t1>0;t1-); while ( -t != 0 );/按键扫描函数void KeyScan()if ( KEY1 = 0 ) task+;for(;KEY1 = 0;) Delay(81);/*函数:SysInit()功能:系统初始化*/void SysInit()TMOD &= 0xF0;TMOD |= 0x01;/设置T0为16位定时器DispInit();/数码管扫描显示初始化I2C_Init();/初始化I2C总线/*函数:LM75A_GetTemp功能:读出LM75A的温度值返回:LM75A温度寄存器的数值(乘以0.125可得到摄氏度值)*/int LM75A_GetTemp()unsigned char buf2;int t;I2C_Gets(0x90,0x00,2,buf);t = buf0;t <<= 8;t += buf1;t >>= 5;/去掉无关位return t;/*函数:ByteToStr()功能:字节型变量c转换为十进制字符串*/void ByteToStr(unsigned char idata *s, unsigned char c)code unsigned char Tab = 10,1;unsigned char i;unsigned char t;for ( i=0; i<2; i+ )t = c / Tabi;*s+ = '0' + t;c -= t*Tabi;*s = '0'/*函数:DispTemp()功能:在数码管上显示出温度值参数:t:补码,除以8以后才是真正温度值*/void DispTemp(int t)code unsigned char Tab8 ='0','1','3','4','5','6','8','9'unsigned char buf3;unsigned char i;/整数部分unsigned char d;/小数部分/分离出整数和小数部分i = t / 8;d = t % 8;/整数部分转换成字符串ByteToStr(buf,i);/显示整数部分DispStr(5,buf);/显示小数点DispDotOn(6);/显示小数部分DispChar(7,Tabd);/*函数:ReadAdc()功能:读取A/D转换结果返回:8位ADC代码*/unsigned char ReadAdc()unsigned char d;unsigned char n;CS = 0;n = 5;while ( -n != 0 );n = 8;dod <<= 1;if ( DAT ) d+;CLK = 1;CLK = 0;while ( -n != 0 );CS = 1;return d;/*函数:AdcInit()功能:初始化ADC接口*/void AdcInit()CS = 1;CLK = 0;DAT = 1;ReadAdc();/*函数:DispVol()功能:将ADC值转换成电压值,并显示参数:v:8位ADC结果*/void DispVol(unsigned char v)DispStr(5,VolTabv);DispDotOn(5);/任务一void firstf() unsigned char T1=""unsigned char T2=""unsigned int t,t1=0,t2=0,msh=0;P0=0xff; /关闭LEDDispChar(0,'1');DispChar(1,'-');DispChar(4,'-');for(;) /显示秒表 DispChar(2,T1t1); DispChar(3,T2t2); DispDotOn(2); /温度读取和显示 t = LM75A_GetTemp(); DispTemp(t); /发音 if(T1t1!='1'&&T2t2='0') Sound(MusicTabmsh);msh+;if(msh=7)msh=0; if(T2t2='7') TR0=0;BUZZER =1; /秒表实现 Delay(81); if(!(T1t1='1'&&T2t2='0') t2+; if(t2=10) t2=0; if(t2=1) t1+;if(t1=8) t1=0; if(t1=0&&t2=1) t1+; else t1=0;t2=0; /按键扫描 Delay(81); KeyScan(); if(task%3!=0) break;/任务2void twof() unsigned char v;/电压值 DispInit();AdcInit(); TR0 = 0;BUZZER = 1; /短暂停顿Delay(10);P0=0xff;DispChar(0,'2');DispChar(1,'-');DispChar(4,'-');DispChar(2,'1');DispChar(3,'4');for(;) v = ReadAdc();/读取ADC值DispVol(v);/显示成电压值Delay(80);/延时50ms KeyScan(); if(task%3!=1) break; /任务3void threef() unsigned char T1="" unsigned char T2=""unsigned char v;/电压值unsigned int t1=0,t2=0; AdcInit();flg=3;Delay(10);TR0=1;ET0=1;BUZZER =1;DispChar(0,'3'); DispChar(1,'-'); for(;) /显示秒表 DispChar(2,T1t1); DispChar(3,T2t2); DispDotOn(2); /读取显示温度 v = ReadAdc();/读取ADC值 DispVol(v);/显示成电压值 /控制LED PwmValue=v/10; /秒表实现 Delay(81); if(v=0) t1=0;t2=0; else if(v>235) Delay(81); else if(!(T1t1='1'&&T2t2='0') t2+; if(t2=10) t2=0; if(t2=1) t1+;if(t1=8) t1=0; if(t1=0&&t2=1) t1+; else t1=0;t2=0; /按键扫描 Delay(81); KeyScan(); if(task%3!=2) break; void main()for (;) SysInit(); switch(task%3) case 0: firstf(); break; case 1: twof(); if(task%3=2) Sound(MusicTab6); Delay(486); break; case 2: threef(); if(task%3=0) Sound(MusicTab3); Delay(486); break; Disp.h:添加了软件延时函数的定义void Delay(unsigned int t);/*Disp.h数码管扫描显示驱动程序头文件*/#ifndef Disp_h_#define Disp_h_/清除数码管的所有显示void DispClear();/在数码管位置x(07)处显示字符c(仅限十进制数字和减号)void DispChar(unsigned char x, unsigned char c);/在数码管位置x(07)处显示字符串*svoid DispStr(unsigned char x, unsigned char *s);/显示指定位置x(07)处的小数点void DispDotOn(unsigned char x);/数码管扫描显示初始化void DispInit();void Delay(unsigned int t);#endif/Disp_h_Disp.c:添加了软件延时函数:/*Disp.c数码管扫描显示驱动程序*/#include <reg51.h>#include <absacc.h>/定义显示缓冲区(由定时中断程序自动扫描)unsigned char DispBuf8;bit SWTF;/软件定时器溢出标志unsigned int SWTV;/软件定时器定时值bit SWTR;/软件定时器运行标志/*函数:T1INTSVC()功能:定时器T1的中断服务函数*/void T1INTSVC() interrupt 3code unsigned char com = 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;static unsigned char n = 0;TR1 = 0;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;XBYTE0x7800 = 0xFF;/暂停显示XBYTE0x7801 = DispBufn;/更新扫描数据XBYTE0x7800 = comn;/重新显示n+;n &= 0x07;/模拟一个软件定时器if ( SWTR )if ( -SWTV = 0 ) SWTF = 1;/*函数:Delay()*/void Delay(unsigned int t)SWTV = t;/软件定时器赋初值SWTR = 1;/启动软件定时器while ( !SWTF );/等待溢出SWTR = 0;/停止软件定时器SWTF = 0;/清除溢出标志/*函数:DispClear()功能:清除数码管的所有显示*/void DispClear()unsigned char i;for ( i=0; i<8; i+ )DispBufi = 0x00;/*函数:DispChar()功能:在数码管上显示字符参数:x:数码管的坐标位置(07)c:要显示的字符(仅限十进制数字和减号)*/void DispChar(unsigned char x, unsigned char c)/的数码管字型数据code unsigned char Tab = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;x &= 0x07;x = 7 - x;if ( c = '-' )DispBufx = 0x40;else if ( ( c >= '0' ) && ( c <= '9' ) )DispBufx = Tabc-'0'/*函数:DispStr()功能:在数码管上显示字符串参数:x:数码管的坐标位置(07)*s:要显示的字符串(字符仅限十进制数字和减号)*/void DispStr(unsigned char x, unsigned char *s)unsigned char c;for (;)c = *s;if ( c = '0' ) break;s+;DispChar(x,c);x+;/*函数:DispDotOn()功能:显示指定位的小数点参数:x为数码管坐标*/void DispDotOn(unsigned char x)DispBuf7-x |= 0x80;/*函数:DispInit()功能:数码管扫描显示初始化*/void DispInit()DispClear();EA = 0;TMOD &= 0x0F;TMOD |= 0x10;TH1 = 0xFC;TL1 = 0x66;TR1 = 1;ET1 = 1;EA = 1;2、画一个包括51单片机、外部RAM和外部ROM的原理图。专心-专注-专业

    注意事项

    本文(现代电子技术综合实验报告-熊万安(共29页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开