智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2641|回复: 4
打印 上一主题 下一主题

祝你生日快乐,源程序,P2.0接蜂鸣器

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
28
威望
26
贡献
2
兑换币
2
注册时间
2013-6-24
在线时间
0 小时
毕业学校
渝州工业学院
跳转到指定楼层
1#
发表于 2013-6-24 20:27:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;本程序实现蜂鸣器演奏歌曲功能,89C51,12M晶振
;乐曲名称:生日快乐
;///////////////////////////////////////////
        BUZZER EQU p2.0
        org        0000h                ;主程序起始地址
mov sbuf,#00000000b   ;防止连接点阵的8P排线没有取掉,导致无法发声
        ajmp        main                ;跳至主程序
        org        000bh                ;timer0中断起始地址
        jmp        tim0                ;跳至timer0中断子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        org        0030h
main:
        mov        tmod,#01h        ;设timer0在MODE1
        mov        ie,#82h                ;中断使能
start0:
        mov        30h,#00h        ;取简谱码指针
next:        mov        a,30h                ;简谱码指针载入A
        mov        dptr,#table        ;至table取简谱码
        movc        a,@a+dptr
        mov        r2,a                ;取到的简谱码暂存于R2
        jz        end0                ;是否取到00(结束码)?
        anl        a,#0fh                ;不是,则取低4位(节拍码)
        mov        r5,a                ;将节拍码存入R5
        mov        a,r2                ;将取到的简谱码再载入A
        swap        a                ;高低四位交换
        anl        a,#0fh                ;取低四位(音符码)
        jnz        sing                ;取到的音符码是否为零?
        clr        tr0                ;是,则不发音
        jmp        d1
sing:        dec        a                ;取到的音符码减1(不含0).
        mov        22h,a                ;存入(22H).
        rl        a                ;乘2
        mov        dptr,#table1        ;至table1取相对的高位字节计数值
        movc        a,@a+dptr
        mov        th0,a                ;取到的高位字节存入TH0
        mov        21h,a                ;取到的高位字节存入(21H)
        mov        a,22h                ;再载入取的的音符码
        rl        a                ;乘2
        inc        a                ;加1
        movc        a,@a+dptr        ;至table1取相对的低位字节计数值
        mov        tl0,a                ;取到的高位字节存入TL0  
        mov        20h,a           ;取到的高位字节存入(20H)
        setb        tr0                ;启动timer0
d1:        call        delay                ;基本单位时间1/4拍187毫秒
        inc        30h                ;取简谱码指针加1
        jmp        next                ;取下一个码
end0:        clr        tr0                ;停止timer0
        jmp        start0                ;重复循环
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;time0中断服务子程序用来产生相应的音调脉冲频率。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
tim0:
        push        acc                ;将A的值暂存于堆栈
        push        psw                ;将psw的值暂存于堆栈
        mov        tl0,20h                ;重设计数值
        mov        th0,21h
        cpl        BUZZER                ;将蜂鸣器反相
        pop        psw                ;至堆栈取回psw的值
        pop        acc                ;至堆栈取回a的值
        reti                        ;返回主程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

delay:        mov        r7,#02h                ;187毫秒
d2:        mov        r4,#187
d3:        mov        r3,#248
        djnz        r3,$
        djnz        r4,d3
        djnz        r7,d2
        djnz        r5,delay        ;决定节拍
        ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

table1:
        dw        64260,64400,64524,64580
        dw        64684,64777,64820,64898
        dw        64968,65030,65058,65110
        dw        65157,65178,65217

table:
        ;1
        db        82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
        ;2
        db        82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h
        ;3
        db        82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h
        ;4
        db        82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00
        end

20

主题

259

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5644
威望
2695
贡献
1597
兑换币
1729
注册时间
2013-1-5
在线时间
677 小时
2#
发表于 2013-6-25 01:02:32 | 只看该作者
回复 支持 反对

使用道具 举报

21

主题

836

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5050

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

QQ
威望
3374
贡献
126
兑换币
1662
注册时间
2012-11-1
在线时间
775 小时
3#
发表于 2013-6-25 01:18:04 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
152
威望
106
贡献
38
兑换币
29
注册时间
2013-6-1
在线时间
4 小时
4#
发表于 2013-6-26 20:38:59 | 只看该作者
强悍的人啊!全汇编搞的!
回复 支持 反对

使用道具 举报

6

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
468
威望
270
贡献
122
兑换币
175
注册时间
2013-6-15
在线时间
38 小时
毕业学校
jd
5#
发表于 2013-10-12 14:25:15 | 只看该作者
看不懂
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 12:28 , Processed in 0.127339 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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