公共单片机课程设计.docx
- 文档编号:14724998
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:15
- 大小:132.17KB
公共单片机课程设计.docx
《公共单片机课程设计.docx》由会员分享,可在线阅读,更多相关《公共单片机课程设计.docx(15页珍藏版)》请在冰点文库上搜索。
公共单片机课程设计
单片机课程设计
课程:
单片机实验
题目:
单片机数字显示温度计
院系:
电子信息工程系
专业年级:
电子0922
姓名:
王能仁、代硕、张鹏
学号:
09147810、0914781068、0914781069
指导教师:
邹崇涛
2012年1月01日
摘要:
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。
关键词:
单片机,数字控制,温度计,DS18B20,AT89S51
1引言
随着现代信息技术的飞速发展和传统工业改造的逐步实现.能够独立工作的温度检测和显示系统应用于诸多领域。
传统的温度检测以热敏电阻为温度敏感元件。
热敏电阻的成本低,但需后续信号处理电路,而且可靠性相对较差,测温准确度低,检测系统也有一定的误差。
与传统的温度计相比,这里设计的数字温度计具有读数方便,测温范围广,测温精确,数字显示,适用范围宽等特点。
选用STC89C52单片机作为主控制器件,DSl8B20作为测温传感器通过LCD1602并行传送数据,实现温度显示。
通过DSl8B20直接读取被测温度值,进行数据转换,该器件的物理化学性能稳定,线性度较好,在-55℃~125℃最大线性偏差小于0.1℃。
该器件可直接向单片机传输数字信号,便于单片机处理及控制。
另外,该温度计还能直接采用测温器件测量温度,从而简化数据传输与处理过程。
目录
一.问题描述-----------------------------------------2
二.实验原理-----------------------------------------2
三.源程序-------------------------------------------3
四.数据测试----------------------------------------5
五.调试分析----------------------------------------5
六.用户使用手册------------------------------------5
七.心得体会----------------------------------------6
一、设计实现的目标
1)测温基本范围-55℃~99℃。
2)测温精度误差小于或等于0.5℃。
3)数码管显示实时温度。
4)含有复位功能。
二、数字温度计设计方案论证
2.1.1方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
2.1.2方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
二、实验原理
方案二的总体设计框图
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用4位LED数码管以串口传送数据实现温度显示。
图1 总体设计方框图
1、控制电路
1.1主控制器
MCU简介
CPU是整个控制部分的核心。
在考虑经济性和满足需求的前提下,本系统选用宏晶公司生产的8位STC89C52单片机作为整个系统的控制中心。
STC89C52是宏晶公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用宏晶公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚,它集Flash存储器既可在线编辑(ISP)也可用传统方法进行编辑及通用8位微处理器于单片芯片中,功能强大STC89C52单片机可为您提供许多高性价比的应用场合。
器管脚图如图3-2:
图3-1STC89C52管脚图
在本系统中,STC89C52单片机内部的功能单元已经能够满足系统设计需要,不需要系统扩展。
STC89C52具有以下的特点:
●8031CPU与MCS-51兼容
●寿命:
1000写/擦循环
●4K字节可编程FLASH存储器
●全静态工作:
0--24MHz
●三级程序存储器保密锁定
●128*8位内部RAM
●32条可编程I/O线
●两个16位定时器/计数器
●6个中断源
●可编程串行通道
●低功耗的闲置和掉电模式
●片内振荡器和时钟
1.2显示电路
显示电路采用4位共阳LED数码管,从P0口RXD,TXD串口输出段码。
1.3温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
温度传感器DS18B20引脚如图3-4所示。
图3-3DS18B20TO-92封装温度传感器
引脚功能说明:
VDD:
可选电源脚,电源电压范围3~5.5V。
当工作于寄生电源时,此引脚必须接地。
DQ:
数据输入/输出脚。
漏极开路,常态下高电平。
GND:
为电源地
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
2.1温度传感器与单片机的连接
温度传感器的单总线(1-Wire)与单片机的P2.0连接,P2.0是单片机的高位地址线A8。
P2端口是一个带内部上拉电阻的8位双向I/O,其输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对该端口写“1”,可通过内部上拉电阻将其端口拉至高电平,此时可作为输入口使用,这是因为内部存在上拉电阻,某一引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器时。
如执行MOVXDPTR指令,则表示P2端口送出高8位的地址数据。
在访问8位地址的外部数据存储器时,可执行MOVXRI指令,P2端口内容即为特殊功能寄存器(SFR)区中R2寄存器内容,整个访问期间不改变。
在Flash编程和程序校验时,P2端口也接收高位地址和其他控制信号。
图3-5为DSl8820内部结构。
图3-6为DSl8820与单片机的接口电路。
图3-5DS18B20和单片机的接口连接
2.2复位信号及外部复位电路
单片机的P1.6端口是MAX813看门狗电路中喂狗信号的输入端,即单片机每执行一次程序就设置一次喂狗信号,清零看门狗器件。
若程序出现异常,单片机引脚RST将出现两个机器周期以上的高电平,使其复位。
该复位信号高电平有效,其有效时间应持续24个振荡脉冲周期即两个机器周期以上。
若使用频率为12MHz的晶体振荡器,则复位信号持续时间应超过2μs才完成复位操作。
图3-6复位电路
3系统软件算法分析
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
3.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。
图7主程序流程图图8读温度流程图
S(t)
三、源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitDQ=P1^0;
union
{
ucharc[2];
uintx;
}temp;
ucharflag;
uintcc,xs;
uchardisbuffer[4];
voiddelay(uinti)
{
uintj;
for(j=i;i>0;j++);
}
ucharow_reset(void)
{
ucharreset;
DQ=0;
delay(50);
DQ=1;
delay(3);
reset=DQ;
delay(25);
return(reset);
}
ucharread_byte(void)
{
uchari;
ucharvalue=0;
for(i=8;i>0;i--)
{
value>>=1;
DQ=0;
DQ=1;
delay
(1);
if(DQ)value|=0x80;
delay(6);
}
return(value);
}
voidwrite_byte(ucharval)
{
uchari;
for(i=8;i>0;i--)
{
DQ=0;
DQ=val&0x01;
delay(5);
DQ=1;
val=val/2;
}
delay(5);
}
voidinitds18b20(void)
{
ow_reset();
write_byte(0xCC);
write_byte(0x4E);
write_byte(0x00);
write_byte(0x00);
write_byte(0x7f);
}
voidRead_Temperature(void)
{
ow_reset();
write_byte(0xCC);
write_byte(0x44);
ow_reset();
write_byte(0xCC);
write_byte(0xBE);
temp.c[1]=read_byte();
temp.c[0]=read_byte();
}
voidTemperature_cov(void)
{
if(temp.c[0]>0xf8){flag=1;temp.x=~temp.x+1;}
cc=temp.x/16;
xs=temp.x&0x0f;
xs=xs*10;
xs=xs/16;
}
voiddisplay(void)
{
ucharcodevalue[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xal,0x86,0x8e,0xff,0xbf};
ucharchocode[]={0xf7,0xfb,0xfd,0xfe};
uchari=0,p,t;
if(flag==1)disbuffer[3]=0x11;
elsedisbuffer[3]=0x10;
disbuffer[0]=xs;
disbuffer[1]=(cc%10);disbuffer[2]=(cc/10);
for(i=0;i<4;i++)
{
t=chocode[i];
P2=t;
p=disbuffer[i];
t=codevalue[p];
if(i==1)t=t+0x80;
P0=t;
delay(40);
}
P2=0xFF;
}
voidmain()
{
delay(10);
EA=0;
flag=0;
initds18b20();
while
(1)
{
flag=0;
Read_Temperature();
Temperature_cov();
display();
display();
display();
display();
}
}
四、测试数据
}5数据测试
用手触屏温度传感器,可以发现温度大概显示为32度左右。
将温度传感器与塑料袋装的冰水混合物接触,观察液晶显示的温度是否为零度。
五、调试分析
调试,要的就是耐性,毅力外加细心。
看似完美无缺的电路板,检查了之后却是漏洞百出,断线的,虚焊的。
不过这些都不是大问题,有了多次电路设计经验后这些故障很快就解决了。
接下来最棘手的应该是软件编程了。
编程向来都是我的软肋,不过还好,在广大网友的支持下,最后还是搞定了。
4总结与体会
经过将近三周的单片机课程设计,终于完成了我的数字温度计的设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计把实物都做了出来,高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但这次设计真的让我长进了很多,单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,举个例子,以前写的那几次,数据加减时,我用的都是BCD码,这一次,我全部用的都是16进制的数直接加减,显示处理时在用除法去删分,感觉效果比较好,有好多的东西,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
参考文献
[1] 李朝青.单片机原理及接口技术(简明修订版).杭州:
北京航空航天大学出版社,1998
[2] 李广弟.单片机基础[M].北京:
北京航空航天大学出版社,1994
[3] 阎石.数字电子技术基础(第三版).北京:
高等教育出版社,1989
[4] 廖常初.现场总线概述[J].电工技术,1999.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 公共 单片机 课程设计