数字温度计课程设计Word格式.docx
《数字温度计课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字温度计课程设计Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
蜂鸣电路主要完成超温报警功能。
(5)DS18B20测温模块
单片机P3.0口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个4.7KΩ电阻来完成对总线的上拉。
2.2温度传感器介绍
DS18B20可以程序设定9~12位的分辨率,精度为±
0.5°
C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EPROM中,掉电后依然保存。
温度传感器DS18B20引脚如图2所示。
图2DS18B20外部封装图
引脚功能说明:
NC:
空引脚,悬空不使用;
VDD:
可选电源脚,电源电压范围3~5.5V。
当工作于寄生电源时,此引脚必须接地。
DQ:
数据输入/输出脚。
漏极开路,常态下高电平。
GND:
为电源地
2.3电路原理图、PCB图和元器件布局图
Proteus原理图、PCB图以及元器件布局图分别见附录A、附录B与附录C。
2.4元器件清单
元器件清单见附录D。
3软件系统的设计
3.1使用的单片机资源的情况
本设计采用独立式键盘,键盘直接接在P1口上且按键的结果存贮在单片机的内部数据存储器里面。
用到的LED显示器接到了单片机的P0口线上和P2口线上。
DS18B20和蜂鸣器接在P3口线上。
3.2程序流程
3.2.1主程序流程图及功能说明
主程序的主要功能是负责准备状态提示符“P.”显示,等待按键按下进入各键功能子程序完成各项功能,其程序流程见图3所示。
图3主程序流程图
3.2.2各键功能程序流程图及功能说明
(1)S1键功能程序
S1键功能程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,其程序流程见图4所示。
图4S1键功能程序流程图
(2)S2键功能程序
S2键功能程序的主要功能是负责上限温度的设定的进入与退出,其程序流程见图5所示。
图5S2键功能程序流程图
(3)S3键功能程序
S3键功能程序的主要功能是负责下限温度的设定的进入与退出,其程序流程见图6所示。
图6S3键功能程序流程图
(4)S4键功能程序
S4键功能程序的主要功能是当前设定温度加1,其程序流程见图7所示。
图7S4键功能程序流程图
(5)S5键功能程序
S5键功能程序的主要功能是当前设定温度减1,其程序流程见图8所示。
图8S5键功能程序流程图
3.2.3部分子程序流程图及功能说明
(1)显示数据子程序
显示数据子程序主要功能是智能显示当前温度,其程序流程图如图9所示。
图9 显示数据子程序流程图
(2)温度处理子程序
温度处理子程序的主要功能是将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定以及判断是否超出限定温度,其程序流程图如图10所示。
图10温度处理子程序流程图
3.3部分子程序程序清单及说明
(1)DS18B20的复位子程序部分
根据DS18B20的通信协议,每一次读写数据之前都要对DS18B20进行复位,复位要求主机先发出复位低脉冲(大于48us);
然后释放,DS18B20收到信号后等待16~60us,然后发出60~240us的存在低脉冲,主机收到此信号表示复位成功。
其程序清单如下:
RESET_PULSE:
RESET:
SETBDATA_BUS
NOP
CLRDATA_BUS;
主机发出延时537微秒的复位低脉冲
MOVR7,#255
DJNZR7,$
SETBDATA_BUS;
然后拉高数据线
MOVR7,#30
JNBDATA_BUS,SETB_FLAG
CLRFLAG
AJMPNEXT
SETB_FLAG:
SETBFLAG
NEXT:
MOVR7,#120
SETBDATA_BUS
JNBFLAG,RESET
RET
(2)DS18B20的写入子程序部分
当主机把数据从逻辑高电平拉到逻辑低电平的时候,写时间隙开始。
有两种写时间隙,写1时间隙和写0时间隙。
所有写时间隙必须最少持续60μs,包括两个写周期至少1μs的恢复时间。
I/O线电平变低后,DS18B20在一个15μs到60μs的窗口内对I/O线采样。
如果线上事高电平,就是写1,如果是低电平,就是写0。
主机要生成一个写时间隙,必须把数据线拉到低电平然后释放,在写时间隙开始后的15μs内允许数据线拉到高电平。
主机要生成一个写0时间隙,必须把数据线拉到低电平并保存60μs。
每个读时隙都由主机发起,至少拉低总线1us,在主机发起读时序之后,单总线器件才开始在总线上发送0或1。
所有读时序至少需要60us。
程序清单如下:
WRITE:
MOVR6,#8;
一位共8位数据
CLRC;
C=0
WRITING:
CLRDATA_BUS;
总线低位,开始写入
MOVR7,#7
DJNZR7,$;
保持16us以上
RRCA;
把字节DATA分成8个位,循环给C
MOVDATA_BUS,C;
写入一个位
MOVR7,#23
等待
SETBDATA_BUS;
重新释放总线;
DJNZR6,WRITING
RET
(3)DS18B20的读取子程序部分
当从DS18B20读数据时,主机生成读时间隙。
当主机把数据从高电平拉到低电平时,读时间隙开始,数据线必须保持至少1μs;
从DS18B20输出的数据在读时间隙的下降沿出现后15μs内有效。
因此,主机在读时间隙开始后必须把I/O脚驱动拉为的电平保持15μs,以读取I/O脚状态。
在读时间隙的结尾,I/O引脚将被外部上拉电阻拉到高电平。
所有读时间隙必须最少60μs,包括两个读周期至少1μs的恢复时间。
READ:
SETBDATA_BUS
MOVR0,#TEMP_L;
低位存入TEMP_L,高位存入TEMP_H
MOVR6,#8;
数据一共有8位
MOVR5,#2;
读取两个字节的数字
CLRC
READING:
CLRDATA_BUS;
读前总线保持为低
SETBDATA_BUS;
开始读总线释放
MOVR3,#9
RE10:
DJNZR3,RE10;
延时18us
MOVC,DATA_BUS;
从总线读到一个位
RRCA;
把读得的位值循环移给A
MOVR7,#23
DJNZR7,$;
等待50us
DJNZR6,READING;
读取下一位
MOV@R0,A
INCR0
MOVR6,#8
DJNZR5,READING
3.4程序清单
见附录E。
4系统测试与结果分析
4.1硬件测试
硬件测试的主要是检查电路各种参数是否符合设计要求。
先排除硬件电路故障,利用万用表或逻辑测试仪器,检查电路中各器件以及引脚是否连接是否稳固,是否有短路故障。
先将单片机AT89S52芯片取下,对电路板进行通电检查,通过观察看是否有异常,测单片机的电源引脚看是否是正常的电压,是否有虚焊的情况,然后用万用表测试各电源电压,若这些都没有问题,则将单片机AT89S52芯片插上,接通电源观察电路指示灯是否正常。
人为升高温度看是否超限报警。
断开开18b20插槽,看是否报警。
4.2软件测试
下好程序后,上电(按键复位后)能够自动显示系统提示符“P.”并且流水灯循环两灭,当我按下开始键的时候,DS18B20开始工作,数码管上显示实时温度,并且测量精度小数点后两位。
与温度计测量结果数据比较如下表所示。
但我按下停止键的时候,DS18B20停止工作,数码管上可以通过开始自动显示系统提示符“P.”。
超限和断开18b20后会报警。
测试结果测量值都在误差允许范围内,因此符合设计要求,本设计成功完成预期目标。
4.3测试结果
当我按下开始键的时候,DS18B20开始工作,数码管上显示实时温度,并且测量精度小数点后两位。
测试结果测量值都在误差允许范围内,则符合设计要求,本设计成功完成预期目标。
图11P.显示图
图12调上限图
图13调下限图
图14当时寝室温度
4.4设计体会
本次课程设计是数字温度机的设计,从用Protel、Proteus画原理图、PCB图到制板,再到编程,通过本次课程设计我学会了很多。
首先是学会了利用自己所学的理论知识来解决实际问题,在整个设计过程中,我们把老师以前所讲的芯片的原理、作用及性能都运用到了这次设计中,这样加强了我们对课本知识的理解和巩固。
我觉得这次设计不仅加强了我们对课本知识的回顾和温故,而且锻炼了我们运用软件的能力,实现了从理论与实际的结合。
其次通过这次课程设计,加强了我们的动手、思考和解决问题的能力。
书中的理论有点枯燥,运用书中的知识去调试,那是一种无法比拟的成就感。
这样更能激发我们对我们专业的兴趣,和对我们专业知识的理解和掌握,能激发我们对电子科研技术的钻研,增加设计兴趣。
总之,通过本次课程设计,使我从中受益匪浅,我认识到了自己的以前许多许多的不足和缺点。
我明白了要想把理论和实际,还是有一定距离的。
在以后的学习中要更加努力为以后打好基础。
结束语
通过此次的单片机课程设计,我学到了许多以前在课本上学不到的东西,同时也把以前学到的理论知识运用到了此次的课程设计中,很好地加强了我在单片机方面的知识。
我懂得了理论与实际相结合的重要性,只掌握书上的理论知识是远远不够的,而应该把所学的理论知识与实践相结合,把理论运用与实践,从实践中验证理论,从而提高自己的实际动手能力和独立思考的能力,为以后踏入社会打下基础。
致谢
通过这一阶段的努力,我的课程设计终于完成了,这意味着单片机技术这门理论课即将结束。
在本学期,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。
在我完成课程设计的过程中,老师和同学给我提供了许多帮助,比如对实践中出现的问题给予耐心的解答等,在此,特别感谢老师与各位同学的热心帮助。
参考文献
[1]李广弟,朱月秀,冷祖祁.单片机基础[M].第三版.北京:
北京航空航天大学出版社,2007.1~260
LiGuangdi.ZhuYuexiu.Lengzuqi.Microcontrollerbasedon[M].3rded.Beijing:
BeijingAerospaceUniversityPress,2007.1~260
[2]康华光.电子技术基础(模拟部分)[M].第五版.武汉:
华中科技大学出版社,2007.20~100
kanghuaguang.Electronictechnologyfoundation(analogpart)[M].Fifthedition.Wuhan:
huazhonguniversityofscienceandtechnologypress,2007.20~100
附录
附录A原理图
图A1
附录BPCB图
图B1
图B2
附录C元器件分布图
图C1
附录D元器件清单
名称
数量
参数
单片机
1个
AT89S52
共阳数码管
2个
4位一体
底座
3个
40PIN
晶振
12MHz
发光二极管
9个
单排插
蜂鸣器
按键
排阻
10K
下载口座子
十芯
温度传感器
18B20
六脚按键开关
USB电源线
电阻
200Ω
4.7K
1K
24个
470Ω
电解电容
22μf
瓷片电容
33p
短路帽
PCB板子
1块
电源插座
杜邦线
三极管
9012
附录E总程序清单
;
*******************************************************************;
项目名称:
数字温度计
设计者:
蒋佳
设计日期:
2013年1月5日
堆栈栈底7FH;
LED数码管显示器设定;
P0.7---P0.0段控线,接LED的显示段dp,g,f,e,d,c,b,a
P2.7---P2.0位控线,从左至右(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)
显示缓冲区设定从左至右依次为7FH,7EH,7DH,7CH,7BH,7AH,79H,78H(LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)
独立式键盘设定;
8个按键S1至S8分别依次接在P1.0至P1.7口线;
子程序;
DIR(数码管显示子程序)
键盘扫描子程序KEY(判断是否有键按下)
DELAY(1毫秒延时子程序,晶振频率12MHz)
KEYS(判键按下子程序)
READ_TEMP(读温度程序)
RESET_PULSE(DS18B20的复位子程序)
WRITE(S18B20的写入子程序)
READ(DS18B20的读取子程序)
DISPLAY(显示数据子程序)
DWBJ(低温报警处理程序)
GWBJ(高温报警处理程序)
PROCESS(温度处理子程序)
常数表格;
DSER(共阳数码管字型代码表)
DSER1(系统提示符P.字型代码序号表)
TABLE_DP1(小数点后第一位字符代码表)
TABLE_DP2(小数点后第二位字符代码表)
键功能程序;
KEYAA(按键S1的功能程序)
KEYBB(按键S2的功能程序)
KEYCC(按键S3的功能程序)
KEYDD(按键S4的功能程序)
KEYEE(按键S5的功能程序)
伪指令定义区
DATA_BUSBITP3.0
FLAGBIT00H;
标志位
FLAG_THBIT21H.0
FLAG_TLBIT21H.1
TEMP_LEQU30H;
温度值低字节
TEMP_HEQU31H;
温度值高字节
TEMP_DPEQU32H;
温度小数
TEMP_INTEQU33H;
温度值整数
TEMP_BAIEQU34H;
温度百位数
TEMP_SHIEQU35H;
温度十位数
TEMP_GEEQU36H;
温度个位数
DIS_BAIEQU37H;
显示百位数
DIS_SHIEQU38H;
显示十位数
DIS_GEEQU39H;
显示个位数
DIS_DP1EQU3AH;
显示第一位小数
DIS_DP2EQU3BH;
显示第二位小数
DIS_FHEQU3CH;
显示负号
DIS_BJEQU3DH;
显示高温报警
TEMP_BJEQU3EH;
报警温度
TEMP_BJHEQU3FH;
高温报警温度
TEMP_BJLEQU40H;
低温报警温度
系统起始程序区
ORG0000H
START:
LJMPMAIN
系统监控程序区
ORG0020H
MAIN:
MOVSP,#7FH;
确立堆栈区
MOVPSW,#00H;
初始化PSW,通用寄存器组为第0组;
MOVR0,#20H;
RAM区首地址
MOVR7,#96;
RAM区单元个数
ML:
MOV@R0,#00H
INCR0
DJNZR7,ML
MOVTEMP_BJH,#40
MOVTEMP_BJL,#5
PL:
MOVR0,#78H;
显示缓冲存储单元首地址
MOVDPTR,#DSER1;
提示符"
P."
字符代码表首地址
TT:
CLRA
MOVCA,@A+DPTR
MOV@R0,A
INCDPTR
CJNER0,#80H,TT
TT1:
LCALLDIR;
调显示子程序显示提示符"
LCALLKEY;
调键扫描子程序
JB20H.0,KEYAA
JB20H.1,KEYBB
JB20H.2,KEYCC
LJMPTT1
键功能程序
按键S1的功能程序名为KEYAA
实现功能进入温度测试
KEYAA:
LCALLREAD_TEMP;
调读温度程序
LCALLPROCESS;
调数据处理程序
LJMPKEYAA
按键S2的功能程序名为KEYBBB
实现功能进入上限温度设置
KEYBB:
CJNER2,#00H,KEYBB1
INCR2
MOVTEMP_BJ,TEMP_BJH
MOVA,TEMP_BJ
MOVB,#0AH
DIVAB
MOV78H,B
MOV79H,A