1、现代电子技术实验报告电子科大电子科技大学 学院实 验 报 告实验名称 现代电子技术综合实验姓名:学号:评分:教师签字电子科技大学教务处制电 子 科 技 大 学实 验 报 告学生姓名: 学号: 指导教师:熊万安实验地点: 科A333 实验时间: 第七、八周一、实验室名称: 电子技术综合实验室二、实验项目名称: 三、实验学时: 32四、实验目的与任务:1、熟悉系统设计与实现原理2、掌握KEIL C51的基本使用方法3、熟悉SMART SOPC实验箱的应用4、连接电路,编程调试,实现各部分的功能5、完成系统软件的编写与调试五、实验器材1、PC机一台2、SMART SOPC实验箱一套六、实验原理、步骤
2、及内容实验原理:1、数码管静态显示与动态显示原理: 静态显示方式 LED显示器工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。 动态显示 动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动
3、态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。图1 数码管的动态扫描与显示原理图2、I2C工作原理: 为了使这些相似之处对系统设计者和器件厂商都得益而且使硬件效益最大电路最简单Philips开发了一个简单的双向两线总线实现有效的IC之间控制这个总线就称为Inter IC或I2C总线现在Philips包括超过150种CMOS和双极性兼容I2C总线的IC 可以执行前面提到的三种类型的功能所有符合I2C总线的器件组合了一个片上接口使器件之间直接通过I2C总线通讯这个设计概念解决了很多在设计数字控制电路时遇到的接口问题。图2 I2C总线I2C总线的概念:I2C总线支持任
4、何IC 生产过程(NMOS、CMOS、双极性)。两线串行数据(SDA)和串行时钟(SCL)线在连接到总线的器件间传递信息。每个器件都有一个唯一的地址识别(无论是微控制器 LCD驱动器存储器或键盘接口),而且都可以作为一个发送器或接收器(由器件的功能决定)。很明显,LCD驱动器只是一个接收器,而存储器则既可以接收又可以发送数据。除了发送器和接收器外,器件在执行数据传输时也可以被看作是主机或从机。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件。此时,任何被寻址的器件都被认为是从机。I2C总线的一些特征: 只要求两条总线线路;一条串行数据线SDA,一条串行时钟线SCL。 每个连接到总线的器
5、件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址;主机可以作为主机发送器或主机接收器; 它是一个真正的多主机总线,如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏; 串行的8位双向数据传输位速率在标准模式下可达100kbit/s ,快速模式下可达400kbit/s;高速模式下可达3.4Mbit/s; 片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整; 连接到相同总线的IC数量只受到总线的最大电容400pF限制; 3、LM75特征及应用: LM75A是一个使用了内置带隙温度传感器和-模数转换技术的温度-数字转换器。它也是一个温度检测器,可提供一个过热
6、检测输出。LM75A包含许多数据寄存器:配置寄存器(Conf),用来存储器件的某些配置,如器件的工作模式、OS工作模式、OS极性和OS故障队列等(在功能描述一节中有详细描述);温度寄存器(Temp),用来存储读取的数字温度;设定点寄存器(Tos & Thyst),用来存储可编程的过热关断和滞后限制,器件通过2线的串行I2C总线接口与控制器通信。LM75A还包含一个开漏输出(OS),当温度超过编程限制的值时该输出有效。LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。图3 LM75A简化功能框图 LM75A可配置成不同的工作条件。它可设置成在正常工作模式下周期
7、性地对环境温度进行监控或进入关断模式来将器件功耗降至最低。OS输出有2种可选的工作模式:OS比较器模式和OS中断模式。OS输出可选择高电平或低电平有效。故障队列和设定点限制可编程,为了激活OS输出,故障队列定义了许多连续的故障。 温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125的精度。这个高精度在需要精确地测量温度偏移或超出限制范围的应用中非常有用。正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80,滞后75,这时,LM75A就可用作一个具有以上预定义温度设定点的独立的温度控制器。可应用于: 系统温度管理 个人计算机 电子设备 工业控制器实验步骤:1、硬件设计
8、:硬件连接请参照Quick51跳线设置表检查Quick51电路板上跳线JP1JP7是否为默认设置;Quick51实验板J14的PB-LE用杜邦线连接到J9;Quick51实验板的P1端口用8芯排线连接到SmartSOPC实验箱B3区的COM6;Quick51的J11(PB端口)用8芯排线连接到SmartSOPC实验箱B3区的COM3;SmartSOPC实验箱C2区的SCL用杜邦线连接到Quick51实验板J5的T0;SmartSOPC实验箱C2区的SDA用杜邦线连接到Quick51实验板J5的T1;Quick51实验板的P22端口用杜邦线连接到SmartSOPC实验箱D4区的nCS;Quick
9、51实验板的P23端口用杜邦线连接到SmartSOPC实验箱D4区的DAT;Quick51实验板的P24端口用杜邦线连接到SmartSOPC实验箱D4区的CLK。SmartSOPC实验箱JP6的KEY1用跳线帽短接,JP6的其它跳线全部断开。2、软件设计:实验内容:数码管在界面一同时显示:a)3位当前环境温度(2位整数,1位小数);b)数码管显示A/D转换电压值;c)秒表(实现0.09.9s显示,分度值为0.1s);增加一个按键,当其按下,数码管切换到界面二:显示学号(后8位);再次按下时,切换回到界面一:即恢复温度和电压值、秒表的显示;并且,每次从界面一切换至界面二的按键时,蜂鸣器响音乐中音
10、1的声音0.6秒,从界面二再按一次键回到界面一时,蜂鸣器响中音2的声音0.6秒。思考题: 按键改用外部中断模式,电路如何修改(画示意图)?程序如何修改,写出中断服务程序。答:若要是按键改用外部中断,如使用、,则需要将按键(如按键KEY1、KEY2)分别用杜邦线连到、外部中断口,如下图示; 程序部分在系统初始化函数中,需要加上下几段语句进行外部中断的初始化:EA = 0; /禁止总中断EX0 = 1; /使能/INT0中断EX1 = 1; /使能/INT1中断EA = 1; /使能总中断七、总结及心得体会通过本次实验,我学会了如何使用C51的调试方法、如何快速、有效地学习掌握C51硬件的连接及软
11、件程序的调试方法,同时还学会了如何融合多个程序,以及在融合调试过程中找错、纠错的方法,得到了不少的经验;最后经过了多天的奋战,终于完成了实验任务,并指导了部分同学的实验调试过程,确实心里感到非常开心。在这两周的学习和调试中,确实经历了很多的困难和烦恼,最终还是静下心来,仔细找错和思考,才使得自己能顺利掌握实验任务所要求的C51基本的基本功能的综合运用方法。八、对本实验过程及方法、手段的改进建议 本实验的学习上课过程中,希望老师能教教同学们怎么去进行学习,尤其是对于那些初次接触单片机的同学来说,希望能告诉他们进行该学习的步骤和调试方法,如何快速吸收知识的方法等。九、附录程序void Delay(
12、unsigned int t) do TH0 = 0xFF; TL0 = 0xA4; TR0 = 1; while ( !TF0 ); TR0 = 0; TF0 = 0; while ( -t != 0 );该程序中,将定时器T0的初值修改为“TH0 = 0xFF;TL0 = 0xA4;”,使得其每次循环时间为0.0001s。为之后控制蜂鸣器频率用。 void DispVol(unsigned char v) unsigned char buf4; ByteToStr(buf,v); DispStr(5,buf); DispDotOn(5);在该显示电压值的函数中,将原来的显示算法修改为通过先
13、将字节型变量转换成字符串数组来实现对电压值的显示功能。void DispTemp(int t) code unsigned char Tab84 = 000, 125, 250, 375, 500, 625, 750, 875 ; unsigned char buf4; unsigned char i; /整数部分 unsigned char d; /小数部分/分离出整数和小数部分 i = t / 8; d = t % 8;/整数部分转换成字符串 ByteToStr(buf,i);/显示整数部分 DispChar(0,buf1); DispChar(1,buf2);/显示小数点 DispDot
14、On(1);/显示小数部分 DispChar(2,Tabd1);在该函数中,对显示小数部分的位数进行了限定,只显示小数部分的十分位;对显示整数部分的位数也进行了限定,只显示十位和各位,不显示百位,因为所测的温度为室温,不会超过100度,故百位可不显示出来。void task1() unsigned char b4; unsigned char v; /电压值 unsigned char i; int t; for (;) for(i=0;i100;i+) ByteToStr(b,i); DispChar(3,b1); DispChar(4,b2); DispDotOn(3); v = Read
15、Adc(); /读取ADC值 DispVol(v); /显示成电压值 t = LM75A_GetTemp();/读取温度 DispTemp(t); /显示温度值 Delay(1000); if(KEY1=0)break; Delay(300); if(KEY1=0)break; 该函数是新定义的子函数,用于显示界面一中的电压(三位:一位整数、两位小数)、温度(三位:两位整数、一位小数)、秒表(两位:从0.0计数到9.9,并不断循环显示)。void task2() code unsigned char a=84010001; for (;) DispStr(0,a); Delay(3000);
16、if(KEY1=0)break; 该函数是新定义的另一子函数,用于显示界面二中的八位数字(学号后八位)。void main() int n = 0; unsigned int i; BUZZER = 0; SysInit(); for(;) Task1(); for(i=0;i=315;i+) Delay(19); BUZZER=!BUZZER; Task2(); for(i=0;i=353;i+) Delay(17); BUZZER=!BUZZER; 主函数部分通过for的死循环结构、按键和break语句实现了界面一和界面二的切换显示;而按键时蜂鸣器的发音的时间和频率通过for循环和延时函数Delay来实现(如中音1的实现:Delay(1)为0.0001秒,如每隔0.0001秒BUZZER电平翻转一次,其对应的蜂鸣频率为10000Hz,而Delay(19)为0.0019秒,如每隔0.0019秒BUZZER电平翻转一次,其对应的频率即为中音一的频率523.25Hz,而Delay(17)对应的即为中音2(587.33Hz)。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1