标题:
单片机电子琴汇编源码
[打印本页]
作者:
123456x
时间:
2017-6-10 16:24
标题:
单片机电子琴汇编源码
ORG 0000H ;初始位置00H
JMP STARET ;跳到主程序
ORG 000BH ;定时器0中断起始单元
JMP TIME0 ;跳到中断程序
STARET: MOV TMOD,#00000001B;设定工作方式为1
MOV IE, #10000010B ;开中断允许
SETB TR0
L1: CALL KEY ;调用键盘扫描程序
CLR EA ;关中断总允许
JB F0,L1 ;查询键盘按下标志
MOV A,22H ;将键盘码送单元A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR ;将查询的数码管显示码送A
MOV P0,A ;将数码管显示码送数码管
MOV A,22H ;将键盘码送单元A
RL A ;数据倍乘
MOV DPTR,#TABLE
MOVC A,@A+DPTR;将声音编码送A
MOV TH0,A;将声音编码高位给TH0
MOV 21H,A;送声音编码给21H单元储存
MOV A,22H
RL A
INC A
MOVC A,@A+DPTR;取声音编码地位给A
MOV TL0,A;将声音编码送TL0
MOV 20H,A;将声音编码低位送20H储存
L2: CALL KEY;调用江畔扫描程序
SETB EA;开断总允许
JB F0,L1;查询键盘按下标志
JMP L2 ;没有转L2循环
/*******键盘扫描程序*********/
KEY: SETB F0 ;键盘按下标志至1
MOV R3,#0F7H;R3送扫描码
MOV R1,#00H;R1初始为0
L3: MOV A,R3;将扫描码送A
MOV P2,A;将扫描码送描p2扫描
MOV A,P2;读取键盘状态
SETB C;进位至1
MOV R5,#04H;将4给R5单元,用于行扫描
L4: RLC A
JNC KEYIN;有键按下跳到KEYIN
INC R1;无键按下R1加1
DJNZ R5,L4;判断一行有没有判断完毕
MOV A,R3;扫描完毕后,再次送扫描码给A
SETB C;进位置1
RRC A;对A进行右移
MOV R3 ,A ;送新的扫描码给R3
JC L3 ;判断是否扫描完毕,是则循环
RET;返回主程序
KEYIN: MOV 22H,R1;将键盘码送22H储存
CLR F0;对键盘按下标志清0
RET;返回主程序
TIME0: PUSH ACC;将A压入堆栈
PUSH PSW;将PSW压入堆栈
MOV TL0,20H;将声音编码低位送TL0
MOV TH0,21H;将声音编码高位送TH0
CPL P1.0;对输出口声音信号取反
POP PSW;.从堆栈还原PSW
POP ACC;从堆栈还原ACC
RETI ;中断返回
/********音符编码***************/
TABLE: DW 64021,64103,64260,64400
DW 64524,64580,64684,64777
DW 64820,64898,64968,65030
DW 65058,65110,65157,65178
/********共阳极数码编码*********/
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1