单片机课程设计报告1.docx

上传人:b****4 文档编号:2996832 上传时间:2022-11-17 格式:DOCX 页数:24 大小:322.33KB
下载 相关 举报
单片机课程设计报告1.docx_第1页
第1页 / 共24页
单片机课程设计报告1.docx_第2页
第2页 / 共24页
单片机课程设计报告1.docx_第3页
第3页 / 共24页
单片机课程设计报告1.docx_第4页
第4页 / 共24页
单片机课程设计报告1.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告1.docx

《单片机课程设计报告1.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告1.docx(24页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告1.docx

单片机课程设计报告1

单片机原理及应用

课程设计

 

学院:

班级:

学号:

姓名:

指导老师:

日期:

 

单片机应用技术课程设计任务书

设计题目

远程温度采集系统

设计任务及步骤

使用proteus作为开发工具,完成双机通讯的温度采集功能:

一、使用LM20温度传感器、AD1674模数转换器、AT89C51单片机、4位拨码开关组成温度采集模块(从机),拨码开关用于设定模块的地址(00-15),从机在采集完温度信号后通过串口发送到主机;

二、使用AT89C51单片机、4位拨码开关、LED显示组成温度接收模块(主机),4位拨码开关用于设定通讯波特率(1200,2400,4800,9600)当主机波特率改变后,从机波特率也自动改变,上电运行显示波特率信息(停3S),之后显示接收地址与温度信息;

论文要求

①画出整个系统的电路原理图;

②叙述各功能模块的工作原理;

③编写各模块程序;

④论文中应附上程序流程图;

⑤书写论文时注意结构合理,层次分明,在分析时注意语言的流畅。

工作计划

1布置任务,查找资料

2电路和程序设计

③设计程序调试结果验收

④论文答辩

指导教师

签名

年月日

系意见

 

系主任签名:

年月日

 

课程设计内容及步骤

使用proteus作为开发工具,完成双机通讯的温度采集功能:

1、使用LM20温度传感器、AD1674模数转换器、AT89C51单片机、4位拨码开关组成温度采集模块(从机),拨码开关用于设定模块的地址(00-15),从机在采集完温度信号(间隔5S)后通过串口发送到主机;

2、使用AT89C51单片机、4位拨码开关、LED显示组成温度接收模块(主机),4位拨码开关用于设定通讯波特率(1200,2400,4800,9600)当主机波特率改变后,从机波特率也自动改变,上电运行显示波特率信息(停3S),之后显示接收地址与温度信息。

3、扩展要求:

将其设计成:

当定时器达到一定时间时,从机没有收到来自主机的信号,则从机“发光报警”。

当遇到故障时,也会发光报警,即将从机上的RXD或TXD接按键开关,接地或是接电源作为模拟信号。

收到主机的信号后,又能恢复正常。

整个系统的电路原理图:

各功能模块的工作原理:

1、温度采集模块

使用LM20温度传感器、AD1674模数转换器、AT89C51单片机、4位拨码开关组成温度采集模块(从机),拨码开关用于设定模块的地址(00-15),从机在采集完温度信号(间隔5S)后通过串口发送到主机;

(1)LM20经AD1674转换为12位数据给从机

LM20温度传感器经过电压跟随器后输入到AD1674的10VIN口,AD1674组成双峰。

STS、CS、A0、CE、RC分别接到从机的P0-P4口实现AD1674的控制作用。

一开始CE=1,CS=0,RC=0,A0=0启动12位温度转换,然后等待数据采集结束while(STS==1);接着CE=1,CS=0,RC=1,12/8=1,A0=0允许高八位数据并行输出,最后CE=1,CS=0,RC=1,12/8=0,A0=1允许低四位数据并行输出。

读出的12位数据存放在变量temp中。

经过AD1674转换后输出的结果精确到(10.0/4095.0)。

若LM20温度转换为电压值是1.13598v时,经过AD1674转换后输出的12位数为1.13598*4095/10=465转换为2进制为000111010001。

12位数据经过公式转换T=(1.8525-temp*10/4095.0)*10000/11.79.然后把低位小数位给temp1,temp就为整数部分,接着就是等待发送给主机。

/*读取AD1674转换结果*/

uintAD1674_Read(void)

{

uinttemp;

CS=1;

CE=0;//初始化,关闭数据采集

CS=0;

A0=1;

RC=0;

CE=1;//CE=1,CS1=0,RC=0,A0=0启动8位温度转换

_nop_();

while(STS==1);//等待数据采集结束

CE=0;//芯片使能关闭

RC=1;

A0=0;

CE=1;//CE=1,CS1=0,RC=1,12/8=1,A0=0允许高八位数据并行输出

_nop_();

temp=P1;//读取转换结果的低八位

return(temp);//返回转换结果

}

(2)从机接收主机发送的波特率并且设置自己的波特率

主机发送波特率给从机,从机查询法判断是否接收到主机发送的波特率,如果接收到主机发送的波特率则改变自己的波特率,跳出循环来实现发送温度地址的发送,否则一直循环判断是否接收到主机发送的波特率。

//设置波特率

voidset()

{

uinttemp=P0;

temp=temp>>4;

temp=temp&0x0f;

if(temp==1)

{

TMOD=0x21;//定时器为方式2,TMOD高四位控制T1

TL1=0xF4;//时间常数初值

TH1=0xF4;//时间常数初值,波特率为1.2k

PCON=0x00;//正常方式,SMOD=0,波特率为f/64

}

elseif(temp==2)

{

TMOD=0x21;//定时器为方式2

TL1=0xFA;

TH1=0xFA;//波特率为2.4K

PCON=0x00;

}

elseif(temp==4)

{

TMOD=0x21;//定时器为方式2

TL1=0xFD;

TH1=0xFD;//波特率为4.8K

PCON=0x00;

}

elseif(temp==8)

{

TMOD=0x21;//定时器为方式2

TL1=0xFD;

TH1=0xFD;//波特率为9.6K

PCON=0x80;//SMOD=1,波特率加倍

}

}

(3)拨码开关实现地址的变换

拨码开关接从机的P1口,然后改变拨码开关的值,P1口的数据变换,等待传送给主机。

(4)定时器实现5秒间隔

定时器0工作方式1,初值装(65536-50000)实现50ms的定时,num为定时次数,当num=100时,定时为5s的间隔。

2、温度接收模块

使用AT89C51单片机、4位拨码开关、LED显示组成温度接收模块(主机),4位拨码开关用于设定通讯波特率(1200,2400,4800,9600)当主机波特率改变后,从机波特率也自动改变,上电运行显示波特率信息(停3S),之后显示接收地址与温度信息。

(1)波特率设定及发送

拨码开关接主机的P1口,用于设定主机的波特率。

P1口的数据分别为1、2、4、8时的波特率为1200、2400、4800、9600。

然后发送给从机波特率,接着自己的波特率也随之改变。

(2)波特率显示并且延时3s

由P1口可以得到不同的值,从而用软件设定波特率(即设定定时器1的初值),不同的值存放在bote[]数组中用以数码管的显示。

定时器T0实现定时功能,初值装(65536-50000)实现50ms的定时,num为定时次数,当num为60的时候定时到了3s,以后就不用显示波特率了,所以用m变量为1表示波特率显示结束,不再显示波特率。

(3)温度、地址的接收和判断

温度地址接收是用串口中断实现的。

RI为1的时候表示一帧数据已经接收完了,所以就开始判断是温度的整数部分、小数部分、还是地址和正负标志位组成的数据。

通信协议如上:

if(temp<16)

{

disnum[4]=temp/10;//求十位

disnum[5]=temp%10;//求个位

}

else

{

temp1=(uint)((1.8528-temp*10.0/255)*(10000/11.79));

HEXTOBCD(temp1);

}

(4)数码管显示模块

数据存于disnum数组中,用8位数码管来显示温度、地址以及波特率。

段选接主机的P0口,片选接主机的P2口。

一开始显示波特率,就选中最后4位。

然后就是要显示温度和地址的信息了。

温度为-55—130所以前面4位显示温度后2位显示地址即:

XX.X—XX。

由于数码管是动态扫描的,所以要一定速度才可以实现视觉残留。

看上去好像是一直点亮一样的。

voiddisplay_led()

{

uchari;

for(i=0;i<8;i++)

{

P2=disbit[i];//使用查表法进行位选

if(i!

=2)

P0=table[disnum[i]];

else

P0=table1[disnum[i]];

delay(150);//扫描间隔时间太长会数码管会有闪烁感

}

}

(5)系统报警

定时器0实现定时功能,num1为报警的时间的计算,定时器是实现50ms的,所以要120才能实现6s。

num1=120,那么判断一下flag(是否接收到传送过来的数据)如果flag=0;说明没有接收到采集的数据,接着就报警,还要把num1和flag重新清0,实现下次的报警功能。

else

{

m=0;

if(num1==120)

{

if(flag==0)

{

uchart=8;

while(t--)

BEEP();

LED();

}

else

flag=0;

num1=0;

}

if(txd==0)

{

flag=1;

BEEP();

LED();

}

display_led();

}

课程设计成果

1、显示波特率

2、显示温度与地址

3、报警

 

程序流程图:

 

课程设计心得:

通过本次课程设计我学到了很多在课本上、课堂上难以学到的东西。

这也验证了实践是检验真理的唯一标准。

虽然大二的时候已经学过了C语言,但这与实际的单片机还是有点区别的。

本次实验中,我没有用汇编编写程序,而是采用了C语言。

刚拿到实验内容的时候,我的头脑一片空白,可以说对于这次的课程设计相当没有底。

就比如AD1674,之前从未接触过,更别说将其连到电路中了,还有很多问题如何在程序中实现等问题。

于是,我只得先去查资料。

首先是LM20,查看它的功能和作用。

知道了他的转换公式。

接着要用单片机采集的话,必须经过模数转换才可以实现,于是便开始AD1674芯片的学习了。

这个芯片的理解还是比较麻烦的,花了将近1天时间才总算弄明白一点。

之后,我又通过看书学习了串口怎么发送,怎么接收,怎么初始化,怎么设定波特率。

问题很多,但是在同学们的帮助下,终于完成了从机发送采集到的数据给主机。

接着便是改变地址,改变波特率,报警等等功能,这些功能的话,其实前面的弄懂后,这些都是比较容易实现的。

好不容易将程序写好、弄懂后,迎来了老师的答辩时间。

老师要求我们增加发光报警功能。

刚拿到的时候,感觉挺简单的,但是要改,却又不知改哪里。

最终在即将到时间的时候,我灵光一闪,成功实现了老师要求的内容。

当时真的好开心,因为这是我凭自己的能力做出来的。

在这次课程设计中

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

当前位置:首页 > 农林牧渔 > 林学

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

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