用以前学C的时候写的一个小工具改装的,用VBA写的,打开前请将excel启用宏.打开后CTRL+SHIFT+H查看帮助
excel2007 + tq2440测试通过.
第一次发贴,还请多多关照.
demo是一首<我家住在黄土高坡>
生成后的代码为
- //============================================================================
- // Name : boardMusic.c
- // Author : ma.xw
- // Version : 1.1
- // Copyright : ctrlC
- // Description : 《黄土高坡》For TQ2440, date:2012-12-16
- //============================================================================
- #include "../inc/def.h"
- extern void Buzzer_Freq_Set(U32 freq);
- extern void Delay(int time);
- extern void Uart_Printf(char *fmt,...);
- extern void Buzzer_Stop( void );
- struct Music_t {
- char c1;
- char c2;
- char* geci;
- };
- struct Music_t myMus[] = {
- {0x15, 0xC8, "我"},
- {0x15, 0xC8, "家"},
- {0x15, 0xC8, "住"},
- {0x15, 0xC8, "在"},
- {0x16, 0x88, "黄"},
- {0x15, 0xC8, "土"},
- {0x16, 0x90, "高"},
- {0x6, 0x98, "坡,"},
- {0x6, 0x44, 0},
- {0x6, 0x4, 0},
- {0x15, 0xE0, 0},
- {0x16, 0x48, "大"},
- {0x16, 0x50, "风"},
- {0x16, 0x8, "从"},
- {0x15, 0xC8, "坡"},
- {0x15, 0xC8, "上"},
- {0x15, 0x88, "刮"},
- {0x15, 0xF0, "过,"},
- {0x10, 0x8, 0},
- {0x15, 0xC8, "不"},
- {0x15, 0xD0, "管"},
- {0x15, 0xC8, "是"},
- {0x16, 0x88, "西"},
- {0x16, 0x88, "北"},
- {0x16, 0x90, "风"},
- {0x16, 0x8C, "还"},
- {0x16, 0x84, "是"},
- {0x15, 0xC8, "东"},
- {0x16, 0x88, "南"},
- {0x6, 0x8C, "风,"},
- {0x7, 0x50, 0},
- {0x5, 0x88, 0},
- {0x15, 0x48, 0},
- {0x15, 0xC, "都"},
- {0x14, 0xC4, "是"},
- {0x15, 0x8, "我"},
- {0x15, 0xC8, "的"},
- {0x15, 0xD0, "歌"},
- {0x15, 0x8, "我"},
- {0x5, 0x44, "的"},
- {0x15, 0x10, 0},
- {0x14, 0xE0, "歌."},
- {0x10, 0x10, 0},
- {0x15, 0xC8, "我"},
- {0x15, 0xC8, "家"},
- {0x15, 0xC8, "住"},
- {0x15, 0xC8, "在"},
- {0x16, 0x88, "黄"},
- {0x15, 0xC8, "土"},
- {0x16, 0x90, "高"},
- {0x6, 0x98, "坡,"},
- {0x6, 0x44, 0},
- {0x6, 0x4, 0},
- {0x15, 0xE0, 0},
- {0x16, 0x48, "大"},
- {0x16, 0x50, "风"},
- {0x16, 0x8, "从"},
- {0x15, 0xC8, "坡"},
- {0x15, 0xC8, "上"},
- {0x15, 0x88, "刮"},
- {0x15, 0xE0, "过,"},
- {0x10, 0x20, 0},
- {0x15, 0xC8, "不"},
- {0x15, 0xD0, "管"},
- {0x15, 0xC8, "是"},
- {0x16, 0x88, "西"},
- {0x16, 0x88, "北"},
- {0x16, 0x90, "风"},
- {0x16, 0x8C, "还"},
- {0x16, 0x84, "是"},
- {0x15, 0xC8, "东"},
- {0x16, 0x88, "南"},
- {0x6, 0x8C, "风,"},
- {0x7, 0x50, 0},
- {0x5, 0x88, 0},
- {0x15, 0x48, 0},
- {0x15, 0xC, "都"},
- {0x14, 0xC4, "是"},
- {0x15, 0x8, "我"},
- {0x15, 0xC8, "的"},
- {0x15, 0xD0, "歌"},
- {0x15, 0x8, "我"},
- {0x5, 0x44, "的"},
- {0x15, 0x10, 0},
- {0x14, 0xE0, "歌."},
- {0x10, 0x20, 0},
- {0x16, 0x48, "不"},
- {0x16, 0x50, "管"},
- {0x16, 0x10, "过"},
- {0x15, 0xC8, "去"},
- {0x10, 0x8, 0},
- {0x15, 0x88, "了"},
- {0x16, 0x4C, "多"},
- {0x16, 0x44, "少"},
- {0x6, 0x48, "岁"},
- {0x16, 0x8, 0},
- {0x15, 0xE0, "月,"},
- {0x16, 0x4C, "祖"},
- {0x16, 0x44, "祖"},
- {0x16, 0x48, "辈"},
- {0x16, 0x8, "辈"},
- {0x5, 0xCC, "留"},
- {0x14, 0xC4, 0},
- {0x14, 0xD0, "下"},
- {0x15, 0x30, "我,"},
- {0x10, 0x10, 0},
- {0x16, 0x48, "留"},
- {0x16, 0x50, "下"},
- {0x16, 0x8, "我"},
- {0x15, 0xC8, "一"},
- {0x15, 0xC8, "望"},
- {0x15, 0x88, "无"},
- {0x15, 0xC8, "际"},
- {0x16, 0x50, "唱"},
- {0x6, 0x48, "着"},
- {0x16, 0x8, 0},
- {0x15, 0xE0, "歌,"},
- {0x15, 0xCC, "还"},
- {0x15, 0xC4, "有"},
- {0x15, 0xC8, "身"},
- {0x16, 0x48, "边"},
- {0x15, 0xC8, "这"},
- {0x15, 0x88, "条"},
- {0x5, 0x48, "黄"},
- {0x14, 0xD0, 0},
- {0x15, 0xB0, "河"},
- {0x5, 0xD0, "噢"},
- {0x6, 0x60, 0},
- {0x6, 0xCC, 0},
- {0x7, 0x44, 0},
- {0x6, 0xC8, 0},
- {0x16, 0xB0, 0},
- {0x10, 0x8, 0},
- {0x17, 0x48, "我"},
- {0x17, 0x48, "家"},
- {0x17, 0x48, "住"},
- {0x17, 0x8, "在"},
- {0x16, 0xC8, "黄"},
- {0x16, 0x88, "土"},
- {0x16, 0xD0, "高"},
- {0x6, 0xCC, "坡,"},
- {0x7, 0x44, 0},
- {0x6, 0x58, 0},
- {0x6, 0x8, 0},
- {0x15, 0xD0, 0},
- {0x17, 0x48, "四"},
- {0x17, 0x48, "季"},
- {0x17, 0x48, "风"},
- {0x17, 0x8, "从"},
- {0x16, 0xC8, "坡"},
- {0x16, 0x88, "上"},
- {0x16, 0xD0, "刮"},
- {0x6, 0xC8, "过,"},
- {0x7, 0x44, 0},
- {0x6, 0x58, 0},
- {0x6, 0x8, 0},
- {0x15, 0xD0, 0},
- {0x15, 0xC8, "不"},
- {0x15, 0xD0, "管"},
- {0x15, 0xC8, "是"},
- {0x16, 0x90, "八"},
- {0x16, 0x8C, "百"},
- {0x16, 0x84, "年"},
- {0x16, 0x8C, "还"},
- {0x16, 0x84, "是"},
- {0x15, 0xC8, "一"},
- {0x16, 0x88, "万"},
- {0x6, 0x8C, "年,"},
- {0x7, 0x44, 0},
- {0x5, 0x88, 0},
- {0x15, 0x48, 0},
- {0x15, 0xC, "都"},
- {0x14, 0xC4, "是"},
- {0x15, 0x8, "我"},
- {0x15, 0xC8, "的"},
- {0x15, 0xD0, "歌"},
- {0x15, 0x8, "我"},
- {0x5, 0x44, "的"},
- {0x15, 0x4, 0},
- {0x16, 0xB0, "歌."},
- {0x10, 0x10, 0},
- {0x5, 0x10, "噢"},
- {0x15, 0xB0, 0},
- {0x5, 0xD0, "噢~"},
- {0x6, 0x60, 0},
- {0x6, 0xCC, 0},
- {0x7, 0x44, 0},
- {0x6, 0xC8, 0},
- {0x16, 0xE0, 0},
- {0x10, 0x10, 0},
- };
- U32 freqTab[] = {
- 0,//静止符
- 200, 200, 200, 200, 200, 200, 200, //低二 1,2,3,4,5,6,7
- 131, 147, 165, 175, 196, 220, 247, //低一 1,2,3,4,5,6,7
- 262, 286, 330, 349, 392, 440, 494, //常音 1,2,3,4,5,6,7
- 523, 587, 659, 698, 784, 879, 987, //高一 1,2,3,4,5,6,7
- 1047, 1175, 1319, 1397, 1568, 1760, 1976, //高二 1,2,3,4,5,6,7
- };
- //BOARD BEEP
- void mybeep(U32 freq, U32 ms) {
- Buzzer_Freq_Set(freq);
- Delay(ms);
- Buzzer_Stop();
- }
- //shichangBase_Ms 表示1/64拍所用的毫秒数
- void subPlay(char yingaoidx, char shichang, int kongxi, int shichangBase_Ms) {
- if (0 != yingaoidx) { //如果yingaoidx为0则表示静止符
- //real play 以指定时间长度,指定频率PWM播放
- mybeep(freqTab[yingaoidx], shichang * shichangBase_Ms);
- if (kongxi) {
- Delay(20);
- }
- } else {
- Buzzer_Stop();
- Delay(shichang * shichangBase_Ms);
- }
- return;
- }
- void play(struct Music_t* pmusHead, int eleCnt) {
- int idx = 0;
- while(idx < eleCnt) {
- int isum = ((pmusHead[idx].c1 << 8) | pmusHead[idx].c2);
- char yingaoIdx = ((isum >> 6) & 0x3F);
- char shichang = (isum & 0x3F);
- int kongxi = ((isum >> 12) & 0x1);
- if (0 != pmusHead[idx].geci) {
- Uart_Printf("yingaoIdx=%d, shichang=%d, kongxi=%d, geci=%s\n",yingaoIdx, shichang, kongxi, pmusHead[idx].geci);
- } else {
- Uart_Printf("yingaoIdx=%d, shichang=%d, kongxi=%d, geci=%s\n",yingaoIdx, shichang, kongxi, "null");
- }
- subPlay(yingaoIdx, shichang, kongxi, 50);
- ++idx;
- }
- return;
- }
- void musicGo(void) {
- play(myMus, sizeof(myMus) / sizeof(struct Music_t));
- }
- //under code please move to main function
- extern void musicGo(void);
- musicGo();
- return;
复制代码
|