|
最近用DS18B20编了个温度计,还是用那一块单片机学习板,个人认为最大的收获就是会看着时序图编程。其实看时序很简单,编过一次就会发现的。呵呵,不废话了。还是贴程序了。下面是温度计的程序,DS18B20本来是有报警系统的,现在删去,嘿嘿,那个不共享了。
DS18B20的复位、读写时序图:
看看效果图吧:
这个是室温
放上手指试试(呵呵!)
后记:这块板子马上就要交了,所以就赶出来了这段程序,不足之处望见谅。还是郑文老师的板子,呵呵,雷同是不可能了,自己写的,如果有人说我是网上拉的,那我也没什么好说,因为程序都是大同小异,关键是我有没有编过,至少答辩的话,我一定100分。【其实后面还有一段报警,不共享了(嘿嘿)】。
哎,全国赛没我们份了。大师、阿康,我们要暂时告别组合了。阿康的硬件一流,焊接功底很深厚,很多队伍都抢着要啊,呵呵,我吗一个只会编编程而且编的还不怎么样的小角色。不过小看我的人一般都会后悔,暑假有的忙了。多看看书吧,这个学年我们可以找借口说我们什么都不懂,但是下个学年就不一样了,因为我们什么都教过了,加油吧,努力吧!
据说很多电子专业的毕业生都拿我上面的东西叫做“毕业设计”,呵呵,我觉得很惊讶,那我不是可以毕业了?呵呵,说实话这个东西是很简单的。
- ;DS18B20接P1.2口
- flag equ 20h.0
- templ equ 30h ;读取温度的高位
- temph equ 31h ;读取温度的低位
- temp equ 32h ;高低位的温度数据转换缓冲
- showh equ 33h ;显示高位的缓冲位
- showl equ 34h ;显示低位的缓冲位
- k1 equ p3.2
- k2 equ p3.3
- k3 equ p3.4
- k4 equ p3.5
- org 0000h
- ljmp start0
- org 0040h
- start0: lcall rest
- jnb flag,start1
- clr ea
- mov a,#0cch
- lcall write_
- mov a,#44h
- lcall write_
- lcall rest
- mov a,#0cch
- lcall write_
- mov a,#0beh
- lcall write_
- lcall read_
- lcall convtemp_
- lcall show_
- setb ea
- sjmp start0
- start1: sjmp start0
- ;====================================复位子程序
- rest: setb p1.2
- nop
- nop
- clr p1.2
- mov r7, #0
- djnz r7,$
- setb p1.2
- nop
- nop
- mov r6,#80
- rst0: jnb p1.2,rst2
- jmp rst1
- rst1: djnz r6,rst0
- jmp rst3
- rst2: setb flag
- setb p1.2
- mov r6,#0
- djnz r6,$
- jmp ret0
- rst3: clr flag
- setb p1.2
- ret0: ret
- ;=====================================写程序
- write_: mov r6,#8
- clr c
- writ0: rrc a
- writ1: setb p1.2
- mov r7,#8
- nop
- clr p1.2
- nop
- djnz r7,$
- mov p1.2,c
- mov r7,#20
- djnz r7,$
- djnz r6,writ0
- setb p1.2
- ret
- ;======================================读程序
- read_: mov r0,#templ
- mov r3,#2
- read0: mov r5,#8
- read1: mov r4,#4
- clr c
- setb p1.2
- nop
- nop
- clr p1.2
- nop
- nop
- nop
- setb p1.2
- djnz r4,$
- mov c,p1.2
- rrc a
- mov r4,#30
- djnz r4,$
- djnz r5,read1
- setb p1.2
- mov @r0,a
- inc r0
- djnz r3,read0
- ret
- ;==========================温度处理,templ的第四位是小数
- 部分,舍去,temph的低四位和templ高四位是整数的16进制温度
- convtemp_:
- mov a,templ
- anl a,#0f0h
- swap a
- mov temp,a
- mov a,temph
- anl a,#0fh
- swap a
- orl a,temp
- mov b,#0ah
- div ab
- mov showh,a
- mov a,b
- mov showl,a
- ret
- ;===================================显示子程序
- show_: clr p1.5
- clr p1.6
- clr p1.7
- mov a,showh
- lcall shw0
- lcall delay
- setb p1.5
- setb p1.6
- setb p1.7
- mov a,showl
- lcall shw0
- lcall delay
- ret
- shw0: mov dptr,#led_data
- movc a,@a+dptr
- mov p0,a
- ret
- ;=====================================延时子程序
- delay: mov r3,#4
- mov r1,#255
- del0: djnz r1,$ ;延时2ms左右
- djnz r3,del0
- ret
- ;=======================================段码
- led_data: db
- 0c0h,0f9h,0a4h,0b0h,099h,92h,82h,0f8h,80h,90h
复制代码
|
评分
-
查看全部评分
|