单片机实训可调电子钟温控系统报告Word格式文档下载.docx
《单片机实训可调电子钟温控系统报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机实训可调电子钟温控系统报告Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
温度传感器
PNP:
PNP型三极管RES:
电阻SOUNDER:
蜂鸣器
注:
因为Proteus中,三极管无法仿真,所以仿真原理图中没有加三极管,在实际电路中蜂鸣器和LED加三极管驱动电路。
原件说明:
1、DS18B20芯片介绍DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统。
(1)、DS18B20外形及引脚说明
图1-2DS18B20外形及引脚图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:
(a)GND:
地;
(b)DQ:
单线运用的数据输入输出引脚;
(c)VDD:
可选的电源引脚。
(2)、DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
DS18B20内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位。
在计数器2停止计数后,比较器将计数器1中的计数剩余值转换为温度值后与0.25℃进行比较,若低于0.25℃,温度寄存器的最低位就置0;
若高于0.25℃,最低位就置1;
若高于0.75℃时,温度寄存器的最低位就进位然后置0。
这样,经过比较后所得的温度寄存器的值就是最终读取的温度值了,其最后位代表0.5℃,四舍五入最大量化误差为±
1/2LSB,即0.25℃。
温度寄存器中的温度值以9位数据格式表示,最高位为符号位,其余8位以二进制补码形式表示温度值。
测温结束时,这9位数据转存到暂存存储器的前两个字节中,符号位占用第一字节,8位温度数据占据第二字节。
DS18B20测量温度时使用特有的温度测量技术。
DS18B20内部的低温度系数振荡器能产生稳定的频率信号;
同样的,高温度系数振荡器则将被测温度转换成频率信号。
当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。
芯片内部还有斜率累加器,可对频率的非线性度加以补偿。
测量结果存入温度寄存器中。
一般情况下的温度值应该为9位,但因符号位扩展成高8位,所以最后以16位补码形式读出。
2、STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口,内置4KBEEPROM,MAX810复位电路,3个16位定时/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
[1]
各引脚的标注,利于自制元件库
STC89C52RC单片机:
8K字节程序存储空间;
512字节数据存储空间;
内带2K字节EEPROM存储空间;
可直接使用串口下载;
AT89S52单片机:
256字节数据存储空间;
没有内带EEPROM存储空间;
参数
1.增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[2]
2.工作电压:
5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
3.工作频率范围:
0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz
4.用户应用程序空间为8K字节
5.片上集成512字节RAM
6.通用I/O口(32个),复位后为:
P0/P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片
8.具有EEPROM功能
9.共3个16位定时器/计数器。
即定时器T0、T1、T2
10.外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒
11.通用异步串行口(UART),还可用定时器软件实现多个UART
12.工作温度范围:
-40~+85℃(工业级)/0~75℃(商业级)
13.PDIP封装
五、实训任务
1.在Proteus环境下建立原理图。
2.在Keil环境下编写程序实现电子钟和温度显示。
3.系统功能要求:
(1)使用四位LED数码管显示器实现小时、分钟显示,小时和分钟之间用小数点隔开,秒的显示利用最后一位数字的小数点代表秒。
小时调整使用按键K1实现,分钟调整使用按键K2实现。
当K3按下时显示DS18B20所测温度。
其他附加功能不限。
(2)扩展功能:
在完成功能
(1)的基础上可利用蜂鸣器实现整点报时,超温报警等功能。
4.用Altium软件印刷电路板,焊接电路板,完成硬件电路的焊接烧写程序,完成系统功能要求。
六、软件设计
1.主程序流程图
图1主程序流程图
图2.1s中断服务子程序流程图
2.电子时钟:
利用定时器T0实现1s定时,T0设置为方式1,时间50ms,利用软件计数20次,实现1s定时。
中断服务子程序流如图2
参考以上流程图编写程序。
使用Proteus和Keil仿真。
使用定时器中断T0实现。
图3.显示子程序流程图图4.按键扫描子程序流程图
3.显示子程序流程图:
参考以上流程图3,编写显示时间的子程序或函数。
小时和分钟之间利用显示器的小数点隔开,秒的显示用显示器最后一位的小数点来表示,1秒闪一次。
使用Proteus和Keil仿真调试。
4.按键扫描子程序功能:
扫描按键K1、K2和K3,当K1按下时,小时加1,当K2按下时分钟加1,使用K3实现,时间/温度切换显示。
按以下流程图4编写程序。
七、程序调试
1、在Keil环境下,建立新项目,把源程序导入,并生成HEX文件。
2、在Proteus环境下,画好仿真电路图,并把单片机导入hex文件并进行仿真。
3、K0:
复位显示,K1:
调整小时,K2:
调整分钟,K3:
显示温度。
4、时钟显示:
到整点时,蜂鸣器响,时钟为几点时,蜂鸣器就响几声。
按一下K3,显示即时温度。
八、仿真电路
实验结果分析:
调试过程遇到仿真时显示数码管没显示,调时按钮没反应,经检查发现问题很多,有编程时仿真器没设置好,仿真电路下拉电阻不适合,数码管极性不对等,经老师指导和同学之间的讨论问题得以解决,仿真成功。
制作电子时钟电路硬件时发现真实应用与仿真有所区别,还要考虑单片机使能端的电频,所用电阻的大小,各电器元件的位置和电路走线等问题。
九、用Protel软件画出电路图和PCB印刷电路板
十、实训心得:
经过为期一周的单片机实训,是我们对这门课有了许多新的了解,弥补了在课堂上学习的不足。
相信这对我们以后的学习和工作都会有很大的帮助。
我们一定要在最短的时间里对这些不足加以改正!
首先,在这次试训中我被单片机强大的功能所震撼,以前在课堂上完全没有能理解可编程单片机的优越性。
这次通过实体仿真软件等辅助软件的共同效果,是这次试训有了鲜明的活力。
换是我们认识
到这次试训不仅仅是一个软件的应用,更多的是使我们认识到学习到很多在课堂上无法得到的东西。
特别是protues软件的功能是我们了解了当今开发系统的新方向,简直太不可思议啦!
单片机作为一种最简单的软件,与我们的日常生活息息相关,了解一些单片机程序的简单录入是费城必要的。
实训中,我们每个人都作了单片机/温控系统的实验,使我们深深地体会到了单片机在现实生活中的小小应用,既增强了我们的好奇心,又巩固了我们的理论知识。
更让我们体会到了单片机手动的开
始平台的完善与成熟。
只要你有想法,单片机就有可能让他成为现实。
这里我学习完protues软件后的第一感觉是,虽然这软件工作不稳定,但是会有相当不错的效果出来。
这对我以后的工作一定会有帮助
的。
在这次试训中不仅只对单片机编程有了新的认识,还对整个单片机的开发平台都有了一厅的了解,这是一笔不错的收获。
通过这几天的实训,使我的感触很深,真实“条条大路通罗马”,要达到目的,不同的人就有不同的方法。
只要你的方法不错!
五花八门都可以,而且是各有特色。
走出来的结果都有各自的独到之处。
在编程中“简”字贯穿于整个程序设计中,越简单越好,毕竟单片机留给用户的资源是有限的,所以我们要充分利用这些资源,达到更好的效果,这些是我们在以后的学习生活中应值得注意的地方。
在试训中有苦有甜,刚开始,在我们焊完PCB板之后,竟能不能正常工作,在细心检查问题,才了解到单片机没有接地,在解决这个问题之后,终于可以工作了。
还有就是焊接三极管、排阻、DS18B20时,要注意引脚的位置。
当我们为一个很难攻破的程序找出路时,心情烦躁,感觉自己很不可理喻,当程序一点一点编好后,自己从心底感觉到一点小小的安慰,看着自己的成果。
感觉很欣慰,有一丝丝的甜意,几天的实训使自己的思维逻辑也有了小小的进步。
附录一:
原件清单
名称
属性
引脚
数量
瓷片电容
30pF
2
--
1
电解电容
10uF
电阻
1K
13
4位共阳LED数码管
12
-
3
4
AT89S52
40
晶体振荡器
12MHz
松香
1盒
导线
1段
40针管座
焊锡
排阻
9
附录二
FLAGBIT00H
FLAG1BIT01H
DQEQUP3.3
LED1EQUP2.0
LED2EQUP2.1
LED3EQUP2.2
LED4EQUP2.3
LEDEQUP0
ORG0000H
LJMPSTART
ORG000BH
LJMPTIMER0
ORG0100H
START:
MOVR0,#70H
MOVR7,#07H
INIT:
MOV@R0,#00H
INCR0
DJNZR7,INIT
MOVTMOD,#01H;
1S定时程序
MOVTH0,#3CH
MOVTL0,#0B0H
MOVR4,#14H
SETBET0
SETBEA
SETBTR0
MAIN:
LCALLSCAN
LCALLKEYSCAN
LCALLLOUD
SJMPMAIN
LOUD:
MOVTMOD,#11H
MOVTH1,#0FCH
MOVTL1,#0DEH
SETBET1
SETBEA
MOVA,76H
MOVB,#0CH
DIVAB
MOVA,B
CJNEA,#0,LL1
MOV7FH,#12
AJMPLOOP1
LL1:
MOV7FH,A
LOOP1:
JNBFLAG1,LOUDOUT
CLRP3.4
LCALLDELAY50MS
SETBP3.4
DEC7FH
MOVA,7FH
CJNEA,#0,LOOP1
LOUDOUT:
CLRFLAG1
RET
DELAY50MS:
LCALLSCAN
TIMER0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVTH0,#3CH
SETBTR0
DECR4
CJNER4,#10,DTT1
SETBFLAG
DTT1:
CJNER4,#00H,OUTT0
CLRFLAG
;
DJNZR4,OUTT0
MOVR4,#14H
INC74H
MOVA,74H
CJNEA,#3CH,OUTT0;
判断秒值是否达到60
MOV74H,#00H
INC75H
MOVA,75H
判断分钟值是否达到60
MOV75H,#00H
INC76H
SETBFLAG1
MOVA,76H
CJNEA,#18H,OUTT0;
判断小时是否达到24
MOV76H,#00H
OUTT0:
POPPSW;
中断程序
POPACC
RETI
SCAN:
MOVA,75H;
LED显示程序
MOVB,#0AH
DIVAB
MOV72H,A
MOV73H,B
MOVB,#0AH
MOV70H,A
MOV71H,B
CLRP2.0;
单独显示6位,小时十位
MOVA,70H
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1MS
SETBP2.0;
单独显示6位,小时个位
CLRP2.1
MOVA,71H
SETBP2.1;
单独显示6位,小时与分钟之间点
CLRP2.1
MOVA,#7FH
MOVP0,A
单独显示6位,分钟十位
CLRP2.2
MOVA,72H
SETBP2.2;
单独显示6位,分钟个位
CLRP2.3
MOVA,73H
JNBFLAG,DSP
CLRACC.7
DSP:
SETBP2.3;
单独显示6位,秒跳点
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH;
“0~9”,“-”的共阳极字段码
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
DL20MS:
KEYSCAN:
CLREA
JNBP1.0,KEYSCAN0
JNBP1.1,KEYSCAN1
JNBP1.2,KEYSCAN2
KEYOUT:
SETBEA
KEYSCAN0:
LCALLDL20MS
JBP1.0,KEYOUT
INC76H
CJNEA,#18H,KEYOUT
MOV76H,#00H
SJMPKEYOUT
KEYSCAN1:
JBP1.1,KEYOUT
INC75H
MOVA,75H
CJNEA,#3CH,KEYOUT
MOV75H,#00H
KEYSCAN2:
JBP1.2,KEYOUT
MOVP0,#0FFH
MOVP2,#0FFH
MOVP3,#0FFH
LOOP:
LCALLGET_TEMPER
LCALLDISP
LJMPLOOP
WR18B20:
MOVR0,#8H
CLRC
WR1:
CLRDQ
MOVR1,#6H
DJNZR1,$
RRCA
MOVDQ,C
MOVR1,#23
SETBDQ
NOP
DJNZR0,WR1
RE18B20:
MOVR0,#30H
MOVR1,#2
RE00:
MOVR2,#8
RE01:
MOVR3,#09
RE10:
DJNZR3,RE10
MOVC,DQ
MOVR3,#23
RE20:
DJNZR3,RE20
DJNZR2,RE01
MOV@R0,A
INCR0
DJNZR1,RE00
GET_TEMPER:
LCALLRST18B20
MOVA,#0CCH
LCALLWR18B20
MOVA,#44H
LCALLRST18B20