




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)原理實(shí)驗(yàn)報(bào)告學(xué)年:______________學(xué)期:______________專業(yè):09電子信息工程班級(jí):______________姓名:____Pred______學(xué)號(hào):______________指導(dǎo)老師:___________日期:年月日目錄contentsI/O輸入、輸出實(shí)驗(yàn)…………………3數(shù)碼管動(dòng)態(tài)掃描顯示實(shí)驗(yàn)……………….….………6鍵盤輸入實(shí)驗(yàn)….……….……………9定時(shí)/計(jì)數(shù)器…………12音頻控制實(shí)驗(yàn)……………..…………16串行口通信………………..…………22闡明:1.6個(gè)實(shí)驗(yàn)程序均在偉納電子ME830單片機(jī)實(shí)驗(yàn)板上調(diào)試成功。Mcu是AT89S52。2.音頻控制實(shí)驗(yàn)源碼來自網(wǎng)上,若想在晶振11.0592mhz上運(yùn)行,只需更改輸出頻率表格的定時(shí)器初值即可。同時(shí),由于程序占用233字節(jié)data,寫入普通51mcu是運(yùn)行不了的,這里我是用ICE52仿真器運(yùn)行。3.串行口通信實(shí)驗(yàn)中上位機(jī)使用偉納電子的串口調(diào)試軟件,能夠到其官方網(wǎng)站下載。4.由于本次實(shí)驗(yàn)旨在達(dá)成實(shí)驗(yàn)?zāi)康模绦虮旧泶嬖谥T多不完善的地方,如:定時(shí)計(jì)數(shù)器實(shí)驗(yàn)中取位運(yùn)算中耗費(fèi)大量時(shí)間,造成顯示過程出現(xiàn)閃爍現(xiàn)象。5.電路原理圖在prorel99se上畫的,不能確保原理圖的對(duì)的。(我還沒學(xué)呢….)實(shí)驗(yàn)一:I/O口輸入/輸出實(shí)驗(yàn)實(shí)驗(yàn)任務(wù)流水燈單循環(huán),P0口接八個(gè)共陽(yáng)發(fā)光二極管,分別為D0、D1……D7。程序先點(diǎn)亮D0,延時(shí)一段時(shí)間(1秒鐘),再次序點(diǎn)亮D1……D7,然后又是D0。同時(shí)只能有一種燈亮。設(shè)晶振頻率fosc=11.0592MHz,規(guī)定亮燈1秒后下一種燈點(diǎn)亮。實(shí)驗(yàn)原理圖系統(tǒng)板上硬件連接程序設(shè)計(jì)內(nèi)容先計(jì)算好定時(shí)器初值,并載入TH0,TL0等待定時(shí)器中斷響應(yīng),響應(yīng)后累次疊加到1s時(shí),設(shè)立標(biāo)志位檢測(cè)標(biāo)志位,點(diǎn)滅上一種燈,點(diǎn)亮點(diǎn)一種燈判斷與否點(diǎn)亮第七個(gè)燈,是則下一種點(diǎn)亮第零個(gè)燈,否則跳過程序框圖NNYNY開始儲(chǔ)存顯示次序定時(shí)器使能中斷使能LED=1?i>7?i=0中斷響應(yīng)T==20?TF=0;T++;T=0;LED=1,;結(jié)束LED=0;顯示數(shù)據(jù)端口;i++;YC語言源程序#include<reg52.h>#defineucharunsignedchar#defineLEDPORTP0bitledturn=0;//設(shè)立亮燈標(biāo)志chari=0;ucharcodeledlight[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//led亮起次序voidmain(){RCAP2H=0x4C;//定時(shí)器2,晶振11.0592MHz,單次定時(shí)50msRCAP2L=0x00;ET2=1;//定時(shí)器2中斷允許EA=1;//中斷允許TR2=1;//開始計(jì)時(shí)while(1)//進(jìn)入死循環(huán){if(ledturn){ledturn=0;LEDPORT=ledlight[i];i++;if(i==8)i=0;}}}timer2()interrupt5//定時(shí)器2終端服務(wù)程序{staticuchart;TF2=0;//溢出清0t++;if(t==20){t=0;//取消標(biāo)志ledturn=1;//設(shè)立亮燈標(biāo)志}}數(shù)據(jù)分析這里實(shí)現(xiàn)流水燈單循環(huán)的辦法是,依次滅掉前一種燈和點(diǎn)亮后一種燈,再延時(shí)一會(huì),不停循環(huán),當(dāng)點(diǎn)亮到D07時(shí)候,下一種是點(diǎn)亮D00。如此,就能夠看到流水燈單循環(huán)的效果了。實(shí)驗(yàn)二:數(shù)碼管動(dòng)態(tài)掃描顯示實(shí)驗(yàn)實(shí)驗(yàn)任務(wù)在動(dòng)態(tài)共陽(yáng)數(shù)碼管上顯示89C51字樣實(shí)驗(yàn)原理圖系統(tǒng)板上硬件連接程序設(shè)計(jì)內(nèi)容1)先準(zhǔn)備好要顯示的數(shù)據(jù),放入對(duì)應(yīng)的顯示存儲(chǔ)單元中。2)根據(jù)要使用的數(shù)碼管的具體位置來擬定掃描初值和掃描方向。3)根據(jù)使用數(shù)碼管的個(gè)數(shù)來擬定掃描的位數(shù)。4)查表將要顯示的數(shù)據(jù)轉(zhuǎn)換為能使數(shù)碼管對(duì)的顯示相對(duì)應(yīng)的段碼。5)分時(shí)送段碼和位碼,數(shù)碼管開始循環(huán)顯示。程序框圖YYN開始存段碼存位碼輸出段碼到P0輸出位碼到P2i=7?i=0用i取段碼用i取位碼i++C語言源程序#include<reg52.h>#defineucharunsignedcharucharcodedig[]={0x10,0x08,0x04,0x02,0x01};//位碼ucharcodedisplay[]={0x80,0x90,0xC6,0x92,0xF9};//段碼uchari=0;voiddelayms(unsignedintms){unsignedchark;while(ms--){for(k=0;k<114;k++);}}voidmain(){P2=0xFF;P0=0xFF;while(1){P2=0xff;P0=display[i];P2=~dig[i];delayms(1);i++;if(i==5)i=0;}}數(shù)據(jù)分析顯示89C51字樣重要依靠人的視覺停留效應(yīng),先選中第一種數(shù)碼管,送入段碼顯示1,延遲一段時(shí)間后關(guān)閉段碼,選中第二個(gè)數(shù)碼管,送入段碼顯示2,再延遲一會(huì)兒,不停循環(huán),直到顯示到第五個(gè)數(shù)碼管,再次選中第一種數(shù)碼管….,這樣就能夠在數(shù)碼管上看到89C51了。實(shí)驗(yàn)三:鍵盤輸入實(shí)驗(yàn)實(shí)驗(yàn)任務(wù)在鍵盤上按K1、K2、K3、K4后分別在數(shù)碼管上顯示1、2、3、4。實(shí)驗(yàn)原理圖系統(tǒng)板上硬件連接程序設(shè)計(jì)內(nèi)容先準(zhǔn)備好要顯示的數(shù)據(jù),放入對(duì)應(yīng)的顯示存儲(chǔ)單元中。判斷與否有按鍵按下,有則逐個(gè)檢查那個(gè)按鍵。根據(jù)按下的鍵值,送顯示數(shù)據(jù)到數(shù)碼管程序框圖YYYYYYYNNNN開始儲(chǔ)存顯示數(shù)據(jù)數(shù)碼管初始化按鍵按下?!K1?!K2?!K3?!K4?P0=display[1]P0=display[0]P0=display[3]P0=display[2]按鍵松開?NC語言源程序#include<reg52.h>#defineucharunsignedcharucharcodedisplay[]={0xf9,0xa4,0xb0,0x99};sbitk1=P1^4;sbitk2=P1^5;sbitk3=P1^6;sbitk4=P1^7;voiddelayms(ucharms)//延時(shí)子函數(shù),ms{uchari;while(ms--){for(i=0;i<114;i++);}}voidmain(void){P2=0xFE;//數(shù)碼管初始化P0=~(0x40);P1=0xFF;//按鍵初始化while(1){if(P1!=0xFF){delayms(20);if(P1!=0xFF){if(!k1)P0=display[0];elseif(!k2)P0=display[1];elseif(!k3)P0=display[2];elseP0=display[3];while(P1!=0xFF);}}}}數(shù)據(jù)分析程序判斷與否有按鍵按下,有則延遲一段時(shí)間后重新判斷,有按鍵按下進(jìn)入鍵值判斷,否則返回。進(jìn)入判斷鍵值后,把對(duì)應(yīng)的鍵值轉(zhuǎn)為數(shù)值再轉(zhuǎn)為段碼送入數(shù)碼管顯示,進(jìn)入一種“死循環(huán)”,直到按鍵松開后彈出。實(shí)驗(yàn)四:定時(shí)/計(jì)數(shù)器實(shí)驗(yàn)任務(wù)設(shè)立一種定時(shí)器/計(jì)數(shù)器,分辨率為0.1S,并在數(shù)碼管上顯示實(shí)驗(yàn)原理圖系統(tǒng)板上硬件連接程序設(shè)計(jì)內(nèi)容1)先準(zhǔn)備好要顯示的數(shù)據(jù),放入對(duì)應(yīng)的顯示存儲(chǔ)單元中。2)調(diào)節(jié)定時(shí)器初始值,每隔0.1S向時(shí)間累加器加一。3)根據(jù)時(shí)間累加器的值分別取毫秒、秒、十秒等位并送入對(duì)應(yīng)寄存器儲(chǔ)存。4)根據(jù)要使用的數(shù)碼管的具體位置來擬定掃描初值和掃描方向。5)查表將要顯示的數(shù)據(jù)轉(zhuǎn)換為能使數(shù)碼管對(duì)的顯示相對(duì)應(yīng)的段碼。6)分時(shí)送段碼和位碼,數(shù)碼管開始循環(huán)顯示。程序框圖NNYYN開始儲(chǔ)存段碼儲(chǔ)存位碼定時(shí)器2使能中斷使能數(shù)碼管初始化j=0P2=~(dig[(j)]);P0=display[num[j]];j++;j==8?中斷響應(yīng)t=2?TF2=0;t++;timer++;時(shí)間分權(quán)位儲(chǔ)存num[7];t=0;結(jié)束j=0;C語言源程序#include<reg52.h>unsignedcharcodedisplay[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//設(shè)立位碼unsignedcharcodedig[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//設(shè)立段碼unsignedcharnum[9]={0,0,0,0,0,0,0,0};unsignedchari,j,once=1;voiddelayms(unsignedcharms){chari;while(ms--){for(i=0;i<80;i++);}}voidmain(void){RCAP2H=0x4C;//定時(shí)器2載入初始值,時(shí)長(zhǎng)50msRCAP2L=0x00;TR2=1;ET2=1;EA=1;P2=0xFF;//數(shù)碼管初始化P0=0xFF;while(1){for(i=0;i<7;i++){P0=0xFF;//關(guān)顯示去除“鬼影”P2=~(dig[(j)]);//送位碼P0=display[num[j]];送段碼delayms(1);j++;if(j==8)j=0;}}}timer()interrupt5//中斷服務(wù){(diào)staticunsignedlongtimer=0;TF2=0;P2=0xFF;//關(guān)顯示,消除顯示抖動(dòng)if(once==2)//中斷兩次,累加一次{once=0;timer++;num[0]=timer%10;//個(gè)num[1]=timer/10%10;//十num[2]=timer/100%10;//百num[3]=timer/1000%10;//千num[4]=timer/10000%10;//萬num[5]=timer/100000%10;//十萬num[6]=timer/1000000%10;//百萬num[7]=timer/10000000%10; //千萬}once++;P2=~(dig[(j)]);//恢復(fù)顯示}數(shù)據(jù)分析上電復(fù)位后能夠在數(shù)碼管上看到程序從零開始計(jì)時(shí),精度為0.1S。這里顯示數(shù)字的辦法同實(shí)驗(yàn)二的數(shù)碼管動(dòng)態(tài)掃描顯示實(shí)驗(yàn)的原理同樣,所不同的是程序根據(jù)一定的時(shí)序變化送入數(shù)碼管的段碼。程序每隔0.1S更新一次顯示數(shù)據(jù),即在循環(huán)顯示的時(shí)候通過中斷服務(wù)程序,累加時(shí)間,取各權(quán)值數(shù)值換成段碼。實(shí)驗(yàn)五:音頻控制實(shí)驗(yàn)實(shí)驗(yàn)任務(wù)上電復(fù)位后在蜂鳴器上響起音樂。實(shí)驗(yàn)原理圖系統(tǒng)板上硬件連接程序設(shè)計(jì)內(nèi)容儲(chǔ)存產(chǎn)生不同頻率的中斷初始值。樂譜解釋函數(shù):碰到拍子分隔符和空格跳過,判斷與否高低音,讀音符,調(diào)節(jié)為高低音音符,讀音符后的升半個(gè)音符的“#”,讀延長(zhǎng)音“-”“.”,讀縮短二分之一音長(zhǎng)的“_”,字符串結(jié)束符“0x00”音樂播放函數(shù):將音符頻率的序號(hào)數(shù)組對(duì)應(yīng)的頻率送入定時(shí)器預(yù)置數(shù)中,再延時(shí)對(duì)應(yīng)音符播放的時(shí)間。4)樂譜書寫規(guī)則:1234567為7個(gè)基本音階前面加逗號(hào)','表達(dá)這是低音前面加上點(diǎn)號(hào)'`'表達(dá)這是高音背面加'#',表達(dá)這個(gè)音符升半個(gè)音階背面加'.',表達(dá)這個(gè)音符要再加長(zhǎng)本身二分之一的延時(shí)背面加一種或多個(gè)'-',每個(gè)表達(dá)延時(shí)一拍背面加一種或多個(gè)'_',表達(dá)這個(gè)音符要縮短本身二分之一的時(shí)長(zhǎng),最多支持2個(gè)'_'。程序框圖開始開始儲(chǔ)存中斷初始值樂譜解釋函數(shù)音樂播放函數(shù)儲(chǔ)存樂譜中斷響應(yīng)tl0=tl0_f;th0=th0_f;BEEP=~BEEP;結(jié)束C語言源程序#defineucharunsignedchar//定義一下方便使用#defineuintunsignedint#defineulongunsignedlong#include<reg52.h>//涉及一種52原則內(nèi)核的頭文獻(xiàn)charcodedx516[3]_at_0x003b;//仿真頭中斷用sbitBEEP=P1^7;//喇叭輸出腳ucharth0_f;//在中斷中裝載的T0的值高8位uchartl0_f;//在中斷中裝載的T0的值低8位//T0的值,及輸出頻率對(duì)照表ucharcodefreq[36*2]={0xA9,0xEF,//00220HZ,1//00x93,0xF0,//00233HZ,1#0x73,0xF1,//00247HZ,20x49,0xF2,//00262HZ,2#0x07,0xF3,//00277HZ,30xC8,0xF3,//00294HZ,40x73,0xF4,//00311HZ,4#0x1E,0xF5,//00330HZ,50xB6,0xF5,//00349HZ,5#0x4C,0xF6,//00370HZ,60xD7,0xF6,//00392HZ,6#0x5A,0xF7,//00415HZ,70xD8,0xF7,//00440HZ1//120x4D,0xF8,//00466HZ1#//130xBD,0xF8,//00494HZ2//140x24,0xF9,//00523HZ2#//150x87,0xF9,//00554HZ3//160xE4,0xF9,//00587HZ4//170x3D,0xFA,//00622HZ4#//180x90,0xFA,//00659HZ5//190xDE,0xFA,//00698HZ5#//200x29,0xFB,//00740HZ6//210x6F,0xFB,//00784HZ6#//220xB1,0xFB,//00831HZ7//230xEF,0xFB,//00880HZ`10x2A,0xFC,//00932HZ`1#0x62,0xFC,//00988HZ`20x95,0xFC,//01046HZ`2#0xC7,0xFC,//01109HZ`30xF6,0xFC,//01175HZ`40x22,0xFD,//01244HZ`4#0x4B,0xFD,//01318HZ`50x73,0xFD,//01397HZ`5#0x98,0xFD,//01480HZ`60xBB,0xFD,//01568HZ`6#0xDC,0xFD,//01661HZ`7//35};//定時(shí)中斷0,用于產(chǎn)生唱歌頻率timer0()interrupt1{TL0=tl0_f;TH0=th0_f;//調(diào)入預(yù)定時(shí)值BEEP=~BEEP;//取反音樂輸出IO}//******************************//音樂符號(hào)串解釋函數(shù)//入口:要解釋的音樂符號(hào)串,輸出的音調(diào)串,輸出的時(shí)長(zhǎng)串changedata(uchar*song,uchar*diao,uchar*jie){uchari,i1,j;chargaodi;//高低+/-12音階ucharbanyin;//有無半個(gè)升音階ucharyinchang;//音長(zhǎng)ucharcodejie7[8]={0,12,14,16,17,19,21,23};//C調(diào)的7個(gè)值*diao=*song;for(i=0,i1=0;;){gaodi=0;//高低=0banyin=0;//半音=0yinchang=4;//音長(zhǎng)1拍if((*(song+i)=='|')||(*(song+i)==''))i++;//拍子間隔和一種空格過濾switch(*(song+i)){case',':gaodi=-12;i++;//低音break;case'`':gaodi=12;i++;//高音break;}if(*(song+i)==0)//碰到0結(jié)束{*(diao+i1)=0;//加入結(jié)束標(biāo)志0*(jie+i1)=0;return;}j=*(song+i)-0x30;i++;//取出基準(zhǔn)音j=jie7[j]+gaodi;//加上高低音yinc:switch(*(song+i)){case'#'://有半音j加一種音階i++;j++;gotoyinc;case'-'://有一種音節(jié)加長(zhǎng)yinchang+=4;i++;gotoyinc;case'_'://有一種音節(jié)縮短yinchang/=2;i++;gotoyinc;case'.'://有一種加半拍yinchang=yinchang+yinchang/2;i++;gotoyinc;}*(diao+i1)=j;//統(tǒng)計(jì)音符*(jie+i1)=yinchang;//統(tǒng)計(jì)音長(zhǎng)i1++;}}//******************************************//奏樂函數(shù)//入口:要演奏的音樂符號(hào)串voidplay(uchar*songdata){uchari,c,j=0;uintn;ucharxdatadiaodata[112];//音調(diào)緩沖ucharxdatajiedata[112];//音長(zhǎng)緩沖changedata(songdata,diaodata,jiedata);//解釋音樂符號(hào)串TR0=1;for(i=0;diaodata[i]!=0;i++)//逐個(gè)符號(hào)演奏{tl0_f=freq[diaodata[i]*2];//取出對(duì)應(yīng)的定時(shí)值送給T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++)//按照音長(zhǎng)延時(shí)for(n=0;n<3;n++);TR0=0;for(n=0;n<500;n++);//音符間延時(shí)TR0=1;}TR0=0;}//仙劍樂譜ucharcodexianjian[]={"|3_3_3_2_3-|2_3_2_2_,6,6_,7_|12_1_,7,6_,5_|,6---|""3_3_3_2_3.6_|5_6_5_5_22_3_|45_4_32_1_|3.--3_|""67_6_55_3_|5--3_5_|26_5_32_3_|3---|""26_6_6-|16_6_66_7_|`17_6_76_7_|3.--3_|""67_6_55_3_|5--3_5_|67_6_76_7_|3---|""26_6_6-|16_6_66_7_|`17_6_7.5_|6---|"};//樂譜方式輸入的音樂播放,仙劍奇?zhèn)b傳voidmain(void)//主程序{TMOD=0x01;//使用定時(shí)器0的16位工作模TR0=0;ET0=1;EA=1;while(1){play(xianjian);}
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 煙花質(zhì)量合同范本
- 采購(gòu)沙合同范本
- 人工智能技術(shù)驅(qū)動(dòng)下檔案館智慧服務(wù)策略研究
- 2025年CCD光電荷耦合二極管及其組件項(xiàng)目合作計(jì)劃書
- 廢機(jī)械回收合同范本
- 中職工業(yè)分析檢驗(yàn)競(jìng)賽報(bào)告單-水樣采集
- 店鋪合作投資合同范本
- 基于異質(zhì)聲學(xué)特征交互的語音情感識(shí)別研究
- 韓不言繪畫藝術(shù)研究
- 眉山市小型農(nóng)田水利設(shè)施管護(hù)及農(nóng)戶參與意愿研究
- T-GXAR 005-2024 制冷機(jī)房運(yùn)行維護(hù)規(guī)程
- DB45T 2364-2021 公路路基監(jiān)測(cè)技術(shù)規(guī)范
- 2025年春九年級(jí)化學(xué)下冊(cè) 中考綜合模擬測(cè)試卷一(科學(xué)版)
- 供電所安全第一課
- 新能源汽車底盤概論課件
- 全腦血管造影術(shù)的護(hù)理查房
- 學(xué)習(xí)弘揚(yáng)紅船精神課件
- 消防工程施工組織設(shè)計(jì)方案
- 敦刻爾克大撤退課件
- 農(nóng)藥殘留監(jiān)測(cè)
- 新生兒敗血癥(共22張課件)
評(píng)論
0/150
提交評(píng)論