电子技术综合实验室报告Word文件下载.docx

上传人:b****5 文档编号:16505838 上传时间:2022-11-24 格式:DOCX 页数:15 大小:19.97KB
下载 相关 举报
电子技术综合实验室报告Word文件下载.docx_第1页
第1页 / 共15页
电子技术综合实验室报告Word文件下载.docx_第2页
第2页 / 共15页
电子技术综合实验室报告Word文件下载.docx_第3页
第3页 / 共15页
电子技术综合实验室报告Word文件下载.docx_第4页
第4页 / 共15页
电子技术综合实验室报告Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

电子技术综合实验室报告Word文件下载.docx

《电子技术综合实验室报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《电子技术综合实验室报告Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

电子技术综合实验室报告Word文件下载.docx

原理图

(一)

蜂鸣器工作原理:

蜂鸣器是一种一体化结构的电子讯响器,本文介绍如何用单片机驱动蜂鸣器,他广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。

接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

多谐振荡器由晶体管或集成电路构成,当接通电源后(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<

reg51.h>

absacc.h>

ctype.h>

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<

Speed)

{

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&

x=7-x;

//分析字符c,取得对应的数码管字型数据

if(c=='

t=0x40;

t=toint(c);

//toint()为库函数,详见C:

\Keil\C51\HLP\C51.pdf

if(t<

16)//如果是16进制字符

{

t=Tab[t];

//查表,取得数码管字型数据

}

else

t=0x00;

//如果是其它字符则显示为空白

//检查是否显示小数点

if(dp)

t|=0x80;

t&

=0x7F;

//送到显示缓冲区显示

DispBuf[x]=t;

DispStr()

在数码管上显示字符串

显示的起始位置(0~7)

*s:

要显示的字符串(内容仅限16进制数字和减号)

voidDispStr(unsignedcharx,unsignedcharidata*s)

unsignedcharc;

for(;

c=*s++;

if(c=='

)break;

DispChar(x++,c,0);

ByteToStr()

字节型变量c转换为十进制字符串

voidByteToStr(unsignedcharidata*s,unsignedcharc)

codeunsignedcharTab[]={10,1};

2;

t=c/Tab[i];

*s++='

0'

+t;

c-=t*Tab[i];

*s++='

+c;

*s='

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()

=0xF0;

TMOD|=0x01;

//设置定时器T0为16位定时器

DispInit();

//数码管扫描显示初始化

//数码管初始化为全灭

Speed=35;

//设置电机初始转速

SWTV=0;

TMOD|=0x20;

//设置T1为8位定时器,自动重装

TH1=TL1=0xA4;

//设置T1初值,对应100μs

//使能T1中断

//启动T1

//使能总中断

TMOD|=0x05;

unsignedcharReadAdc()

unsignedchard;

unsignedcharn;

CS=0;

n=5;

while(--n!

=0);

n=8;

do

d<

<

=1;

if(DAT)d++;

CLK=1;

CLK=0;

}while(--n!

CS=1;

returnd;

voidmain()

{

codeunsignedchars[]="

12345678"

codeunsignedcharw[]="

21"

unsignedcharx;

unsignedchark;

unsignedcharspd;

unsignedcharr[3];

unsignedcharv;

unsignedcharSW;

unsignedcharGW;

bitdp;

SysInit();

dp=0;

//TMOD&

//TMOD|=0x01;

for(;

temp=0x00000001;

k=KeyScan();

if(k=='

break;

for(i=0;

P1=~temp;

temp<

=1;

k=KeyScan();

for(x=0;

x<

x++)

{

DispChar(x,'

dp);

k=KeyScan();

}

DispChar(7-i,s[i],dp);

k=KeyScan();

Delay(5000);

P1=~(temp&

0x00000000);

for(;

for(x=0;

DispChar(7-x,w[x],dp);

DispChar(1,5+'

1);

DispChar(0,0+'

0);

for(x=4;

x>

=0;

x--)

{

for(i=9;

i>

i--)

spd=MeasureSpeed();

SW=spd/10;

GW=spd%10;

DispChar(3,GW+'

DispChar(4,SW+'

Delay(1000);

DispChar(1,x+'

DispChar(0,i+'

if(i==0)break;

if(x==0)break;

if(x==0)break;

SysInit();

spd=MeasureSpeed();

SW=spd/10+'

GW=spd%10+'

DispChar(6,GW,0);

DispChar(7,SW,0);

v=ReadAdc();

//读取ADC值

SW=v/100;

GW=(v-100*SW)/10;

DispChar(1,SW+'

DispChar(0,GW+'

Speed=32+v/10;

k=KeyScan();

if(k!

='

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1