论文首页哲学论文经济论文法学论文教育论文文学论文历史论文理学论文工学论文医学论文管理论文艺术论文 |
CLR SCLK
DJNZ R3,STWC2
RET
STWD:
SETB CS
SETB SID
MOV R3,#5 ;连续送入5个"1",起始
STWD1:
SETB SCLK
CLR SCLK
DJNZ R3,STWD1
CLR SID ;RW=0
SETB SCLK
CLR SCLK
SETB SID ;RS=1
SETB SCLK
CLR SCLK
CLR SID ;第八位"0"
SETB SCLK
CLR SCLK
RET
W4_D:
MOV R3,#4
W4_D1:
RLC A
MOV SID,C
SETB SCLK
CLR SCLK
DJNZ R3,W4_D1
RET
W4_0:
MOV R3,#4
W4_01:
CLR SID
SETB SCLK
CLR SCLK
DJNZ R3,W4_01
RET
;********************
;2MS延时
;********************
DEL_2MS:
MOV R0,#2
D1:
MOV R1,#200
D2:
NOP
NOP
NOP
DJNZ R1,D2
DJNZ R0,D1
RET
;********************
;40MS延时
;********************
DEL_40MS:
MOV R5,#20
D3:
LCALL DEL_2MS
DJNZ R5,D3
RET
;********************
;200MS延时
;********************
DEL_200MS:
MOV R5,#100
D4:
LCALL DEL_2MS
DJNZ R5,D4
RET
;********************
;500MS延时
;********************
DEL_500MS:
MOV R5,#250
D5:
LCALL DEL_2MS
DJNZ R5,D5
RET
;********************
;1500MS延时
;********************
DEL_1500MS:
LCALL DEL_500MS
LCALL DEL_500MS
LCALL DEL_500MS
RET
;*************************************
;用adc0832读数并送数给显示的子程序,
;并将键盘的按键数送给dac0832让其输出。
;*************************************
;==== ADC0832读数据子程序====
LIGHT:SETB ADDI ;初始化通道选择
NOP
NOP
CLR ADCS ;拉低/CS端
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿
MOV A,34H
MOV C,ACC.1 ;确定取值通道选择
MOV ADDI,C
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿2
MOV A,34H
MOV C,ACC.0 ;确定取值通道选择
MOV ADDI,C
NOP
NOP
SETB ADCLK ;拉高CLK端
NOP
NOP
CLR ADCLK ;拉低CLK端,形成下降沿3
SETB ADDI
NOP
NOP
MOV R7,#8 ;准备送下后8个时钟脉冲
AD_1:
MOV C,ADDO ;接收数据
MOV ACC.0,C
RL A ;左移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_1 ;循环8次
MOV C,ADDO ;接收数据
MOV ACC.0,C
MOV B,A
MOV R7,#8
AD_13:
MOV C,ADDO ;接收数据
MOV ACC.0,C
RR A ;右移一次
SETB ADCLK
NOP
NOP
CLR ADCLK ;形成一次时钟脉冲
NOP
NOP
DJNZ R7,AD_13 ;循环8次
MOV R7,#8
CJNE A,B,LIGHT ;数据校验
MOV A,B
MOV DPTR,#TAB5 ;
MOVC A,@A+DPTR ;
MOV 72H,A ;将高位送72H单元
MOV A,B
MOV DPTR,#TAB6 ;
MOVC A,@A+DPTR ;
MOV 73H,A ;降低为送73H单元
SETB ADCS ;拉高/CS端
CLR ADCLK ;拉低CLK端
SETB ADDO ;拉高数据端,回到初始状态
;========送数给显示子程序段========
MOV 70H,72H
MOV 71H,73H
MOV ADDR,#95H
MOV DPTR,#WEL_3
LCALL W_LINE1
;=======送数给ADC0832的子程序========
MOV A,33H ;判断有没有中断,
JZ L7 ;没有中断就转。
MOV 33H,#00H ;清中断标志
L2: MOV A,30H ;
CJNE A,#0AH,L3 ;判断是否为点号,不为点号就转。
JMP L7 ;为点好就保持原来送数。
L3:CJNE A,#0BH,L4 ;判断是否为Enter键,不为就转。
MOV 32H,24H
MOV 31H,25H ;
L9:MOV 24H,#00H ;
MOV 25H,#00H ;
MOV R2,#01H ;置送数时送数空间不同的标志位。
L7: MOV A,32H ;将键盘的两数相与,查表,然后送数。
SWAP A ;
ORL A, 31H ;
MOV DPTR,#TAB4 ;
MOVC A,@A+DPTR ;
CLR P2.0
MOV P0,A
LJMP L6 ;
L4:CJNE R2,#01H,L5 ;将键盘的第一位数送给24H
MOV A,30H ;
MOV 24H,A ;
DEC R2 ;清零送数时送数空间不同的标志位。
JMP L7 ;
L5:MOV A,30H ;将键盘的第二位数送给25H
MOV 25H,A ;
MOV R2,#01H ;置送数时送数空间不同的标志位。
JMP L7 ;
L6:RET
;十六进制数转换成为2进制BCD码的码表。
; 0 1 2 3 4 5 6 7 8 9
TAB5:DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H;0
DB 00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
DB 01H,01H,01H,01H,01H,01H,01H,01H,01H,01H;1
DB 01H,01H,01H,01H,01H,01H,01H,01H,01H,01H
DB 02H,02H,02H,02H,02H,02H,02H,02H,02H,02H;2
DB 02H,02H,02H,02H,02H,02H,02H,02H,02H,02H
DB 03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;3
DB 03H,03H,03H,03H,03H,03H,03H,03H,03H,03H
DB 04H,04H,04H,04H,04H,04H,04H,04H,04H,04H;