明天就要答辩了。求教大佬
仿真图是可以仿真出来的,原理图是对着仿真图画着,但是实物做不出来,怀疑是仿真图和pcb以及代码三者中出错了,哪位大佬帮忙指点一下,非常感谢
仿真图
原理图
pcb
代码如下:LINE EQU 30H
ROW EQU 31H
VAL EQU 32H
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
START: MOV P0,#00H
MOV TMOD,#01H
//;******************************************
//;按键扫描程序
//;******************************************
LSCAN: MOV P3,#0F0H
L1: JNB P3.0,L2
LCALL DELAY
JNB P3.0,L2
MOV LINE,#00H
LJMP RSCAN
L2: JNB P3.1,L3
LCALL DELAY
JNB P3.1,L3
MOV LINE,#01H
LJMP RSCAN
L3: JNB P3.2,L4
LCALL DELAY
JNB P3.2,L4
MOV LINE,#02H
LJMP RSCAN
L4: JNB P3.3,L1
LCALL DELAY
JNB P3.3,L1
MOV LINE,#03H
RSCAN: MOV P3,#0FH
C1: JNB P3.4,C2
MOV ROW,#00H
LJMP CALCU
C2: JNB P3.5,C3
MOV ROW,#01H
LJMP CALCU
C3: JNB P3.6,C4
MOV ROW,#02H
LJMP CALCU
C4: JNB P3.7,C1
MOV ROW,#03H
CALCU: MOV A,LINE ;计算键号
MOV B,#04H
MUL AB
ADD A,ROW
MOV VAL,A
//;*******************************************
//;根据键号查表得到定时器的定时常数,
//;从而发出不同频率的声音
//;*******************************************
MOV DPTR,#TABLE2
MOV B,#2
MUL AB
MOV R1,A
MOVC A,@A+DPTR
MOV TH0,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV TL0,A
MOV IE,#82H
SETB TR0
MOV A,VAL ;显示键号
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
MOV P0,A
//;*******************************************
//;等待按键释放
//;*******************************************
W0: MOV A,P3
CJNE A,#0FH,W1
MOV P0,#00H
CLR TR0
LJMP LSCAN
W1: MOV A,P3
CJNE A,#0F0H,W2
MOV P0,#00H
CLR TR0
LJMP LSCAN
W2: SJMP W0
//;****************************************
//;定时器0中断服务程序,输出特定频率的方波,
//;驱动扬声器发声
//;****************************************
INT_T0: MOV DPTR,#TABLE2
MOV A,VAL
MOV B,#2
MUL AB
MOV R1,A
MOVC A,@A+DPTR
MOV TH0,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV TL0,A
CPL P1.0
RETI
DELAY: MOV R6,#10
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H //gongyin
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
TABLE2: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
END
|