ImageVerifierCode 换一换
格式:DOCX , 页数:38 ,大小:80.13KB ,
资源ID:4267315      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4267315.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(DS18B20+DS1302项目报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

DS18B20+DS1302项目报告.docx

1、DS18B20+DS1302项目报告 题目: DS18B20+24C02+按键 项目管理人: 罗俊杰 硬件负责人: 罗俊杰 软件负责人: 罗俊杰 发题时间: 2012/3/10 交题时间: 2012/3/24 班级: 电研二班 指导老师: 王筝老师 摘要:本温度测量仪由8位MCU单片机为主控制器,通过DS18B对温度的采集,24C02保存上下限温度报警值,按键可以调节上下限报警温度,DS1302时钟显示,LCD1602显示,自动进入待机省电模式。该系统能测量温度范围在:-55度到+128度。测量精度达到1%是理想的测温系统。关键词: DS18B20,DS24C02,LCD1602,DS1302

2、。一 题目要求: 实现DS18B20测温,温度范围(-55+128),通过LCD1602显示。按键进行上下限温度调节,和断电保存上下限温度值,并且可以实现报警功能,另外就是通过1302显示时间。二 题目分析: 1.DS18B20能够实现正常的温度测量 2.LCD1602要能够显示出DS18B20的温度值,以及1302的时间,年月日星期,显示。 3.1302时钟模块要能够正常显示时间,年月日,星期的显示。 4.按键能够调整上下限报警的温度值。三功能描述: 当开启时,同一个界面同时显示1302时间时间显示模块,通过按键可以跳转到另一个界面,调节上下限温度值,当温度超过上下限温度值时,蜂鸣器会自动报

3、警。4硬件电路设计5汇编程序代码:;*;程序编写人:罗俊杰,QQ:849833861;程序编写时间:2012年3月17日 于源点EIC实验室;程序实现的功能:DS18B20测温+1302时钟+24C02存储;*TEMP_ZH DATA 24H ;实时温度值存放单元TEMPL DATA 25H ;TEMPH DATA 26H ;TEMP_TH DATA 27H ;高温报警值存放单元TEMP_TL DATA 28H ;低温报警值存放单元TEMPHC DATA 29H ;TEMPLC DATA 2AH ;TEMPFC EQU 2BH ;LCD_X EQU 2FH ;LCD 字符显示位置COUNT E

4、QU 51H ;1s计时COUNT1 EQU 52H ;60s计时FLAG1 EQU 20H.0 ;DS18B20是否存在标志RELAY EQU P1.3 ;指示灯BEEP EQU P3.3 ;蜂鸣器lcd equ p0ce equ p2.1 ;复位脚dio equ p2.2 ;数据脚clk equ p2.3 ;时钟rs equ p2.4rw equ p2.5en equ p2.6 ;使能端dq equ p3.7second equ 40h ;秒minute equ 41h ;分hour equ 42h ;时day equ 43h ;天month equ 44h ;月week equ 45h

5、;周year equ 46h ;年bcd equ 47hhex equ 48hK1 EQU P1.4 ;查看温度报警设置值,并能调节加减K2 EQU P1.5 ;低温报警值加减按键K3 EQU P1.6 ;高温报警值加减按键K4 EQU P1.7 ;保存设置值并退出SDA BIT P1.0 ;定义24C02数据线 SCL BIT P1.1 ;定义24C02时钟线 org 0000h ajmp start org 0030h ;*初始化*start: MOV SP,#60H LCALL SET_LCD ;对 LCD 做初始化设置及测试 LCALL RE_18B20 ;DS18B20暂存器操作子程

6、序 LCALL RST ;调用18B20复位子程序(初始化)/ lcall ds1302csh ;调用1302初始化子程序 lcall lcdcsh ;调用lcd初始化子程序 lcall w1302 ;调用1302写子程序 lcall r1302 ;调用1302读子程序 lcall display ;调用显示子程序;*main: CALL MK1 ;判断DS18B是否响应以及初始值的设定 : CALL MK3 ;ds18b20的写读及显示加1302时钟显示 AJMP MAIN;*MK4: AJMP MK2 ;跳转到错误子程序MK1: JNB FLAG1,MK4 ;DS1820不存在 LCALL

7、 MENU_OK ;DS1820存在,调用显示正确信息子程序 CALL RD_EEPROM ;将报警温度值从EEPROM中读出来 RET;*MK3: LCALL RST ;调用DS18B20复位子程序 JNB FLAG1,MK4 ;DS18B20不存在跳转到错误显示子程序 MOV A,#0CCH ;跳过ROM匹配命令 LCALL WRITE ;DS18B20数据写入操作子程序 MOV A,#44H ;温度转换命令 LCALL WRITE ;DS18B20数据写入操作子程序 LCALL RST ;调用DS18B20复位子程序 MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE ;D

8、S18B20数据写入操作子程序 MOV A,#0BEH ;读温度命令 LCALL WRITE LCALL READ ;调用DS18B20数据读取操作子程序 LCALL CONVTEMP ;调用温度数据BCD 码处理子程序 LCALL DISPBCD ;调用温度数据显示子程序 LCALL CONV ;调用LCD显示处理子程序 LCALL TEMP_COMP ;调用实测温度值与设定温度值比较子程序 LCALL PROC_KEY ;调用键扫描子程序;* LCALL SHIZHONG ;调用1302时钟模块 SJMP MK3;*SHIZHONG:mov tmod,#01h ;用定时器0,方式一工作 m

9、ov th0,#70h ;为定时器赋初值 mov tl0,#00h setb tr0lp1: jbc tf0,lp2 ;定时器溢出跳到lp2处并将tf0清零 clr tr0lp2: mov th0,#70h ;为定时器赋初值 mov tl0,#00h lcall r1302 ;调用读1302子程序 lcall display ;调用显示程序 setb tr0 RET ;*LCD初始化*set_lcd: CLR EN LCALL INIT_LCD ;初始化 LCD LCALL STORE_DATA ;将自定义字符存入LCD的CGRAM RET;/;设置1302初值子程序 ds1302csh:mo

10、v second,#00h ;miao秒 mov minute,#57h ;分 mov hour,#15h ;时 mov day,#17h ;天 mov month,#03h ;月 mov week,#06h ;周 mov year,#12h ;年;/;lcd初始化子程序lcdcsh: mov lcd,#38h lcall xzl mov lcd,#08h lcall xzl mov lcd,#01h lcall xzl mov lcd,#06h lcall xzl mov lcd,#0ch lcall xzl ;/;1302写数据子程序w1302: clr ce ;复位脚置低电平 clr c

11、lk ;串行时钟置低电平 nop setb ce ;复位脚置高电平 mov b,#8eh ;送操作地址 lcall wbit ;调用写字节子程序 mov b,#00h ;送操作数 lcall wbit ;调用写字节子程序 setb clk ;串行时钟置高电平,下降沿有效 clr ce ;禁止写入数据 mov r0,#second ;将秒寄存器送到r0 mov r1,#80h ;将80h送到A mov r7,#7 ;将r7送7/wloop: clr ce ;复位脚置低电平 clr clk ;复位脚置低电平 nop setb ce ;复位脚置高电平,准备写数据 mov b,r1 ;将r1内的数据送

12、给b lcall wbit ;调用写字节子程序 mov a,r0 ;将r0内地址中的数送到A mov hex,a ;将a中的数送到十进制寄存器 lcall hex_bcd ;调用十进制转bcd码子程序 mov b,a ;将a内的数送给b lcall wbit ;调用写字节子程序 inc r0 ;r0加一 inc r1 ;r1加一 inc r1 setb clk ;串行时钟下降沿写入 clr ce ;禁止写入 djnz r7,wloop ;判断是否将年月日等七组数写入1302 clr ce ;禁止写入 clr clk ; nop setb ce ;准备写入 mov b,#8eh ;送操作地址 l

13、call wbit ;调用写字节子程序 mov b,#80h ;送操作数 lcall wbit ;调用写字节子程序 setb clk ;下降沿有效 clr ce ;禁止写入 ret ;子程序返回;/;写字节子程序wbit: mov r2,#08h ;给r2送8w_loop: mov a,b ;b送给a rrc a ;带进位的右移A mov b,a mov dio,c ;sclk上升沿时写入数据 setb clk nop clr clk ;禁止写入 djnz r2,w_loop ;判断是否送完 ret ;/;hex转bcd码hex_bcd: mov a,hex ;将十六进制数送给A add a,

14、#00h ; da a ;对A进行十进制调整 ret;/;1302读数据子程序r1302: mov r0,#second ;将秒寄存器送到R0 mov r1,#81h ;将首读地址送到R1 mov r7,#7 ;R7送7r_loop: clr ce ;复位脚清零 clr clk ;时钟串行口清零 nop setb ce ;准备写数据 mov b,r1 ;将r1送到B lcall wbit ;调用写字节子程序 lcall rbit ;调用读字节子程序 mov r0,a ;将a中的数据送到R0所指的地址 inc r0 ;加一 inc r1 inc r1 setb clk ; clr ce djnz

15、 r7,r_loop ;判断是否读完 ret;/;读字节子程序rbit: mov r4,#08h ;送8rloop: mov c,dio ;读IO数据 rrc a ;带进位右移A setb clk ;下降沿有效 nop clr clk djnz r4,rloop ;判断是否读完 ret;/;显示子程序display: mov lcd,#80h lcall xzl mov a,#2 lcall xsj mov lcd,#81h lcall xzl mov a,#0 lcall xsj mov lcd,#84h lcall xzl mov a,#2dh lcall xsj mov lcd,#87h

16、 lcall xzl mov a,#2dh lcall xsj mov lcd,#8bh lcall xzl mov a,#W lcall xsj/ mov lcd,#8ch lcall xzl mov a,#3ah lcall xsj mov lcd,#0c2h lcall xzl mov a,#3ah lcall xsj mov lcd,#0c5h lcall xzl mov a,#3ah lcall xsj ;以上显示冒号;/以下显示动态/ mov bcd,year ;将年送给bcd lcall bcd_dec ;调用bcd码转十进制子程序 mov lcd,#82h ;将显示位置送到lc

17、d lcall xzl ;调用写指令子程序 mov dptr,#tab ;建表 MOVC A,A+DPTR ;查表 lcall xsj ;调用写数据子程序 mov lcd,#83h ;将显示位置送到lcd lcall xzl ;调用写指令子程序 mov dptr,#tab ;建表 mov a,b ;将b送给A MOVC A,A+DPTR ;查表 lcall xsj ;调用写数据子程序 mov bcd,month lcall bcd_dec mov lcd,#85h lcall xzl mov dptr,#tab MOVC A,A+DPTR lcall xsj mov lcd,#86h lcal

18、l xzl mov dptr,#tab mov a,b MOVC A,A+DPTR lcall xsj mov bcd,day lcall bcd_dec mov lcd,#88h lcall xzl mov dptr,#tab MOVC A,A+DPTR lcall xsj mov lcd,#89h lcall xzl mov dptr,#tab mov a,b MOVC A,A+DPTR lcall xsj mov bcd,week lcall bcd_dec mov lcd,#8dh lcall xzl mov dptr,#tab mov a,b MOVC A,A+DPTR lcall

19、xsj;/ mov bcd,hour lcall bcd_dec mov lcd,#0c0h lcall xzl mov dptr,#tab MOVC A,A+DPTR lcall xsj mov lcd,#0c1h lcall xzl mov dptr,#tab mov a,b MOVC A,A+DPTR lcall xsj ;以上显示时 mov bcd,minute lcall bcd_dec mov lcd,#0c3h lcall xzl mov dptr,#tab MOVC A,A+DPTR lcall xsj mov lcd,#0c4h lcall xzl mov dptr,#tab

20、 mov a,b MOVC A,A+DPTR lcall xsj ;以上显示分 mov bcd,second ;秒数值赋给bcd lcall bcd_dec mov lcd,#0c6h lcall xzl mov dptr,#tab MOVC A,A+DPTR lcall xsj mov lcd,#0c7h lcall xzl mov dptr,#tab mov a,b MOVC A,A+DPTR lcall xsj ;以上显示秒 ret ;/ ;bcd转十进制bcd_dec: mov a,bcd mov b,#16 div ab ;a中放置十位,b中放置个位 ret;/;lcd写指令子程序x

21、zl: clr rw clr rs setb en lcall delay3 clr en ret;/;lcd写数据子程序xsj: mov lcd,a clr rw setb rs setb en lcall delay3 clr en ret;/;延时子程序delay3: mov r5,#4 ;延时5msd0: mov r6,#255 djnz r6,$ djnz r5,d0 ret;/;表格tab: DB 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h ;0到9;-EEPROM: MOV R0,#27H ;要写入的数据,TH,TL MOV R1,#00H ;

22、 要保存数据的首地址 MOV R2,#02H ;数据的长度REP: CLR A MOV A,R0 MOV B,A LCALL WR_Byte ;调用24c02写子程序 INC R1 INC R0 DJNZ R2,REP RET;-WR_Byte: LCALL Begin ;调用启动24c02子程序REP_S1: MOV A,#0A0H ;写器件地址 LCALL Send_B ;调用发送一个字节到I2C总线子程序 LCALL WAITACK ;调用应答信号检测程序 JC REP_S1 ;没有应答则重发数据REP_S2: MOV A,R1 ;写入地址 LCALL Send_B ;调用发送一个字节子

23、程序 LCALL WAITACK JC REP_S2 REP_S3: CLR A MOV A,B ;写入数据 LCALL Send_B LCALL WAITACK JC REP_S3 LCALL STOP ;调用停止子程序 LCALL Delay ;10MS延时 RET;/向IIC总线发送一个字节数据子程序/;入口参数:A-待发送数据存放在A中;/Send_B: MOV R7,#08H ;发送位数S_B: RLC A MOV SDA,C NOP SETB SCL NOP CLR SCL DJNZ R7,S_B ;8位发送完毕? NOP RET;/检测应答信号/;出口参数:C-是否有应答信号;/WAITACK: SETB SDA ;释放SDA信号线 NOP SETB SCL NOPREP3: MOV C,SDA CLR SCL NOP RET;*RD_EEPROM: MOV R0,#27H ;设置读出数据保存首地址 MOV R1,#00H ;送读数首地址 MOV R2,#02H ;要读2个数REP1: LCALL RD_Byte ;调用24c02读

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1