单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3220|回复: 1
收起左侧

兰花草音乐播放程序:c51汇编与c51语言对照

[复制链接]
daming 发表于 2014-12-30 23:41 | 显示全部楼层 |阅读模式
  //     用stc89c52rc单片机和一蜂鸣器制作:
;兰花草音乐播放程序**************************c51汇编语言
org 00h
jmp start
org 0bh
jmp tim0
start:;JB P3.7,$   ;检测该口的按键是否按下?
      mov tmod,#01h
      mov ie,#82h
start0:mov 30h,#00
next:mov a,30h
     mov dptr,#table
     movc a,@a+dptr
     mov r2,a
     jz end0
     anl a,#0fh
     mov r5,a
     mov a,r2
     swap a
     anl a,#0fh
     jnz sing
     clR tr0
     jmp d1
sing:dec a
     mov 22h,a
     rl a
     mov dptr,#table1
     movc a,@a+dptr
     mov th0,a
     mov 21h,a
     mov a,22h
     rl a
     inc a
     movc a,@a+dptr
     mov tl0,a
     mov 20h,a
     setb tr0
  d1:call delay
     inc 30h
     jmp next
  end0:clr tr0
       jmp start0
  tim0:push acc
       push psw
       mov tl0,20h
       MOV th0,21h
       cpl P1.6       ;由该口输出音频数据;可以更改口线
       POP PSW
       pop acc
       reti
  delay:mov r7,#02
    d2:mov r4,#125
    d3:mov r3,#248
    djnz r3,$
    djnz r4,d3
    djnz r7,d2
    djnz r5,delay
    ret
table1:
       dw 64021,64103,64260,64400
       dw 64524,64580,64684,64777
       dw 64820,64898,64968,65030
       dw 64934
table:db 42h,82h,82h,82h,84h,02h,72h
       db 62h,72h,62h,52h,48h
       db 0b2h,0b2h,0b2h,0b2h,0b4h,02h,0a2h
       db 12h,0a2h,0d2h,92h,88h
       db 82h,0b2h,0b2h,0a2h,84h,02h,72h
       db 62h,72h,62h,52h,44h,02h,12h
       db 12h,62h,62h,52h,44h,02h,82h
       db 72h,62h,52h,32h,48h
       db 00h
       end
*************************************************************************
***************************************c51语言编写对照
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sbit speaker=P1^0;
uint a;
uint code table1[]={2,2,2,2,4,2,2,
            2,2,2,2,8,
            2,2,2,2,4,2,2,
            2,2,2,2,8,
            2,2,2,2,4,2,2,
            2,2,2,2,4,2,2,
            2,2,2,2,4,2,2,
            2,2,2,2,8 };
uint code table2[]={0x04,0x08,0x08,0x08,0x08,0x02,0x07,
      0x06,0x07,0x06,0x05,0x04,
      0x0b,0x0b,0x0b,0x0b,0x0b,0,0x0a,
      0x01,0x0a,0x0d,0x09,0x08,
      0x08,0x0b,0x0b,0x0a,0x08,0,0x07,
      0x06,0x07,0x06,0x05,0x04,0,0x01,
      0x01,0x06,0x06,0x05,0x04,0,0x08,
      0x07,0x06,0x05,0x03,0x04  };
uchar code table3[]={64021,64103,64260,64400,
         64524,64580,64684,64777,
         64820,64898,64968,65030,
         64934    };
void rhythm(uchar y)
{
TH0=(65536-y)/256;
TL0=(65536-y)%256;
TR0=1;//开启定时器0
}
void init()
{
TMOD=0x01;
EA=1;
ET0=1;

}
void timer0 ()interrupt 1
{
speaker=1;
}
void delay(uint z,uchar temp)
{
uint x,j,k;
for(x=z;x>=0;x--)
{
  for(j=125;j>0;j--)
  {
   for(k=250;k>0;k--);
   rhythm(temp);
   speaker=0;
  }
}
}
void main()
{
while(1)
{
  init();
  for(a=0;a<60;a++)
  {
   delay(table1[a],table3[table2[a]]);
  }
}

}

回复

使用道具 举报

豪杰 发表于 2018-6-12 16:27 | 显示全部楼层
C语言的程序不行啊
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

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