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