|
最近用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
復制代碼
|
評分
-
查看全部評分
|