好東東,下面是樓主的源碼:
-
- ;;12M晶振可用
- ;----------------------
- ISP_DATA EQU 0C2H ;定義EEPROM相關寄存器
- ISP_ADDRH EQU 0C3H ;此類寄存器地址需參考所用單片機的手冊來設置
- ISP_ADDRL EQU 0C4H ;
- ISP_CMD EQU 0C5H
- ISP_TRIG EQU 0C6H
- ISP_CONTR EQU 0C7H
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- P4 EQU 0C0H
- P4SW EQU 0BBH;;;將P4設置成功普通IO口
- P4M1 EQU 0B3H
- P4M0 EQU 0B4H
- MOV P4SW,#70H; #70H = P4.4\P4.5\P4.6
- BASS_TONE EQU 34H ;低音控制緩沖
- TREBLE_TONE EQU 35H ;高音控制緩沖
- M_VOL EQU 32H ;主音量控制緩沖
- IN_BUFF EQU 33H ;輸入選擇緩存
- PT2314_MSB EQU 3DH ;發送PT2314數高位
- MUTE_BIT BIT P3.2;靜音狀態指示
- SCL BIT P0.2;P3.4;
- SDA BIT P0.3;P3.5;
- DAT1 EQU 13H ;
- DAT2 EQU 14H ;
- MOV DAT2,#7;
- MOV DAT1,#7;
- RS BIT P3.6 ;定義RS為P2.5
- RW BIT P3.7 ;定義RW為P2.6
- E BIT P4.0 ;定義E為P2.7
- SETB P1.1;
- SETB P0.2;
- SETB P0.3;
- SETB P0.4;
- SETB P0.5;
- SETB P0.6;
- CLR P0.7;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 36H,#02H;VOL
- MOV 37H,#03H;VOL
- MOV 38H,#04H;O
- MOV 39H,#05H;F O
- MOV 40H,#06H;F N
- MOV 41H,#07H;+ -
- MOV 42H,#08H;BASS
- MOV 43H,#09H;BASS
- MOV 44H,#10H;+ -
- MOV 45H,#11H;TR
- MOV 46H,#12H;TR
- MOV 47H,#13H;IN
- MOV 48H,#14;TR<
- MOV 49H,#14;BASS<
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV M_VOL,#30 ;開機時默認音量為第30級 0級聲音最大(一共0-63級)
- MOV IN_BUFF,#45H;輸入通道默認2 1 #44H 2 #45H 3 #46H
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- JNB P0.4,EEPROMW_0
- LJMP YZ1;
- EEPROMW_0:
- LCALL ERASE
- MOV DPTR,#00H ;第1扇區
- MOV A,DAT1;DAT1;
- ACALL EEPROMW ;寫一字節
- LCALL DELAY10;
- MOV DPTR,#100H ;第2扇區
- MOV A,DAT2;
- ACALL EEPROMW ;寫一字節
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- YZ1: MOV DPTR,#00H ;第1扇區起始地址;存入新鍵值
- LCALL EEPROMR ;讀
- MOV TREBLE_TONE,A;MOV M_VOL,A;
- LCALL DELAY10;
- MOV DPTR,#100H ;第1扇區起始地址;存入新鍵值
- LCALL EEPROMR ;
- MOV BASS_TONE,A;
-
- LCALL VOL_DIV; 調用音量除用以顯示
- LCALL BASS_DIV;調用低音強度查表用以顯示
- LCALL TR_DIV; 高音強度查表用以顯示
- LCALL YZ; 調用預置音量
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;×××××××××××××××××××××××××
- LCD:MOV P2,#38H ;設置功能
- LCALL XML
- MOV P2,#38H ;設置功能
- LCALL XML
- MOV P2,#01H ;清除屏幕
- LCALL XML
- MOV P2,#0CH ;設置顯示屏開,光標關
- LCALL XML
- MOV P2,#1CH ;設置
- LCALL XML
- LCALL DIP2;
- LCALL DIP1;BASS+TR DIP1顯示低音 高音強弱 -7 0 +7
- ;主程序
- JNB P0.4,$;
- LCALL DELAY10;
- JNB P0.4,$;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MAINN: MOV 48H,#14;
- MOV 49H,#14;
- LCALL DIP1;
- MAIN:
- JNB P0.6,KI111;+vol
- JNB P0.5,KI222;-vol
- JNB P0.4,MAIN11;KK77; MUTE
- LJMP MAIN;
- KI111:LJMP KK111
- KI222:LJMP KK222;
- MAIN11: LCALL T2MS;
- JB P0.4,MAIN;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- LCALL T2MS;
- JNB P0.4,GH;
- LCALL KK7;
- LJMP MAINN;
- MUTES: JNB P0.4,$;
- LJMP MAINN;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- GH: JB MUTE_BIT,MUTES;
- MOV 48H,#16;
- LCALL DIP1;
- JNB P0.4,$
- LCALL T2MS;
- JNB P0.4,$
- MOV 66H,#245
- MOV 67H,#245
- MOV 68H,#10
- MAIN1:
- JNB P0.6,KI333;+vol
- JNB P0.5,KI444;-vol
- JNB P0.4,MAIN22;KK77; MUTE
- DJNZ 68H,MAIN1;
- DJNZ 67H,MAIN1
- DJNZ 66H,MAIN1
- LJMP MAINN;
- KI333:LJMP KK333;
- KI444:LJMP KK444;
- MAIN22: LCALL DELAY10;
- JB P0.4,MAIN1;
- JNB P0.4,$
- LCALL DELAY10;
- JNB P0.4,$
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- MOV 48H,#14;
- MOV 49H,#16;
- LCALL DIP1;
- MOV 66H,#245
- MOV 67H,#245
- MOV 68H,#10
- MAIN2:
- JNB P0.6,KI555;+vol
- JNB P0.5,KI666;-vol
- JNB P0.4,MAIN33;KK77; MUTE
- ; LJMP MAIN2;
- DJNZ 68H,MAIN2;
- DJNZ 67H,MAIN2
- DJNZ 66H,MAIN2
- LJMP MAINN;
- KI555:LJMP KK555;
- KI666:LJMP KK666;
- MAIN33: LCALL DELAY10;
- JB P0.4,MAIN2;
- JNB P0.4,$
- LCALL DELAY10;
- JNB P0.4,$
- LJMP MAINN;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
- ;秒延時子程序
- DELAY10:
- MOV R4,#10;10
- D10:
- MOV R5,#248;248
- DJNZ R5,$
- DJNZ R4,D10
- RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- T2MS: MOV R6,#248
- D21: MOV R7,#248
- DJNZ R7,$
- DJNZ R6,D21
- RET
- ;EEPROM相關操作
- ;-----------------------
- ERASE:;擦除
- MOV ISP_ADDRH,DPH ;送高地址
- MOV ISP_ADDRL,DPL ;送低地址
- MOV ISP_CONTR,#83H ;允許ISP/IAP操作(6~12MHz)
- MOV ISP_CMD,#03H ;扇區擦除
- ACALL ISPCF ;觸發IAP
- ACALL ISP_DISABLE ;禁止ISP/IAP操作
- RET
- ;----------------------
- EEPROMW:;寫
- MOV ISP_DATA,A ;ACC里是要寫入的數據
- MOV ISP_ADDRH,DPH ;送高地址
- MOV ISP_ADDRL,DPL ;送低地址
- MOV ISP_CONTR,#83H ;允許ISP/IAP操作(6~12MHz)
- MOV ISP_CMD,#02H ;送寫命令
- ACALL ISPCF ;觸發IAP
- ACALL ISP_DISABLE ;禁止ISP/IAP操作
- RET
- ;----------------------
- EEPROMR: ;讀
- MOV ISP_ADDRH,DPH ;送高地址
- MOV ISP_ADDRL,DPL ;送低地址
- MOV ISP_CONTR,#83H ;允許ISP/IAP操作(6~12MHz)
- MOV ISP_CMD,#01H ;送讀命令
- ACALL ISPCF ;觸發IAP
- MOV A,ISP_DATA ;讀出的數據放到ACC
- ACALL ISP_DISABLE ;禁止ISP/IAP操作
- RET
- ;----------------------
- ISPCF: ;觸發ISP/IAP
- MOV ISP_TRIG,#5AH; #46H ;以MCU型號來定;STC12C2052(46H/0B9H)
- MOV ISP_TRIG,#0A5H; #0B9H ;11F和15F系列相同(5AH/0A5H)
- NOP
- RET
- ;----------------------
- ISP_DISABLE: ;禁止ISP/IAP操作(出于安全考慮才要)
- MOV ISP_CONTR,#00H
- MOV ISP_CMD,#00H
- MOV ISP_TRIG,#00H
- MOV ISP_ADDRH,#0FFH
- MOV ISP_ADDRL,#0FFH
- RET
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- EEPROMW_1:
- LCALL ERASE
- MOV DPTR,#00H ;第1扇區
- MOV A,TREBLE_TONE;MOV A,M_VOL;
- ACALL EEPROMW ;寫一字節
- LCALL DELAY10
- LCALL DELAY10
- MOV DPTR,#100H ;第2扇區
- MOV A,BASS_TONE;
- ACALL EEPROMW ;寫一字節
- RET;
- ;=============================================
- ;高低音調用
- CTRL_SHUI:
- MOV DPTR,#TONG_DATA
- MOVC A,@A+DPTR
- RET
- TONG_DATA:
- DB 00H,01H,02H,03H,04H,05H,06H,07H
- DB 0EH,0DH,0CH,0BH,0AH,09H,08H
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;主音量調用
- VOL:
- MOV DPTR,#VOL_DATA
- MOVC A,@A+DPTR
- RET
- VOL_DATA:
- DB 3FH,3EH,3DH,3CH,3BH,3AH,39H,38H,37H,36H ;
- DB 35H,34H,33H,32H,31H,30H,2FH,2EH,2DH,2CH
- DB 2BH,2AH,29H,28H,27H,26H,25H,24H,23H,22H
- DB 21H,20H,1FH,1EH,1DH,1CH,1BH,1AH,19H,18H
- DB 17H,16H,15H,14H,13H,12H,11H,10H,0FH,0EH
- DB 0DH,0CH,0BH,0AH,09H,08H,07H,06H,05H,04H
- DB 03H,02H,01H,00H ;(PT2313主音量63)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;顯示調用
- TABLE: INC A
- MOVC A,@A+PC
- RET
- DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,2DH,2BH,4FH,46H,20H,4EH,7FH;;1602
- ;0 1 2 3 4 5 6 7 8 9 - + O F 空位 N ← 顯示
- ;0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 查表數
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;高低音顯示調用
- TAB:
- MOV DPTR,#TABLE1
- MOVC A,@A+DPTR ; 以A中的數值為地址偏移量進行查表
- ret;
- TABLE1:
- DB 37H,36H,35H,34H,33H,32H,31H,30H,31H,32H,33H,34H,35H,36H,37H
- ; 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 顯示
- ; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 查表數
- ;==============================================
- $INCLUDE (DIP.ASM)
- $INCLUDE (YZ.ASM)
- $INCLUDE (PT2314_WR.ASM)
- $INCLUDE (KEYDAT.ASM)
- $INCLUDE (VOL.ASM)
- $INCLUDE (BASS.ASM)
- $INCLUDE (TR.ASM)
- $INCLUDE (MUTE.ASM)
- END
復制代碼 |