1、单片机课程设计报告1单片机原理及应用课程设计学院: 班级: 学号: 姓名: 指导老师: 日期: 单片机应用技术课程设计任务书设计题目远程温度采集系统设计任务及步骤使用proteus作为开发工具,完成双机通讯的温度采集功能:一、 使用LM20温度传感器、AD1674模数转换器、AT89C51单片机、4位拨码开关组成温度采集模块(从机),拨码开关用于设定模块的地址(00-15),从机在采集完温度信号后通过串口发送到主机;二、 使用AT89C51单片机、4位拨码开关、LED显示组成温度接收模块(主机),4位拨码开关用于设定通讯波特率(1200,2400,4800,9600)当主机波特率改变后,从机波
2、特率也自动改变,上电运行显示波特率信息(停3S),之后显示接收地址与温度信息;论文要求 画出整个系统的电路原理图; 叙述各功能模块的工作原理; 编写各模块程序; 论文中应附上程序流程图; 书写论文时注意结构合理,层次分明,在分析时注意语言的流畅。工作计划1 布置任务,查找资料 2 电路和程序设计 设计程序调试结果验收 论文答辩指导教师签 名 年 月 日系 意 见系主任签名: 年 月 日课程设计内容及步骤使用proteus作为开发工具,完成双机通讯的温度采集功能:1、 使用LM20温度传感器、AD1674模数转换器、AT89C51单片机、4位拨码开关组成温度采集模块(从机),拨码开关用于设定模块
3、的地址(00-15),从机在采集完温度信号(间隔5S)后通过串口发送到主机;2、 使用AT89C51单片机、4位拨码开关、LED显示组成温度接收模块(主机),4位拨码开关用于设定通讯波特率(1200,2400,4800,9600)当主机波特率改变后,从机波特率也自动改变,上电运行显示波特率信息(停3S),之后显示接收地址与温度信息。3、 扩展要求: 将其设计成:当定时器达到一定时间时,从机没有收到来自主机的信号,则从机“发光报警”。当遇到故障时,也会发光报警,即将从机上的RXD或TXD接按键开关,接地或是接电源作为模拟信号。收到主机的信号后,又能恢复正常。整个系统的电路原理图:各功能模块的工作
4、原理: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,1
5、2/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转换结果*
6、/uint AD1674_Read(void) uint temp; 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)从机接收主机发送
7、的波特率并且设置自己的波特率 主机发送波特率给从机,从机查询法判断是否接收到主机发送的波特率,如果接收到主机发送的波特率则改变自己的波特率,跳出循环来实现发送温度地址的发送,否则一直循环判断是否接收到主机发送的波特率。/设置波特率void set() uint temp=P0; temp=temp4; temp = temp&0x0f; if(temp=1) TMOD=0x21;/定时器为方式2,TMOD高四位控制 T1 TL1=0xF4;/时间常数初值 TH1=0xF4;/时间常数初值,波特率为1.2k PCON=0x00; /正常方式,SMOD=0,波特率为f/64 else if(tem
8、p=2) TMOD=0x21;/定时器为方式2 TL1=0xFA; TH1=0xFA;/波特率为2.4K PCON=0x00; else if(temp=4) TMOD=0x21;/定时器为方式2 TL1=0xFD; TH1=0xFD;/波特率为4.8K PCON=0x00; else if(temp=8) TMOD=0x21;/定时器为方式2 TL1=0xFD; TH1=0xFD;/波特率为9.6K PCON=0x80; /SMOD=1,波特率加倍 (3)拨码开关实现地址的变换 拨码开关接从机的P1口,然后改变拨码开关的值,P1口的数据变换,等待传送给主机。(4)定时器实现5秒间隔 定时器0
9、工作方式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)波
10、特率显示并且延时3s由P1口可以得到不同的值,从而用软件设定波特率(即设定定时器1的初值),不同的值存放在bote数组中用以数码管的显示。定时器T0实现定时功能,初值装(65536-50000)实现50ms的定时,num为定时次数,当num为60的时候定时到了3s,以后就不用显示波特率了,所以用m变量为1表示波特率显示结束,不再显示波特率。(3)温度、地址的接收和判断温度地址接收是用串口中断实现的。RI为1的时候表示一帧数据已经接收完了,所以就开始判断是温度的整数部分、小数部分、还是地址和正负标志位组成的数据。通信协议如上:if(temp 16) disnum4 = temp / 10;/求十
11、位 disnum5 = temp % 10;/求个位 else temp1 = (uint)(1.8528-temp*10.0/255)*(10000/11.79); HEXTOBCD(temp1); (4)数码管显示模块 数据存于disnum数组中,用8位数码管来显示温度、地址以及波特率。段选接主机的P0口,片选接主机的P2口。一开始显示波特率,就选中最后4位。然后就是要显示温度和地址的信息了。温度为-55130所以前面4位显示温度后2位显示地址即:XX.XXX。由于数码管是动态扫描的,所以要一定速度才可以实现视觉残留。看上去好像是一直点亮一样的。void display_led() uch
12、ar i; for(i = 0; i 8; i+) P2 = disbiti; /使用查表法进行位选 if(i != 2) P0 = tabledisnumi; else P0 = table1disnumi; delay(150); /扫描间隔时间 太长会数码管会有闪烁感 (5)系统报警定时器0实现定时功能,num1为报警的时间的计算,定时器是实现50ms的,所以要120才能实现6s。num1 = 120,那么判断一下flag(是否接收到传送过来的数据)如果flag = 0;说明没有接收到采集的数据,接着就报警,还要把num1和flag重新清0,实现下次的报警功能。 else m = 0;
13、if(num1 = 120) if(flag = 0) uchar t =8; while(t-) BEEP(); LED(); else flag = 0; num1 = 0; if(txd=0) flag=1; BEEP(); LED(); display_led(); 课程设计成果1、显示波特率 2、显示温度与地址 3、报警程序流程图:课程设计心得: 通过本次课程设计我学到了很多在课本上、课堂上难以学到的东西。这也验证了实践是检验真理的唯一标准。虽然大二的时候已经学过了C语言,但这与实际的单片机还是有点区别的。本次实验中,我没有用汇编编写程序,而是采用了C语言。 刚拿到实验内容的时候,我
14、的头脑一片空白,可以说对于这次的课程设计相当没有底。就比如AD1674,之前从未接触过,更别说将其连到电路中了,还有很多问题如何在程序中实现等问题。 于是,我只得先去查资料。首先是LM20,查看它的功能和作用。知道了他的转换公式。接着要用单片机采集的话,必须经过模数转换才可以实现,于是便开始AD1674芯片的学习了。这个芯片的理解还是比较麻烦的,花了将近1天时间才总算弄明白一点。之后,我又通过看书学习了串口怎么发送,怎么接收,怎么初始化,怎么设定波特率。问题很多,但是在同学们的帮助下,终于完成了从机发送采集到的数据给主机。接着便是改变地址,改变波特率,报警等等功能,这些功能的话,其实前面的弄懂后,这些都是比较容易实现的。好不容易将程序写好、弄懂后,迎来了老师的答辩时间。老师要求我们增加发光报警功能。刚拿到的时候,感觉挺简单的,但是要改,却又不知改哪里。最终在即将到时间的时候,我灵光一闪,成功实现了老师要求的内容。当时真的好开心,因为这是我凭自己的能力做出来的。在这次课程设计中
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1