生日礼物

来源:互联网 发布:python keras 股票 编辑:程序博客网 时间:2024/05/16 19:08


 LED EQU 08H
 L0A EQU 09H
 ORG 0000H
 AJMP MAIN
 ORG 000BH;计数器T0溢出中断
 JMP tim0
 ORG 0030h

MAIN: MOV SP,#60H
 MOV P0,#00000000B
 MOV P2,#10001111B
 LCALL DELAY1S
 mov tmod,#01h ;设定时方式(方式1)
 mov ie,#82h ;开中断,允许T0中断

start0:
 mov 30h,#00h ;
next:  mov a,30h
 mov dptr,#table2
 movc a,@a+dptr ;查表取音调和节拍
 mov r2,a
 jz end0 ;为零,不进行处理.JZ(累加器为零则转移)
 anl a,#0fh
 mov r5,a ;将节拍存入R5
 mov a,r2
 swap a
 anl a,#0fh
 jnz sing ;根据音调决定是否演奏.
 clr tr0
 jmp d1
sing:  dec a
 mov 22h,a ;将音调存入22H.
 rl a
 mov dptr,#table1
 movc a,@a+dptr ;根据音调决定定时器初值.
 mov th0,a ;放入TH0
 mov 21h,a
 mov a,22h
 rl a
 inc a
 movc a,@a+dptr
 mov tl0,a ;放入TL0
 mov 20h,a
 setb tr0 ;启动定时
d1:  Lcall DELAY10MS
 Lcall DELAY10MS
 Lcall DELAY10MS
 Lcall DELAY10MS
 Lcall DELAY10MS
 inc 30h
 jmp next
end0:  clr tr0
 jmp LOOP5
tim0: ;定时器中断服务程序
 push acc
 push psw
 mov tl0,20h ;重赋初值.
 mov th0,21h
 cpl p3.3
 pop psw
 pop acc
 reti
LOOP5:MOV R3,#03H
LOOP0: 
 MOV A,R3
 MOV L0A,A
 MOV P0,#11111110B
 MOV P2,#11101111B
 LCALL DELAY10MS

 MOV P0,#11111101B
 MOV P2,#11011111B
 LCALL DELAY10MS

 MOV P0,#11111011B
 MOV P2,#10111111B
 LCALL DELAY10MS

 MOV P0,#01110111B
 MOV P2,#11111111B
 LCALL DELAY10MS
 

 MOV P0,#10101111B
 LCALL DELAY10MS

 MOV P0,#11011111B
 LCALL DELAY10MS

 MOV P0,#10101111B
 LCALL DELAY10MS

 MOV P0,#01110111B
 LCALL DELAY10MS

 MOV P0,#11111011B
 MOV P2,#10111111B
 LCALL DELAY10MS

 MOV P0,#11111101B
 MOV P2,#11011111B
 LCALL DELAY10MS

 MOV P0,#11111110B
 MOV P2,#11101111B
 LCALL DELAY10MS


LOOP1: 

 MOV P2,#11111111B
 LCALL DELAY10MS
 LCALL DELAY10MS

 MOV P1,#00000000B
 LCALL DELAY10MS

 MOV P0,#11111110B
 LCALL DELAY10MS

 MOV P0,#11111101B
 LCALL DELAY10MS

 MOV P0,#11111011B
 LCALL DELAY10MS

 MOV P0,#11110111B
 LCALL DELAY10MS

 MOV P0,#11101111B
 LCALL DELAY10MS

 MOV P0,#11011111B
 LCALL DELAY10MS

 MOV P0,#10111111B
 LCALL DELAY10MS

 MOV P0,#01111111B
 LCALL DELAY10MS

 MOV P0,#11111111B
 MOV P2,#10111111B
 LCALL DELAY10MS

 MOV P2,#11011111B
 LCALL DELAY10MS

 MOV P2,#11101111B
 LCALL DELAY10MS

 
 MOV P0,#11111110B;Z
 LCALL DELAY10MS

 MOV P0,#11111101B
 LCALL DELAY10MS

 MOV P0,#11111011B
 LCALL DELAY10MS

 MOV P0,#11110111B
 LCALL DELAY10MS

 MOV P0,#11101111B
 LCALL DELAY10MS

 MOV P0,#11011111B
 LCALL DELAY10MS

 MOV P0,#10111111B
 LCALL DELAY10MS

 MOV P0,#01111111B
 LCALL DELAY10MS

 MOV P0,#11111111B
 MOV P2,#10101111B
 LCALL DELAY10MS

 MOV P2,#11001111B
 LCALL DELAY10MS


 MOV P0,#11111110B;Z
 LCALL DELAY10MS

 MOV P0,#11111101B
 LCALL DELAY10MS

 MOV P0,#11111011B
 LCALL DELAY10MS

 MOV P0,#11110111B
 LCALL DELAY10MS

 MOV P0,#11101111B
 LCALL DELAY10MS

 MOV P0,#11011111B
 LCALL DELAY10MS

 MOV P0,#10111111B
 LCALL DELAY10MS

 MOV P0,#01111111B
 LCALL DELAY10MS

 MOV P0,#11111111B
 MOV P2,#10001111B
 LCALL DELAY10MS

 MOV P0,#11111110B;Z
 LCALL DELAY10MS

 MOV P0,#11111101B
 LCALL DELAY10MS

 MOV P0,#11111011B
 LCALL DELAY10MS

 MOV P0,#11110111B
 LCALL DELAY10MS

 MOV P0,#11101111B
 LCALL DELAY10MS

 MOV P0,#11011111B
 LCALL DELAY10MS

 MOV P0,#10111111B
 LCALL DELAY10MS

 MOV P0,#01111111B
 LCALL DELAY10MS

 MOV P0,#01111110B;Z
 LCALL DELAY10MS

 MOV P0,#01111101B
 LCALL DELAY10MS

 MOV P0,#01111011B
 LCALL DELAY10MS

 MOV P0,#01110111B
 LCALL DELAY10MS

 MOV P0,#01101111B
 LCALL DELAY10MS

 MOV P0,#01011111B
 LCALL DELAY10MS

 MOV P0,#00111111B
 LCALL DELAY10MS

 MOV P0,#00111110B;Z
 LCALL DELAY10MS

 MOV P0,#00111101B
 LCALL DELAY10MS

 MOV P0,#00111011B
 LCALL DELAY10MS

 MOV P0,#00110111B
 LCALL DELAY10MS

 MOV P0,#00101111B
 LCALL DELAY10MS

 MOV P0,#00011111B
 LCALL DELAY10MS

 MOV P0,#00011110B;Z
 LCALL DELAY10MS

 MOV P0,#00011101B
 LCALL DELAY10MS

 MOV P0,#00011011B
 LCALL DELAY10MS

 MOV P0,#00010111B
 LCALL DELAY10MS

 MOV P0,#00001111B
 LCALL DELAY10MS

 MOV P0,#00001110B;Z
 LCALL DELAY10MS

 MOV P0,#00001101B
 LCALL DELAY10MS

 MOV P0,#00001011B
 LCALL DELAY10MS

 MOV P0,#00000111B
 LCALL DELAY10MS

 MOV P0,#00000110B;Z
 LCALL DELAY10MS

 MOV P0,#00000101B
 LCALL DELAY10MS

 MOV P0,#00000011B
 LCALL DELAY10MS

 MOV P0,#00000010B;Z
 LCALL DELAY10MS

 MOV P0,#00000001B
 LCALL DELAY10MS

 MOV P0,#00000000B;Z
 LCALL DELAY10MS

 MOV A,L0A
 MOV R3,A
 DJNZ R3,LOOP6  
 LJMP MAIN

LOOP6:LJMP LOOP0

DELAY1S: MOV R3, #10  ;延时1S的子程序
DELAYA:  MOV R4, #200
DELAYB:  MOV R5, #247
  DJNZ R5, $
  DJNZ R4, DELAYB
  DJNZ R3, DELAYA ;247*2*200*10+200*2*10+2*10+1*10+1*200=0.992230S
 RET


DELAY10MS:
 MOV R6,#3H

LOOP2: ORL P2,#00000001B
 ANL P2,#11110111B
 MOV LED,#00H
 MOV A,LED
 MOV DPTR, #TABLE
 MOVC A,@A+DPTR
 MOV P1,A
 LCALL DELAY100MS
 INC LED
 
 ORL P2,#00001000B
 ANL P2,#11111011B
 MOV A,LED
 MOV DPTR, #TABLE
 MOVC A,@A+DPTR
 MOV P1,A
 LCALL DELAY100MS
 INC LED

 ORL P2,#00000100B
 ANL P2,#11111101B
 MOV A,LED
 MOV DPTR, #TABLE
 MOVC A,@A+DPTR
 MOV P1,A
 LCALL DELAY100MS
 INC LED
 
 ORL P2,#00000010B
 ANL P2,#11111110B
 MOV A,LED
 MOV DPTR, #TABLE
 MOVC A,@A+DPTR
 MOV P1,A
 LCALL DELAY100MS

 DJNZ R6,LOOP2

 RET


DELAY100MS: MOV R5, #1 ;延时20MS的子程序
AK:  MOV R3, #25             
BK:  MOV R4, #100
  DJNZ R4, $
  DJNZ R3, BK
  DJNZ R5, AK
 RET

table1: ;决定音调的定时初值.
 dw 64260,64400,64524,64580
 dw 64684,64777,64820,64898
 dw 64968,65030,65058,65110
 dw 65157,65178,65217

table2: ;决定音调和节拍的表格,不同的歌曲只是此表不同
 ;1
 db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
 ;2
 db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
 ;3
 db 82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
 ;4
 db 82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00

TABLE:
 DB 8EH
 DB 0C7H
 DB 0C0H 
 DB 92H


 END
  

原创粉丝点击