找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3097|回復(fù): 0
收起左側(cè)

單片機(jī)電子琴匯編源碼

[復(fù)制鏈接]
ID:209876 發(fā)表于 2017-6-10 16:24 | 顯示全部樓層 |閱讀模式
ORG 0000H   ;初始位置00H
             JMP STARET  ;跳到主程序
                 ORG 000BH   ;定時(shí)器0中斷起始單元
                 JMP TIME0    ;跳到中斷程序
          
STARET:  MOV TMOD,#00000001B;設(shè)定工作方式為1
          MOV IE,  #10000010B  ;開中斷允許
                    SETB TR0
               
L1:       CALL  KEY  ;調(diào)用鍵盤掃描程序
          CLR  EA     ;關(guān)中斷總允許
                    JB   F0,L1     ;查詢鍵盤按下標(biāo)志
                    MOV A,22H    ;將鍵盤碼送單元A
                    MOV DPTR,#TABLE1
                    MOVC A,@A+DPTR ;將查詢的數(shù)碼管顯示碼送A
                    MOV  P0,A        ;將數(shù)碼管顯示碼送數(shù)碼管
                    MOV A,22H        ;將鍵盤碼送單元A
                    RL A          ;數(shù)據(jù)倍乘
                    MOV DPTR,#TABLE
                    MOVC A,@A+DPTR;將聲音編碼送A
                    MOV TH0,A;將聲音編碼高位給TH0
                    MOV 21H,A;送聲音編碼給21H單元儲(chǔ)存
                    MOV A,22H
                    RL A
                    INC A
                    MOVC A,@A+DPTR;取聲音編碼地位給A
                    MOV TL0,A;將聲音編碼送TL0
                    MOV 20H,A;將聲音編碼低位送20H儲(chǔ)存
L2:       CALL KEY;調(diào)用江畔掃描程序
          SETB EA;開斷總允許
                    JB F0,L1;查詢鍵盤按下標(biāo)志
                    JMP L2 ;沒有轉(zhuǎn)L2循環(huán)
/*******鍵盤掃描程序*********/
KEY:      SETB F0   ;鍵盤按下標(biāo)志至1
          MOV R3,#0F7H;R3送掃描碼
                    MOV R1,#00H;R1初始為0
L3:       MOV A,R3;將掃描碼送A
          MOV P2,A;將掃描碼送描p2掃描
                    MOV A,P2;讀取鍵盤狀態(tài)
                SETB C;進(jìn)位至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;進(jìn)位置1
                  RRC A;對(duì)A進(jìn)行右移
                  MOV R3 ,A ;送新的掃描碼給R3
                  JC L3 ;判斷是否掃描完畢,是則循環(huán)
                  RET;返回主程序
KEYIN:      MOV 22H,R1;將鍵盤碼送22H儲(chǔ)存
        CLR F0;對(duì)鍵盤按下標(biāo)志清0
                  RET;返回主程序
TIME0:      PUSH ACC;將A壓入堆棧
        PUSH PSW;將PSW壓入堆棧
              MOV TL0,20H;將聲音編碼低位送TL0
                  MOV TH0,21H;將聲音編碼高位送TH0
                  CPL P1.0;對(duì)輸出口聲音信號(hào)取反
                  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
/********共陽極數(shù)碼編碼*********/

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表