


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、電子音調(diào)發(fā)生器一、實(shí)驗(yàn)?zāi)康?. 了解計(jì)算機(jī)發(fā)聲原理。2. 熟悉定時(shí)器和鍵盤掃描電路的工作原理及編程方法。實(shí)驗(yàn)完成的功能1. 利用鍵盤17進(jìn)行音調(diào)選擇,即按下音符產(chǎn)生對(duì)應(yīng)音調(diào)。2. 事先存儲(chǔ)三首歌曲,并可進(jìn)行選擇播放。3. 譜曲功能:通過按鍵對(duì)LCD菜單選項(xiàng)進(jìn)行選擇,進(jìn)入譜曲界面,通過按鍵17分別輸入音高與幾分音符類型,由按鍵輸入若干數(shù)據(jù)完成譜曲。4. 在播放存儲(chǔ)歌曲與譜曲播放時(shí),對(duì)應(yīng)音符及其節(jié)奏LCD顯示對(duì)應(yīng)頻譜。5. 在播放音樂時(shí)按“返回”鍵出現(xiàn)返回界面,由鍵盤按“確認(rèn)”鍵選擇返回 主菜單或循環(huán)播放。三、實(shí)驗(yàn)原理1.音節(jié)由不同頻率的方波產(chǎn)生,音節(jié)與頻率的關(guān)系如表(1)所示。要產(chǎn)生 音頻方波,
2、只要計(jì)算出某一音頻的周期(1 /頻率),然后將此周期除以2,即 為半周期的時(shí)間。利用計(jì)時(shí)器計(jì)時(shí)此半周期時(shí)間,每當(dāng)計(jì)時(shí)到后就將輸出方波的 I/O(P1.7)反相,然后重復(fù)計(jì)時(shí)此半周期時(shí)間再對(duì)I/O反相,就可在P1.7腳得 到此頻率的方波。將P1.7經(jīng)過驅(qū)動(dòng)電路與蜂鳴器相連,隨著P1.7 口輸出不同頻 率的方波,蜂鳴器便會(huì)發(fā)出不同的聲音。音樂的節(jié)拍是由延時(shí)實(shí)現(xiàn)的,如果1拍的時(shí)間為0.4秒,1/4拍是0.1秒。只要設(shè)定延時(shí)時(shí)間,就可得到節(jié)拍的時(shí)間。 延時(shí)實(shí)現(xiàn)基本延時(shí)時(shí)間,節(jié)拍值只能是它的整數(shù)倍。每個(gè)音節(jié)相應(yīng)的定時(shí)器初值計(jì)算公式如下:(1/2)*(1/f)=(12/fose)*(216-x)即 x=2
3、 16-(fose/24f)其中,f是音調(diào)頻率,當(dāng)晶振fosc=11.0592MHz時(shí),音節(jié)“ 1”相應(yīng)的定時(shí)器初 值為x,則可得到x=63777D=F921H其它的可同樣得到。表(1)音節(jié)與頻率的關(guān)系音調(diào)頻率(Hz)X(HEX)1262F9212294F9E13330FA8C4349FAD85392FB686440FBE97494FC5B在編寫歌曲代碼過程中,音高由三位數(shù)字組成:個(gè)位是表示17這七個(gè)音符;十位是表示音符所在的音區(qū):1-低音,-中音,-高音;百位表示這個(gè)音符是 否要升半音:0-不升,-升半音。音長最多由三位數(shù)字組成:個(gè)位表示音符的時(shí) 值,其對(duì)應(yīng)關(guān)系是:| 數(shù)值(n): |0 |
4、1 |2 |3 | 4 | 5 | 6| 幾分音符:|1 |2 |4 |8 |16 |32 |64音符=2An十位表示音符的演奏效果(0-2): 0- 普通,-連音,-頓音,百位是符點(diǎn)位:0- 無符點(diǎn),1-有符點(diǎn)。2 鍵盤掃描將單片機(jī)P1.0P1.7(引腳18)與鍵盤上對(duì)應(yīng)引腳相連,其中P1.0P1.3控制 鍵盤的行,P1.4P1.7控制鍵盤的列,這次使用的鍵盤是 4行4列,鍵盤上的第一 行到第四行由8位十六進(jìn)制代碼的低四位控制,即第一行若有鍵按下,則 8位十六 進(jìn)制代碼的后四位為0x8,第二行有按鍵按下,則后四位代碼為0x4,依此規(guī)律類 推;鍵盤上的第一列到第四列由8位十六進(jìn)制代碼的高四位控
5、制,即第一列若有 鍵按下,則8位十六進(jìn)制代碼的前四位為0x8,第二列有按鍵按下,則前四位代碼 為0x4,依此規(guī)律類推。綜上所述,可以根據(jù)8位十六進(jìn)制的高四位和低四位數(shù)據(jù), 分別確定按下的鍵處于第幾行第幾列,從而確定按鍵的位置,實(shí)現(xiàn)鍵盤掃描的功 能。3. LCD顯示根據(jù)寫命令函數(shù)wrcomd和寫數(shù)據(jù)函數(shù)wrdata分別控制LCD的命令寫入和數(shù) 據(jù)寫入。具體操作方法是由寫命令函數(shù)wrcomd編程控制數(shù)據(jù)輸入的行列,再由寫數(shù)據(jù)函數(shù)wrdata編程寫入需要在LCD上顯示的數(shù)據(jù)或應(yīng)執(zhí)行的操作,結(jié)合兩 個(gè)命令一起控制LCD顯示。四.產(chǎn)品展示五.實(shí)驗(yàn)程序#ifndef _DRIVEFUTION_H_ #de
6、fi ne _DRIVEFUTION_H_ /* I PRO函*/*/*關(guān)閉 isp iap功育總 */void ISP_IAP_disable(void)ISP_CONTR = 0X00;ISP_CMD = 0X00;ISP_TRIG = 0x00;/*字節(jié)讀 *uchar Byte_read( uint byte_addr)EA = 0;/ISP_CONTR = En_Wait_TIME;ISP_CMD = Read_COM;/ISP_ADDRH = (uchar)(byte_addr >> 8);/ISP_ADDRL = (uchar)(byte_addr & 0X0
7、0FF);/ISP_TRIG = 0X46;/ISP_TRIG = 0XB9;關(guān)中斷開啟ISP/IAP;并送等待時(shí)間送字節(jié)讀命令字送地址高字節(jié)送地址低字節(jié)送觸發(fā)命令字0X46、0XB9字節(jié)編程*_nop_();ISP_IAP_disable();EA = 1;return (ISP_DATA);/*/ 關(guān)閉 ISP/IAP 功能 開中斷void Byte_program(uint byte_addr, uchar isp_iap_data)EA = 0;/ISP_CONTR = En_Wait_TIME; /ISP_CMD = Prog_COM/ISP_ADDRH = (uchar)(byte
8、_addr >> 8); /ISP_ADDRL = (uchar)(byte_addr & 0X00FF); / ISP_DATA = isp_iap_data;/ISP_TRIG = 0X46; / ISP_TRIG = 0XB9;_nop_();ISP_IAP_disable(); /EA = 1;/關(guān)中斷開啟 ISP/IAP; 并送等待時(shí)間 送字節(jié)編程命令字 送地址高字節(jié)送地址低字節(jié)送數(shù)據(jù)進(jìn) ISP_DATA送觸發(fā)命令字 0X46 、0XB9關(guān)閉 ISP/IAP 功能 開中斷*扇區(qū)擦除*void Sector_erase(uint sector_addr)EA = 0
9、; /ISP_CONTR = En_Wait_TIME; /ISP_CMD = Dele_COM; /ISP_ADDRH = (uchar)(sector_addr >> 8);/ISP_ADDRL = (uchar)(sector_addr & 0X00FF); / ISP_TRIG = 0X46;/ISP_TRIG = 0XB9;關(guān)中斷開啟 ISP/IAP; 并送等待時(shí)間 送扇區(qū)擦除命令字 送地址高字節(jié) 送地址低字節(jié)送觸發(fā)命令字 0X46 、0XB9_nop_();ISP_IAP_disable();EA = 1;/關(guān)閉 ISP/IAP 功能*寫入函數(shù)*void EEP
10、ROM_write(uint addr, uchar in_data) Sector_erase(addr);Byte_program(addr,in_data);*EEPROM函數(shù)*'*音樂播放相關(guān)子函數(shù)*/*/void InitialSound(void) / 初始化定時(shí)器BeepIO = 0;Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_OSC)/256; / 計(jì)算 TL1 應(yīng)裝入的初值 (10ms 的初裝值 )Sound_Temp_TL1 = (65535-(1/1200)*SYSTEM_OSC)%256;/ 計(jì)算 TH1 應(yīng)裝入的初值TH1
11、= Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TMOD |= 0x11;ET0 = 1;ET1 = 0;TR0 = 0;TR1 = 0;EA = 1;void BeepTimer0(void) interrupt 1/ 音符發(fā)生中斷函數(shù)BeepIO = !BeepIO;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0;* END* * LCD操作子函數(shù) */ 寫入命令void wrcomd(char comd)cs = 0; _nop_();rs = 0; _nop_();e = 1; _nop_();rw = 0; _nop_(
12、);P0 = comd; _nop_();rw = 0; _nop_(); _nop_();/ 往液晶中寫入數(shù)據(jù)rw = 1; _nop_(); _nop_(); _nop_(); _nop_(); void wrdata(char data_wri)cs = 0; _nop_();rs = 1; _nop_();e = 1; _nop_();rw = 0; _nop_();P0 = data_wri; _nop_();rw = 0; _nop_(); _nop_();rw = 1; _nop_(); _nop_(); _nop_(); _nop_(); void bmp(char data_
13、write,intcolumn_end) / 刷屏子函數(shù)/row_start,introw_end,uchar column_start,uchar初始化設(shè)置,對(duì)屏幕清零 , 默認(rèn)值,為0,0,8,2,132unsigned char i,j;int num_3;char num_0=0xb0;/uchar column_h,column_l; num_0+=row_start; for(i=row_start;i<row_end;i+)num_3 = column_end;wrcomd(num_0); / 寫 入 命 令 設(shè) 置 頁 , ( time_def ) ;/ 設(shè)置頁wrcom
14、d(0x10|(0xf0&column_start)>>4); / wrcomd(0x00|(0x0f&column_start);for(j=column_start;j<num_3;j+) wrdata(data_write); num_0+; 從 0 頁 開 始 , 0xb0=10110000 ; delay設(shè)置列 , 先寫入高 4 位再寫入低四位void delay(long int time_delay) long int i;for(i=0;i<time_delay;i+)_nop_();/ 延時(shí)子程序,執(zhí)行 time_delay 個(gè) _no
15、p_() 延時(shí)void write_word(char *p_word,int num,int pos_x,int 寫漢字 / 字符子函數(shù)pos_y,int width,int height) / 對(duì)應(yīng)參數(shù) 數(shù)據(jù)數(shù)組名, 數(shù)組中位置, 行位置,列位置,寬,高char page; / 頁號(hào)unsigned int i,j,k,p;/p 確定漢字字模數(shù)據(jù)初始位置p = (unsigned int)num*2*width;i = height%8;k = (i)?(height/8+1):(height/8);page = 0xb0 + pos_y;for(i=0;i<2;i+)wrcomd(
16、page); wrcomd(0x10|(0xf0&pos_x)>>4); wrcomd(0x00|(0x0f&pos_x); for(j=0;j<width;j+)wrdata(p_wordj+p); p=p+width;page+;if(page-(unsigned char)0xb0>7|page-(unsigned char)0xb0<0) return;* END* *鍵盤掃描函數(shù) *判斷是否有鍵盤輸入*/ 鍵盤狀態(tài)判斷子函數(shù)鍵盤掃描檢測(cè)是否有按鍵輸入bit CheckState(void)bit state=0;P1=0x0F; /if(
17、P1!=0x0F)state=1; /else state=0;return(state);*獲取鍵盤輸入值 */uchar GetKeys(void)uchar column,line;/ 鍵盤值獲取子函數(shù)scan=0xFE;while(scan&0x10)!=0)P1=scan;if(P1&0xF0)!=0xF0)/line 1 have key pressedcolumn=(P1|0x0F); line=(scan|0xF0); key=column+line;return(key);else scan=(scan<<1)|0x01;return(0);*應(yīng)用
18、子函數(shù) */*/ void csh(void) / 初始化,清屏 int i; res = 0; delay(time_def); delay(time_def);res = 1;delay(time_def);cs = 0; /片選一直有效/ 初始命令寫入/ 開機(jī)顯示畫面子函數(shù)delay(time_def); delay(time_def); for(i=0;i<12;i+)wrcomd(tab1i); delay(time_def);bmp(0,0,8,0,132);void start_print(void)int i,j;for(i=0;i<4;i+)write_word(
19、star_welcome,i,36+i*16,2,16,16);if(i+4)<7) write_word(star_welcome,i+4,44+i*16,4,16,16);if(i+7)<10)write_word(star_welcome,i+7,36+i*16,6,16,16);write_word(number,10,4+5*16,6,8,16); for(j=5;j>=0;j-)write_word(number,j,12+5*16,6,8,16); delay(5000);菜單選擇符刷新子函數(shù),即“打鉤項(xiàng)”void menu_first_symbol(int c
20、hoose) /bmp(0,0,8,4,18); write_word(menu_one,20,4,choose*2,16,16);*音樂播放顯示函數(shù)*/*/顯示最底層子函數(shù)void music_display_one(unsigned char s,unsigned int x) / int i;bmp(0,2,8,18+x*16,34+x*16);for(i=3;i>0;i-)if(s!=0)write_word(display,1,20+16*x,2*i,16,16); s=s-1;else write_word(display,0,20+16*x,2*i,16,16);/dela
21、y(200);顯示次底層子函數(shù)void music_display_two(unsigned int p_x) / int sign;sign=mc_sizep_x0;if(sign)if(!sizep_x)sign=0; mc_sizep_x0=sign;mc_sizep_x1=0;else music_display_one(sizep_x,p_x);mc_sizep_x1+=1;if(mc_sizep_x1>3) sizep_x-=1;elsesizep_x+=1;/*/else bmp(0,2,8,18+p_x*16,34+p_x*16);write_word(display,2
22、,20+16*p_x,6,16,16); /delay(500);/*/音符狀態(tài)置位函數(shù)void music_display_three(unsigned int mc) / mc_sizemc-10=1; mc_sizemc-11=1; sizemc-1=1;void music_display_four(void) / 顯示次頂層子函數(shù)int i;for(i=0;i<7;i+) music_display_two(i);void music_display_five() / 顯示頂層子函數(shù)int i;allsize=0;for(i=0;i<7;i+)allsize+=mc_si
23、zei0;music_display_four();/*void music_display(void) / 顯示主函數(shù)int i;for(i=0;i<10;i+)music_display_three(music_codei); music_display_five();while(allsize)music_display_five();*/播放音樂同時(shí)顯示音符顯示界void display_between_musicplay(unsigned int tone) / 面music_display_three(tone); music_display_five();/*/*播放子程序
24、 *void music_play_one(uint*NewFreTab,uchar Tone,uchar Length,uintLDiv0,uint LDiv1)音 長 , 12000/Speed ,/ 計(jì)算出音符/ 計(jì)算出高低音/ 計(jì)算出是否升半/ 查出對(duì)應(yīng)音符的頻率/ 低音/ 高音/ 頻 率 表 , 音 符 (12000/Speed)/4)-(12000/Speed)/4)*SOUND_SPACE unsigned char SL,SH,SM,SLen,XG,FD; uint i,Temp_T,CurrentFre,LDiv,LDiv2,LDiv3; SL=Tone%10;SM=Tone
25、/10%10; SH=Tone/100; CurrentFre = NewFreTabSignTabSL-1+SH;if(SL!=0)if (SM=1) CurrentFre >>= 2;if (SM=3) CurrentFre <<= 2;Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);/ 計(jì)算計(jì) 數(shù)器初值Sound_Temp_TH0 = Temp_T/256;Sound_Temp_TL0 = Temp_T%256;TH0 = Sound_Temp_TH0;TL0 = Sound_Temp_TL0
26、+ 12; / 加 12 是對(duì)中斷延時(shí)的補(bǔ)償SLen=LengthTabLength%10; /XG=Length/10%10;FD=Length/100;LDiv=LDiv0/SLen;if (FD=1)LDiv=LDiv+LDiv/2;if(XG!=1)if(XG=0)if (SLen<=4)LDiv2=LDiv-LDiv1else算出是幾分音符/ 算出音符類型 (0 普通 1連音 2頓音 )/ 算出連音音符演奏的長度 ( 多少個(gè) 10ms)/ 算出普通音符的演奏長度LDiv2=LDiv*SOUND_SPACE;elseLDiv2=LDiv/2;else/ 算出頓音的演奏長度LDiv
27、2=LDiv;if(SL=0) LDiv2=0;LDiv3=LDiv-LDiv2; if (SL!=0)/ 算出不發(fā)音的長度 TR0=1; for(i=LDiv2;i>0;i-)/ 發(fā)規(guī)定長度的音 while(TF1=0);TH1 = Sound_Temp_TH1;TL1 = Sound_Temp_TL1;TF1=0;display_between_musicplay(SL); / 音長問題?要結(jié)合音長來控制其顯示時(shí)間,弄清if(LDiv3!=0)TR0=0; BeepIO=0; for(i=LDiv3;i>0;i-) / 音符間的間隔while(TF1=0);TH1 = Soun
28、d_Temp_TH1; TL1 = Sound_Temp_TL1;TF1=0;/*/void music_play_two_1(uchar *Sound,uint *NewFreTab,uint SoundLength,uint LDiv0,uint LDiv1)/ 播放原存儲(chǔ)的音 樂uint xdata Point;uchar xdata Tone,Length,i;Point = 0;TR0 = 0;TR1 = 1;for(i=0;i<4;i+) write_word(menu_one,i+1,4+(i+2)*16,0,16,16);while(Point < SoundLen
29、gth)Tone = SoundPoint;Length = SoundPoint+1;/ 讀出第一個(gè)音符和它時(shí)時(shí)值music_play_one(NewFreTab,Tone,Length,LDiv0,LDiv1);Point+=2;BeepIO = 0;while(allsize) music_display_five();void music_play_two_2(uint *NewFreTab,uint SoundLength,uint LDiv0,uint LDiv1)/ 播放譜曲存儲(chǔ) 的音樂uint xdata Point;uchar xdata Tone,Length,i;Poin
30、t = 0;TR0 = 0;TR1 = 1;for(i=0;i<4;i+) write_word(menu_one,i+1,4+(i+2)*16,0,16,16);while(Point < SoundLength)Tone = Byte_read(start_add+Point);Length = Byte_read(start_add+Point+1);/ 讀出第一個(gè)音符和它時(shí)時(shí)值music_play_one(NewFreTab,Tone,Length,LDiv0,LDiv1);Point+=2;BeepIO = 0; while(allsize) / 顯示末尾結(jié)束的狀態(tài) mu
31、sic_display_five(); /* void Play_Two(unsigned char *Sound,unsigned char Signature,unsigned Octachord)unsigned int xdata NewFreTab12;/ 新的頻率表unsigned char xdata i,j;unsigned int xdata LDiv0,LDiv1,SoundLength; menu_state=1;charfor(i=0;i<12;i+) / j = i + Signature;if(j > 11)j = j-12;NewFreTabi = F
32、reTabj*2;else根據(jù)調(diào)號(hào)及升降八度來生成新的頻率表NewFreTabi = FreTabj;if(Octachord = 1)NewFreTabi>>=2;else if(Octachord = 3)NewFreTabi<<=2; LDiv0=12000/Speed;/ 算出LDiv1= LDiv0/4;/ LDivLDiv1= LDiv1-LDiv1*SOUND_SPACE;1 分音符的長度 ( 幾個(gè) 10ms) 為算出 4 分音符的長度/ LDiv 最后為普通音最長間隔標(biāo)準(zhǔn)SoundLength = 0; if(Sound!=Music_Memory) /
33、 while(SoundSoundLength != 0x00)/ 計(jì)算歌曲長度SoundLength+=2;for(i=0;i<4;i+) write_word(menu_one,i+1,4+(i+2)*16,0,16,16);while(menu_state) /music_play_two_1(Sound,NewFreTab,SoundLength,LDiv0,LDiv1);bmp(0,0,8,2,132);for(i=0;i<5;i+)write_word(restar,i,4+(i+2)*16,2,16,16);while(!CheckState();if(GetKeys
34、()=0x11) / 確認(rèn)鍵返回 ,F 鍵 menu_state=0;delay(1000);bmp(0,0,8,2,132);elsewhile(Byte_read(start_add+SoundLength)!=0x00) / 計(jì)算歌曲長度SoundLength+=2;for(i=0;i<4;i+)write_word(menu_one,i+1,4+(i+2)*16,0,16,16);while(menu_state)music_play_two_2(NewFreTab,SoundLength,LDiv0,LDiv1);bmp(0,0,8,2,132);for(i=0;i<5;
35、i+)write_word(restar,i,4+(i+2)*16,2,16,16);while(!CheckState();if(GetKeys()=0x11) / 確認(rèn)鍵返回 ,F 鍵 menu_state=0;delay(1000);bmp(0,0,8,2,132);*音符轉(zhuǎn)換函數(shù) */ 把輸入的音符轉(zhuǎn)換成相應(yīng)的數(shù)據(jù)形式,存儲(chǔ)void ChangeKey(uchar Gkey)至U EEPRO中/ int i;if(Gkey!=0)delay(5000);if(music_counter%48)=0)bmp(0,2,8,0,132);switch(Gkey)case 0x11: if(m
36、usic_counter>2) bmp(0,0,8,0,132);music_state=1;break;case 0x42: Byte_program(start_add+music_counter),0);write_word(number,0,4+(music_counter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x88: Byte_program(start_add+music_counter),1);write_word(number,1,4+(music_counter%48
37、)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x48: Byte_program(start_add+music_counter),2);write_word(number,2,4+(music_counter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x28: Byte_program(start_add+music_counter),3);write_word(number,3,4+(music_coun
38、ter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x18: Byte_program(start_add+music_counter),4);write_word(number,4,4+(music_counter%48)%16)*8,2+(music_counter%64)/16)*2,8,16);+music_counter;break;case 0x84: Byte_program(start_add+music_counter),5);write_word(number,5,4+(musi
39、c_counter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x44: Byte_program(start_add+music_counter),6);write_word(number,6,4+(music_counter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;case 0x24: Byte_program(start_add+music_counter),7);write_word(number,7,4
40、+(music_counter%48)%16)*8,2+(music_counter%48)/16)*2,8,16);+music_counter;break;default:break;void Entry_Music(void) / 輸入樂譜播放函數(shù)uchar gkey,i;bmp(0,0,8,2,132);while(menu_state)for(i=0;i<4;i+) write_word(Music_Mry,i,4+(i+2)*16,0,16,16);while(!music_state)if(CheckState()if(music_state=0)ChangeKey(Get
41、Keys(); bmp(0,2,8,2,132); InitialSound(); Play_Two(Music_Memory,Signature,Octa); bmp(0,2,8,2,132);for(i=0;i<4;i+) write_word(restar,i+5,4+(i+2)*16,2,16,16);for(i=0;i<5;i+) write_word(restar,i,4+(i+2)*16,4,16,16); while(!CheckState();gkey=GetKeys();delay(500);if(gkey=0x11) / 確認(rèn)鍵返回 ,F 鍵menu_stat
42、e=0;delay(1000);bmp(0,0,8,2,132);/*/*菜單函數(shù) *void menu_first(int choose) /主菜單int i,j;bmp(0,0,8,2,132);for(i=0;i<4;i+)write_word(menu_one,i*10,20,i*2,8,16);write_word(menu_one,1+i*10,28,i*2,8,16); for(j=1;j<5;j+) write_word(menu_one,i*5+j,20+j*16,i*2,16,16); menu_first_symbol(choose);void menu_th
43、ree1(void)int i,gkey;while(!menu_state) bmp(0,0,8,2,132); for(i=0;i<7;i+) write_word(menu_thr,i,4+16*i,0,16,16); write_word(menu_thr,i+7,4+16*i,2,16,16); write_word(menu_thr,i+14,4+16*i,4,16,16); delay(10000); while(!CheckState(); gkey=GetKeys(); bmp(0,0,8,2,132); InitialSound(); switch(gkey) cas
44、e 0x88:Play_Two(Music_1,Signature,Octa);break; case 0x48:Play_Two(Music_2,Signature,Octa);break; case 0x28:Play_Two(Music_3,Signature,Octa);break; case 0x81:menu_state=1;break; /C鍵返回default:break;void menu_three2(void)int i,gkey;bmp(0,0,8,2,132); for(i=0;i<4;i+) write_word(menu_one,i+11,4+(i+2)*1
45、6,0,16,16);while(!menu_state) while(!CheckState() ;gkey=GetKeys();InitialSound(); / 定時(shí)器初始化switch(gkey)case 0x88:Music_take0=1;music_play_two_1(Music_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x48:Music_take0=2;music_play_two_1(Music_take,FreTab1,2,(12000/Spe
46、ed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x28:Music_take0=3;music_play_two_1(Music_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x18:Music_take0=4;music_play_two_1(Music_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);
47、break;case 0x84:Music_take0=5;music_play_two_1(Music_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x44:Music_take0=6;music_play_two_1(Music_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x24:Music_take0=7;music_play_two_1(M
48、usic_take,FreTab1,2,(12000/Speed),(12000/Speed)/4)*(1-SOUND_ SPACE);delay(10);break;case 0x81:menu_state=1;break; /C 鍵返回default:break;void menu_four0(int value) / 參數(shù)修改最底層子函數(shù), 用于參數(shù)值的修改 顯示int xdata i,value_sign;i=0;bmp(0,6,8,76,108); /bmp(0,6,8,2+16,2+2*16); value_sign=value/100;if(value_sign!=0)write_word(number,value_sign,76,6,8,16);i+=1;value_sign=(value%100)/10;if(i!=0|value_sign!=0)write_word(number,value_sign,76+8*i,6,8,16);i+=1;value_sign=value%10;write_word(number,value_sign,76+8*i,6,8,16);uint chovalue(ui
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 機(jī)械工程原理與工藝實(shí)踐題
- 標(biāo)準(zhǔn)保證擔(dān)保合同范本模板
- 2023年二代微通道板資金申請(qǐng)報(bào)告
- 2025寧夏中匯化工有限公司招聘8人筆試參考題庫附帶答案詳解
- 2025年斗型布草車項(xiàng)目建議書
- 2025年上半年安徽馬鞍山雨山區(qū)政府部門招聘17人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年疊片機(jī)項(xiàng)目資金申請(qǐng)報(bào)告代可行性研究報(bào)告
- 2025年上半年安徽馬鞍山博望區(qū)政府部門招聘派遣制人員27人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2024年熱敏型CTP版項(xiàng)目資金籌措計(jì)劃書代可行性研究報(bào)告
- 2025年上半年安徽省譙城區(qū)直單位選調(diào)筆試易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 2025山西國際能源集團(tuán)社會(huì)招聘258人筆試參考題庫附帶答案詳解
- 普華永道中天會(huì)計(jì)師事務(wù)所-人工智能機(jī)遇在汽車領(lǐng)域
- 2025年皖西衛(wèi)生職業(yè)學(xué)院單招職業(yè)適應(yīng)性測(cè)試題庫新版
- 2025年湖南高速鐵路職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測(cè)試題庫附答案
- 腰椎穿刺的護(hù)理
- 2025屆高考英語二輪復(fù)習(xí)備考策略課件
- 活在課堂里 課件
- 潔凈室空調(diào)凈化系統(tǒng)驗(yàn)證方案(通過BSI和華光審核)
- 2024年遼陽職業(yè)技術(shù)學(xué)院單招職業(yè)技能測(cè)試題庫及答案解析
- 中國春節(jié)習(xí)俗簡介0001
- 高二數(shù)學(xué)教學(xué)進(jìn)度計(jì)劃表
評(píng)論
0/150
提交評(píng)論