欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
單片機+lcd1602顯示溫度匯編語言程序-精確到0.0625度
[打印本頁]
作者:
Hyouka
時間:
2017-12-18 17:26
標(biāo)題:
單片機+lcd1602顯示溫度匯編語言程序-精確到0.0625度
單片機匯編源程序如下:
;這是關(guān)于單個DS18B20的測溫程序,數(shù)據(jù)腳為P3.3,晶振是11.059MHZ
;溫度傳感器18B20采用器件默認(rèn)的12位轉(zhuǎn)化,最大轉(zhuǎn)化時間要750毫秒
;用1602液晶屏顯示,顯示溫度從00到99度,精確到0.0625度
;內(nèi)存分配聲明
TEMPER_L EQU 29H;用于保存讀出溫度的低字節(jié)
TEMPER_H EQU 28H;用于保存讀出溫度的高字節(jié)
T_DF EQU 27H ;FORMAT后的小數(shù)部分(decimal fraction),半字節(jié)的溫度小數(shù)(存在低四位)
T_INTEGER EQU 26H ;FORMAT后的整數(shù)部分(integer),將兩字節(jié)的溫度整合成1字節(jié)
FLAG1 BIT 50H;位地址50H是字節(jié)2AH的最低位,用作是否檢測到DS18B20的標(biāo)志位
A_BIT EQU 20h ;液晶十位數(shù)存放內(nèi)存位置
B_BIT EQU 21h ;液晶個位數(shù)存放內(nèi)存位置
C_BIT EQU 22H ;個位小數(shù)
D_BIT EQU 23H ;十位小數(shù)
E_BIT EQU 24H ;百位小數(shù)
F_BIT EQU 25H ;千位小數(shù)
RS BIT P2.0 ;這3位是液晶屏的控制信號,連接方式由具體硬件而定
RW BIT P2.1
E BIT P2.2
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
LCALL INIT_RS232
CLR P1.3
LCALL T_CONVERSION;調(diào)用讀溫度子程序
LCALL T_FORMAT;將讀出的2字節(jié)溫度格式化
LCALL DISPLAY;調(diào)用液晶顯示子程序
LCALL D1S;延時1秒后再測
LJMP MAIN
;--------------DS18B20的溫度轉(zhuǎn)換子程序,具體時序請參考資料-------------------
T_CONVERSION: LCALL INIT_1820;先復(fù)位DS18B20
JB FLAG1,T_C0
RET ; 判斷DS1820是否存在 若DS18B20不存在則返回
T_C0: MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 發(fā)出溫度轉(zhuǎn)換命令
LCALL WRITE_1820
LCALL D1S ;這里等待AD轉(zhuǎn)換結(jié)束,12位的話要延時750m秒
LCALL INIT_1820;準(zhǔn)備讀溫度前先復(fù)位
MOV A,#0CCH ; 跳過ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 發(fā)出讀溫度命令
LCALL WRITE_1820
LCALL READ_1820; 將讀出的溫度數(shù)據(jù)保存到28H(TEMPER_H)和29H(TEMPER_L)處
RET
;------DS18B20復(fù)位初始化程序-----------------------------------------
INIT_1820: SETB P3.3
NOP
CLR P3.3
MOV R0,#2 ;主機發(fā)出延時500微秒的復(fù)位低脈沖
INIT0: MOV R1,#250
DJNZ R1,$
DJNZ R0,INIT0
SETB P3.3;然后拉高數(shù)據(jù)線
NOP
MOV R0, #15
INIT1: JNB P3.3, INIT3;延時60us等待DS18B20回應(yīng)
DJNZ R0, INIT1
LJMP INIT4 ; 超時而沒有響應(yīng)
INIT3: SETB FLAG1 ; 置標(biāo)志位,表示DS1820存在
LJMP INIT5
INIT4: CLR FLAG1 ; 清標(biāo)志位,表示DS1820不存在
LJMP INIT6
INIT5: MOV R0, #120
DJNZ R0, $ ; 延時240us
INIT6: SETB P3.3
RET
;---------寫DS18B20的子程序(有具體的時序要求)-------------------------------------
WRITE_1820: MOV R2,#8;一共8位數(shù)據(jù)
WR0: CLR P3.3
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.3,C
MOV R3,#20
DJNZ R3,$
SETB P3.3
NOP
NOP
DJNZ R2,WR0
SETB P3.3
RET
;------讀DS18B20的程序,從DS18B20中讀出兩個字節(jié)的溫度數(shù)據(jù)--------------------------
READ_1820: MOV R4,#2 ; 將溫度高位和低位從DS18B20中讀出
MOV R1,#TEMPER_L ; 低位存入29H(TEMPER_L)
RE0: MOV R2,#8
RE1: SETB P3.3
NOP
NOP
CLR P3.3
NOP
NOP
SETB P3.3
MOV R3,#5
DJNZ R3, $
MOV C,P3.3
MOV R3,#20
DJNZ R3, $
RRC A
DJNZ R2,RE1
MOV @R1,A
DEC R1 ; 高位存入28H(TEMPER_H)
DJNZ R4,RE0
RET
;-----整合讀出的兩字節(jié)溫度(關(guān)于DS18B20讀出的2字節(jié)溫度格式請參考資料)----------
T_FORMAT: MOV A, #0FH
ANL A, TEMPER_L
MOV T_DF, A ;獲得小數(shù)部分(4位)
MOV A, TEMPER_L
SWAP A
MOV TEMPER_L, A
MOV A, TEMPER_H
SWAP A
MOV R0, #TEMPER_L
XCHD A, @R0
MOV T_INTEGER, A ;獲得整數(shù)部分(1字節(jié))
RET
;-------液晶顯示的子程序(顯示前先格式轉(zhuǎn)換)---------------------------------------
DISPLAY: mov a, T_INTEGER
mov b,#10
div ab
mov A_BIT,a ;十位存在A_BIT
mov B_BIT,b ;個位存在B_BIT
MOV A, T_DF
MOV R0, #C_BIT
MOV R2, #4
D0: MOV B, #10
MUL AB
MOV B, #16
DIV AB
MOV @R0, A ;從個位小數(shù)C_BIT,到十位D_BIT,百位E_BIT,千位F_BIT
INC R0
MOV A, B
DJNZ R2, D0
;----二進(jìn)制到ASCII碼轉(zhuǎn)換--------------
MOV A, #30H
ORL A_BIT, A
ORL B_BIT, A
ORL C_BIT, A
ORL D_BIT, A
ORL E_BIT, A
ORL F_BIT, A
;-------------------------------------
LCALL INITIAL
MOV A, #10000000B ; LINE1: DB 'Now is:',00H
LCALL WRITE_INSTRUCTION
MOV DPTR, #LINE1
LCALL PR_STRING
MOV A, A_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, B_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, #2EH
LCALL TX_CHAR;'.'字符
LCALL WRITE_LCDDATA
MOV A, C_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, D_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, E_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, F_BIT
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, #0DFH ;下面兩個是攝氏度的數(shù)字符號
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, #43H
LCALL TX_CHAR
LCALL WRITE_LCDDATA
MOV A, #0AH
LCALL TX_CHAR
mov a, #11000000B ; LINE2: DB 'WANG XUE MIN!',00H
Lcall write_instruction
MOV DPTR, #LINE2
LCALL PR_STRING
RET
;---液晶屏初始化,具體請參考資料-------------------------------------------------
initial: MOV A, #01H
LCALL WRITE_INSTRUCTION
MOV A, #38H
LCALL WRITE_instruction
MOV A, #0FH
LCALL WRITE_instruction
MOV A, #06H
LCALL WRITE_instruction
RET
;----寫液晶指令的子程序------------------------------------------
WRITE_instruction: MOV P0, A
CLR RS ;寫入控制命令
CLR RW
CLR E
LCALL DELAY
SETB E
RET
;----寫液晶數(shù)據(jù)的子程序---------------------------------------------
write_lcddata: MOV P0, A
SETB RS ;寫入數(shù)據(jù)
CLR RW
CLR E
LCALL DELAY ;判斷液晶模塊是否忙
SETB E
RET
;-----寫行字符的子程序---------------------------------------------------------------
PR_STRING: CLR A
MOVC A, @A+DPTR
JZ END_PR
LCALL WRITE_LCDDATA
INC DPTR
LJMP PR_STRING
END_PR: RET
;----查看液晶忙碌信號的子程序---------------------------------------------------------
DELAY: MOV P0,#0FFH ;判斷液晶顯示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P0.7,DELAY ;如果P1.7為高電平表示忙就循環(huán)等待
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
95060445lcd1602-18B20.rar
(15.69 KB, 下載次數(shù): 72)
2017-12-18 17:26 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1