单片机应用实例报告Word格式.docx
《单片机应用实例报告Word格式.docx》由会员分享,可在线阅读,更多相关《单片机应用实例报告Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
6.在各种大型电器中的模块化应用
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其部结构。
如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。
如:
音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。
在大型电路中,这种模块化应用极缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
7.单片机在汽车设备领域中的应用
单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
三.运用实例
实例1.6位数显频率计数器
1.实验任务
利用AT89S51单片机的T0、T1的定时计数器功能,来完成对输入的信号进行频率计数,计数的频率结果通过8位动态数码管显示出来。
要求能够对0-250KHZ的信号频率进行准确计数,计数误差不超过±
1HZ。
2.电路原理图
图4.31.1
3.系统板上硬件连线
(1).把“单片机系统”区域中的P0.0-P0.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
(2).把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
(3).把“单片机系统”区域中的P3.4(T0)端子用导线连接到“频率产生器”区域中的WAVE端子上。
4.程序设计容
(1).定时/计数器T0和T1的工作方式设置,由图可知,T0是工作在计数状态下,对输入的频率信号进行计数,但对工作在计数状态下的T0,最大计数值为fOSC/24,由于fOSC=12MHz,因此:
T0的最大计数频率为250KHz。
对于频率的概念就是在一秒只数脉冲的个数,即为频率值。
所以T1工作在定时状态下,每定时1秒中到,就停止T0的计数,而从T0的计数单元中读取计数的数值,然后进行数据处理。
送到数码管显示出来。
(2).T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时,所以采用定时50ms,共定时20次,即可完成1秒的定时功能。
5.C语言源程序
#include<
AT89X52.H>
unsignedcharcodedispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsignedchardispbuf[8]={0,0,0,0,0,0,10,10};
unsignedchartemp[8];
unsignedchardispcount;
unsignedcharT0count;
unsignedchartimecount;
bitflag;
unsignedlongx;
voidmain(void)
{
unsignedchari;
TMOD=0x15;
TH0=0;
TL0=0;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1;
while
(1)
if(flag==1)
flag=0;
x=T0count*65536+TH0*256+TL0;
for(i=0;
i<
8;
i++)
temp[i]=0;
}
i=0;
while(x/10)
temp[i]=x%10;
x=x/10;
i++;
temp[i]=x;
6;
dispbuf[i]=temp[i];
timecount=0;
T0count=0;
voidt0(void)interrupt1using0
T0count++;
voidt1(void)interrupt3using0
timecount++;
if(timecount==250)
TR0=0;
flag=1;
P0=dispcode[dispbuf[dispcount]];
P2=dispbit[dispcount];
dispcount++;
if(dispcount==8)
dispcount=0;
实例2.数字电压表
利用单片机AT89S51与ADC0809设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,但要求使用的元器件数目最少。
图1.28.1
a)把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
b)把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
c)把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。
d)把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
e)把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
f)把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
g)把“模数转换模块”区域中的A2A1A0端子用导线连接到“电源模块”区域中的GND端子上。
h)把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压模块”区域中的VR1端子上。
i)把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
i.由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。
因此产生CLK信号的方法就得用软件来产生了。
ii.由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。
实际显示的电压值 (D/256*VREF)
unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};
unsignedchargetdata;
unsignedinttemp;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
ST=0;
OE=0;
TMOD=0x12;
TH0=216;
TL0=216;
ST=1;
if(EOC==1)
OE=1;
getdata=P0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
dispbuf[i]=temp%10;
temp=temp/10;
dispbuf[i]=temp;
CLK=~CLK;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
P1=P1|0x80;
实例三.报警器
用AT89S51单片机产生“嘀、嘀、…”报警声从P1.0端口输出,产生频率为1KHz,根据上面图可知:
1KHZ方波从P1.0输出0.2秒,接着0.2秒从P1.0输出电平信号,如此循环下去,就形成我们所需的报警声了。
图4.18.1
3.系统板硬件连线
(1.把“单片机系统”区域中的P1.0端口用导线连接到“音频放大模块”区域中的SPKIN端口上,
(2.在“音频放大模块”区域中的SPKOUT端口上接上一个8欧或者是16欧的喇叭;
4.程序设计方法
(1.生活中我们常常到各种各样的报警声,例如“嘀、嘀、…”就是常见的一种声音报警声,但对于这种报警声,嘀0.2秒钟,然后断0.2秒钟,如此循环下去,假设嘀声的频率为1KHz,则报警声时序图如下图所示:
上述波形信号如何用单片机来产生呢?
(2.由于要产生上面的信号,我们把上面的信号分成两部分,一部分为1KHZ方波,占用时间为0.2秒;
另一部分为电平,也是占用0.2秒;
因此,我们利用单片机的定时/计数器T0作为定时,可以定时0.2秒;
同时,也要用单片机产生1KHZ的方波,对于1KHZ的方波信号周期为1ms,高电平占用0.5ms,低电平占用0.5ms,因此也采用定时器T0来完成0.5ms的定时;
最后,可以选定定时/计数器T0的定时时间为0.5ms,而要定时0.2秒则是0.5ms的400倍,也就是说以0.5ms定时400次就达到0.2秒的定时时间了。
5.程序框图
主程序框图
中断服务程序框图
图4.18.2
6.汇编源程序
T02SAEQU30H
T02SBEQU31H
FLAGBIT00H
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVT02SA,#00H
MOVT02SB,#00H
CLRFLAG
MOVTMOD,#01H
MOVTH0,#(65536-500)/256
MOVTL0,#(65536-500)MOD256
SETBTR0
SETBET0
SETBEA
SJMP$
INT_T0:
INCT02SA
MOVA,T02SA
CJNEA,#100,NEXT
INCT02SB
MOVA,T02SB
CJNEA,#04H,NEXT
MOVT02SA,#00H
CPLFLAG
NEXT:
JBFLAG,DONE
CPLP1.0
DONE:
RETI
END
7.C语言源程序
AT89X51.H>
unsignedintt02s;
unsignedchart05ms;
TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
while
(1);
t02s++;
if(t02s==400)
t02s=0;
flag=~flag;
if(flag==0)
P1_0=~P1_0;
四.小结
通过以上的实例可以看出51单片机的生活生产中的作用及其带来的便捷,从学习和想深入掌握单片机精髓的角度来说,还是需要熟练掌握汇编语言的使用。
从这次的报告中制作中,从各种文献中我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
单片机是一门应用性和实践性很强的学科,,感觉要学好单片机可不是一件容易的事,倒不是因为单片机很难学,而是进行实际应用。
学习使用单片机只能靠循序渐进的积累。
我会在今后的学习中多实践。