课程设计论文单片机.docx
- 文档编号:4372739
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:24
- 大小:1.02MB
课程设计论文单片机.docx
《课程设计论文单片机.docx》由会员分享,可在线阅读,更多相关《课程设计论文单片机.docx(24页珍藏版)》请在冰豆网上搜索。
课程设计论文单片机
武夷学院
《单片机原理与应用》课程设计报告
温度显示器
院系:
机电工程学院
专业(班级):
11电子信息工程
(1)班
姓名:
xxx
学号:
xxx
指导教师:
xxx
职称:
助教
完成日期:
2013年12月20日
目录
1引言2
2设计原理3
2.1硬件原理介绍3
2.1.1DS18B20温度计3
2.1.2AT89C51单片机芯片4
3设计方案5
3.1AT89S51单片机5
3.2温度测量电路5
3.3蜂鸣器电路6
3.4独立式按键键盘电路6
3.5数码管显示电路7
3.6指示灯电路7
3.7电源指示电路8
3.8温度采集器整体电路8
4 设计方案9
5硬件电路设计10
5.1软件调试10
5.2硬件调试10
6结论11
7致谢12
参考文献12
附录A电路原理图13
附录B实物图14
附录C源程序15
温度采集器
1引言
温度测量控制系统在工业、农业及人们的日常生活中扮演着一个越来越重要的角色,它对人们的生活具有很大的影响,所以温度采集控制系统的设计与研究有十分重要的意义
本设计主要介绍了利用单片机AT89C51芯片和以美国MAXIM/DALLAS半导体公司的单总线温度传感器DS18B20相结合的方式来实现温度的采集,设计主要以AT89C51芯片为核心,辅以温度传感器DS18B20和四合一数码管显示器及必要的外围电路,从而构成一个一个结构简单、测温准确、具有一定控制功能的智能温度控制器。
同时增加温度报警功能,通过4个按键来设置温度的上下限值,当用DS18B20测得的温度不在所设置的温度范围内,蜂鸣器开始鸣报,如果温度超过设置上限时指示电路中红灯亮,如果温度低于温度下限时指示电路中绿灯亮。
2设计原理
2.1硬件原理介绍
2.1.1DS18B20温度计
DSl820数字温度计是美国Dallas公司生产的数字温度计,它提供9位(二进制)温度读数,指示器件的温度。
信息经过单线接口送入DSl8B20或从DSl8B20送出,因此从主机CPU到DSl8B20仅需一条线。
DSl820的电源可以由数据线本身提供而不需要外部电源。
因为每一个DSl820在出厂时已经给定了唯一的序号,因此任意多DSl820可以存放在同一条单线总线上。
这允许在许多不同的地方放置温度敏感器件。
DSl820的测量范围从-55到+125,增量值为0.5,可在ls(典型值)内把温度变换成数字,可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒。
每一个DSl820包括一个唯一的64位长的序号,该序号值存放在DSl820内部的ROM(只读存贮器)中。
开始8位是产品类型编码(DSl820编码均为10H)。
接着的48位是每个器件唯一的序号,最后8位是前面56位的CRC(循环冗余校验)码。
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。
DS18B20测温原理是低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。
高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。
计数器1和温度寄存器被预置在-55℃所对应的一个基数值。
计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。
2.1.2AT89C51单片机芯片
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4kbytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置
通用8位中央处理器(CPU)和Flash存储单
元,功能强大AT89C51单片机可为您提供许
多高性价比的应用场合,可灵活应用于各种
控制领域。
ATC9C51的引脚排列图如图2.1.2
主要参数如下:
图2.1.2AT89C51的引脚排列
·与MCS-51产品指令系统完全兼容
·4k字节可重擦写Flash闪速存储器
·1000次擦写周期
·全静态操作:
0Hz-24MHz
·三级加密程序存储器
·128×8字节内部RAM
·32个可编程I/O口线
·2个16位定时/计数器
·6个中断源·可编程串行UART通道
·低功耗空闲和掉电模
3设计方案
3.1AT89S51单片机
AT89S51单片机系统包括晶体振荡电路和电源部分。
图3.1.1为AT89S51单片机的最小系统。
图3.1AT89S51单片机的最小系统
3.2温度测量电路
温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器
测温范围为-55℃~125℃可编程为9位~12位A/D转换精度测温分辨率达到0.0625℃采用寄生电源工作方式CPU只需一根口线便能与DS18B20通信占用CPU口线少可节省大量引线和逻辑电路接口电路如图3.1.2所示。
图3.2温度测量电路
3.3蜂鸣器电路
声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的巨型波,通过三极管放大后驱动蜂鸣器工作。
图3.3蜂鸣器电路
3.4独立式按键键盘电路
独立按键电路每个按键之间相互独立,按键电路非常简单。
图3.4独立按键电路
3.5数码管显示电路
数码显示管用来显示温度大小,本实验用四合一7段数码显示管。
该数码管应用简单、可靠性高、成本低,作为显示输出。
图3.5数码管显示电路
3.6指示灯电路
在温度超多上限或低于下限的时候蜂鸣器响起,然后通过指示灯电路可以清晰的看出是超过上限或低于下限。
电路只用到LED灯和二极管,简便实惠易懂。
图3.6指示灯电路
3.7电源指示电路
指示灯电路用来测试电路是否通电,使用起来比较方便。
图3.7指示灯电路
3.8温度采集器整体电路
图3.8温度采集器整体电路
4 设计方案
电源
指示灯
数码管温度显示
DS18B20
AT89C51
º
蜂鸣器
-键
+键
确认键
调整键
图4-1 总体电路设计框图
作为本次设计的核心,所有的的电路系统都围绕AT89C51单片机组合。
它从DS18B20采集数据,传输给数码管显示,当温度超过设定上下限时蜂鸣器响起,同时指示灯亮。
5硬件电路设计
5.1软件调试
1、打开Keil软件后,在Project菜单中选择NewProject命令,打开一个新项目。
保存此项目,输入工程文件名后,并保存工程文件的目录。
2、为项目文件选择目标器件。
3、上述设置好后,创建源程序文件并输入程序代码。
输入好代码后点击“文件/保存”。
4、把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。
5、开始编译,对项目文件进行编译。
若没有错误后进行硬件调试。
5.2硬件调试
接通电路电源指示灯亮,可以观察到温度显示,如果温度没超过上下限,蜂鸣器不响报警指示灯不亮,通过按键调节上下限,如果温度超过上限报警指示红灯亮,同时蜂鸣器响,如果温度低于下限报警指示绿灯亮,同时蜂鸣器响。
6结论
经过一周的课程设计,我深刻的懂得了理论与实践相结合的重要性,很多时候你即使懂得知识,却不知道存在的客观因素也要注意,所以通过这次设计我一方面增加了自己的信心,另一方面也发现了自己的很多不足的地方。
知识就是力量,在设计过程中我一到不懂的地方,先通过不断的上网查资料,去图书馆查信息,通过对以往书本的重新学习,让我对以往所学过的知识有了个重新的认识。
然后一些灵活的问题,向老师提问,在此之间获得了很大的收获。
我一直认为我的动手与专业技术水平应该还是不错的,通过这次课程设计,我发现了很多同学的作品非常精美,正应了那句古老的话“强中更有强中手”,每一个人都不是弱者,在学习方面我逐渐有了攀比意识,我知道与别人攀比是不好的,但是在学习上,动手能力上与别人攀比则是好的,所以在以后的学习与实习中我更应该注重自己的动手能力,还有与别人的竞争意识。
未来的社会是一个竞争与机遇同时存在的社会,有了技术,有了能力,走到哪里都不怕,所以在学校我们都应该尽可能尽力的去学习更多的知识,去培养更大的能力,以便使我具有更大的竞争能力。
这次课程设计正是我们理论知识的一个实践,也是我们动手操作能力的一个提高。
希望通过这样的学习,更加促进我对学习的热情,更加有信心容入社会。
7致谢
此次单片机课程设计是在张淏老师的细心指导下完成的,老师治学严谨的态度,渊博的知识感染着我,是我学习的榜样,使我受益无穷。
在此,特向老师表达诚挚的谢意。
除此之外,在课程设计过程中,还得到了其他老师、学长等得细心指导和诸多帮助。
他们的无私帮助也是我得以完成本次课程设计的关键。
在此,我向他们表示由衷的感谢和深切的问候。
我还要感谢我的一些同学,他们在我最需要帮助的时候无私的伸出了援助之手。
在此,对于他们的无私帮助我表示深深的感谢。
真诚的感谢所有帮助过我的老师们和同学们。
参考文献
[1]何立民.单片机应用系统设计[M].北京:
北京航空航天大学出版社,1990:
34-35.
[2]徐惠民,安德宁.单片微型计算机原理接口及应用[M].北京:
北京邮电大学出版社,2000:
126-129.
[3]付晓光.单片机原理与应用技术[M].北京:
清华大学出版社,2004:
138-141.
[4]李维祥.MCS-51单片机原理与应用[M].天津:
天津大学出版社,2002:
55-56.
[5]李广弟,朱月秀,王秀山.单片机基础[M].北京:
北京航空航天大学出版社,2001:
44-47.
[6]沙占友,葛家怡,马洪涛.集成化智能传感器原理与应用[J].北京:
电子工业出版社,2004:
74-81.
[7]张伟.单片机原理及应用[M].北京:
机械工业出版社,2002:
174-180.
[8]李玉峰,倪虹霞.MCS-51系列单片机原理与接口技术[M].北京:
人民邮电出版社,2004:
128-129.
[9]李勋,刘源.单片机实用教程[M].北京:
北京航空航天大学出版社,2006:
11-12.
[10]陈光东.单片微型计算机原理与接口技术.武汉:
华中理工大学出版社,1999:
64-71.
附录A电路原理图
附录B实物图
正面
背面
附录C源程序
#include"main.h"
#defineledP0//数码管段选
sbits1=P1^0;sbits2=P1^1;sbits3=P1^2;sbits4=P1^3;//调整,+,-,确定,按下调整键进入上限设置,延时一小会自动进入下限设置
sbitred=P2^1;sbitgreen=P2^0;//上下限指示或者报警指示
sbitwei4=P2^7;sbitwei3=P2^6;sbitwei2=P2^5;sbitwei1=P2^4;//位选com4---com1
sbitalarm=P2^2;//蜂鸣器控制端
ucharcodedisplay[13]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0x7f};//数码管驱动信号0---9,-,灭,点
ucharbuf[4]={10,10,10,10};//数码管显示数据缓存,初始显示----高位---低位
uintdat;//温度数据缓存假设得到的是1234显示时123.4
ucharnum=0;//上下限调整标记,1上限,2下限
uintdown=5,up=25;//下上限初始值5℃----25℃,
externbitflag;//正负温度标记,0正,1负
voidmain()
{
uchari;
down*=10;up*=10;//扩大方便显示
dat=read_temperature();//读温度
delay1m(600);//等待转换,不让初始温度85℃显示
while
(1)
{
dat=read_temperature();//读温度
convert(dat);//转换数据
smg_scan();//显示
alarm_function();//报警
if(s1==0)
{
delay1m(3);
if(s1==0)
{
num++;alarm=1;//进入上下限设置要关蜂鸣器
while(!
s1);//等待按键弹起
}
}
if(num==1)//上限设置
{
convert(up);num=2;red=0;green=1;
do
{
smg_scan();
if(s2==0)//+
{
delay1m(3);
if(s2==0)
{
up++;
if(up>1200){up=250;}
while(!
s2);//等待按键弹起
convert(up);
}
}
elseif(s3==0)//-
{
delay1m(3);
if(s3==0)
{
up--;
if(up<=down){up=250;}
while(!
s3);//等待按键弹起
convert(up);
}
}
}while(s4);//确定
alarm=0;delay1m(500);alarm=1;red=1;//延时一小会蜂鸣器提示,进入下限设置
}
if(num==2)//下限设置
{
convert(down);num=0;green=0;red=1;
do
{
smg_scan();
if(s2==0)//+
{
delay1m(3);
if(s2==0)
{
down++;
if(down>=up){down=50;}
while(!
s2);//等待按键弹起
convert(down);
}
}
elseif(s3==0)//-
{
delay1m(3);
if(s3==0)
{
down--;
if(down<10){down=50;}
while(!
s3);//等待按键弹起
convert(down);
}
}
}while(s4);
for(i=0;i<2;i++)
{
alarm=0;delay1m(200);alarm=1;delay1m(200);
}
green=1;//上下限确定后蜂鸣器响两下
}
}
}
//===========================================数码管扫描显示函数==========================================================
voidsmg_scan()
{
wei4=wei3=wei2=1;wei1=0;//最低位
led=display[buf[3]];
delay1m(3);led=0xff;
wei4=wei3=wei1=1;wei2=0;//低位
led=display[buf[2]]&0x7f;//显示小数点
delay1m(3);led=0xff;
wei4=wei1=wei2=1;wei3=0;//次高位
led=display[buf[1]];
delay1m(3);led=0xff;
wei2=wei3=wei1=1;wei4=0;//高位
led=display[buf[0]];
delay1m
(2);led=0xff;
}
//===========================================ms级延时函数==================================================================
voiddelay1m(uintx)
{
uinti,j;
for(i=0;i for(j=0;j<120;j++);//数120次,约1ms } //==============================================数据转换函数========================================================== voidconvert(uintdat) { buf[0]=dat/1000; buf[1]=dat/100%10; buf[2]=dat/10%10; buf[3]=dat%10; if(flag==1)//如果温度为负 { buf[0]=10;//最高位显示【-】 if(buf[1]==0){buf[1]=11;}//如果此位为0,不显示 } elseif(flag==0)//如果温度为正 { if(buf[0]==0){buf[0]=11;}//如果最高位为0,不显示 if((buf[0]==11)&&(buf[1]==0)){buf[1]=11;}//如果最高位不显示,并且此位为0,那么不显示 } } //=================================================报警函数========================================================== voidalarm_function() { if(dat>up){alarm=0;red=0;}//大于上限,蜂鸣器响, elseif(dat else{alarm=1;red=green=1;}//否则蜂鸣器不响,灯灭掉 } 汇编程序 FLAG1BITF0;DS18B20存在标志位 FLAG2EQU27H DQBITP3.7 TEMPER_LEQU29H TEMPER_HEQU28H A_BITEQU35H B_BITEQU36H ;************程序起始******************** ORG0000H AJMPMAIN ORG0100H ;**************主程序开始************ MAIN: LCALLINIT_18B20 LCALLRE_CONFIG LCALLGET_TEMPER AJMPCHANGE ;**********DS18B20复位程序***************** INIT_18B20: SETBDQ NOP CLRDQ MOVR0,#0FBH TSR1: DJNZR0,TSR1;延时 SETBDQ MOVR0,#25H TSR2: JNBDQ,TSR3 DJNZR0,TSR2 TSR3: SETBFLAG1;置标志位,表明DS18B20存在 AJMPTSR5 TSR4: CLRFLAG1 LJMPTSR7 TSR5: MOVR0,#06BH TSR6: DJNZR0,TSR6 TSR7: SETBDQ;表明不存在 RET ;********************设定DS18B20暂存器设定值************** RE_CONFIG: JBFLAG1,RE_CONFIG1 RET RE_CONFIG1: MOVA,#0CCH;放跳过ROM命令 LCALLWRITE_18B20 MOVA,#4EH LCALLWRITE_18B20;写暂存器命令 MOVA,#00H;报警上限中写入00H LCALLWRITE_18B20 MOVA,#00H;报警下限中写入00H LCALLWRITE_18B20 MOVA,#1FH;选择九位温度分辨率 LCALLWRITE_18B20 RET ;*****************读转换后的温度值**************** GET_TEMPER: SETBDQ LCALLINIT_18B20 JBFLAG1,TSS2 RET;若不存在则返回 TSS2: MOVA,#0CCH;跳过ROM LCALLWRITE_18B20 MOVA,#44H;发出温度转换命令 LCALLWRITE_18B20 LCALLD1ms;延时 LCALLINIT_18B20 MOVA,#0CCH;跳过ROM LCALLWRITE_18B20 MOVA,#0BEH;发出读温度换命令 LCALLWRITE_18B20 LCALLREAD2_18B20;读两个字节的温度 RET ;***************写DS18B20程序************ WRITE_18B20: MOVR2,#8 CLRC WR1: CLRDQ MOVR3,#6 DJNZR3,$ RRCA MOVDQ,C MOVR3,#23 DJNZR3,$ SETBDQ NOP DJNZR2,WR1 SETBDQ RET ;***********读18B20程序,读出两个字节的温度********* READ2_18B20: MOVR4,#2 MOVR1,#29H;低位存在29H,高位存在28H RE00: MOVR2,#8 RE01: CLRC SETBC NOP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 单片机