;=====================================================
;89S51F板DEMO演示子程序.
;----------------------start-----------------------
KEY_NUM EQU 30H
MD EQU 31H
BEEP BIT P2.0
LED_R BIT P1.0
LED_Y BIT P1.2
LED_G BIT P1.4
org 000h
JMP main
org 0023h
ljmp rx_int
ORG 100H
main:MOV SP ,#60H
mov tmod,#23h
mov scon,#0d0h
mov th1,#0e6h ;串行通信1200-n-2
mov tl0,#0E6H
setb tr1
setb es
setb ea
MOV P1,#00H ;TEST
MOV P0,#00H
MOV P2,#00H
LCALL DELAY
MOV P1,#0FFH ;INIT
MOV P2,#0FFH
MOV P0,#0FFH
MOV P3,#0FFH
CLR A
MOV MD ,#00H
MOV A,P3 ;读地址开关SW1-SW4
CPL A
ANL A,#0F0H
SWAP A
MOV MD,A
RL A
MOV DPTR,#JUMP
JMP @A+DPTR
JUMP: AJMP MOD0 ;子程序散转到MOD0__MOD15
AJMP MOD1
AJMP MOD2
AJMP MOD3
AJMP MOD4
AJMP MOD5
AJMP MOD6
AJMP MOD7
AJMP MOD8
AJMP MOD9
AJMP MOD10
AJMP MOD11
AJMP MOD12
AJMP MOD13
AJMP MOD14
AJMP MOD15
;----------P0:KEY INTO BIN-------------
;键盘二进制译码
MOD0: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
M0:LCALL KEY
MOV P0,#0FFH
MOV A,KEY_NUM
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
MOV A,KEY_NUM
SWAP A
CPL A
MOV P1,A
MOV P0,#0ffh
mov sbuf,a
JMP M0
;---------P1 KEY INTO BCD------------
;键盘十进制译码
MOD1:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
M1:LCALL KEY
MOV P0,#0FFH
MOV A,KEY_NUM
DA A
LCALL DISP1
MOV A,KEY_NUM
SWAP A
CPL A
MOV P1,A
JMP M1
;------------P2 SEC_WATCH_TABLE---------------
;电子秒表
MOD2:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
MOV P1,#0FFH
MOV R0,#00H
MOV A,#00H
JB P3.0,$
MOV P0,#0C0H
MOV P2,#0C0H
M21:MOV R3,#10h
M22:LCALL DELAY ;SEC_LOOP
CPL P1.4
DJNZ R3,M22
CPL P1.7
MOV A,R0
ADD A,#01H
DA A
MOV R0,A
LCALL DISP1
CJNE R0,#60h,M21
clr p2.7
lcall delay
setb p2.7
JMP MOD2
;-----------P3 TRAFFIC------------
;模拟交通灯
MOD3:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
M3: MOV R0,#30
CLR LED_R
M31:LCALL DELAY
DJNZ R0,M31
SETB LED_R
MOV R0,#06H
CLR LED_Y
M32:LCALL DELAY
LCALL DELAY
CPL LED_Y
DJNZ R0,M32
SETB LED_Y
MOV R0,#30
CLR LED_G
M33:LCALL DELAY
DJNZ R0,M33
SETB LED_G
JMP M3
;--------P4 DISPLAY_DEMO1------------
;数码管笔段教学
MOD4: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$ ;a
MOV P2,#0FFH
MOV P0,#88H
M41:LCALL DELAY
LCALL DELAY
CPL P2.7
JB P3.0,M41
SETB P2.7
MOV P0,#83H ;b
M42:LCALL DELAY
LCALL DELAY
CPL P2.6
JB P3.0,M42
SETB P2.6
MOV P0,#0C6H
M43:LCALL DELAY ;C
LCALL DELAY
CPL P2.5
JB P3.0,M43
SETB P2.5
MOV P0,#0A1H ;D
M44:LCALL DELAY
LCALL DELAY
CPL P2.4
JB P3.0,M44
SETB P2.4
MOV P0,#86H ;E
M45:LCALL DELAY
LCALL DELAY
CPL P2.3
JB P3.0,M45
SETB P2.3
MOV P0,#8EH ;F
M46:LCALL DELAY
LCALL DELAY
CPL P2.2
JB P3.0,M46
SETB P2.2
MOV P0,#90H ;G
M47:LCALL DELAY
LCALL DELAY
CPL P2.1
JB P3.0,M47
SETB P2.1
MOV P0,#89H ;H
M48:LCALL DELAY
LCALL DELAY
CPL P2.0
JB P3.0,M48
SETB P2.0
JMP MOD4
;---------P5,DISP_DEMO2------------------
;数码管笔段动画
MOD5: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV P0,#0FFH
MOV P2,#0FFH
CLR P2.7
CLR P0.0
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.6
CLR P0.5
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.5
CLR P0.4
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.4
CLR P0.3
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.3
CLR P0.2
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.2
CLR P0.1
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CLR P2.1
CLR P0.6
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P2,#0FFH
MOV P0,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P2,#00H
MOV P0,#00H
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P2,#0FFH
MOV P0,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P2,#0FFH
MOV P0,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
JMP MOD5
;---------P6 DISP_DEMO3-------------------------
;数码管显示0--F
MOD6: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV R0,#00H
M6: MOV A,R0
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
MOV A,R0
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
MOV A,R0
SWAP A
CPL A
MOV P1,A
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
INC R0
CJNE R0,#10H,M6
MOV R0,#00H
JMP M6
;------------P7 DISP_DEMO4----------------
;数码管显示0--F,左移循环
MOD7: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
M71: MOV P0,#0FFH
MOV P2,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P0,#0FFH
MOV P2,#00000011B
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV R0,#00H
MOV R3,#01H
M72: MOV A,R0
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
INC R0
MOV A,R3
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
INC R3
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CJNE R3,#11H,M72
MOV P0,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
JMP MOD7
;----------P8 DISP_DEMO5--------
;数码管显示0--F,右移循环
MOD8: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
M81: MOV P0,#0FFH
MOV P2,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P2,#0FFH
MOV P0,#0C0H
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV R0,#00H
MOV R3,#01H
M82: MOV A,R0
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
INC R0
MOV A,R3
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
INC R3
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
CJNE R3,#11H,M82
MOV P2,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
JMP MOD8
;---------P9 LED_DEMO1------------------
;LED右移显示
MOD9: MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
M91:MOV A,#0EFH
MOV R0,#08H
M92:MOV P1,A
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
RL A
DJNZ R0,M92
JMP M91
;---------P10 LED_DEMO2----------------
;LED左移显示
MOD10:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MA1:MOV A,#7FH
MOV R0,#08H
MA2:MOV P1,A
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
RR A
DJNZ R0,MA2
JMP MA1
;---------P11 LED_DEMO3----------
;LED 彩灯效果
MOD11:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV P1,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#0e7h
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#0dbH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#0bdh
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#7eH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#00h
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#7eh
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#0bdH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#0dbh
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#0e7H
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#00h
LCALL DELAY
LCALL DELAY
LCALL DELAY
MOV P1,#0FFH
LCALL DELAY
LCALL DELAY
LCALL DELAY
mov p1,#00h
LCALL DELAY
LCALL DELAY
LCALL DELAY
JMP MOD11
;----------P12 KEY_DEMO------------
;按键提示音
MOD12:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
m12: lcall key
cjne a,#00h,bp
setb p2.0
jmp m12
bp: clr p2.0
lcall delay
jmp m12
;----------P13 ADD_DEMO---------
;加法器
MOD13:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV R0,#00H
M131:MOV A,R0
PUSH ACC
ANL A,#0F0H
SWAP A
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
POP ACC
ANL A,#0FH
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
M132:JB P3.0,$
LCALL DELAY
JB P3.0,M132
JNB P1.0,$
INC R0
JMP M131
;---------P14 DEC_DEMO-----------
;减法器
MOD14:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV R0,#0FFH
M141:MOV A,R0
PUSH ACC
ANL A,#0F0H
SWAP A
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
POP ACC
ANL A,#0FH
MOV DPTR,#led_code_p2
MOVC A,@A+DPTR
MOV P2,A
M142:JB P3.0,$
LCALL DELAY
JB P3.0,M142
JNB P3.0,$
DEC R0
JMP M141
;---------P15,CALC_DEMO-----------
;计算器
MOD15:MOV A,MD
LCALL DISP0
LCALL DELAY
LCALL DELAY
LCALL DELAY
JB P3.0,$
MOV R0,#00H
M151:MOV A,R0
PUSH ACC
ANL A,#0F0H
SWAP A
MOV DPTR,#LED_CODE_P0
MOVC A,@A+DPTR
MOV P0,A
POP ACC
ANL A,#0FH
mov dptr,#led_code_p2
MOVC A,@A+DPTR
MOV P2,A
M152:LCALL KEY
JNB P3.0,$
JNB P3.1,$
CJNE A,#01H,M153
INC R0
JMP M151
M153:CJNE A,#02H,M151
CJNE R0,#00H,M154
JMP M151
M154:DEC R0
JMP M151
;----------------rx----------
;串行中断
rx_int:push acc
push psw
jnb ri,end_rx
clr ri
mov a,sbuf
mov sbuf,a
jnb ti,$
clr ti
clr beep
lcall delay
lcall delay
setb beep
end_rx: pop psw
pop acc
reti
;===============SUB LIB============================
DISP0: MOV P0,#8CH ;"P"
PUSH ACC
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
POP ACC
RET
DISP1:;DA A
PUSH ACC
ANL A,#0FH
MOV DPTR,#LED_CODE_P2
MOVC A,@A+DPTR
MOV P2,A
POP ACC
ANL A,#0F0H
SWAP A
mov dptr,#led_code_p0
MOVC A,@A+DPTR
MOV P0,A
RET
DELAY: MOV R6,#0F0H
DL1: MOV R7,#0F0H
DJNZ R7,$
DJNZ R6,DL1
RET
KEY: MOV A,P3 ;jianpian
ANL A,#0FH
MOV KEY_NUM,A
LCALL DELAY
MOV A,P3
ANL A,#0FH
CJNE A,KEY_NUM,KEY
CPL A
ANL A,#0FH
MOV KEY_NUM,A
RET
LED_CODE_P0:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ;"0-F"
DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH
LED_CODE_P2:
DB 00000011B,10011111B,00100101B,00001101B
DB 10011001B,01001001B,01000001B,00011111B
DB 00000001B,00001001B,00010001B,11000001B
DB 01100011B,10000101B,01100001B,01110001B
END