單片機課程設計報告電子琴
《單片機課程設計報告電子琴》由會員分享,可在線閱讀,更多相關《單片機課程設計報告電子琴(22頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 電子音調(diào)發(fā)生器 一、實驗目的 1. 了解計算機發(fā)聲原理. 2。 熟悉定時器和鍵盤掃描電路的工作原理及編程方法。 二、實驗完成的功能 1。 利用鍵盤1~7進行音調(diào)選擇,即按下音符產(chǎn)生對應音調(diào)。 2。 事先存儲三首歌曲,并可進行選擇播放。 3。 譜曲功能:通過按鍵對LCD菜單選項進行選擇,進入譜曲界面,通過按鍵1~7分別輸入音高與幾分音符類型,由按鍵輸入若干數(shù)據(jù)完成譜曲。 4. 在播放存儲歌曲與譜曲播放時,對應音符及其節(jié)奏LCD顯示對應頻譜。 5。 在播放音樂時按“返回”鍵出現(xiàn)返回界面,由鍵盤按“確認”鍵選擇返回主菜單或循環(huán)播放。 三、實驗原理 1。 音節(jié)由不同頻率的方
2、波產(chǎn)生,音節(jié)與頻率的關系如表(1)所示。要產(chǎn)生音頻方波,只要計算出某一音頻的周期(1 / 頻率),然后將此周期除以2,即為半周期的時間.利用計時器計時此半周期時間,每當計時到后就將輸出方波的I/O(P1。7)反相,然后重復計時此半周期時間再對I/O反相,就可在P1。7腳得到此頻率的方波。將P1.7經(jīng)過驅動電路與蜂鳴器相連,隨著P1。7口輸出不同頻率的方波,蜂鳴器便會發(fā)出不同的聲音。音樂的節(jié)拍是由延時實現(xiàn)的,如果1拍的時間為0.4秒,1/4拍是0.1秒。只要設定延時時間,就可得到節(jié)拍的時間。延時實現(xiàn)基本延時時間,節(jié)拍值只能是它的整數(shù)倍。 每個音節(jié)相應的定時器初值計算公式如下: (1/2)*(
3、1/f)=(12/fose)*(216—x) 即 x=216-(fose/24f) 其中,f是音調(diào)頻率,當晶振fosc=11。0592MHz時,音節(jié)“1”相應的定時器初值為x,則可得到x=63777D=F921H,其它的可同樣得到。 表(1) 音節(jié)與頻率的關系 音調(diào) 頻率(Hz) X(HEX) 1 262 F921 2 294 F9E1 3 330 FA8C 4 349 FAD8 5 392 FB68 6 440 FBE9 7 494 FC5B i 523 FC8F 在編寫歌曲代碼過程中,音高由三位
4、數(shù)字組成:個位是表示1~7 這七個音符;十位是表示音符所在的音區(qū):1—低音,-中音,-高音;百位表示這個音符是否要升半音: 0—不升,—升半音。音長最多由三位數(shù)字組成:個位表示音符的時值,其對應關系是: |數(shù)值(n): |0 |1 |2 |3 | 4 | 5 | 6 |幾分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0—2): 0-普通,—連音,—頓音,百位是符點位: 0-無符點,1—有符點。 2.鍵盤掃描 將單片機P1.0~P1。7(引腳1~8)與鍵盤上對應引腳相連,其中P1.0~P1。3控制鍵盤的行,P1
5、。4~P1。7控制鍵盤的列,這次使用的鍵盤是4行4列,鍵盤上的第一行到第四行由8位十六進制代碼的低四位控制,即第一行若有鍵按下,則8位十六進制代碼的后四位為0x8,第二行有按鍵按下,則后四位代碼為0x4,依此規(guī)律類推;鍵盤上的第一列到第四列由8位十六進制代碼的高四位控制,即第一列若有鍵按下,則8位十六進制代碼的前四位為0x8,第二列有按鍵按下,則前四位代碼為0x4,依此規(guī)律類推.綜上所述,可以根據(jù)8位十六進制的高四位和低四位數(shù)據(jù),分別確定按下的鍵處于第幾行第幾列,從而確定按鍵的位置,實現(xiàn)鍵盤掃描的功能。 3.LCD顯示 根據(jù)寫命令函數(shù)wrcomd和寫數(shù)據(jù)函數(shù)wrdata分別控制LCD的命
6、令寫入和數(shù)據(jù)寫入。具體操作方法是由寫命令函數(shù)wrcomd編程控制數(shù)據(jù)輸入的行列,再由寫數(shù)據(jù)函數(shù)wrdata編程寫入需要在LCD上顯示的數(shù)據(jù)或應執(zhí)行的操作,結合兩個命令一起控制LCD顯示. 四.產(chǎn)品展示 五。實驗程序 #ifndef _DRIVEFUTION_H_ #define _DRIVEFUTION_H_ /*********************EEPROM函數(shù)*******************/ /**************************************************/ /****************** 關閉 ISP,IAP
7、功能 **************/ void ISP_IAP_disable(void) { ISP_CONTR = 0X00; ISP_CMD = 0X00; ISP_TRIG = 0x00; } /*******************字節(jié)讀***************************/ uchar Byte_read(uint byte_addr) { EA = 0; //關中斷
8、 ISP_CONTR = En_Wait_TIME; //開啟ISP/IAP;并送等待時間 ISP_CMD = Read_COM; //送字節(jié)讀命令字 ISP_ADDRH = (uchar)(byte_addr 〉> 8); //送地址高字節(jié) ISP_ADDRL = (uchar)(byte_addr & 0X00FF); //送地址低字節(jié) ISP_TRIG = 0X46;
9、 //送觸發(fā)命令字 0X46、0XB9 ISP_TRIG = 0XB9; _nop_(); ISP_IAP_disable(); //關閉ISP/IAP功能 EA = 1; //開中斷 return (ISP_DATA); } /********************字節(jié)編程***********************/ voi
10、d Byte_program(uint byte_addr, uchar isp_iap_data) { EA = 0; //關中斷 ISP_CONTR = En_Wait_TIME; //開啟ISP/IAP;并送等待時間 ISP_CMD = Prog_COM; //送字節(jié)編程命令字 ISP_ADDRH = (uchar)(byte_addr >〉 8)
11、; //送地址高字節(jié) ISP_ADDRL = (uchar)(byte_addr & 0X00FF); //送地址低字節(jié) ISP_DATA = isp_iap_data; //送數(shù)據(jù)進ISP_DATA ISP_TRIG = 0X46; //送觸發(fā)命令字 0X46、0XB9 ISP_TRIG = 0XB9; _nop_(); ISP_IAP_disable();
12、 //關閉ISP/IAP功能 EA = 1; //開中斷 } /********************* 扇區(qū)擦除*********************/ void Sector_erase(uint sector_addr) { EA = 0; //關中斷 ISP_CONTR = En_Wait_TIME;
13、 //開啟ISP/IAP;并送等待時間 ISP_CMD = Dele_COM; //送扇區(qū)擦除命令字 ISP_ADDRH = (uchar)(sector_addr >〉 8); //送地址高字節(jié) ISP_ADDRL = (uchar)(sector_addr & 0X00FF); //送地址低字節(jié) ISP_TRIG = 0X46; //送觸發(fā)命令字 0X46、0XB9
14、 ISP_TRIG = 0XB9; _nop_(); ISP_IAP_disable(); //關閉ISP/IAP功能 EA = 1; } /*********************寫入函數(shù)**********************/ void EEPROM_write(uint addr, uchar in_data) { Sector_erase(addr); Byte_program(addr,in_data); } /***
15、******************EEPROM函數(shù)*******************/ /**************************************************/ /***************音樂播放相關子函數(shù)*******************/ /****************************************************/ void InitialSound(void) //初始化定時器 { BeepIO = 0; Sound_Temp_TH1 = (65535-(1/1200)*SYSTEM_
16、OSC)/256; // 計算TL1應裝入的初值 (10ms的初裝值) Sound_Temp_TL1 = (65535—(1/1200)*SYSTEM_OSC)%256; // 計算TH1應裝入的初值 TH1 = 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ù) { Bee
17、pIO = !BeepIO; TH0 = Sound_Temp_TH0; TL0 = Sound_Temp_TL0; } /*********************END****************************/ /****************************************************/ /*****************LCD操作子函數(shù)**********************/ /****************************************************/ void wr
18、comd(char comd) //寫入命令 { cs = 0; _nop_(); rs = 0; _nop_(); e = 1; _nop_(); rw = 0; _nop_(); P0 = comd; _nop_(); rw = 0; _nop_(); _nop_(); rw = 1; _nop_(); _nop_(); _nop_(); _nop_(); } void wrdata(char data_wri) //往液晶中寫入數(shù)據(jù) { cs = 0; _nop_(); rs = 1; _nop_()
19、; e = 1; _nop_(); rw = 0; _nop_(); P0 = data_wri; _nop_(); rw = 0; _nop_(); _nop_(); rw = 1; _nop_(); _nop_(); _nop_(); _nop_(); } void bmp(char data_write,int row_start,int row_end,uchar column_start,uchar column_end) //刷屏子函數(shù)
20、//初始化設置,對屏幕清零,默認值,為0,0,8,2,132
{
unsigned char i,j;
int num_3;
char num_0=0xb0;
//uchar column_h,column_l;
num_0+=row_start;
for(i=row_start;i 21、(0xf0&column_start)>〉4); //設置列,先寫入高4位再寫入低四位
wrcomd(0x00|(0x0f&column_start));
for(j=column_start;j 22、_nop_();
}
void write_word(char *p_word,int num,int pos_x,int pos_y,int width,int height) //寫漢字/字符子函數(shù)
//對應參數(shù) 數(shù)據(jù)數(shù)組名,數(shù)組中位置,行位置,列位置,寬,高
{
char page; // 頁號
unsigned int i,j,k,p;
p = (unsigned int)num*2*width; //p確定漢字字模數(shù)據(jù)初始位置
i = height%8;
k = (i)?(height/8+1 23、):(height/8);
page = 0xb0 + pos_y;
for(i=0;i<2;i++)
{
wrcomd(page);
wrcomd(0x10|(0xf0&pos_x)〉>4);
wrcomd(0x00|(0x0f&pos_x));
for(j=0;j〈width;j++)
{
wrdata(p_word[j+p]);
}
p=p+width;
page++;
if(page-(unsigned char)0xb0>7|| 24、page-(unsigned char)0xb0〈0)
return;
}
}
/**************************END***********************/
/****************************************************/
/****************** 鍵盤掃描函數(shù)*********************/
/****************************************************/
/****************判斷是否有鍵盤輸入 25、*********************/
bit CheckState(void) //鍵盤狀態(tài)判斷子函數(shù)
{
bit state=0;
P1=0x0F; //鍵盤掃描
if(P1!=0x0F)state=1; //檢測是否有按鍵輸入
else state=0;
return(state);
}
/******************獲取鍵盤輸入值*****************/
uchar GetKeys(void) //鍵盤值獲取子函數(shù)
{
uchar column,line;
26、
scan=0xFE;
while((scan&0x10)!=0)
{
P1=scan;
if((P1&0xF0)!=0xF0) //line 1 have key pressed
{
column=~(P1|0x0F);
line=~(scan|0xF0);
key=column+line;
return(key);
}
else scan=(scan<<1)|0x01;
}
return(0);
}
/****************** 27、應用子函數(shù)*****************/
/*********************************************/
void csh(void) //初始化,清屏
{
int i;
res = 0;
delay(time_def);
delay(time_def);
res = 1;
delay(time_def);
cs = 0; //片選一直有效
delay(time_def);
delay(time_def);
for(i=0;i〈12;i++) //初始命令 28、寫入
{
wrcomd(tab1[i]);
delay(time_def);
}
bmp(0,0,8,0,132);
}
void start_print(void) //開機顯示畫面子函數(shù)
{
int i,j;
for(i=0;i<4;i++)
{
write_word(star_welcome,i,36+i*16,2,16,16);
if((i+4)〈7)
{
write_word(star_welcome,i+ 29、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);
}
}
void menu_first_symbol(int cho 30、ose) //菜單選擇符刷新子函數(shù),即“打鉤項”
{
bmp(0,0,8,4,18);
write_word(menu_one,20,4,choose*2,16,16);
}
/*********************音樂播放顯示函數(shù)******************/
/*******************************************************/
void music_display_one(unsigned char s,unsigned int x) //顯示最底層子函數(shù)
{
int i;
bmp 31、(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);
//delay(200);
}
}
}
void music_display_two(unsigned int p_x) //顯示次底層子函數(shù)
{
32、 int sign;
sign=mc_size[p_x][0];
if(sign)
{
if(!size[p_x])
{
sign=0;
mc_size[p_x][0]=sign;
mc_size[p_x][1]=0;
}
else
{
music_display_one(size[p_x],p_x);
mc_size[p_x][1]+=1;
if(mc_size[p_x][1]>3)
size[p_x]-=1;
else
33、 size[p_x]+=1;
}
}
/*************************************/
else
{
bmp(0,2,8,18+p_x*16,34+p_x*16);
write_word(display,2,20+16*p_x,6,16,16);
//delay(500);
}
/************************************/
}
void music_display_three(unsigned int mc) //音符狀態(tài)置位函數(shù)
34、{
mc_size[mc—1][0]=1;
mc_size[mc—1][1]=1;
size[mc—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_size[i][0 35、];
music_display_four();
}
/*
void music_display(void) //顯示主函數(shù)
{
int i;
for(i=0;i<10;i++)
{
music_display_three(music_code[i]);
music_display_five();
}
while(allsize)
music_display_five();
}*/
void display_between_musicplay(unsigned int tone) // 36、播放音樂同時顯示音符顯示界面
{
music_display_three(tone);
music_display_five();
}
/****************************************************/
/*********************播放子程序*********************/
void music_play_one(uint *NewFreTab,uchar Tone,uchar Length,uint LDiv0,uint LDiv1)
//頻率表, 37、音符,音長,12000/Speed,((12000/Speed)/4)-((12000/Speed)/4)*SOUND_SPACE
{
unsigned char SL,SH,SM,SLen,XG,F(xiàn)D;
uint i,Temp_T,CurrentFre,LDiv,LDiv2,LDiv3;
SL=Tone%10; //計算出音符
SM=Tone/10%10; //計算出高低音
SH=Tone/100; //計算出是否升半
CurrentFre = NewFreTab[SignT 38、ab[SL—1]+SH]; //查出對應音符的頻率
if(SL!=0)
{
if (SM==1) CurrentFre 〉>= 2; //低音
if (SM==3) CurrentFre 〈<= 2; //高音
Temp_T = 65536-(50000/CurrentFre)*10/(12000000/SYSTEM_OSC);//計算計數(shù)器初值
Sound_Temp_TH0 = Temp_T/256;
Sound_Temp_TL0 = Temp_T%256;
TH0 = Sound_Temp_TH0;
39、 TL0 = Sound_Temp_TL0 + 12; //加12是對中斷延時的補償
}
SLen=LengthTab[Length%10]; //算出是幾分音符
XG=Length/10%10; //算出音符類型(0普通1連音2頓音)
FD=Length/100;
LDiv=LDiv0/SLen; //算出連音音符演奏的長度(多少個10ms)
if (FD==1)
LDiv=LDiv+LDiv/2;
if(XG!=1)
if(XG==0) //算出普通音符的演奏長度
if (SLen〈=4) 40、
LDiv2=LDiv—LDiv1;
else
LDiv2=LDiv*SOUND_SPACE;
else
LDiv2=LDiv/2; //算出頓音的演奏長度
else
LDiv2=LDiv;
if(SL==0) LDiv2=0;
LDiv3=LDiv-LDiv2; //算出不發(fā)音的長度
if (SL!=0)
{
TR0=1;
for(i=LDiv2;i〉0;i-—) //發(fā)規(guī)定長度的音
{
while(TF1==0);
TH1 = Soun 41、d_Temp_TH1;
TL1 = Sound_Temp_TL1;
TF1=0;
}
}
display_between_musicplay(SL); //???要結合音長來控制其顯示時間,弄清音長問題???
if(LDiv3!=0)
{
TR0=0; BeepIO=0;
for(i=LDiv3;i>0;i-—) //音符間的間隔
{
while(TF1==0);
TH1 = Sound_Temp_TH1;
TL1 = Sound_Temp_TL1;
TF1=0;
} 42、
}
}
/**************************************************************************/
/**************************************************************/
void music_play_two_1(uchar *Sound,uint *NewFreTab,uint SoundLength,uint LDiv0,uint LDiv1)
43、 //播放原存儲的音樂
{
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 〈 SoundLength)
{
Tone = Sound[Point];
Length = Sound[Point+1]; / 44、/ 讀出第一個音符和它時時值
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)
45、 //播放譜曲存儲的音樂
{
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 〈 SoundLength)
{
Tone = Byte_read(start_add+Point);
Length = Byte_read(start_add 46、+Point+1); // 讀出第一個音符和它時時值
music_play_one(NewFreTab,Tone,Length,LDiv0,LDiv1);
Point+=2;
}
BeepIO = 0;
while(allsize) //顯示末尾結束的狀態(tài)
music_display_five();
}
//**************************************************************************
void Play_Two(unsigned char *S 47、ound,unsigned char Signature,unsigned char Octachord)
{
unsigned int xdata NewFreTab[12]; //新的頻率表
unsigned char xdata i,j;
unsigned int xdata LDiv0,LDiv1,SoundLength;
menu_state=1;
for(i=0;i<12;i++) // 根據(jù)調(diào)號及升降八度來生成新的頻率表
{
j = i + Signature;
48、
if(j > 11)
{
j = j-12;
NewFreTab[i] = FreTab[j]*2;
}
else
NewFreTab[i] = FreTab[j];
if(Octachord == 1)
NewFreTab[i]>〉=2;
else if(Octachord == 3)
NewFreTab[i]<<=2;
}
LDiv0=12000/Speed; // 算出1分音符的長度(幾個10ms)
LDiv1= LDiv0/4; // LDiv為算出4分音符的長度 49、
LDiv1= LDiv1—LDiv1*SOUND_SPACE; // LDiv最后為普通音最長間隔標準
SoundLength = 0;
if(Sound!=Music_Memory) //
{
while(Sound[SoundLength] != 0x00) //計算歌曲長度
SoundLength+=2;
for(i=0;i〈4;i++)
write_word(menu_one,i+1,4+(i+2)*16,0,16,16);
whi 50、le(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()==0x11) //確認鍵返回,F鍵
menu_state=0;
delay(1000);
bmp 51、(0,0,8,2,132);
}
}
else
{
while(Byte_read(start_add+SoundLength)!=0x00) //計算歌曲長度
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,LDi 52、v0,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()==0x11) //確認鍵返回,F(xiàn)鍵
menu_state=0;
delay(1000);
bmp(0,0,8,2,132);
}
}
}
/*************音符轉換函數(shù)*************************** 53、*******/
void ChangeKey(uchar Gkey) //把輸入的音符轉換成相應的數(shù)據(jù)形式,存儲到EEPROM中
{
// int i;
if(Gkey!=0)
{
delay(5000);
if((music_counter%48)==0)
bmp(0,2,8,0,132);
switch(Gkey)
{
case 0x11: if(music_counter〉2)
{bmp(0,0,8,0,132);mus 54、ic_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);
55、 write_word(number,1,4+((music_counter%48)%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);
++mus 56、ic_counter;break;
case 0x28: Byte_program((start_add+music_counter),3);
write_word(number,3,4+((music_counter%48)%16)*8,2+((music_counter%48)/16)*2,8,16);
++music_counter;break;
case 0x18: Byte_program((start_add+music_counter),4);
57、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+((music_counter%48)%16)*8,2+((music_counter%48)/16)*2,8,16);
++music_ 58、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);
59、write_word(number,7,4+((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_wor 60、d(Music_Mry,i,4+(i+2)*16,0,16,16);
while(!music_state)
{
if(CheckState())
{
if(music_state==0)
ChangeKey(GetKeys());
}
}
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+ 61、+)
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) //確認鍵返回,F(xiàn)鍵
menu_state=0;
delay(1000);
bmp(0,0,8,2,132);
}
}
/**** 62、********************************/
/***********菜單函數(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(me 63、nu_one,i*5+j,20+j*16,i*2,16,16);
}
menu_first_symbol(choose);
}
void menu_three1(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(m 64、enu_thr,i+14,4+16*i,4,16,16);
}
delay(10000);
while(!CheckState());
gkey=GetKeys();
bmp(0,0,8,2,132);
InitialSound();
switch(gkey)
{
case 0x88:Play_Two(Music_1,Signature,Octa);break;
case 0x48:Play_Two(Music_2,Signature,Octa);br 65、eak;
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)*16,0,16,16);
while(!menu_st 66、ate)
{
while(!CheckState()) ;
gkey=GetKeys();
InitialSound(); //定時器初始化
switch(gkey)
{
case 0x88:Music_take[0]=1;
music_play_two_1(Music_take,FreTab1,2,(12000/Speed),((12000/Speed)/4)*(1-SOUND_SPACE));
delay(10);break;
case 0x48:Music_take[0]=2;
music_play_two_1(Music_take,FreTab1,2,(12000/Speed),((12000/Speed)/4)*(1—SOUND_SPACE));
delay(10);break;
case 0x28:Music_take[0]=3;
music_play_
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 6.煤礦安全生產(chǎn)科普知識競賽題含答案
- 2.煤礦爆破工技能鑒定試題含答案
- 3.爆破工培訓考試試題含答案
- 2.煤礦安全監(jiān)察人員模擬考試題庫試卷含答案
- 3.金屬非金屬礦山安全管理人員(地下礦山)安全生產(chǎn)模擬考試題庫試卷含答案
- 4.煤礦特種作業(yè)人員井下電鉗工模擬考試題庫試卷含答案
- 1 煤礦安全生產(chǎn)及管理知識測試題庫及答案
- 2 各種煤礦安全考試試題含答案
- 1 煤礦安全檢查考試題
- 1 井下放炮員練習題含答案
- 2煤礦安全監(jiān)測工種技術比武題庫含解析
- 1 礦山應急救援安全知識競賽試題
- 1 礦井泵工考試練習題含答案
- 2煤礦爆破工考試復習題含答案
- 1 各種煤礦安全考試試題含答案