buzzer        equ        p2.4

KEY        EQU        P3.7

org          00h                  ;主程序起始地址

jmp          start                ;跳动主程序

org          0bh                  ;timer0中断起始地址

jmp          tim0                 ;跳至timer0在mode1

start:       MOV           tmod,#00000001b      ;设timer0在mode1

MOV           ie,#10000010b        ;中断使能

jb           KEY,$               ;第一次按to?

call         delay1               ;消除抖动

jnb          KEY,$               ;to放开?

MOV           31h,#00              ;按to次数计数指针初值为00h

start0:

MOV           30h,#low song        ;取简谱码指针(第1首)

next:        MOV           a,30h

MOV           dptr,#table

MOV c         a,@a+dptr            ;至相关页码,高4位为音符的高低

MOV           r2,a                 ;低4位为音符的节拍

jz           end0                 ;检查简谱码是否已结束(有无00?)

anl          a,#0fh               ;取节拍(低4位)

MOV           r5,a                 ;存入r5,节拍的时间

MOV           a,r2

swap         a

anl          a,#0fh               ;取音频值(高4位)

jnz          sing                 ;是否为0,是0则不发音

clr          tr0

jmp          d1

sing:       dec          a                    ;因0不列入

MOV           22h,a                ;存入(22h)

rl           a                    ;乘2

MOV           dptr,#table

MOV c         a,@a+dptr            ;至table取码,取t的值

MOV           th0,a                ;取到的高位字节存入th0

MOV           21h,a                ;取到的高位字节存入(21h)

MOV           a,22h                ;再载入取到的音符码

rl           a                    ;乘2

inc          a                    ;加1

MOV c         a,@a+dptr            ;至table取相对的低位字节计数值

MOV           tl0,a                ;取到的低位字节存入tl0

MOV           20h,a                ;取到的低位字节存入(20h)

setb         tr0                  ;启动timer0

d1:         call         delay

inc          30h                  ;取简谱码指针加1

jmp          next

end0:       clr          tr0                  ;停止计数器

MOV           a,31h                ;载入计次指针

xrl          a,#00h               ;是否按第1次?

jnz          end1                 ;不是则跳至end1

jb           KEY,$               ;按第2次?

call         delay1               ;消除抖动

jnb          KEY,$               ;放开否?

inc          31h                  ;计次地址(31h)加1

MOV           30h,#low song1       ;第2首歌指针

jmp          next

end1:

MOV           a,31h                ;载入计次指针

xrl          a,#01h               ;是否按第2次?

jnz          end2                 ;不是则跳至end2

jb           KEY,$               ;按第3次?

call         delay1               ;消除抖动

jnb          KEY,$               ;放开否?

inc          31h                  ;计次地址(31h)加1

MOV           30h,#low song2       ;第3首歌指针

jmp          next

end2:

MOV           a,31h                ;载入计次指针

xrl          a,#02h               ;是否按第3次?

jnz          end3                ;不是则跳至end3

jb           KEY,$               ;按第4次?

call         delay1               ;消除抖动

jnb          KEY,$               ;放开否?

inc          31h                  ;计次地址(31h)加1

MOV           30h,#low song3       ;第4首歌指针

jmp          next

end3:

MOV           a,31h                ;载入计次指针

xrl          a,#03h               ;是否按第4次?

jnz          end4                 ;不是则跳至end4

jb           KEY,$               ;按第5次?

call         delay1               ;消除抖动

jnb          KEY,$               ;放开否?

inc          31h                  ;计次地址(31h)加1

MOV           30h,#low song4      ;第5首歌指针

jmp          next

end4:

MOV           a,31h                ;载入计次指针

xrl          a,#01h               ;是否按第5次?

jnz          end5                 ;不是则跳至end2

jb           KEY,$               ;按第6次?

call         delay1               ;消除抖动

jnb          KEY,$               ;放开否?

inc          31h                  ;计次地址(31h)加1

MOV           30h,#low song5       ;第6首歌指针

jmp          next

end5:

jmp          start                ;回到第1次位置

tim0:       push         aCC                  ;将a的值暂存于堆栈

push         psw                  ;将psw的值暂存于堆栈

setb         rs0                  ;设工作寄存器库1,rs0=1,rs1=0

clr          rs1

MOV           tl0,20h              ;重设计数值

MOV           th0,21h

cpl          buzzer               ;将p10位反相

clr        rs0

pop          psw                  ;至堆栈取回psw的值

pop          acc                  ;至堆栈取回a的值

reti                              ;返回主程序

delay:       MOV           r7,#02               ;125秒

d2:          MOV           r4,#125

d3:          MOV           r3,#248

djnz         r3,$

djnz         r4,d3

djnz         r7,d2

djnz         r5,delay             ;决定节拍

ret

delay1:      MOV           r4,#20

d4:          MOV           r3,#248

djnz         r3,$

djnz         r4,d4

ret             org          300h

table:

dw           64260,64400,64524,64580

dw           64684,64777,64820,64898

dw           64968,65030,65058,65110

dw           65157,65178,65217

song:       ;第一首歌  哈 巴 狗

;1

db           42h,42h,42h,52h,62h,04h

db           62h,62h,62h,72h,84h,04h

db           92h,92h,82h,72h,64h,04h

db           82h,82h,52h,62h,44h,04h

;2

db           42h,42h,42h,52h,62h,04h

db           62h,62h,62h,72h,84h,04h

db           92h,92h,82h,72h,64h,04h

db           82h,82h,52h,62h,44h,04h

db           00h

song1:      ;第2首歌    生 日 快 乐

;1

db           82h,01h,81h,94h,84h

db           0b4h,0a4h,04h

db           82h,01h,81h,94h,84h

db           0c4h,0b4h,04h

;2

db           82h,01h,81h,0f4h,0d4h

db           0b4h,0a4h,94h

db           0e2h,01h,0e1h,0d4h,0b4h

db           0c4h,0b4h,04h

db           00h

song2:      ;第3首歌     不 倒 翁

;1

db           84h,94h,88h

db           64h,54h,68h

db           84h,64h,54h,44h

db           52h,42h,52h,62h,48h

;2

db           84h,94h,88h

db           64h,54h,68h

db           84h,64h,54h,44h

db           52h,42h,52h,62h,48h

db           00h

song3:      ;第4首歌       妹妹背着洋娃娃

;1

db           84h,02h,82h,64h,54h

db           64h,54h,48h

db           64h,02h,52h,44h,24h

db           14h,24h,18h

;2

db           24h,02h,22h,42h,24h

db           44h,54h,68h

db           54h,02h,52h,84h,84h

db           54h,64h,48h

db           00h

song4:      ;第5首歌   两只老虎

;1

db           44h,54h,64h,44h

db           44h,54h,64h,44h

db           64h,74h,88h

db           64h,74h,88h

;2

db           82h,92h,82h,72h,64h,44h

db           82h,92h,82h,72h,64h,44h

db           44h,84h,48h

db           44h,14h,48h,00H

song5:      ;第6首歌   三只小猫

;1

db           62h,82h,82h,62h,98h

db           92h,0b2h,0b2h,82h,98h

db           62h,82h,82h,52h,68h

db           92h,0b2h,0b2h,82h,98h

;2

db           62h,82h,82h,62h,92h,92h,94h

db           92h,0b2h,0b2h,92h,84h,94h

db           0b8h,0b4h,04h

db           00h

end

89c51六首歌曲的音乐门铃程序

c51单片机音乐门铃C语言程序,89c51六首歌曲的音乐门铃程序相关推荐

  1. c51单片机音乐门铃C语言程序,单片机六首歌曲的音乐门铃程序

    单片机六首歌曲的音乐门铃程序 来源:-- 作者:-- 浏览:1346 时间:2016-08-10 14:18 标签: 摘要: buzzer        equ        p2.4 KEY     ...

  2. c语言单片机计时程序,C51单片机秒表计时(C语言)

    <C51单片机秒表计时(C语言)>由会员分享,可在线阅读,更多相关<C51单片机秒表计时(C语言)(4页珍藏版)>请在人人文库网上搜索. 1.南开大学滨海学院C51嵌入式软件设 ...

  3. 51单片机c语言秒表,C51单片机秒表计时(C语言).doc

    C51单片机秒表计时(C语言).doc 南开大学滨海学院C51嵌入式软件设计(C语言) 题目计时秒表 l 功能描述本设计实现在99秒内的秒表计时,一个按键实现开始.暂停.复位.l 原理概述P1接四位七 ...

  4. C51单片机————汇编与C语言

    C51单片机-----汇编与C语言 如有错误,请留言指正!!!

  5. 邓紫棋歌曲计算机音乐数字,邓紫棋播放量最高的十首歌曲

    邓紫棋(G.E.M.)国内人气最高的女歌手之一.2008年10月,16岁的邓紫棋发行首张音乐EP<G.E.M.>正式进入歌坛,三年之后她便在香港红馆举办了5场个人演唱会.2014年参加&l ...

  6. 51单片机c语言测距,求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 C51编程:超声波测距程序(附图) [请帮助] 2006-9-30 18:44:03 #include #define k1 P3_4 #define c ...

  7. 关于星空的java小程序_有关星空的小程序有哪些?有关星空的小程序分享!

    有关星空的小程序分享 星空指南小程序,目前小程序越来越多了,涉及的领域也越来越多,所有就有一款关于星空的小程序给大家分享,快来木蚂蚁资讯频道看看吧. 星空指南小程序分类:星空小程序.天文小程序 星空指 ...

  8. 如何将一首网易云音乐,生成一个音乐二维码?

    有人说,阿黛尔的[Someone like you]这首歌名的中文翻译是:终有弱水替沧海,再无相思寄巫山: 有人说,他家的猫听了马克西姆的[出埃及记]后,再也没有回来: 有人说,他失恋了,听火星哥的[ ...

  9. 89c51c语言程序,89C51单片机计算器C语言程序.doc

    89C51单片机计算器C语言程序 89C51单片机[计算器]C语言程序 89C51单片机[计算器]C语言程序2010-12-15 16:54/*89C51单片机[计算器]C语言程序*/ /*P2位选P ...

  10. c51单片机c语言程序,C51单片机的C语言程序设计.ppt

    <C51单片机的C语言程序设计.ppt>由会员分享,可在线阅读,更多相关<C51单片机的C语言程序设计.ppt(44页珍藏版)>请在人人文库网上搜索. 1.2020/8/7,1 ...

最新文章

  1. Gradle学习目录
  2. 算法训练 最小乘积(基本型) (蓝桥杯水题)
  3. 需求分析之UML用例图学习
  4. c语言api函数写病毒,C语言病毒代码,及写病毒简单介绍
  5. pymol怎么做底物口袋表面_汽车表面有划痕怎么办?建议大家这样做,自己动手就解决...
  6. 15-07-06 定闹钟
  7. Security+ 学习笔记11 应用程序攻击
  8. 电脑桌面背景色及分辨率设置问题-仅供参考
  9. java实现格拉布斯准则_格拉布斯准则附件.pdf
  10. html添加购买按钮,萤火小程序商城给前端和商品组件增加“购买”按钮的方法...
  11. 计算机专业题库,计算机专业综合练习题库(附答案)
  12. 离职“招黑”的6种行为,最后一个太惹人反感!
  13. 服务器上自动备份数据库突然不备份了
  14. 测试大佬带你揭秘功能测试的内幕
  15. 每次打开Photoshop显示失败恢复文件清理方法
  16. OPC DA调研报告
  17. 为了防老板偷窥,程序员开源了这个神器
  18. 错误:The ‘pycocotools>=2.0‘ distribution was not found and is required by the application
  19. HDU-2140 Michael Scofield's letter 水题
  20. 智汀家庭云与Home Assistant如何接入HomeKit,并连接米家设备

热门文章

  1. u盘复制文件第二台计算机无文件夹,u盘做成启动盘后拷贝进去的文件不见了怎么办...
  2. win10计算机无动作后锁屏,怎么让win10不锁屏_让win10不锁屏的操作方法
  3. python求方程的根_python计算方程式根的方法
  4. php 冷门与常用函数
  5. 《天下强汉》6、西汉历史的最后一抹辉煌——绝域名将陈汤
  6. 【STM32F429】第7章 ThreadX GUIX移植到STM32F429(MDK AC5)
  7. 微积分基础之图形面积(体积)计算
  8. 敏捷项目管理术语大全
  9. cad图纸问号怎么转换文字_打开cad2016图纸字体和符号显示问号怎么办?
  10. elixer学习笔记