C語言音樂程式高手知道請幫忙 |
尚未結案
|
winds2004
一般會員 發表:2 回覆:0 積分:0 註冊:2008-05-29 發送簡訊給我 |
我想寫個音樂程式,動作過程是按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] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |