找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2686|回复: 0
收起左侧

单片机电子琴汇编源码

[复制链接]
ID:209876 发表于 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
/********共阳极数码编码*********/

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表