电子技术综合实验室报告.docx
- 文档编号:3600901
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:15
- 大小:19.97KB
电子技术综合实验室报告.docx
《电子技术综合实验室报告.docx》由会员分享,可在线阅读,更多相关《电子技术综合实验室报告.docx(15页珍藏版)》请在冰豆网上搜索。
电子技术综合实验室报告
电子科技大学
实验报告
一、实验室名称:
电子技术综合实验室
二、实验项目名称:
现代电子技术综合实验
三、实验学时:
40
四、实验目的与任务:
1、熟悉系统设计与实现原理
2、掌握KEILC51的基本使用方法
3、熟悉SMARTSOPC实验箱的应用
4、连接电路,编程调试,实现各部分的功能
5、完成系统软件的编写与调试
五、实验器材
1、PC机一台
2、示波器、SMARTSOPC实验箱一套
六、实验原理、步骤及内容
(一)试验要求
1、程序开始后:
当只有第1个发光二极管亮时,同时第1个数码管显示数字1,其余显示”-”;持续0.5秒之后,只有第2个发光二极管亮,同时第2个数码管显示数字2,其余显示”-”;再过0.5秒,只有第3个发光二极管亮,同时第3个数码管显示数字3,其余显示”-”;……;间隔0.5秒后,只有第8个发光二极管亮,同时第8个数码管显示数字8,其余显示”-”。
此后进入循环状态。
循环过程中,按按键进入任务2。
2、停止任务1中发光二极管显示,数码管的第1、2位显示学号最后二位,第4、5位显示电机转速(初始转速30)。
第7、8位实现秒表功能,从5.0开始倒计时,计时到0.0后程序自动进入任务3.
3、数码管的第1、2位显示电机转速,第3、4、5、6位显示”-”,第7、8位显示二位电压值(0.0~2.4V),增减调节电压值,电机转速(初始转速30)能够跟随电压增减以10倍变化量(0~24),进行加减速变化。
按按键进入任务1。
(二)实验内容
1、硬件设计
PDIP40封装80C51引脚布局图SmartSOPC相配套的基于8051单片机的Quick51核心板
2、各部分硬件原理
数码管动态扫描原理:
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。
选亮数码管采用动态扫描显示。
所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。
原理图
(一)
蜂鸣器工作原理:
蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。
蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。
多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
原理图
(二)
I2C工作原理:
在I2C总线上每传输一位数据,都有一个时钟脉冲相对应,其逻辑“0”和“1”的信号电平取决于该点的正端电源VDD的电压。
I2C总线数据传输时,在时钟线高电平期间数据线上必须保持有稳定的逻辑电平状态,高电平为数据1,低电平为数据0。
只有在时钟线为低电平时,才允许数据线上的电平变化。
I2C总线数据传送时有两种时序状态被分别定义为起始信号和终止信号。
起始信号:
在时钟线保持高电平期间,数据线在由高电平到低电平变化时启动I2C总线,为I2C总线的起始信号。
终止信号:
在时钟线保持高电平期间,数据线在由低电平到高电平变化时将停止I2C总线的数据传送,为I2C总线的终止信号。
起始信号和终止信号都是由主控制器产生。
总线上带有I2C总线接口的器件很容易检测到这些信号。
但是对于不具备这些硬件接口的单片机来说,为了能准确地检测到这些信号,必须保证在总线的一个时钟周期内对数据线至少进行两次采样。
原理图(三)
LM75特征及应用:
LM75温度传感器包含一个模数转换器和一个数字过热检测器。
主机可通过器件的I2C接口读取温度数据。
当超出设置的温度门限时漏极开路的过热输出吸收电流。
OS输出具体2种模式,比较器或中断模式。
主机控制报警触触发门限和带回温度,低于带回温度报警条件无效。
主机可读写LM75的TOS和THYST寄存器,器件上电时进入比较器模式,默认条件下TOS=+80且THYST=75。
原理图(四)
电机驱动原理:
步进电机为一四相步进电机,采用单极性直流电源供电。
只要对步进电机的各相绕组
按合适的时序通电,就能使步进电机步进转动。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。
单四拍与双四拍的步距角相等,但单四拍的转动力矩小。
八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。
原理图(五)
3、软件设计
(完成程序框图)
(三)思考题
设定温度的按键改用外部中断模式,电路如何修改(画示意图)?
程序如何修改,写出中断服务程序。
七、总结及心得体会
通过一个星期的学习和实践,我从只能点亮一个LED灯到可以按照实验要求完成流水灯。
在每一个小小的实现项目的完成,感觉自己都在一步一步的成长,虽然有的时候非常烦躁,实验结果老是出不来,而且找不到原因,并且被老师骂的一塌糊涂。
但是,我还是坚持下来了。
坚持着完成一个个小项目,这样自己的信心也一步一步增加。
使得我很快就完成了实验。
在此,需要谢谢老师的谆谆教导。
八、对本实验过程及方法、手段的改进建议
无
九、附录
综合实验程序:
#include
#include
#include
sbitKEY1=P2^0;
sbitKEY2=P2^1;
sbitPWM=P2^6;
sbitCS=P3^5;
sbitDAT=P3^6;
sbitCLK=P3^7;
unsignedcharKeyScan()
{
unsignedchark='\0';
if(KEY1==0)k='+';
if(KEY2==0)k='-';
returnk;
}
//定义显示缓冲区(由定时中断程序自动扫描)
unsignedcharDispBuf[8];
unsignedchartemp;
unsignedcharSpeed;//预设的电机转速值,范围20~250
bitSWTR;//软件定时器运行标志
bitSWTF;//软件定时器溢出标志
unsignedintSWTV;
/*
函数:
T1INTSVC()
功能:
定时器T1的中断服务函数
*/
voidT1INTSVC()interrupt3
{
codeunsignedcharcom[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
staticunsignedcharn=0;
staticunsignedchart=0;
//扫描数码管
P0=0xFF;//暂停显示
XBYTE[0xE800]=~DispBuf[n];//更新扫描数据
P0=~com[n];//重新显示
n++;
n&=0x07;
//产生PWM方波,驱动电机
t++;
if(t { PWM=1; } else { PWM=0; } //模拟一个软件定时器 if(SWTR) { if(--SWTV==0)SWTF=1; } } /* 函数: DispClear() 功能: 清除数码管的所有显示 */ voidDispClear() { unsignedchari; for(i=0;i<8;i++) { DispBuf[i]=0x00; } } /* 函数: DispChar() 功能: 在数码管上显示字符 参数: x: 数码管的坐标位置(0~7) c: 要显示的字符(仅限16进制数字和减号) dp: 是否显示小数点,0-不显示,1-显示 */ voidDispChar(unsignedcharx,unsignedcharc,bitdp) { codeunsignedcharTab[]= {//定义0123456789AbCdEF的数码管字型数据 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71 }; unsignedchart;//临时变量 //防止显示位置超出范围 x&=0x07; x=7-x; //分析字符c,取得对应的数码管字型数据 if(c=='-') { t=0x40; } else { t=toint(c);//toint()为库函数,详见C: \Keil\C51\HLP\C51.pdf if(t<16)//如果是16进制字符 { t=Tab[t];//查表,取得数码管字型数据 } else { t=0x00;//如果是其它字符则显示为空白 } } //检查是否显示小数点 if(dp) { t|=0x80; } else { t&=0x7F; } //送到显示缓冲区显示 DispBuf[x]=t; } /* 函数: DispStr() 功能: 在数码管上显示字符串 参数: x: 显示的起始位置(0~7) *s: 要显示的字符串(内容仅限16进制数字和减号) */ voidDispStr(unsignedcharx,unsignedcharidata*s) { unsignedcharc; for(;;) { c=*s++; if(c=='\0')break; DispChar(x++,c,0); } } /* 函数: ByteToStr() 功能: 字节型变量c转换为十进制字符串 */ voidByteToStr(unsignedcharidata*s,unsignedcharc) { codeunsignedcharTab[]={10,1}; unsignedchari; unsignedchart; for(i=0;i<2;i++) { t=c/Tab[i]; *s++='0'+t; c-=t*Tab[i]; } *s++='0'+c; *s='\0'; } /* 函数: DispInit() 功能: 数码管扫描显示初始化 */ voidDispInit() { DispClear();//初始为全灭 EA=0; /* TMOD&=0x0F; TMOD|=0x10; TH1=0xFC; TL1=0x66; */ TR1=1; ET1=1; EA=1; } /* 函数: Delay() 功能: 延时0.01~2.56s 参数: t>0时,延时(t*0.01)s t=0时,延时2.56s 说明: 晶振用11.0592MHz */ voidDelay(unsignedintt) { SWTV=t;//软件定时器赋初值 SWTR=1;//启动软件定时器 while(! SWTF);//等待溢出 SWTR=0;//停止软件定时器 SWTF=0;//清除溢出标志 } unsignedcharMeasureSpeed() { TH0=TL0=0;//清除计数器T0 TR0=1;//启动计数器T0 Delay(2500);//延时250ms(因为直流电机转盘上正好有4个槽) TR0=0;//停止计数 TF0=0;//清除(可能的)溢出标志 returnTL0;//返回结果(单位: 转/秒;已知电机转速不会超过100) } /* 函数: SysInit() 功能: 系统初始化 */ /* voidSysInit() { TMOD&=0xF0; TMOD|=0x01;//设置定时器T0为16位定时器 DispInit();//数码管扫描显示初始化 } */ voidSysInit() { unsignedchari; for(i=0;i<8;i++) { DispBuf[i]=0x00;//数码管初始化为全灭 } Speed=35;//设置电机初始转速 SWTR=0; SWTF=0; SWTV=0; TMOD&=0x0F; TMOD|=0x20;//设置T1为8位定时器,自动重装 TH1=TL1=0xA4;//设置T1初值,对应100μs ET1=1;//使能T1中断 TR1=1;//启动T1 EA=1;//使能总中断 TMOD&=0xF0; TMOD|=0x05; DispInit(); } unsignedcharReadAdc() { unsignedchard; unsignedcharn; CS=0; n=5; while(--n! =0); n=8; do { d<<=1; if(DAT)d++; CLK=1; CLK=0; }while(--n! =0); CS=1; returnd; } voidmain() { codeunsignedchars[]="12345678"; codeunsignedcharw[]="21"; unsignedchari; unsignedcharx; unsignedchark; unsignedcharspd; unsignedcharr[3]; unsignedcharv; unsignedcharSW; unsignedcharGW; bitdp; SysInit(); dp=0; //TMOD&=0xF0; //TMOD|=0x01; for(;;) { for(;;) { temp=0x00000001; k=KeyScan(); if(k=='+') break; for(i=0;i<8;i++) { P1=~temp; temp<<=1; k=KeyScan(); if(k=='+') break; for(x=0;x<8;x++) { DispChar(x,'-',dp); k=KeyScan(); if(k=='+') break; } DispChar(7-i,s[i],dp); k=KeyScan(); if(k=='+') break; Delay(5000); } } P1=~(temp&0x00000000); SysInit(); for(;;) { for(x=0;x<2;x++) { DispChar(7-x,w[x],dp); } DispChar(1,5+'0',1); DispChar(0,0+'0',0); for(x=4;x>=0;x--) { for(i=9;i>=0;i--) { spd=MeasureSpeed(); SW=spd/10; GW=spd%10; DispChar(3,GW+'0',0); DispChar(4,SW+'0',0); Delay(1000); DispChar(1,x+'0',1); DispChar(0,i+'0',0); if(i==0)break; } DispChar(1,x+'0',1); DispChar(0,0+'0',0); if(x==0)break; } if(x==0)break; } SysInit(); for(;;) { spd=MeasureSpeed(); SW=spd/10+'0'; GW=spd%10+'0'; DispChar(6,GW,0); DispChar(7,SW,0); v=ReadAdc();//读取ADC值 SW=v/100; GW=(v-100*SW)/10; DispChar(1,SW+'0',1); DispChar(0,GW+'0',0); Speed=32+v/10; k=KeyScan(); if(k! ='\0') break; } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子技术 综合 实验室 报告