📄 1234.asm
字号:
EEPROM_SDA BIT P1.0
EEPROM_SCL BIT P1.2
WP BIT P1.1
AD_CL_PIN BIT P1.2
AD_DA_PIN BIT P1.3
AD_CS_PIN BIT P1.4
LED_DIGIT_1 BIT P2.0
LED_DIGIT_2 BIT P2.1
LED_DIGIT_3 BIT P2.2
LED_DIGIT_4 BIT P2.3
LED_BUS_PIN BIT P2.4
BELL_PIN BIT P2.5
SW_A BIT P3.3
SW_B BIT P3.2
ADD_24 EQU 9H
EEPROM_DAT EQU 0AH
ADC_VAL EQU 0BH
LED_VAL EQU 24H
SW_BZ BIT 0H
CODE_1 EQU 60H
CODE_2 EQU 61H
CODE_3 EQU 62H
CODE_4 EQU 63H
ADC_CHANG_CODE EQU 64H
ORG 00H
JMP RESET
ORG 50H
reset: mov sp,#70h
MOV P2,#0
MOV LED_VAL,#0FFH
CLR SW_BZ ;开关按下标志 0:NO 1:YES
MOV ADC_CHANG_CODE,#10
CALL DELAY_5ms
CALL LED_DIGIT_SHOW
MOV ADD_24,#10H
CALL RD_DATA
CJNE A,#100,RESET_1
MOV ADD_24,#5H
CALL RD_DATA
MOV LED_VAL,A
JMP MAIN
RESET_1: CALL WRITE1
MAIN: CALL SW_CHECK
CALL SW_PRO
CALL ADC_PRO
CALL LED_SHOW
;CALL READ1
JMP MAIN
LED_SHOW: MOV CODE_1,#0
MOV A,ADC_VAL
MOV B,#100
DIV AB
MOV CODE_2,A
MOV A,B
MOV B,#10
DIV AB
MOV CODE_3,A
MOV CODE_4,B
MOV R2,#4
LED_SHOW1: SETB P2.0
MOV A,CODE_1
CALL LED_SHOW_LOOP
;**************************************
SETB P2.1
MOV A,CODE_2
CALL LED_SHOW_LOOP
;**************************************
SETB P2.2
MOV A,CODE_3
CALL LED_SHOW_LOOP
;**************************************
SETB P2.3
MOV A,CODE_4
CALL LED_SHOW_LOOP
RET
LED_SHOW_LOOP: MOV DPTR,#DIGIT_TABLE
MOVC A,@A+DPTR
MOV P0,A
CALL DELAY_5ms
ANL P2,#11110000B
RET
SW_PRO:
ANL P2,#00110000B
SETB LED_BUS_PIN
MOV P0,LED_VAL
CALL DELAY_5ms
CLR LED_BUS_PIN
JNB SW_BZ,SW_PRO_END
MOV EEPROM_DAT, LED_VAL
MOV ADD_24,#5H
CALL WR_DATA
RET
SW_PRO_END: RET
SW_CHECK: MOV P3,#00001111B
MOV R3,#100
SW_CHECK_1:JNB SW_A,SW_A_PRO
JNB SW_B,SW_B_PRO
DJNZ R3,SW_CHECK_1
CLR SW_BZ
CLR BELL_PIN
SW_END: RET
;查第一排开关
SW_A_PRO: JB SW_BZ,SW_END
MOV R3,#200
MOV R2,#4
DJNZ R3,$
SETB SW_BZ
SETB BELL_PIN
SW_A_PRO_1: MOV DPTR,#SW_TABLE
SW_A_LOOP: CLR A
MOVC A,@A+DPTR
MOV P3,A
JNB SW_A,SW_A_VAL ;已查出按下的按钮
INC DPTR ;
DJNZ R2,SW_A_LOOP
RET
SW_A_VAL: MOV A,R2
CJNE A,#1, SW_A_VAL_1
CPL LED_VAL.0
RET
SW_A_VAL_1: CJNE A,#2, SW_A_VAL_2
CPL LED_VAL.1
RET
SW_A_VAL_2: CJNE A,#3, SW_A_VAL_3
CPL LED_VAL.2
RET
SW_A_VAL_3: CJNE A,#4, SW_A_VAL_4
CPL LED_VAL.3
RET
SW_A_VAL_4: RET
;查第二排开关
SW_B_PRO: JB SW_BZ,SW_END
MOV R3,#200
MOV R2,#4
DJNZ R3,$
SETB SW_BZ
SETB BELL_PIN
SW_B_PRO_1: MOV DPTR,#SW_TABLE
SW_B_LOOP: CLR A
MOVC A,@A+DPTR
MOV P3,A
JNB SW_B,SW_B_VAL ;已查出按下的按钮
INC DPTR ;
DJNZ R2,SW_B_LOOP
RET
SW_B_VAL: MOV A,R2
CJNE A,#1, SW_B_VAL_1
CPL LED_VAL.4
RET
SW_B_VAL_1: CJNE A,#2, SW_B_VAL_2
CPL LED_VAL.5
RET
SW_B_VAL_2: CJNE A,#3, SW_B_VAL_3
CPL LED_VAL.6
RET
SW_B_VAL_3: CJNE A,#4, SW_B_VAL_4
CPL LED_VAL.7
RET
SW_B_VAL_4: RET
;按钮开关数值查表
SW_TABLE: DB 01111111B, 10111111B, 11011111B,11101111B
LED_DIGIT_SHOW: SETB LED_DIGIT_4
CALL SHOW_SUB
SETB LED_DIGIT_3
CALL SHOW_SUB
SETB LED_DIGIT_2
CALL SHOW_SUB
SETB LED_DIGIT_1
CALL SHOW_SUB
RET
SHOW_SUB: MOV DPTR,#DIGIT_TABLE
MOV R3,#11
SHOW_LOOP: CLR A
MOVC A,@A+DPTR
MOV P0,A
INC DPTR
CALL DELAY200MS
CALL DELAY200MS
DJNZ R3,SHOW_LOOP
ANL P2,#11110000B
RET
;数字查表 0 1 2 3 4 5
DIGIT_TABLE: DB 11000000B, 11111001B,10100100B,10110000B,10011001B, 10010010B
; 6 7 8 9 10
DB 10000010B, 11111000B,10000000B,10010000B,01111111B
;ADC值处理
ADC_PRO: DEC ADC_CHANG_CODE
MOV A,ADC_CHANG_CODE
CJNE A,#0,ADC_PRO_END
MOV ADC_CHANG_CODE,#10
ADC_PRO_1: CALL ADC
CALL ADC
MOV ADC_VAL,A
ADC_PRO_END: RET
WRITE1: MOV R2,#255
MOV R1,#0
MOV EEPROM_DAT,#100
WRITE_24: MOV ADD_24,R1
CALL WR_DATA
CALL DELAY_500uS
INC R1
DJNZ R2, WRITE_24
RET
;****************************
;24LC02 EEPROM
;写入数据
WR_DATA: LCALL ST24 ;启动
MOV A, #0A0H ;写入控制码
LCALL WBYTE
MOV A,ADD_24 ;写入需读数的地址
LCALL WBYTE
MOV A,EEPROM_DAT ;写入该地址中的数据
LCALL WBYTE
LCALL STOP24 ;停止
CALL DELAY_500uS
RET
RD_DATA: LCALL ST24 ;
MOV A,#0A0H
LCALL WBYTE
MOV A,ADD_24
NOP
LCALL WBYTE
NOP
LCALL ST24
MOV A,#0A1H ; 读控制码 10100001B
LCALL WBYTE
NOP
LCALL RBYTE
NOP
LCALL STOP24
RET
;*****写入************
WBYTE: MOV R3,#8
WBY24: CLR EEPROM_SCL
NOP
RLC A
MOV EEPROM_SDA,C
NOP
SETB EEPROM_SCL
NOP
DJNZ R3,WBY24
CLR EEPROM_SCL
NOP
SETB EEPROM_SCL
NOP
NOP
JB EEPROM_SDA,$
CLR EEPROM_SCL
NOP
RET
;*******读出数据**********
RBYTE: MOV R3,#8
RBY24: CLR EEPROM_SCL
NOP
NOP
NOP
NOP
NOP
NOP
SETB EEPROM_SCL
NOP
MOV C,EEPROM_SDA
RLC A
DJNZ R3,RBY24
CLR EEPROM_SCL
NOP
SETB EEPROM_SDA
NOP
SETB EEPROM_SCL
NOP
RET
;******启动************************
ST24: CLR WP
NOP
NOP
CLR EEPROM_SCL
NOP
NOP
SETB EEPROM_SDA
NOP
NOP
SETB EEPROM_SCL
NOP
NOP
CLR EEPROM_SDA
NOP
NOP
CLR EEPROM_SCL
RET
;******停止***************************
STOP24: CLR EEPROM_SCL
NOP
NOP
CLR EEPROM_SDA
NOP
NOP
SETB EEPROM_SCL
NOP
NOP
SETB EEPROM_SDA
NOP
NOP
CLR EEPROM_SCL
SETB WP
RET
;****取出模拟输入值
;adc tlc549
ADC: CLR A
CLR C
CLR AD_CS_PIN
NOP
NOP
NOP
;MOV R7,#50
;DJNZ R7,$
MOV R7,#8 ;8BIT
AD_LOOP:
SETB AD_CL_PIN
NOP
NOP
MOV C,AD_DA_PIN
CLR AD_CL_PIN
RLC A
DJNZ R7,AD_LOOP
SETB AD_CS_PIN
RET
;********延时200MS********
delay200ms: mov r5,#248
delay200ms_1: mov r6,#15
delay200ms_2: mov r7,#15
djnz r7,$
djnz r6,delay200ms_2
djnz r5,delay200ms_1
ret
;*******延时5ms*************************
DELAY_5ms: MOV R6,#10
DELAY_5ms_1: MOV R7,#248
DJNZ R7,$
DJNZ R6,DELAY_5ms_1
RET
;延时0.5ms
delay_500us: mov r5,#5; 15
delay_500us_1: mov r6,#248
djnz r6,$
djnz r5, delay_500us_1
ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -