想制作简单的电子琴,有8个按键,前7个分别对应不同的音阶,最后一个键播放特定音乐。用的STC89C52单片机来下载程序,程序是在网上搜到的 , STC烧录软件显示程序下载成功,可是用蜂鸣器试总是不成功,我用P2口作为8个按键输入口,P1.0作为蜂鸣器的输出口。我想应该是程序出错,但找不出哪里出错,急寻原因。电路图和程序如下,程序字数超过最多,我在后面继续补充的:
程序:ORG 02HMAIN: MOV SP,#60H ;初始化堆栈指针 MOV 30H,#00 ;定时器初值清零 MOV 31H,#00
MOV P1,#0FFH ;设置P1口为输入模式 MOV TMOD,#01H ;设置定时器0为工作模式1 SETB ET0 ;开定时器0中断 SETB EA ;开总中断 CLR TR0 ;CLR是输低电平指令,关闭定时器0START: MOV R3,P2 CJNE R3,#0FFH,KEY1 CLR TR0 SJMP START
KEY1: ;按键 1 ,P2.0 CJNE R3,#0FEH,KEY2 MOV 30H,#0FBH ;定时器初值清零 MOV 31H,#0E9H MOV @R0,#0FBH ;将音阶存放到R0,R1对应的地址中 MOV @R1,#0E9H INC R0 INC R1 LJMP SET_TIMERKEY2: ;按键2 ,P2.1 CJNE R3,#0FDH,KEY3
MOV 30H,#0FCH MOV 31H,#5CH MOV @R0,#0FCH MOV @R1,#5CH INC R0 INC R1LJMP SET_TIMERKEY3: ;按键3 ,P2.2 CJNE R3,#0FBH,KEY4
MOV 30H,#0FCH MOV 31H,#0C1H MOV @R0,#0FCH MOV @R1,#0C1H INC R0 INC R1 LJMP SET_TIMERKEY4: ;按键4 ,P2.3 CJNE R3,#0F7H,KEY5
MOV 30H,#0FCH MOV 31H,#0EFH MOV @R0,#0FCH MOV @R1,#0EFH INC R0 INC R1 LJMP SET_TIMERKEY5: ;按键5 ,P2.4 CJNE R3,#0EFH,KEY6
MOV 30H,#0FDH MOV 31H,#045H MOV @R0,#0FDH MOV @R1,#045H INC R0 INC R1LJMP SET_TIMERKEY6: ;按键6 ,P2.5 CJNE R3,#0DFH,KEY7
MOV 30H,#0FDH MOV 31H,#92H MOV @R0,#0FDH MOV @R1,#92H INC R0 INC R1 LJMP SET_TIMER
KEY7: ;按键7 ,P2.6 CJNE R3,#0BFH,KEY8
MOV 30H,#0FDH MOV 31H,#0D6H MOV @R0,#0FDH MOV @R1,#0D6H INC R0 INC R1 LJMP SET_TIMER
程序继续:
SET_TIMER:
SETB TR0
LJMP START
NOKEY:
CLR TR0
LJMP START
INT_T0:
MOV TH0,30H
MOV TL0,31H
CPL P1.0
RETI
YYBF:
CLR P1.1
numtim equ 20h
gewei equ 21h
shiwei equ 22h
scanled equ 23h
org 1000h
jmp YYstart
org 001bh
LYBF1:
MOV 30H,@R0
MOV 31H,@R1
INC R0
INC R1
CLR P0.0
SETB TR0
LCALL DELAY1
CLR TR0
LJMP LYBF1
RET
DELAY1:
MOV R4,#25
LOOP1:
MOV R5,#248
DJNZ R5,$
DJNZ R4,LOOP1
RET
END
è½ææ¹åçå ·ä½ç¨åºæ令åä¸ä¸åï¼éº»ç¦ä½ äºã
追çææç¨åºé¡ºåºçä¸ä¸ï¼ç¨åºæ¬èº«æ¯å¦æ£ç¡®è¿æ¯ä½ èªå·±æ£æ¥ä¸ä¸ã
numtim equ 20h
gewei equ 21h
shiwei equ 22h
scanled equ 23h
org 0000h
LJMP MAIN
org 000bh
LJMP INT_T0
ORG 0500H
MAIN:
MOV SP,#60H ;åå§åå æ æé
MOV 30H,#00 ;å®æ¶å¨åå¼æ¸
é¶
MOV 31H,#00
MOV P1,#0FFH ;设置P1å£ä¸ºè¾å
¥æ¨¡å¼
MOV TMOD,#01H ;设置å®æ¶å¨0为工ä½æ¨¡å¼1
SETB ET0 ;å¼å®æ¶å¨0ä¸æ
SETB EA ;å¼æ»ä¸æ
CLR TR0 ;CLRæ¯è¾ä½çµå¹³æ令ï¼å
³éå®æ¶å¨0
START:
MOV R3,P2
CJNE R3,#0FFH,KEY1
CLR TR0
SJMP START
KEY1: ;æé® 1 ,P2.0
CJNE R3,#0FEH,KEY2
MOV 30H,#0FBH ;å®æ¶å¨åå¼æ¸
é¶
MOV 31H,#0E9H
MOV @R0,#0FBH ;å°é³é¶åæ¾å°R0ï¼R1对åºçå°åä¸
MOV @R1,#0E9H
INC R0
INC R1
LJMP SET_TIMER
.................................åå¤äºä¸è®©