線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1607
推到 Plurk!
推到 Facebook!

C語言音樂程式高手知道請幫忙

尚未結案
winds2004
一般會員


發表:2
回覆:0
積分:0
註冊:2008-05-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-29 22:35:54 IP:218.162.xxx.xxx 訂閱
我想寫個音樂程式,動作過程是按sw0 第一首歌,sw1第二首,sw2第三首每當按sw0~sw2 七段顯示器各分別顯示1.2.3
問題一
當我想在51的RST裝SW4要顯示0我程式該加些什麼呢?
問題二
我想加七個LED燈(Do對應LED1 Re對應LED2 Mi對應LED3 Fa對應LED4 So對應LED5 La對應LED6 Si對應LED7 Hi_Do),當每首歌響時,LED就跟著音符動作發亮
以下是我打好的程式不知道要如何加入以上程式

#include "reg51.h"
#include "music.h" >這檔案是讓我不用在設定音樂頻率
sbit P1_0=0x90;
unsigned char TimeOut;
unsigned int Tone;
unsigned char Beat;
unsigned int Length=5;
unsigned char No=0;
unsigned char KeyStatus;
uunsigned int code ToneTable1[]=
{Do4,Do4,So4,So4,
La4,La4,Re4,
Fa4,Fa4,Mi4,Mi4,
Re4,Re4,Do4,
So4,So4,Fa4,Fa4,
Mi4,Mi4,Re4,
So4,So4,Fa4,Fa4,
Mi4,Mi4,Re4,
Do4,Do4,So4,So4,
La4,La4,So4,
Fa4,Fa4,Mi4,Mi4,
Re4,Re4,Do4};
unsigned char code BeatTable1[]=
{2,2,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,4,
2,2,2,2,
2,2,4,
2,2,2,2,
2,2,4,0};
unsigned int code ToneTable2[]=
{So4,Mi4,0,
So4,Mi4,0,
Re4,Do4,Re4,
Do4,
Re4,Re4,Mi4,
Fa4,Re4,
Mi4,Mi4,Fa4,
So4,Mi4,
So4,Mi4,
So4,Mi4,
Fa4,Mi4,Re4,
Do4};
unsigned char code BeatTable2[]=
{2,2,2,
2,2,2,
2,2,2,
6,
2,2,2,
4,2,
2,2,2,
2,2,
4,2,
4,2,
2,2,2,
6,0};
unsigned int code ToneTable3[]=
{So4,La4,So4,Fa4,
Mi4,Fa4,So4,0,
Re4,Mi4,Fa4,0,
Mi4,Fa4,So4,0,
So4,La4,So4,Fa4,
Mi4,Fa4,So4,0,
Re4,So4,0,
Mi4,Re4,Do4,0};
unsigned char code BeatTable3[]=
{3,1,2,2,
2,2,2,2,
2,2,2,2,
2,2,2,2,
3,1,2,2,
2,2,2,2,
4,2,2,
2,2,2,2,0};
main()
{

void KeyScan(void);
void delay(void);
unsigned char key=0;
char i=0;
IE=0x8a;
TMOD=0x11;
TH1=(65536-50000);
TL1=(65536-50000);
TR0=0;
TR1=0;
while(1)
{
P2=0x40;

KeyScan();
if(KeyStatus!=0)
{
if(key!=KeyStatus)
{
No=0;
}
key=KeyStatus;
}
if(key==0x01)
{
P2=0xfc;
TimeOut=0;
Tone=ToneTable1[No];
Beat=BeatTable1[No];
if (Tone!=0)
TR0=1;
TR1=1;
while(TimeOut==0)
;
No ;
TR0=0;
TR1=0;
delay();
if(BeatTable1[No]==0)
No=0;
}
else if(key==0x02)
{
P2=0x92;
TimeOut=0;
Tone=ToneTable2[No];
Beat=BeatTable2[No];
if (Tone!=0)
TR0=1;
TR1=1;
while(TimeOut==0)
;
No ;
TR0=0;
TR1=0;
delay();
if(BeatTable2[No]==0)
No=0;
}
else if(key==0x04)
{
P2=0x98;
TimeOut=0;
Tone=ToneTable3[No];
Beat=BeatTable3[No];
if (Tone!=0)
TR0=1;
TR1=1;
while(TimeOut==0)
;
No ;
TR0=0;
TR1=0;
delay();
if(BeatTable3[No]==0)
No=0;


}
}
}
void T0_int(void) interrupt 1
{
TH0=Tone/256;
TL0=Tone%6;
P1_0=~P1_0;
}
void T1_int(void) interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%6;
if(--Length==0) 1拍長度控制:1拍=Length*50ms*/
{
Length=5;
if(--Beat==0)
TimeOut=1;
}
}
void KeyScan(void)
{
P3=0xff;
KeyStatus=~P3;
}
void delay(void)
{
int i;
for(i=0;i<2000;i )
;
}

[code c#]
請在此區域輸入程式碼
[/code]
系統時間:2024-04-24 4:46:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!