找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4471|回复: 3
打印 上一主题 下一主题
收起左侧

基于单片机的矩阵式键盘电子琴仿真课程设计 原创作品

[复制链接]
跳转到指定楼层
楼主
电子琴的仿真我在本科阶段的一个课程设计题目,以51单片机为核心,电子琴按键是4乘4的矩阵式键盘,代码是用汇编语言写的,都是原创。


51单片机源程序:
  1. //附录一 程序清单
  2. BUFF EQU 30H
  3. STH0 EQU 31H
  4. STL0 EQU 32H
  5. TEMP EQU 33H
  6. ORG 0000H
  7. LJMP START
  8. ORG 000BH
  9. LJMP INT_T0
  10. ORG 001BH
  11. LJMP TIM1
  12. START:MOV TMOD,#01H
  13.       SETB ET0
  14.           SETB EA
  15. MAIN:MOV P1,#0FFH                        ;置为高电平
  16.      CLR P1.4                                ;扫第一行
  17.          MOV A,P1
  18.          ANL A,#0FH
  19.          XRL A,#0FH
  20.          JZ KKEY1                                ;为零无键按下转移
  21.          LCALL DELY10MS
  22.          MOV A,P1                                ;到底有没有键按下啊,去抖
  23.          ANL A,#0FH
  24.          XRL A,#0FH
  25.          JZ KKEY1                               
  26.          MOV A,P1
  27.          ANL A,#0FH
  28.          CJNE A,#0EH,KK1                    ;相等说明这回是真有键按下了,不骗人        00001110第一列
  29.          MOV BUFF,#0                        ;给个键值
  30.          LJMP NDK1                                ;终于出声音了巴拉巴拉巴拉巴拉
  31. KK1:CJNE A,#0DH,KK2                    ;第二列00001101
  32.      MOV BUFF,#1
  33.          LJMP NDK1                                                                                                               
  34. KK2:CJNE A,#0BH,KK3                        ;第三列00001011
  35.     MOV BUFF,#2
  36.         LJMP NDK1
  37. KK3:CJNE A,#07H,KK4                        ;第四列0000 0111
  38.     MOV BUFF,#3
  39.         LJMP NDK1
  40. KK4:NOP                                                 ;空
  41.                            ;下面都是一样的套路扫描第二三四行,复制三遍OK
  42. KKEY1:MOV P1,#0FFH                       
  43.      CLR P1.5                                ;扫第二行
  44.          MOV A,P1
  45.          ANL A,#0FH
  46.          XRL A,#0FH
  47.          JZ KKEY2                               
  48.          LCALL DELY10MS
  49.          MOV A,P1                               
  50.          ANL A,#0FH
  51.          XRL A,#0FH
  52.          JZ KKEY2                               
  53.          MOV A,P1
  54.          ANL A,#0FH
  55.          CJNE A,#0EH,KK5               
  56.          MOV BUFF,#4                       
  57.          LJMP NDK1                               
  58. KK5:CJNE A,#0DH,KK6               
  59.      MOV BUFF,#5
  60.          LJMP NDK1                                                                                                               
  61. KK6:CJNE A,#0BH,KK7                       
  62.     MOV BUFF,#6
  63.         LJMP NDK1
  64. KK7:CJNE A,#07H,KK8                       
  65.     MOV BUFF,#7
  66.         LJMP NDK1
  67. KK8:NOP

  68. KKEY2:MOV P1,#0FFH                       
  69.      CLR P1.6                                ;扫第三行
  70.          MOV A,P1
  71.          ANL A,#0FH
  72.          XRL A,#0FH
  73.          JZ KKEY3                               
  74.          LCALL DELY10MS
  75.          MOV A,P1                               
  76.          ANL A,#0FH
  77.          XRL A,#0FH
  78.          JZ KKEY3                               
  79.          MOV A,P1
  80.          ANL A,#0FH
  81.          CJNE A,#0EH,KK9               
  82.          MOV BUFF,#8                       
  83.          LJMP NDK1                               
  84. KK9:CJNE A,#0DH,KK10               
  85.      MOV BUFF,#9
  86.          LJMP NDK1                                                                                                               
  87. KK10:CJNE A,#0BH,KK11                       
  88.     MOV BUFF,#10
  89.         LJMP NDK1
  90. KK11:CJNE A,#07H,KK12                       
  91.     MOV BUFF,#11
  92.         LJMP NDK1
  93. KK12:NOP

  94. KKEY3:MOV P1,#0FFH                       
  95.      CLR P1.7                                ;扫第四行
  96.          MOV A,P1
  97.          ANL A,#0FH
  98.          XRL A,#0FH
  99.          JZ KKEY4                               
  100.          LCALL DELY10MS
  101.          MOV A,P1                               
  102.          ANL A,#0FH
  103.          XRL A,#0FH
  104.          JZ KKEY4                               
  105.          MOV A,P1
  106.          ANL A,#0FH
  107.          CJNE A,#0EH,KK13               
  108.          MOV BUFF,#12                       
  109.          LJMP NDK1                               
  110. KK13:CJNE A,#0DH,KK14               
  111.      MOV BUFF,#13
  112.          LJMP NDK1                                                                                                                                                                                  
  113. KK14:CJNE A,#0BH,KK15                       
  114.     MOV BUFF,#14
  115.         LJMP NDK1
  116. KK15:CJNE A,#07H,KK16                       
  117.     MOV BUFF,#15
  118.         LJMP NDK1
  119. KK16:NOP

  120. NDK1: MOV A,BUFF                                                ;给键值
  121.       MOV DPTR,#TABLE                               
  122.           MOVC A,@A+DPTR                                ;到表里找到它段码
  123.           MOV P0,A                                                ;给数码管数码管
  124.           MOV A,BUFF                                       
  125.           RL A                                                       
  126.           MOV TEMP,A                                       
  127.           MOV DPTR,#TABLE1                               
  128.           MOVC A,@A+DPTR                                ;到表里找到它的T/2
  129.       MOV STH0,A                                       
  130.           MOV TH0,A                                               
  131.           INC TEMP                                               
  132.           MOV A,TEMP
  133.           MOVC A,@A+DPTR
  134.           MOV STL0,A
  135.           MOV TL0,A                                           ;给定时器高低位
  136.           SETB TR0
  137. NDK1A: MOV A,P1                                      ;松手了吗亲 ,不松手继续出声
  138.        ANL A,#0FH
  139.            XRL A,#0FH
  140.            JNZ NDK1A
  141.            CLR TR0
  142. KKEY4: MOV A,#0FFH
  143.        MOV P2,A
  144.            MOV A,P2
  145.            JB ACC.0,KKEY5                                  ;中断按下了吗,按下就唱歌了,想好了再按
  146.            LCALL DELY10MS
  147.            MOV A,P2
  148.            JB ACC.0,KKEY5
  149.            MOV BUFF,#16
  150.            MOV P0,#7FH
  151.            LJMP START22
  152. START22:MOV A,BUFF
  153.         CJNE A,#16,KKEY5
  154.                 LJMP START2
  155. KKEY5: LJMP MAIN
  156. START2:MOV TMOD,#10H            ;准备播放音乐
  157.                 MOV IE,#88H
  158. START0:         MOV 30H,#00
  159. NEXT:        MOV A,30H
  160.                 MOV DPTR,#TAB                         ;拿到简谱码表
  161.                 MOVC A,@A+DPTR
  162.                 MOV R2,A
  163.                 JZ EN0
  164.                 ANL A,#0FH
  165.                 MOV R5,A                 ;节拍放入R5
  166.                 MOV A,R2
  167.                 SWAP A
  168.                 ANL A,#0FH
  169.                 JNZ SING
  170.                 CLR TR1
  171.                 LJMP D1
  172. SING:        DEC A
  173.                 MOV 23H,A
  174.                 RL A
  175.                 MOV DPTR,#TAB1                  
  176.                 MOVC A,@A+DPTR
  177.                 MOV TH1,A
  178.                 MOV 24H,A                                  
  179.                 MOV A,23H
  180.                 RL A
  181.                 INC A
  182.                 MOVC A,@A+DPTR
  183.                 MOV TL1,A
  184.                 MOV 25H,A                               
  185.                 SETB TR1                                       
  186. D1:     CALL DELAY1                                                  
  187.                 INC 30H
  188.                 JMP NEXT
  189. EN0:    CLR  TR1
  190.                 LJMP START
  191. TIM1:   PUSH ACC
  192.         PUSH PSW
  193.                 MOV TL1,25H
  194.                 MOV TH1,24H
  195.                 CPL P3.0
  196.                 CPL P3.1
  197.                 POP PSW
  198.                 POP ACC
  199.                 RETI
  200. DELAY1: MOV R4,#02                             ;187MS
  201. DELAY2:    MOV R3,#187
  202. DELAY3:    MOV R2,#248
  203.         DJNZ R2,$
  204.                 DJNZ R3,DELAY3
  205.                 DJNZ R4,DELAY2
  206.                 DJNZ R5,DELAY1
  207.                 RET
  208. DELY10MS:MOV R6,#10                              ;10MS
  209. D10:     MOV R7,#248
  210.          DJNZ R7,$
  211.               DJNZ R6,D10
  212.              RET
  213. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

全部资料下载地址:
电子琴仿真及程序代码.rar (329.4 KB, 下载次数: 84)


评分

参与人数 2黑币 +13 收起 理由
小菜鸟的鸟 + 8 很给力!
syl829416534 + 5 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:195094 发表于 2017-5-22 16:56 | 只看该作者
支持支持,不过不会汇编啊,有C语言的吗?
回复

使用道具 举报

板凳
ID:209348 发表于 2017-6-8 21:25 | 只看该作者
还是不太懂啊。。。
回复

使用道具 举报

地板
ID:354692 发表于 2018-6-20 09:20 | 只看该作者
老哥真的厉害
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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