?? sloid_11.txt
字號:
lcd_clk bit p1.0
lcd_do bit p1.1
lcd_buf equ 3ch ;3ch,3dh,3eh,3fh,40h分別存放顯示溫度的高-低
tim8253co equ 0fbffh
tim8253a equ 0f8ffh
tim8253b equ 0f9ffh
tim8253c equ 0faffh
dog_so bit p0.0
dog_si bit p0.1
dog_sck bit p0.2
dog_cs bit p2.4
wren equ 00000110b ;設置寫使能鎖存器(準許)
wrdi equ 00000100b ;復位寫使能鎖存器(不準許)
rdsr equ 00000101b ;讀狀態據存器
wrsr1 equ 00000001b ;寫狀態據存器
key equ 30h
key_bit bit 00h ;確實有鍵按下標志
key_on bit 01h ;防止按鍵連續按下處理
finsh bit 02h ;凝固點到
judge_key bit 03h ;判斷是否有延時
ray_vol equ 31h ;測試鍵按下時光電初始值
ray_voh equ 32h
ray_vo3h equ 33h ;凝固時光電電壓與初始值的
ray_vo3l equ 34h ;固定值差值,在調試時補上
count equ 35h ;凝固點到的次數,防止誤動作
sloid_sign equ 36h
sloid_temph equ 37h
sloid_templ equ 38h ;凝固點溫度
temp_sign equ 39h
temph equ 3ah
templ equ 3bh
tlc_do bit p0.1
tlc_clk bit p0.0
tlc_cs bit p2.3
;-----------------------------------
org 0000h
nop
ajmp main
org 000bh
nop
nop
ajmp intp
org 0030h
intp: clr dog_cs
nop
nop
setb dog_cs
push acc
push psw
mov psw,#08h
mov th0,#0b8h
mov tl0,#0f0h
setb tr0
;----------------------------
clr p1.4
mov a,p0
cjne a,#0ffh,hav_key
ajmp abb
hav_key:jb key_on,abd
jnb judge_key,abc
clr judge_key
setb key_bit
setb key_on
mov key,a
ajmp abd
abc: setb judge_key
ajmp abd
abb: clr key_on
abd: setb p1.4
;----------------------------
jb p1.5,break ;測試沒開始不用比較光電
acall tlc549
;*************************************
;*
;*************************************
mov a,r5
jnz qq1
mov a,r6
clr c
subb a,#3dh
jc qq2
qq1: mov count,#00h
ajmp break
;*************************************
;*
;*************************************
mov a,#9ah
clr c
subb a,ray_vol
mov r1,a
mov a,#99h
subb a,ray_voh
mov r2,a
clr c
mov a,r1
add a,r6
da a
mov a,r2
addc a,r5
da a
jc break ;C=1說明光電的初始值<測量值
mov a,r6
mov r2,a
mov a,r5
mov r3,a
mov r4,ray_vol
mov r5,ray_voh
lcall dubcds ;計算光電的差值
mov a,#9ah
subb a,r4
mov r1,a
mov a,#99h
subb a,r5
mov r2,a
clr c
mov a,ray_vo3l ;光電的差值>固定差值,則凝固
add a,r1
da a
mov a,ray_vo3h
addc a,r2
da a
jc break
qq2:
inc count
mov a,count
cjne a,#32h,break ;連續判斷5次,才能防止誤動作
mov count,#00h
setb finsh
setb p1.5
mov sloid_sign,temp_sign
mov sloid_temph,temph
mov sloid_templ,templ
break: pop psw
pop acc
reti
main: mov sp,#60h
mov psw,#00h
mov p1,#0ffh
mov 20h,#00h
mov ray_vo3l,#00h ;光電電壓固定差值
mov ray_vo3h,#02h
mov r0,#20h
mov r7,#40h
clr a
inta: mov @r0,a ;初始化
djnz r7,inta
mov p1,#0ffh
mov p2,#0ffh
lcall dog
mov tmod,#21h
mov th0,#0b8h
mov tl0,#0f0h
mov ie,#82h
setb tr0
lcall wr_53
circe: ;-------------------------主程序開始
clr dog_cs
nop
nop
setb dog_cs
jnb key_bit,read_temp
clr key_bit
mov a,key
jb acc.0,p11
jnb p1.5,read_temp
clr p1.5 ;制冷開始
lcall tlc549
mov ray_vol,r6
mov ray_voh,r5
ajmp read_temp
p11: jb acc.1,read_temp
setb p1.5 ;停止制冷
clr finsh
read_temp:
jb p1.3,circe
mov dptr,#tim8253c
movx a,@dptr
cpl a
mov r0,a
movx a,@dptr
cpl a
mov r1,a
clr c
mov a,r0
subb a,#60h
mov r0,a
mov a,r1
subb a,#63h
mov r1,a
jc dc1
lcall dubcd
mov temp_sign,#0ah ;temp_sign=0ah說明溫度為正
mov temph,r5
mov templ,r4
ajmp wr_lcd
dc1: clr c
mov a,r0
cpl a
add a,#01h
mov r0,a
mov a,r1
cpl a
addc a,#00h
mov r1,a
lcall dubcd
mov temp_sign,#0bh ;temp_sign=0bh說明溫度為負
mov temph,r5
mov templ,r4
wr_lcd: jnb finsh,abh
mov temp_sign,sloid_sign
mov temph,sloid_temph
mov templ,sloid_templ
abh: mov r0,#lcd_buf
mov @r0,#0ah ;最高位時鐘符號屏蔽
inc r0
mov @r0,temp_sign
inc r0
mov a,temph
anl a,#0f0h
swap a
mov @r0,a
inc r0
mov a,temph
anl a,#0fh
mov @r0,a
inc r0
mov a,templ
anl a,#0f0h
swap a
mov @r0,a
mov r7,#05h
mov r1,#lcd_buf
mov r0,#lcd_buf
aaq: mov a,@r0
mov dptr,#arry
movc a,@a+dptr
mov @r1,a
inc r1
inc r0
djnz r7,aaq
ajmp data_lcd
arry: db 88h,0bbh,0c1h,91h,0b2h,94h,84h,0b8h,80h,90h
db 0ffh,0f7h,0cch,83h,0c4h,0e4h
data_lcd:
mov r7,#05h
mov r1,#lcd_buf
;-----------------------
mov a,r1
add a,#03h
mov r1,a
mov a,@r1
anl a,#7fh ;第三位要顯示小數點
mov @r1,a
mov r1,#lcd_buf
;-----------------------
tsr_pa: mov a,@r1
acall transbyte
inc r1
djnz r7,tsr_pa
lcall wr_53
ajmp circe
;-----------------------------------
transbyte:
mov r0,#08h
tsb_pa: rrc a
acall transbit
djnz r0,tsb_pa
rrc a
ret
transbit:
mov lcd_do,c ;先送數據到數據口線DI
setb lcd_clk ;再使時鐘口線發一個負脈沖
clr lcd_clk
setb lcd_clk
ret
;*************************************
tlc549: clr a
setb tlc_do
clr tlc_cs ;/cs
mov r7,#02h
lcall readata
mov r5,a
mov r7,#08h
lcall readata
mov r6,a
setb tlc_cs
clr tlc_clk
ret
;------------------------------------------
readata:clr tlc_clk ;clk
mov c,tlc_do ;do
rlc a
setb tlc_clk
djnz r7,readata
ret
;*************************************
wr_53: clr p1.2
clr p1.3
mov dptr,#tim8253co
mov a,#36h
movx @dptr,a
mov a,#72h
movx @dptr,a
mov a,#0b0h
movx @dptr,a
mov dptr,#tim8253a
mov a,#12h
movx @dptr,a
clr a
movx @dptr,a
mov dptr,#tim8253b
mov a,#3ch
movx @dptr,a
mov a,#0e9h
movx @dptr,a
setb p1.2
mov dptr,#tim8253c
mov a,#0ffh
movx @dptr,a
movx @dptr,a
setb p1.3
ret
;*************************************
dog: lcall readsr
jnb acc.0,writesr1
ret
;------------------
readsr: mov a,#rdsr
clr dog_cs
lcall write8
lcall read8
setb dog_cs
ret
;-----------------
writesr1:
clr dog_cs
mov a,#wren ; 00000110b設置寫使能鎖存器(準許)
lcall write8
setb dog_cs
clr dog_cs
mov a,#wrsr1
lcall write8
mov a,#00h
lcall write8
setb dog_cs
clr dog_cs
nop
setb dog_cs
ret
;------------
write8: mov r3,#08h
write81:
rlc a
mov dog_si,c
clr dog_sck
lcall atly
setb dog_sck
djnz r3,write81
ret
;------------
read8: mov r3,#08h
read81: setb dog_so
setb dog_sck
lcall atly
clr dog_sck
mov c,dog_so
rlc a
djnz r3,read81
setb dog_sck
ret
;---------------------------------
atly: mov r6,#30
djnz r6,$
ret
;********************************
dubcd: mov r7,#10h
clr a
mov r4,a
mov r5,a
mov r6,a
lp0: clr c
mov a,r0
rlc a
mov r0,a
mov a,r1
rlc a
mov r1,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r5
addc a,r5
da a
mov r5,a
mov a,r6
addc a,r6
da a
mov r6,a
djnz r7,lp0
ret
;*********************************
dubcds: clr c
mov a,#99h
subb a,r3
mov r3,a
clr c
mov a,#9ah
subb a,r2
add a,r4
da a
mov r4,a
mov a,r3
addc a,r5
da a
mov r5,a
ret
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -