freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

用單片機設(shè)計及制作簡易電子琴-資料下載頁

2025-06-30 08:30本頁面
  

【正文】 。uchar code Len[][100]= //上面幾首音樂的旋律每個音符對應(yīng)的節(jié)拍 {{1,1,1,1,1,1,2,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,2,1,1,1,1,1,1,4,1,1,1,1,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,0,1,0,1,1,1,0,1,0,1,1,1,1,2,1,1,2,1},{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,1},{1,1,1,1,2,1,1,1,1,0,1,1,0,1,1,0,1,1,2,1},{1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,0,1,1,3,1,1},{0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,2,1},{0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,1,2,1,1},{0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,4,1},{0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,4,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,2,0,1,1,0,1,1,0,1,1,0,1,1,2,1,0,1,1,0,1,1,2,1,1,0,1,1,0,1,1,4,0,1,1,2,0,1,1,0,1,1,0,1,1,0,1,4,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}。/* 音符與計數(shù)值對應(yīng)表 */uint code tab[]={ 0,63628,63835,64021,64103,64260,64400,64524, 64580,64684,64777,64820,64898,64968,65030, 65058,65110,65157,65178,65217,65252,65283}。 void delay1(uint ms) //播放歌曲時實現(xiàn)節(jié)拍的延時函數(shù){ uchar t。 while(ms) for (t=0。t120。t++)。}/* 鍵消抖延時函數(shù) */void delay(void){ uchar i。 for (i=300。i0。i)。}/* 鍵掃描函數(shù) */uchar getkey(void){ uchar scancode,tmpcode。 if ((P0amp。0xf0)==0xf0) return(0)。 scancode = 0xfe。 while((scancodeamp。0x10)!=0) // 逐行掃描 { P0 = scancode。 // 輸出行掃描碼 if ((P0amp。0xf0)!=0xf0) // 本行有鍵按下 { tmpcode = (P0amp。0xf0)|0x0f。 /* 返回特征字節(jié)碼,為1的位即對應(yīng)于行和列 */ return((~scancode)+(~tmpcode))。 } else scancode = (scancode1)|0x01。 // 行掃描碼左移一位 }}/* 外部中斷0 ,這里是彈唱按鍵*/void EX0_INT() interrupt 0{ FY=0。 LED1=1。 LED2=0。 }/* 外部中斷1 ,這里是播放按鍵*/void EX1_INT() interrupt 2{ FY=1。 LED1=0。 LED2=1。 }/* 定時器0中斷服務(wù)子程序 */void time0_int(void) interrupt 1 using 0{ /* 設(shè)置計數(shù)初值 */ TH0 = STH0。 TL0 = STL0。 SPK=!SPK。 // 反相,產(chǎn)生輸出脈沖 P2=DSY_CODE[k] 。}void main(void){ LED1=1。 LED2=0。 P2=0x3f。 IE=0x87。 TMOD=0x01。 IT0=1。 IT1=1。 while(1) { P0 = 0xf0。 // 發(fā)全0列掃描碼 if ((P0amp。0xf0)!=0xf0) // 若有鍵按下 { delay()。 // 延時去抖動 if ((P0amp。0xf0)!=0xf0) // 延時后再判斷一次,去除抖動影響 { key = getkey()。 // 調(diào)用鍵盤掃描函數(shù) switch(key) // 根據(jù)獲取的按鍵位置得到k值 { case 0x11: // 1行1列 k = 0。 break。 case 0x21: // 1行2列 k = 1。 break。 case 0x41: // 1行3列 k = 2。 break。 case 0x81: // 1行4列 k = 3。 break。 case 0x12: // 2行1列 k = 4。 break。 case 0x22: // 2行2列 k = 5。 break。 case 0x42: // 2行3列 k = 6。 break。 case 0x82: // 2行4列 k = 7。 break。 case 0x14: // 3行1列 k = 8。 break。 case 0x24: // 3行2列 k = 9。 break。 case 0x44: // 3行3列 k = 10。 break。 case 0x84: // 3行4列 k = 11。 break。 case 0x18: // 3行4列 k = 12。 break。 case 0x28: // 3行4列 k = 13。 break。 case 0x48: // 3行4列 k = 14。 break。 case 0x88: // 3行4列 k = 15。 break。 default: break。 } if(FY==0) { /* 根據(jù)所得的k值設(shè)定計數(shù)器1的計數(shù)初值 */ STH0 = tab[k]/256。 STL0 = tab[k]%256。 TR0 = 1。 // 開始計數(shù) while ((P0amp。0xf0)!=0xf0)。 // 若沒有松開按鍵,則等待,等待期間彈奏該音符TR0 = 0。 // 若按鍵松開,則停止計數(shù),不產(chǎn)生脈沖輸出 } else { while (FY==1) { if (Song[k][Tone_Index]==1) Tone_Index=0。 STH0=(tab[Song[k][Tone_Index]])/256。 STL0=(tab[Song[k][Tone_Index]])%256。 P2=DSY_CODE[Song[k][Tone_Index]] 。 TR0 = 1。 delay1(300*Len[k][Tone_Index])。 Tone_Index++。 TR0 = 0。 } } } } }
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1