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

正文內(nèi)容

北郵小學(xué)期avr單片機(jī)電子琴實(shí)驗(yàn)報(bào)告-wenkub

2024-10-25 07 本頁(yè)面
 

【正文】 燈的閃爍間隔是一秒,另一份放在中斷服務(wù)程序中SIGNAL()中,即實(shí)現(xiàn)按下按鈕進(jìn)入中斷服務(wù)程序后,秒表計(jì)時(shí)器暫停第30頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院工作,而流水依舊在依次循環(huán)閃爍。然后我采用一個(gè)循環(huán),將端口PORTX每次等于一個(gè)a[i],單步運(yùn)行,找出了數(shù)碼管的顯示與管腳之間的對(duì)應(yīng)關(guān)系。第一天剛接到流水燈和數(shù)碼管秒表計(jì)時(shí)器的任務(wù)的時(shí)候,內(nèi)心真的十分激動(dòng),心想:實(shí)現(xiàn)了這個(gè)不就實(shí)現(xiàn)了街邊廣告牌上滾動(dòng)的文字了么!但是一看到ATmega16芯片時(shí)還是傻了眼,心想:這么多的管腳都該怎么用?。俊耙曨l里有”,同學(xué)告訴我,于是我就開(kāi)始認(rèn)真地第29頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院研究起老師給的單片機(jī)教學(xué)視頻和它的技術(shù)文檔。經(jīng)過(guò)小組討論,我們決定將錄制好的音樂(lè)在播放音樂(lè)模式里面播放,根據(jù)這個(gè)思路,我們將錄制的音樂(lè)對(duì)應(yīng)的數(shù)組用播放音樂(lè)函數(shù)進(jìn)行播放,成功地實(shí)現(xiàn)了錄制音樂(lè)并播放的功能。經(jīng)過(guò)一番努力,我們順利完成了暫停播放和繼續(xù)播放的功能。,我們發(fā)現(xiàn)本實(shí)驗(yàn)中使用的ATmega16頻率不是16MHz,也不是1MHz,為了盡可能的實(shí)現(xiàn)秒表計(jì)時(shí),試驗(yàn)了很多的數(shù)字組合,最后達(dá)到了30秒誤差1秒的精確度,當(dāng)然還可以達(dá)到更高的精確度。經(jīng)過(guò)一番思考,我們將流水燈的代碼加以修改寫(xiě)入計(jì)時(shí)器的工作循環(huán)中,解決了計(jì)時(shí)器不工作的問(wèn)題。在彈奏模式下,按下A鍵會(huì)進(jìn)入錄制模式,此時(shí)LCD顯示“Recording Mode”字樣,可以使用1~0十個(gè)按鍵進(jìn)行錄音,想要聽(tīng)聽(tīng)錄制好的音樂(lè),可以切換到播放模式下進(jìn)行欣賞。num=key_in()。i{write_dat(Ptable[i])。delay_ms(10)。break。elsestate=1。}write_(0X80+0X11)。//打開(kāi)光標(biāo);write_(0X06)。//music_1int main(void){INI_POTR()。}if(Skey==14)第21頁(yè)//清屏;//開(kāi)始錄制//先清零計(jì)數(shù)器//錄制完成,北京郵電大學(xué)信息與通信工程學(xué)院按D鍵結(jié)束錄制{i=10。Ssong[i][0]=tone[Skey]。TCCR1B=0X00。//count=0。while(pause){uint Skey = key_in()。const uchar R_table[]=“Recording Mode”。//6 正常調(diào)//加減速//下一個(gè)音符; 第20頁(yè)北京郵電大學(xué)信息與通信工程學(xué)院TCCR1A=0x00。i++。elsem_sound(a[i][0])。amp。case 6:S=1。case 9:T=0。case 11:第19頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院T=2。case 13:aim=0。case 15:aim=1。amp。char tem=aim,T=1。write_(0X01)。//發(fā)聲原理OCR1A=m。if(temp1!= temp2)return 17。break。break。= 0xf0。PORTA= 0x0f。temp2 amp。break。break。if(isKeyPress()){temp1 = PINA。//先全部設(shè)置為輸出,再將后四位置為輸入PORTA = 0xf0。return 0。// 中斷寄存器置零;} //____________________________________ //檢測(cè)鍵盤(pán)是否被按下的函數(shù) uint isKeyPress(){ DDRA=0xff。//中斷,為下一個(gè)節(jié)拍做準(zhǔn)備;PORTD|=(1//PD5作為輸出管腳,接揚(yáng)聲器; } //___________________________________________ void INI_POTR(void){ DDRD|=0xff。//彈奏音符;delay_ms(1)。OCR1A=0。TCCR1A=0X50。PORTDamp。=~(1//低電平指令模式。//******************************************** void delay_us(int n)//微妙級(jí)延時(shí)函數(shù); {第14頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院while(n){asm(“nop”)。volatile int state=0, S=1。l 播放模塊——揚(yáng)聲器:原先以為單片機(jī)本身的電源電壓不足以驅(qū)動(dòng)揚(yáng)聲器工作,所以設(shè)計(jì)了有LM386的功放模塊,后來(lái)在實(shí)際操作的過(guò)程中測(cè)試發(fā)現(xiàn),單片機(jī)本身的電源足以驅(qū)動(dòng)揚(yáng)聲器播放音樂(lè)音調(diào),因此舍棄了LM386功放模塊的設(shè)置。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度。行線通過(guò)上拉電阻接到+5V 電源上。播放模塊接收對(duì)應(yīng)頻率的方波,由此播放琴鍵彈奏的音階以第10頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院及播放預(yù)先存放在單片機(jī)里的音樂(lè)。除了音符頻率以外還需要音長(zhǎng),所以定義1個(gè)2位數(shù)組表示一段音樂(lè),第一個(gè)表示頻率,第二個(gè)表示音長(zhǎng),播放時(shí)先訪問(wèn)頻率數(shù)組,使喇叭發(fā)聲,之后訪問(wèn)音長(zhǎng)數(shù)組,確定喇叭發(fā)聲時(shí)間。i{while(!(TIFR amp。PORTA = PORTA 1。(1{count3++。}PORTB = b[count2]。temp = PORTA。if(count1!=10)PORTD = a[count1]。PORTC |=(1 MCUCR |=(1 GICR |=(1 while(1){for(i = 0。DDRB = 0b11111011。int main(void){ DDRA = 0xff。利用ATmega16的寄存器中斷功能,實(shí)現(xiàn)流水燈和數(shù)碼管秒表計(jì)時(shí)器在實(shí)驗(yàn)板上同時(shí)工作,并且互相獨(dú)立不影響。:include include char b[10] = {0b11111010,//00b00110000,//10b11011001,//20b01111001,//30b00110011,//40b01101011,//50b11101011,//60b00111000,//70b11111011,//80b01111011,//9}。PORTA = 0b10000000。TCNT0 = 55。i{while(!(TIFR amp。else{count2++。PORTA = PORTA 1。PORTD = a[0]。if(count3 == 10){count4++。if(temp amp。(1TCNT0=55。而有了音符頻率數(shù)組,只要再得到任意一首歌的簡(jiǎn)譜,就可以將其轉(zhuǎn)化為兩個(gè)數(shù)組的形式,由音符對(duì)應(yīng)的頻率得出頻率數(shù)組,然后再根據(jù)每個(gè)音符的音長(zhǎng),將其通過(guò)樂(lè)曲的節(jié)拍和音符的拍數(shù)計(jì)算出音符持續(xù)時(shí)間即可得出音長(zhǎng)數(shù)字。顯示模塊顯示出當(dāng)前所處的模式。無(wú)按鍵按下時(shí),行線處于高電平的狀態(tài),而當(dāng)有按鍵按下時(shí),行線電平由與此行線相連的列線的電平?jīng)Q定。第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。:include include pragma data:codedefine uchar unsigned char define uint unsigned intconst uchar table[]=“HELLO WELCOME!”。//定義全局變量,S為變速變量const uint Mode_Data[16]={0,440,494,523,587,659,698,784,880,998,1046,1156,1318,1396,1568}。//自動(dòng)延時(shí)一個(gè)時(shí)鐘周期什么也不做} }void delay_ms(int n)//毫秒級(jí)延時(shí)函數(shù); { int m=14500*n。高電平數(shù)據(jù);PORTDamp。=~(1}void write_dat(uchar dat){PORTD|=(1音樂(lè)產(chǎn)生函數(shù)* * 功能:輸出頻率為x的方波* * 范圍:x:10020000Hz,0:不發(fā)聲* ************************************/第15頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院void sound(int i){TIMSK|=(1if(iamp。//控制寄存器,選擇可翻轉(zhuǎn)功能,產(chǎn)生方波;TCCR1B=0X0a。} } /************************************ 彈奏函數(shù)************************************/ void play(int n)//參數(shù)為鍵盤(pán)上的數(shù)字;{write_(0X80+0X40+n)。write_dat(20)。DDRB=0xff。//初始設(shè)置端口均為輸出PORTA=0xf0。//返回0,代表未按下} else//當(dāng)按下后,PINA不再是11110000 {DDRA=0xff。//設(shè)置高低電平DDRA = 0xf0。temp1 amp。case 0b00000010:j = 1。case 0b00001000:j = 3。= 0x0f。DDRA = 0x0f。switch(temp1){case 0b00010000:i = 0。case 0b01000000:i = 2。}temp2 = PINA。Key = i*4 + j+1。TCCR1A=0X50。//清屏;for(int i=0。while((a[i][1]!=0)amp。state){//A 返回 B 暫停 F 模式 C 上一曲你 D 播放E 下一曲;num=key_in()。//下一首Ebreak。///上一首Cbreak。break。break。break。pause){num=key_in()。if(T==2)delay_ms(a[i][1]100)。TCCR1A=0x00。TCCR1B=0X00。for(int i=0。if((Skey0)amp。while(i{Skey=key_in()。if((Skey0)amp。Ssong[i][1]=600。}}pause=0。//初始化write_(0X38)。write_(0X80+0X02)。delay_ms(5)。}放模式if(state==1){(state==1){switchaim(){case 0:music_play(music_data)。default:break。}else{write_(0X01)。}while((num!=16)amp。}} }//彈奏模式:實(shí)現(xiàn)了最初設(shè)想的功能,所設(shè)計(jì)的電子琴可以進(jìn)行即興彈奏、錄制音樂(lè)、播放音樂(lè)以及音樂(lè)變速。六、排錯(cuò)過(guò)程:l 基礎(chǔ)題目訓(xùn)練階段:,在進(jìn)行編程的過(guò)程中發(fā)現(xiàn)端口不夠用,因?yàn)镻B3和PD3這兩個(gè)能產(chǎn)生中斷的端口必須空出來(lái)作為暫停和開(kāi)第26頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院始按鍵的接口,于是我重新布線,將數(shù)碼管顯示小數(shù)點(diǎn)的右下角的引腳改接到PC0,同時(shí)在代碼中將此端口設(shè)置為高電平輸出,這樣就解決了該問(wèn)題。,我們發(fā)現(xiàn)按下計(jì)時(shí)器的暫停按鈕后,會(huì)導(dǎo)致流水燈也停止工作。l 電子琴設(shè)計(jì)與實(shí)現(xiàn)階段:,沒(méi)想到LCD液晶顯示屏的每根管腳都需要第27頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院連接,導(dǎo)致在進(jìn)行程序下載驗(yàn)證的時(shí)候,顯示屏總是不能顯示出應(yīng)有的文字,后來(lái)參考了相關(guān)文檔資料發(fā)現(xiàn)是V0這個(gè)管腳也必須接地才可以,解決了問(wèn)題。剛開(kāi)始,按照我們的思路去實(shí)現(xiàn)該功能時(shí),在測(cè)試時(shí)播放音樂(lè)是實(shí)現(xiàn)了,但是暫停和繼續(xù)功能都沒(méi)能夠?qū)崿F(xiàn)。七、心得體會(huì):為期9天的單片機(jī)小學(xué)期圓滿結(jié)束,不得不說(shuō),我從中學(xué)到了很多知識(shí),從一個(gè)對(duì)單片機(jī)一竅不通的小白,蛻變成了一個(gè)熟悉單片機(jī)各個(gè)端口的作用和使用方法、懂得如何編程實(shí)現(xiàn)相應(yīng)功能的技術(shù)人員。由此發(fā)現(xiàn),只需要將單片機(jī)的端口設(shè)置好,再套上一個(gè)循環(huán)結(jié)構(gòu),就可以實(shí)現(xiàn)流水燈的功能了。這樣,之后的工作就輕松許多,只需要在該亮的位置將對(duì)應(yīng)的PORTX端口置為1,就可以顯示出自己想要的數(shù)字了。由此實(shí)現(xiàn)了流水燈和秒表計(jì)時(shí)器的獨(dú)立工作,互不影響。至此,硬件的連接工作就完成了,根據(jù)硬件的連接,我們開(kāi)始了程序的編寫(xiě)。最終,電子琴的功能基本完成,并且達(dá)標(biāo),能實(shí)現(xiàn)彈奏、播放、錄制、變速等最初設(shè)想的功能,但是可能還有一些小BUG沒(méi)有調(diào)出來(lái),導(dǎo)致電子琴在運(yùn)行的過(guò)程中有不穩(wěn)定的現(xiàn)象,第31頁(yè) 北京郵電大學(xué)信息與通信工程學(xué)院也不能排除是板子的問(wèn)題。題目11總結(jié):1)本題需要隨機(jī)生成整數(shù),我開(kāi)始只使用rand(),即price=rand()。3)個(gè)人改進(jìn)2:本來(lái)有一個(gè)判斷條件判斷生成的隨機(jī)數(shù)是不是1~1000范圍內(nèi),而后更進(jìn)為隨機(jī)生成整數(shù)對(duì)1000取余得到0~999整數(shù),再+1得到1~1000的整數(shù)。2)class類在最起初定義時(shí)總是在class Rectangle那一行報(bào)錯(cuò),經(jīng)查書(shū)發(fā)現(xiàn)class定義最后一個(gè)大括號(hào)后有分號(hào),開(kāi)始并沒(méi)有加上。6)起初不知道構(gòu)造函數(shù)和析構(gòu)函數(shù)的定義和用法,經(jīng)翻閱書(shū)籍和運(yùn)行程序得知構(gòu)造函數(shù)在創(chuàng)建對(duì)象時(shí)調(diào)用,可以有多個(gè)。double TotalWeight(Boatamp。友元函數(shù)是允許在類外訪問(wèn)類中的任何成員的。實(shí)驗(yàn)三數(shù)組與指針 (一)編寫(xiě)C++程序完成以下功能:(1)假定矩陣大小為45(整型數(shù)組表示)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1