日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机音频谱曲软件_【自己写的小软件】CLY单片机音乐代码超级生成器

發布時間:2024/7/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机音频谱曲软件_【自己写的小软件】CLY单片机音乐代码超级生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我比較喜歡動漫歌曲,最近用它打了《東京泰迪熊》到單片機里面,用P0.0做蜂鳴器輸出口,挺好聽的,分享一下源代碼應該沒什么問題吧?

/*-----------------------------------------------

---------8051單片機音樂代碼生成器---------

本軟件作者:CLY

作者QQ:2315959474

本音樂編寫日期:2016年4月10日??19:46

曲名:東京泰迪熊

使用的晶振頻率:11.059200MHz

時鐘周期:12個

曲調:G

速度:240

感謝您對本音樂代碼生成器作者的支持!

------------------------------------------------*/

#include//包含頭文件

sbit fmq = P0^0;//定義蜂鳴器端口

static unsigned int bf;//定義全局變量播放位置變量

static unsigned char jp0;//定義全局變量播放時間單位化到0.015s

static unsigned char jp1;//定義全局變量控制播放時間即節拍

unsigned char code th[] = {//定時器0高八位頻率設定

0x93,0xF6,0xF6,0xF7,0xF7,0xF8,0xF8,0xF9,0xF9,0xF9,0xFA,0xFA,0xFA,0xFB,

//低八度0,b1,1,#1,2,#2,3,4,#4,5,#5,6,#6,7

0xFB,0xFB,0xFB,0xFC,0xFC,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,

//中音1,#1,2,#2,3,4,#4,5,#5,6,#6,7

0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE

//高八度1,#1,2,#2,3,4,#4,5,#5,6,#6,7,#7

};

unsigned char code tl[] = {//定時器0低八位頻率設定

0xFF,0x44,0xD6,0x5D,0xD5,0x4A,0xB5,0x1D,0x85,0xDD,0x38,0x89,0xDA,0x22,

//低八度0,b1,1,#1,2,#2,3,4,#4,5,#5,6,#6,7

0x67,0xAB,0xE8,0x23,0x59,0x8E,0xC1,0xEF,0x1C,0x44,0x6C,0x90,

//中音1,#1,2,#2,3,4,#4,5,#5,6,#6,7

0xB4,0xD5,0xF4,0x12,0x2D,0x47,0x60,0x77,0x8D,0xA2,0xB5,0xC6,0xD8

//高八度1,#1,2,#2,3,4,#4,5,#5,6,#6,7,#7

};

unsigned char code ysjs[] = {//延時計算一個單位時間為0.015s

1,7,7,8,8,8,9,9,10,11,11,12,13,13,

//低八度0,b1,1,#1,2,#2,3,4,#4,5,#5,6,#6,7

14,15,16,17,18,19,20,21,22,24,25,27,

//中音1,#1,2,#2,3,4,#4,5,#5,6,#6,7

28,30,32,34,36,38,40,42,45,47,50,53,56

//高八度1,#1,2,#2,3,4,#4,5,#5,6,#6,7,#7

};

unsigned char code jpsz[] = {2,4,5,7,11,13,15,24,28,32,49,66};//對應節拍數組

unsigned int code yb1[][2] = {//歌曲音符節拍調用數組

{0,6},{18,6},{26,6},{26,3},{25,6},{23,3},{22,6},{0,6},{21,6},{23,6},{23,3},{21,6},{16,3},

{19,3},{18,11},{0,6},{16,6},{19,6},{19,3},{18,6},{23,3},{23,6},{0,6},{23,6},{23,6},{23,3},

{25,6},{23,3},{23,3},{22,11},{0,6},{18,6},{26,6},{26,3},{25,6},{23,3},{22,6},{0,6},{21,6},

{23,6},{23,3},{21,6},{16,3},{19,3},{18,11},{0,6},{16,6},{19,6},{19,3},{18,6},{23,3},{23,6},

{0,6},{23,6},{23,6},{23,3},{25,6},{23,3},{23,3},{22,11},{0,6},{18,6},{26,6},{26,3},{25,6},{23,3},{22,6},{0,6},{21,6},{23,6},{23,3},{21,6},{16,3},

{19,3},{18,11},{0,6},{16,3},{16,3},{19,6},{19,3},{18,6},{23,3},{23,6},{0,6},{23,6},{23,6},

{26,3},{25,6},{22,3},{22,3},{23,3},{0,3},{11,3},{11,3},{11,3},{11,3},{0,3},{0,6},{23,6},

{18,6},{18,3},{23,6},{22,7},{18,6},{18,6},{22,6},{23,6},{23,6},{21,3},{19,6},{18,6},{18,3},

{18,3},{18,3},{18,3},{18,3},{18,3},{18,3},{19,6},{19,6},{19,3},{18,3},{16,3},{18,10},

{23,6},{26,6},{25,9},{23,7},{22,11},{0,6},{18,6},{26,6},{26,3},{25,6},{23,3},{22,6},{0,6},{21,6},{23,6},

{23,3},{21,6},{16,3},{19,3},{18,11},{0,6},{16,3},{16,3},{19,6},{19,3},{18,6},{23,3},{23,6},

{0,6},{23,6},{23,6},{26,3},{25,6},{22,3},{22,3},{23,10},{23,3},{30,10},{30,3},{28,7},

{26,6},{25,6},{21,3},{21,10},{28,3},{28,6},{26,7},{23,6},{25,3},{26,6},{25,3},{26,9},

{26,3},{28,6},{26,3},{28,9},{26,3},{28,7},{28,3},{28,3},{30,3},{26,3},{26,3},{25,3},{0,6},{21,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{28,7},

{29,6},{28,3},{24,6},{21,7},{21,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{26,7},{33,6},

{26,3},{24,6},{0,3},{24,9},{28,7},{29,3},{0,6},{21,6},{26,3},{24,6},{26,7},{33,6},{26,3},

{24,6},{26,7},{33,6},{26,3},{24,6},{28,7},{29,6},{28,3},{24,6},{21,3},{0,6},{21,6},{26,3},

{28,3},{0,3},{29,7},{21,6},{21,3},{29,3},{0,3},{28,7},{19,6},{19,3},{28,3},{0,3},{28,6},{26,3},{26,10},{0,6},{0,6},{0,6},{0,6},{0,6},{18,6},{26,6},{26,3},{25,6},{23,3},{22,6},

{0,6},{21,6},{23,6},{23,3},{21,6},{16,3},{19,3},{18,11},{0,6},{16,6},{19,6},{19,3},{18,6},

{23,3},{23,6},{0,6},{23,6},{23,6},{23,3},{25,6},{23,3},{23,3},{22,10},{0,3},{18,7},{26,3},

{26,3},{25,6},{23,3},{22,3},{0,3},{22,3},{20,3},{22,3},{23,6},{0,3},{18,7},{26,3},{26,3},

{25,6},{23,3},{22,3},{0,3},{22,3},{20,3},{22,3},{23,6},{0,3},{18,7},{26,3},{26,3},{25,6},

{23,3},{22,3},{0,3},{22,3},{20,3},{22,3},{23,6},{0,3},{18,7},{26,3},{26,3},{25,6},{23,3},{22,3},{0,3},

{22,3},{20,3},{22,3},{23,6},{0,3},{28,10},{30,3},{28,7},{26,6},{25,6},{21,3},{21,10},

{28,3},{28,6},{26,7},{23,6},{25,3},{26,6},{25,3},{26,9},{26,3},{28,6},{26,3},{28,9},{26,3},

{28,7},{28,3},{28,3},{30,3},{26,3},{25,3},{0,6},{21,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{28,7},

{29,6},{28,3},{24,6},{21,7},{21,6},{26,3},{24,6},{26,7},{33,6},{26,3},{24,6},{26,7},{33,6},

{26,3},{24,6},{0,3},{24,9},{28,7},{29,3},{0,6},{33,3},{33,3},{36,3},{36,3},{0,3},{26,7},

{33,3},{33,3},{36,3},{36,3},{0,3},{26,7},{33,3},{33,3},{36,3},{36,3},{0,3},{31,7},{29,3},{29,3},{28,3},{24,3},{24,3},{26,7},{21,6},{26,3},{28,6},{29,7},{21,6},{21,3},{29,6},

{28,7},{19,6},{19,3},{28,3},{0,3},{28,6},{26,11},{23,6},{18,6},{18,3},{23,6},{22,7},{18,6},

{18,6},{22,6},{23,6},{23,6},{21,3},{19,6},{18,6},{23,3},{26,3},{30,3},{35,3},{30,3},{26,3},

{30,2},{31,6},{31,6},{31,3},{30,3},{28,3},{30,10},{35,6},{38,6},{37,9},{35,7},{34,6},

{35,3},{34,3},{30,3},{25,3},{23,3},{22,3},{18,3},{23,10},{22,3},{23,3},{25,3},{23,3},

{22,3},{18,10},{23,9},{22,3},{23,6},{30,11},{31,3},{35,3},{31,3},{28,3},{23,3},{19,3},{16,3},{19,3},

{23,3},{28,3},{31,3},{35,3},{30,3},{34,3},{30,3},{25,3},{22,3},{18,3},{14,3},{18,3},{22,3},

{25,3},{30,3},{34,3},{38,9},{37,7},{33,11}

};

void ds1()

{//定時器使用函數

TMOD |= 0x01;//打開定時器0,工作模式為1

TR0=1;//定時器0開關打開

EA=1;//總中斷打開

ET0=1;//定時器0中斷打開

}

main()

{//主循環

bf=0;//全局變量播放位置變量初始

jp0=0;//全局變量播放時間單位化初始

jp1=0;//全局變量控制播放時間即節拍初始

ds1();//調用定時器使用函數開始播放

while(1);//這里可以添加要同時執行的其他命令

}

void ds1_dl()interrupt 1//當定時器0溢出中斷

{

TH0 = th[yb1[bf][0]];//定時器0高8位給定時值

TL0 = tl[yb1[bf][0]];//定時器0低8位給定時值

if (th[yb1[bf][0]] != 0x93 && tl[yb1[bf][0]] != 0xFF && jp1

{//當沒有播放到休止符0且沒有到達停頓時間

fmq = ~fmq;//蜂鳴器振動發聲

}

jp0++;//計數器加一計數

if (jp0 == ysjs[yb1[bf][0]])

{//如果當前音符播放了0.03s

jp1++;//節拍,播放個數加1

jp0 = 0;//計數器歸零

}

if (jp1 == jpsz[yb1[bf][1]])

{//如果當前音符播放完成一個指定的節拍

bf++;//播放位置跳到下一個音符節拍

jp1 = 0;//計數器歸零

if(bf == 511)

{//如果播放到最后一位,即播放完成

bf = 0;//從頭播放

}

}

}

總結

以上是生活随笔為你收集整理的单片机音频谱曲软件_【自己写的小软件】CLY单片机音乐代码超级生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。