单片机课程设计Word文档格式.docx
《单片机课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机课程设计Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
附录
5.1程序·
5.2元器件清单·
20
引言
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
目前甲型H1N1流感肆虐,为了把好关需对流动人口进行体温检测由于温度传感器ds18b20具有独特的单线接口仅需要一个端口进行引脚通信可实现多点组网功能,0待机功耗,电压范围仅为3.0——5.5v而且具有读数方便测温范围广,测温准确的特点,最主要时可定义报警设置,报警搜索命令识别并标志超过程序先顶温度(温度报警条件),那么只要检测温度超过设定的正常人体温就会报警,这样就能更有效的防治流感扩散。
出于对此类问题的探索我们通过上网查询有关资料做了本设计。
1.1设计要求
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用4位共阴极LED数码管实现温度显示,能准确达到以上要求。
1.2总体设计方案
1.2.1数字温度计设计方案论证
1.2.2方案一
由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。
1.2.3方案二
进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。
从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。
1.3方案二的总体设计框图
温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用2位LED数码管以并口传送数据实现温度显示。
图1总体设计方框图
2.1.单片机接口电路与DS18B20温度传感器
AT89C51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4K的可编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片机芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
主要性能参数:
●与MCS-51产品指令系统完全兼容
●4K字节在系统编程(ISP)Flash闪速存储器
●1000次擦写周期
●4.0-5.5V的工作电压范围
●全静态工作模式:
0HZ-33MHZ
●三级程序加密锁
●128*8字节内部RAM
●32个可编程I/O口线
●2个16位定时/计数器
●6个中断源
●全双工串行UART通道
●低功耗空闲和掉电模式
●中断可从空闲模式唤醒系统
●看门狗(WDT)及双数据指针
●掉电标示和快速编程特性
●灵活的在系统编程(ISP-字节或页写模式)
功能特性概述:
AT89S51提供以下标准功能:
4K字节闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89S51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中到内容,但振荡器停止工作并禁止其它所有工作部件直到下一个硬件复位。
DS18B20温度传感器
DALLAS最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。
DALLAS半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传感器。
温度测量范围为-55~+125摄氏度,可编程为9位~12位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
被测温度用符号扩展的16位数字量方式串行输出;
其工作电源既可以在远端引入,也可以采用寄生电源方式产生;
多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
DS18B20的性能特点如下:
●独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯
●DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温
●DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内
●适应电压范围更宽,电压范围:
3.0~5.5V,在寄生电源方式下可由数据线供电
●温范围-55℃~+125℃,在-10~+85℃时精度为±
0.5℃
●零待机功耗
●可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温
●在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快
●用户可定义报警设置
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件
●测量结果直接输出数字温度信号,以"
一线总线"
串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作
以上特点使DS18B20非常适用与多点、远距离温度检测系统。
DS18B20内部结构主要由四部分组成:
64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
DS18B20的管脚排列、各种封装形式如图4所示,DQ为数据输入/输出引脚。
开漏单总线接口引脚。
当被用着在寄生电源下,也可以向器件提供电源;
GND为地信号;
VDD为可选择的VDD引脚。
当工作于寄生电源时,此引脚必须接地。
其电路图5所示.。
图4外部封装形式图5传感器电路图
2.DS18B20使用中的注意事项
DS18B20虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
●DS18B20从测温结束到将温度值转换成数字量需要一定的转换时间,这是必须保证的,不然会出现转换错误的现象,使温度输出总是显示85。
●在实际使用中发现,应使电源电压保持在5V左右,若电源电压过低,会使所测得的温度精度降低。
●较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。
在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
●在DS18B20的有关资料中均未提及单总线上所挂DS18B20数量问题,容易使人误认为可以挂任意多个DS18B20,在实际应用中并非如此,当单总线上所挂DS18B20超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
●在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序进入死循环,这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。
3.DS18B20内部结构
图为DS1820的内部框图,它主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器(内含便笺式RAM),用于存储用户设定的温度上下限值的TH和TL触发器存储与控制逻辑、8位循环冗余校验码(CRC)发生器等七部分。
DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图6所示
图6DS18B20内部结构框图
64b闪速ROM的结构如下:
8bit检验CRC
48bit序列号
8bit工厂代码(10H)
MSBLSBMSBLSBMSBLSB
开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。
温度报警触发器TH和TL,可通过软件写入户报警上下限。
主机操作ROM的命令有五种,如表所列
DS18B20温度传感器的内部存储器
还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。
高速暂存RAM的结构为8字节的存储器,结构如图7所示。
便笺式存储器(上电状态)
温度测量值LSB(50H)
温度测量值MSB(50H
TH高温寄存器
TL低温寄存器
配位寄存器
预留(FFH)
预留(OCH)
预留(IOH)
循环冗余码校验(CRC)
E2PROM
(85℃)
Byte0
Byte1
Byte2
Byte3
Byte4
Byte5
Byte6
Byte7
Byte8
图7高速暂存RAM结构图
前2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。
第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。
DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。
温度低位
温度高位
TH
TL
配置
保留
8位CRC
LSBMSB
当DS18B20接收到温度转换命令后,开始启动转换。
转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1,2字节。
单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式以0.0625℃/LSB形式表示。
温度值格式如下:
23
22
21
2-1
2-2
2-3
2-4
MSBLSB
S
26
25
24
MSBLSB
这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;
如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。
图中,S表示位。
对应的温度计算:
当符号位S=0时,表示测得的温度植为正值,直接将二进制位转换为十进制;
当S=1时,表示测得的温度植为负值,先将补码变换为原码,再计算十进制值。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
DS18B20温度传感器主要用于对温度进行测量,数据可用16位符号扩展的二进制补码读数形式提供,并以0.0625℃/LSB形式表示。
DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较,若T>
TH或T<
TL,则将该器件内的告警标志置位,并对主机发出的告警搜索命令作出响应。
因此,可用多只DS18B20同时测量温度并进行告警搜索。
在64位ROM的最高有效字节中存储有循环冗余校验码(CRC)。
主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。
2.2.7位LED数码管电路及原理
数码管又称LED数码管,它是由7段或8段LED构成的显示器件。
有共阴极和共阳极两种。
从P1口输出待显示的数据。
(1)单片机的IO口的驱动能力有限,所以此例我们选用了大功率晶体管驱动电路,即图中的两个NPN三极管,单片机通过控制它们的通断来达到控制位码的目的。
(2)关于数码管,此例我们选用了2位的共阳极数码管7SEG-MPX2-CA,这样可以方便我们连线和使用。
而且由于我们的例子中没有用到小数点(DP),所以为了简便在图中我们没有连接P2.7和DP引脚。
当然,如果你连接好这个引脚,仿真结果不会受到任何影响,因为在段码表中,P2.7引脚一直输出的都是高电平,也就是说小数点一直处于熄灭状态。
2.3.系统整体硬件电路
3系统软件算法分析
系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。
3.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。
这样可以在一秒之内测量一次被测温度,其程序流程见图8所示。
图8程序流程图
3.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。
其程序流程图如图9所示
3.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约为750ms,在本程序设计中采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如上图,图9所示
3.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图10所示。
4.实验调试及测试结果分析
心得体会
整个设计通过了软件和硬件上的调试。
我想这对于自己以后的学习和工作都会有很大的帮助。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于温度报警系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。
因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。
这次课程设计让我充分认识到团队合作的重要性,我们觉得设计的过程相当重要,学到了很多,收获了很多。
我觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
参考文献:
1 李朝青.单片机原理及接口技术(第三版).杭州:
北京航空航天大学出版社2006
2 余孟尝.数字电子技术基础(第三版).北京:
高等教育出版社,2006
3 廖常初.现场总线概述[J].电工技术,1999
附:
5.1程序
ORG0000H
LJMPSTART
ORG0003H
LJMPJIA
ORG0013H
LJMPJIAN
ORG0030H
FLAG1BITF0;
DS18B20存在标志位
DQBITP2.2
TEMPER_LEQU29H
TEMPER_HEQU28H
A_BITEQU35H
B_BITEQU36H
START:
MOVIE,#85H
MOV30H,#30
shezhi:
MOVR1,#30H
acalldisplay
MOVP2,#0FFH
mova,p2
movc,acc.0
jncshezhi
ljmpmain
DISPLAY:
MOVA,@R1;
将29H中的十六进制数转换成10进制
MOVB,#10;
10进制/10=10进制
DIVAB
MOVB_BIT,A;
十位在A
MOVA_BIT,B;
个位在B
MOVDPTR,#tab;
指定查表启始地址
SETBP3.7;
选中第一个数码管
MOVA,A_BIT;
取个位数
MOVCA,@A+DPTR;
查个位数的7段代码
MOVP1,A;
送出个位的7段代码
LCALLDELAY;
调用延时
CLRP3.7
SETBP3.6;
选中第二个数码管
MOVA,B_BIT;
取十位数
查十位数的7段代码
送出十位的7段代码
LCALLDELAY
CLRP3.6
RET
JIA:
jcout
INC@R1
out:
RETI
JIAN:
jcout1
DEC@R1
out1:
DELAY:
;
延时子程序
MOVR5,#120
NOP
D1:
MOVR6,#100
D2:
DJNZR6,D2
DJNZR5,D1
;
**************主程序开始************
MAIN:
LCALLINIT_18B20
LCALLRE_CONFIG
LCALLGET_TEMPER
lJMPCHANGE
**********DS18B20复位程序*****************
INIT_18B20:
SETBDQ
NOP
CLRDQ
MOVR0,#0FBH
TSR1:
DJNZR0,TSR1;
延时
MOVR0,#25H
TSR2:
JNBDQ,TSR3
DJNZR0,TSR2
TSR3:
SETBFLAG1;
置标志位,表明DS18B20存在
CLRP0.5;
二极管指示
AJMPTSR5
TSR4:
CLRFLAG1
LJMPTSR7
TSR5:
MOVR0,#0