51單片機C語言編程100例_第1頁
51單片機C語言編程100例_第2頁
已閱讀5頁,還剩267頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

看品呎

目錄TOC\o"1-5"\h\z實例3:用單片機控制第一個燈亮3\o"CurrentDocument"實例4:用單片機控制一個燈閃爍:認(rèn)識單片機的工作頻率3\o"CurrentDocument"實例5:將P1口狀態(tài)分別送入PO、P2、P3口:認(rèn)識I/O口的引腳功能4\o"CurrentDocument"實例6:使用P3口流水點亮8位LED4\o"CurrentDocument"實例7:通過對P3口地址的操作流水點亮8位LED5\o"CurrentDocument"實例8:用不同數(shù)據(jù)類型控制燈閃爍時間6\o"CurrentDocument"實例9:用P0口、P1口分別顯示加法和減法運算結(jié)果8\o"CurrentDocument"實例10:用P0、P1口顯示乘法運算結(jié)果8\o"CurrentDocument"實例11:用P1、P0口顯示除法運算結(jié)果9\o"CurrentDocument"實例12:用自增運算控制P0口8位LED流水花樣9\o"CurrentDocument"實例13:用P0口顯示邏輯"與"運算結(jié)果10\o"CurrentDocument"實例14:用P0口顯示條件運算結(jié)果10\o"CurrentDocument"實例15:用P0口顯示按位"異或"運算結(jié)果10\o"CurrentDocument"實例16:用P0顯示左移運算結(jié)果10\o"CurrentDocument"實例17:"萬能邏輯電路"實驗11\o"CurrentDocument"實例18:用右移運算流水點亮P1口8位LED11\o"CurrentDocument"實例19:用if語句控制P0口8位LED的流水方向12\o"CurrentDocument"實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)12\o"CurrentDocument"實例21:用for語句控制蜂鳴器鳴笛次數(shù)14實例22:用while語句控制LED15實例23:用do-while語句控制P0口8位LED流水點亮16\o"CurrentDocument"實例24:用字符型數(shù)組控制P0口8位LED流水點亮16\o"CurrentDocument"實例25:用P0口顯示字符串常量17\o"CurrentDocument"實例26:用P0口顯示指針運算結(jié)果18\o"CurrentDocument"實例27:用指針數(shù)組控制P0口8位LED流水點亮18\o"CurrentDocument"實例28:用數(shù)組的指針控制P0口8位LED流水點亮19\o"CurrentDocument"實例29:用P0、P1口顯示整型函數(shù)返回值20\o"CurrentDocument"實例30:用有參函數(shù)控制P0口8位LED流水速度21\o"CurrentDocument"實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣22\o"CurrentDocument"實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮23\o"CurrentDocument"實例33:用函數(shù)型指針控制P1口燈花樣24\o"CurrentDocument"實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串25\o"CurrentDocument"實例35:字符函數(shù)ctype.h應(yīng)用舉例26\o"CurrentDocument"實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例27\o"CurrentDocument"實例37:標(biāo)準(zhǔn)函數(shù)stdlib.h應(yīng)用舉例27\o"CurrentDocument"實例38:字符串函數(shù)string.h應(yīng)用舉例28\o"CurrentDocument"實例39:宏定義應(yīng)用舉例228\o"CurrentDocument"實例40:宏定義應(yīng)用舉例229\o"CurrentDocument"實例41:宏定義應(yīng)用舉例329\o"CurrentDocument"實例42:用定時器T0查詢方式P2口8位控制LED閃爍30\o"CurrentDocument"實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻31\o"CurrentDocument"實例44:將計數(shù)器T0計數(shù)的結(jié)果送P1口8位LED顯示31看品呎TOC\o"1-5"\h\z\o"CurrentDocument"實例45:用定時器TO的中斷控制1位LED閃爍32\o"CurrentDocument"實例46:用定時器TO的中斷實現(xiàn)長時間定時33\o"CurrentDocument"實例47:用定時器T1中斷控制兩個LED以不同周期閃爍34\o"CurrentDocument"實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz音頻35\o"CurrentDocument"實例49:用定時器T0的中斷實現(xiàn)"渴望"主題曲的播放35\o"CurrentDocument"實例50-1:輸出50個矩形脈沖38\o"CurrentDocument"實例50-2:計數(shù)器T0統(tǒng)計外部脈沖數(shù)39\o"CurrentDocument"實例51-2:定時器T0的模式2測量正脈沖寬度40\o"CurrentDocument"實例52:用定時器T0控制輸出高低寬度不同的矩形波40\o"CurrentDocument"實例53:用外中斷0的中斷方式進行數(shù)據(jù)采集41\o"CurrentDocument"實例54-1:輸出負(fù)脈寬為200微秒的方波42\o"CurrentDocument"實例54-2:測量負(fù)脈沖寬度43\o"CurrentDocument"實例55:方式0控制流水燈循環(huán)點亮44\o"CurrentDocument"實例56-1:數(shù)據(jù)發(fā)送程序45\o"CurrentDocument"實例56-2:數(shù)據(jù)接收程序46\o"CurrentDocument"實例57-1:數(shù)據(jù)發(fā)送程序47\o"CurrentDocument"實例57-2:數(shù)據(jù)接收程序48\o"CurrentDocument"實例58:單片機向PC發(fā)送數(shù)據(jù)49\o"CurrentDocument"實例59:單片機接收PC發(fā)出的數(shù)據(jù)50\o"CurrentDocument"實例60:用LED數(shù)碼顯示數(shù)字551\o"CurrentDocument"實例61:用LED數(shù)碼顯示器循環(huán)顯示數(shù)字0~951\o"CurrentDocument"實例62:用數(shù)碼管慢速動態(tài)掃描顯示數(shù)字"1234"52\o"CurrentDocument"實例63:用LED數(shù)碼顯示器偽靜態(tài)顯示數(shù)字123453\o"CurrentDocument"實例64:用數(shù)碼管顯示動態(tài)檢測結(jié)果54\o"CurrentDocument"實例65:數(shù)碼秒表設(shè)計56實例66:數(shù)碼時鐘設(shè)計57\o"CurrentDocument"實例67:用LED數(shù)碼管顯示計數(shù)器T0的計數(shù)值61\o"CurrentDocument"實例68:靜態(tài)顯示數(shù)字“59”62\o"CurrentDocument"實例69:無軟件消抖的獨立式鍵盤輸入實驗63\o"CurrentDocument"實例70:軟件消抖的獨立式鍵盤輸入實驗63\o"CurrentDocument"實例71:CPU控制的獨立式鍵盤掃描實驗64\o"CurrentDocument"實例72:定時器中斷控制的獨立式鍵盤掃描實驗67\o"CurrentDocument"實例73:獨立式鍵盤控制的4級變速流水燈70\o"CurrentDocument"實例74:獨立式鍵盤的按鍵功能擴展:"以一當(dāng)四"72\o"CurrentDocument"實例75:獨立式鍵盤調(diào)時的數(shù)碼時鐘實驗74\o"CurrentDocument"實例76:獨立式鍵盤控制步進電機實驗78\o"CurrentDocument"實例77:矩陣式鍵盤按鍵值的數(shù)碼管顯示實驗81\o"CurrentDocument"實例78:矩陣式鍵盤按鍵音84\o"CurrentDocument"實例79:簡易電子琴85\o"CurrentDocument"實例80:矩陣式鍵盤實現(xiàn)的電子密碼鎖91\o"CurrentDocument"實例81:用LCD顯示字符'A'95實例82:用LCD循環(huán)右移顯示"WelcometoChina"98\o"CurrentDocument"實例83:用LCD顯示適時檢測結(jié)果102\o"CurrentDocument"實例84:液晶時鐘設(shè)計106實例85:將數(shù)據(jù)"OxOf"寫入AT24C02再讀出送P1口顯示112實例86:將按鍵次數(shù)寫入AT24C02,再讀出并用1602LCD顯示116\o"CurrentDocument"實例87:對I2C總線上掛接多個AT24C02的讀寫操作124\o"CurrentDocument"實例88:基于AT24C02的多機通信讀取程序129\o"CurrentDocument"實例88:基于AT24C02的多機通信寫入程序133\o"CurrentDocument"實例90:DS18B20溫度檢測及其液晶顯示144\o"CurrentDocument"實例91:將數(shù)據(jù)"Oxaa"寫入X5045再讀出送P1口顯示153\o"CurrentDocument"實例92:將流水燈控制碼寫入X5045并讀出送P1口顯示157\o"CurrentDocument"實例93:對SPI總線上掛接多個X5045的讀寫操作161\o"CurrentDocument"實例94:基于ADC0832的數(shù)字電壓表165\o"CurrentDocument"實例95:用DAC0832產(chǎn)生鋸齒波電壓171實例96:用P1口顯示紅外遙控器的按鍵值172\o"CurrentDocument"實例97:用紅外遙控器控制繼電器174\o"CurrentDocument"實例98:基于DS1302的日歷時鐘177\o"CurrentDocument"實例99:單片機數(shù)據(jù)發(fā)送程序186\o"CurrentDocument"實例100:電機轉(zhuǎn)速表設(shè)計187\o"CurrentDocument"模擬霍爾脈沖192/*函數(shù)的使用和熟悉*///實例3:用單片機控制第一個燈亮#include<reg51.h>//包含51單片機寄存器定義的頭文件voidmain(void){while(1)P1=0xfe;}//無限循環(huán)//P仁11111110B,即P1.0輸出低電平//實例4:用單片機控制一個燈閃爍:認(rèn)識單片機的工作頻率#include<reg51.h>//包含單片機寄存器的頭文件//voiddelay(void){unsignedinti;for(i=0;i<20000;i++)//兩個void意思分別為無需返回值,沒有參數(shù)傳遞//定義無符號整數(shù),最大取值范圍65535//做20000次空循環(huán);//什么也不做,等待一個機器周期函數(shù)功能:延時一段時間//}//函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))voiddelay(void)voiddelay(void)**JL^*-li^//voidmain(void){while(1)//無限循環(huán){P1=0xfe;//P1=11111110B,P1.0輸出低電平delay();//延時一段時間P1=0xff;//P1=11111111B,P1.0輸出高電平delay();//延時一段時間}}〃實例5:將P1口狀態(tài)分別送入PO、P2、P3口:認(rèn)識I/O口的引腳功能#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))//voidmain(void){while(1)//無限循環(huán){P仁Oxff;//P1=11111111,熄滅LEDP0=P1;//將P1口狀態(tài)送入PO口P2=P1;//將P1口狀態(tài)送入P2口P3=P1;//將P1口狀態(tài)送入P3口}}〃實例6:使用P3口流水點亮8位LED#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時一段時間//

unsignedchari,j;for(i=0;i<250;i++)for(j=0;j<250;j++)9}函數(shù)功能:主函數(shù)voidmain(void)Iwhile(1){P3=0xfe;//第一個燈亮delay();//調(diào)用延時函數(shù)P3=0xfd;//第二個燈亮delay();//調(diào)用延時函數(shù)P3=0xfb;//第三個燈亮delay();//調(diào)用延時函數(shù)P3=0xf7;//第四個燈亮delay();//調(diào)用延時函數(shù)P3=0xef;//第五個燈亮delay();//調(diào)用延時函數(shù)P3=0xdf;//第六個燈亮delay();//調(diào)用延時函數(shù)P3=0xbf;//第七個燈亮delay();//調(diào)用延時函數(shù)P3=0x7f;//第八個燈亮delay();//調(diào)用延時函數(shù)}//實例7:通過對P3口地址的操作流水點亮8位LED#include<reg51.h>//包含單片機寄存器的頭文件sfrx=OxbO;//P3口在存儲器中的地址是bOH,通過sfr可定義8051內(nèi)核單片機//的所有內(nèi)部8位特殊功能寄存器,對地址x的操作也就是對P1口的操作//

//函數(shù)功能:延時一段時間//voiddelay(void){unsignedchari,j;for(i=0;i<250;i++)for(j=0;j<250;j++);//利用循環(huán)等待若干機器周期,從而延時一段時間}/函數(shù)功能:主函數(shù)/voidmain(void){while(1){x=0xfe;//第一個燈亮delay();//調(diào)用延時函數(shù)x=0xfd;//第二個燈亮delay();//調(diào)用延時函數(shù)x=0xfb;//第三個燈亮delay();//調(diào)用延時函數(shù)x=0xf7;//第四個燈亮delay();//調(diào)用延時函數(shù)x=0xef;//第五個燈亮delay();//調(diào)用延時函數(shù)x=0xdf;//第六個燈亮delay();//調(diào)用延時函數(shù)x=0xbf;//第七個燈亮delay();//調(diào)用延時函數(shù)x=0x7f;//第八個燈亮delay();//調(diào)用延時函數(shù)}}//實例8:用不同數(shù)據(jù)類型控制燈閃爍時間#include<reg51.h>//包含單片機寄存器的頭文件/}}/函數(shù)功能:用整形數(shù)據(jù)延時一段時間/voidint_delay(void)//延時一段較長的時間{unsignedintm;//定義無符號整形變量,雙字節(jié)數(shù)據(jù),值域為0~65535for(m=0;m<36000;m++);//空操作}/函數(shù)功能:用字符型數(shù)據(jù)延時一段時間voidchar_delay(void)//延時一段較短的時間{unsignedchari,j;//定義無符號字符型變量,單字節(jié)數(shù)據(jù),值域0~255for(i=0;i<200;i++)for(j=0;j<180;j++);//空操作}/函數(shù)功能:主函數(shù)voidmain(void){unsignedchari;while(1){for(i=0;i<3;i++){P仁Oxfe;//P1.0口的燈點亮int_delay();//延時一段較長的時間P1=0xff;//熄滅int_delay();//延時一段較長的時間}for(i=0;i<3;i++){P仁Oxef;//P1.4口的燈點亮char_delay();//延時一段較長的時間P1=0xff;//熄滅char_delay();//延時一段較長的時間}

//實例9:用P0口、P1口分別顯示加法和減法運算結(jié)果#include<reg51.h>voidmain(void){unsignedcharm,n;m=43;//即十進制數(shù)2x16+11=43n=60;//即十進制數(shù)3x16+12=60P1=m+n;//P1=103=01100111,結(jié)果P1.3、P1.4、P1.7口的燈被點亮P0=n-m;//P0=17=00010001,結(jié)果P0.0、P0.4的燈被熄滅}〃實例10:用P0、P1口顯示乘法運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){unsignedcharm,n;unsignedints;m=64;n=71;s=m*n;//s=64*71=4544,需要16位二進制數(shù)表示,高8位送P1口,低8位送P0口//由于4544=17*256+192=H3*16*16*16+H2*16*16+H1*16+H0//兩邊同除以256,可得17+192/256二H3*16+H2+(H1*16+H0)/256//因此,高8位16進制數(shù)H3*16+H2必然等于17,即4544除以256的商P1=s/256;滅,其余亮P0=s%256;口滅,其余亮}//低8位16進制數(shù)H1*16+H0必然等于192,即4544P1=s/256;滅,其余亮P0=s%256;口滅,其余亮}//高8位送P1口,P仁17=11H=00010001B,P1.0和P1.4口//低8位送P0口,P3=192=c0H=11000000B,P3.1,P3.6,P3.7//實例11:用P1、P0口顯示除法運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){P仁36/5;//求整數(shù)P0=((36%5)*10)/5;//求小數(shù)while⑴;//無限循環(huán)防止程序“跑飛”}//實例12:用自增運算控制P0口8位LED流水花樣#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時一段時間//voiddelay(void){unsignedinti;for(i=0;i<20000;i++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;for(i=0;i<255;i++)//注意i的值不能超過255{P0=i;//將i的值送P0口delay();//調(diào)用延時函數(shù)〃實例13:用P0口顯示邏輯"與"運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){P0=(4>0)&&(9>0xab);//將邏輯運算結(jié)果送P0口while(1);//設(shè)置無限循環(huán),防止程序“跑飛”}〃實例14:用P0口顯示條件運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){P0=(8>4)?8:4;//將條件運算結(jié)果送P0口,P0=8=00001000Bwhile(1);//設(shè)置無限循環(huán),防止程序“跑飛”}〃實例15:用P0口顯示按位"異或"運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){P0=0xa2八0x3c;//將條件運算結(jié)果送P0口,P0=8=00001000Bwhile(1);//設(shè)置無限循環(huán),防止程序“跑飛”}//實例16:用P0顯示左移運算結(jié)果#include<reg51.h>//包含單片機寄存器的頭文件voidmain(void){P0=0x3b<<2;//將左移運算結(jié)果送P0口,P0=11101100B=0xecwhile(1)看品呎看品呎看品呎看品呎;//無限循環(huán),防止程序“跑飛”}//實例17:"萬能邏輯電路"實驗//包含單片機寄存器的頭文件//將F位定義為P1.4//將X位定義為P1.5//將丫位定義為//包含單片機寄存器的頭文件//將F位定義為P1.4//將X位定義為P1.5//將丫位定義為P1.6//將Z位定義為P1.7while(1){F=((~X)&Y)|Z;//將邏輯運算結(jié)果賦給F〃實例18:用右移運算流水點亮P1口8位LED#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時一段時間//voiddelay(void){unsignedintn;for(n=0;n<30000;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;while(1){P1=0xff;}}}}}}{{delay();for(i=0;i<8;i++)//設(shè)置循環(huán)次數(shù)為8{P1二P1>>1;//每次循環(huán)P1的各二進位右移1位,高位補0delay();//調(diào)用延時函數(shù)}}}//實例19:用if語句控制P0口8位LED的流水方向#include<reg51.h>//包含單片機寄存器的頭文件sbitS1二P1八4;//將S1位定義為P1.4sbitS2二P1八5;//將S2位定義為P1.5//函數(shù)功能:主函數(shù)//voidmain(void){while(1){if(S仁=0)//如果按鍵S1按下P0=0x0f;//P0口高四位LED點亮if(S2==0)//如果按鍵S2按下P0=0xf0;//P0口低四位LED點亮}}〃實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)#include<reg51.h>//包含單片機寄存器的頭文件sbitS1二P1八4;//將S1位定義為P1.4//函數(shù)功能:延時一段時間//voiddelay(void)unsignedintn;

for(n=0;n<10000;n++)}//函數(shù)功能:主函數(shù)/voidmain(void){unsignedchari;i=0;//將i初始化為0while(1){if(S1==0)//如果S1鍵按下{delay();//延時一段時間if(S1==0)//如果再次檢測到S1鍵按下i++;//i自增1if(i==9)//如果i=9,重新將其置為1i=1;}switch(i)//使用多分支選擇語句{case1:P0=0xfe;break;//第一個LED亮case2:P0=0xfd;break;//第二個LED亮case3:P0=0xfb;break;//第三個LED亮case4:P0=0xf7;break;//第四個LED亮case5:P0=0xef;break;//第五個LED亮case6:P0=0xdf;break;//第六個LED亮case7:P0=0xbf;break;//第七個LED亮case8:P0=0x7f;break;//第八個LED亮default://缺省值,關(guān)閉所有LEDP0=0xff;〃實例21:用for語句控制蜂鳴器鳴笛次數(shù)#include<reg51.h>//包含單片機寄存器的頭文件sbitsound二P3八7;//將sound位定義為P3.7//函數(shù)功能:延時形成1600Hz音頻//voiddelay1600(void){unsignedcharn;for(n=0;n<100;n++);}//函數(shù)功能:延時形成800Hz音頻//voiddelay800(void){unsignedcharn;for(n=0;n<200;n++)9}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedinti;while(1){for(i=0;i<830;i++){sound=0;//P3.7輸出低電平delay1600();sound=1;//P3.7輸出高電平delay1600();}for(i=0;i<200;i++){sound=0;//P3.7輸出低電平}}}}}}delay800();sound=1;//P3.7輸出高電平delay800();}}}〃實例22:用while語句控制LED#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時約60ms(3*100*200=60000|is)//voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;while(1)//無限循環(huán){i=0;//將i初始化為0while(i<0xff)//當(dāng)i小于Oxff(255)時執(zhí)行循環(huán)體{P0=i;//將i送P0口顯示delay60ms();//延時i++;//i自增1看品呎看品呎看品呎看品呎看品呎看品呎9}9}9}9}〃實例23:用do-while語句控制P0口8位LED流水點亮#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時約60ms(3*100*200=60000|is)//voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}//voidmain(void)Ido[{P0=0xfe;//第一個LED亮delay60ms();P0=0xfd;//第二個LED亮delay60ms();P0=0xfb;//第三個LED亮delay60ms();P0=0xf7;//第四個LED亮delay60ms();P0=0xef;//第五個LED亮delay60ms();P0=0xdf;//第六個LED亮delay60ms();delay60ms();P0=0xbf;//第七個LED亮delay60ms();P0=0x7f;//第八個LED亮delay60ms();}while(1);//無限循環(huán),使8位LED循環(huán)流水點亮函數(shù)功能:主函數(shù)//}〃實例24:用字符型數(shù)組控制P0口8位LED流水點亮#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時約60ms(3*100*200=60000|is)//voiddelay60ms(void){unsignedcharm,n;for(m=0;m<100;m++)for(n=0;n<200;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;unsignedcharcodeTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定義無符號字符型數(shù)組while(1){for(i=0;i<8;i++){P0二Tab[i];//依次引用數(shù)組元素,并將其送P0口顯示delay60ms();//調(diào)用延時函數(shù)}}}〃實例25:用P0口顯示字符串常量#include<reg51.h>//包含單片機寄存器的頭文件//函數(shù)功能:延時約150ms(3*200*250=150000|is=150ms//voiddelay150ms(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++)//函數(shù)功能:主函數(shù)//函數(shù)功能:主函數(shù)/voidmain(void){unsignedcharstr[]={"Now,Temperatureis:"};//將字符串賦給字符型全部元素賦值unsignedchari;while(1){i=0;//將i初始化為0,從第一個元素開始顯示while(str[i]!='\0')//只要沒有顯示到結(jié)束標(biāo)志'\0'{P0=str[i];//將第i個字符送到P0口顯示delay150ms();//調(diào)用150ms延時函數(shù)i++;//指向下一個待顯字符}}}〃實例26:用P0口顯示指針運算結(jié)果#include<reg51.h>voidmain(void){unsignedchar*p1,*p2;//定義無符號字符型指針變量p1,p2unsignedchari,j;//定義無符號字符型數(shù)據(jù)i=25;//給i賦初值25j=15;p仁&i;//使指針變量指向i,對指針初始化p2=&j;//使指針變量指向j,對指針初始化P0=*p1+*p2;//*p1+*p2相當(dāng)于i+j,所以P0=25+15=40=0x28//則P0=00101000B,結(jié)果P0.3、P0.5引腳LED熄滅,其余點亮while(1);//無限循環(huán),防止程序“跑飛”}//實例27:用指針數(shù)組控制P0口8位LED流水點亮{{{{#include<reg51.h>//函數(shù)功能:延時約150ms(3*200*250=150000|is=150ms//voiddelay150ms(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedcharcodeTab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsignedchar*p[]={&Tab[0],&Tab[1],&Tab[2],&Tab[3],&Tab[4],&Tab[5],&Tab[6],&Tab[7]};unsignedchari;//定義無符號字符型數(shù)據(jù)while(1){for(i=0;i<8;i++){P0=*p[i];delay150ms();}}}〃實例28:用數(shù)組的指針控制P0口8位LED流水點亮#include<reg51.h>//函數(shù)功能:延時約150ms(3*200*250=150000|is=150ms//voiddelay150ms(void)unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++)}//函數(shù)功能:主函數(shù)/voidmain(void){unsignedchari;unsignedcharTab[]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0x3C,0x18,0x00,0x81,0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB};//流水燈控制碼unsignedchar*p;//定義無符號字符型指針p二Tab;//將數(shù)組首地址存入指針pwhile(1){for(i=0;i<32;i++)//共32個流水燈控制碼{PO=*(p+i);//*(p+i)的值等于a[i]delay150ms();//調(diào)用150ms延時函數(shù)}}}〃實例29:用P0>P1口顯示整型函數(shù)返回值#include<reg51.h>//函數(shù)功能:計算兩個無符號整數(shù)的和//unsignedintsum(inta,intb){unsignedints;s=a+b;return(s);}//函數(shù)功能:主函數(shù)////voidmain(void){unsignedz;z=sum(2008,2009);P仁z/256;//取得z的高8位PO二z%256;//取得z的低8位while(1);}〃實例30:用有參函數(shù)控制P0口8位LED流水速度#include<reg51.h>//函數(shù)功能:延時一段時間//voiddelay(unsignedcharx){unsignedcharm,n;for(m=0;m<x;m++)for(n=0;n<200;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水燈控制碼while(1){//快速流水點亮LEDfor(i=0;i<8;i++)//共8個流水燈控制碼{P0=Tab[i];delay(100);//延時約60ms,(3*100*200二60000|is)}//慢速流水點亮LED看品呎看品呎看品呎看品呎for(i=0;i<8;i++)//共8個流水燈控制碼{P0=Tab[i];delay(250);//延時約150ms,(3*250*200=150000|is)}}}//實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣#include<reg51.h>//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:流水點亮P0口8位LED//voidled_flow(unsignedchara[8]){unsignedchari;for(i=0;i<8;i++){P0=a[i];delay();}}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水燈控制碼led_flow(Tab);}//實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮#include<reg51.h>//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:流水點亮P0口8位LED//voidled_flow(unsignedchar*p)//形參為無符號字符型指針{unsignedchari;while(1){i=0;//將i置為0,指向數(shù)組第一個元素while(*(p+i)!='\0')//只要沒有指向數(shù)組的結(jié)束標(biāo)志{P0=*(p+i);//取的指針?biāo)缸兞?數(shù)組元素)的值,送P0口delay();//調(diào)用延時函數(shù)i++;//指向下一個數(shù)組元素}}}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,0xFE,0xFC,0xFB,0xF0,0xE0,0xC0,0x80,0x00,0xE7,0xDB,0xBD,0x7E,0xFF,0xFF,0x3C,0x18,0x0,0x81,0xC3,0xE7,0xFF,0xFF,0x7E};//流水燈控制碼unsignedchar*pointer;pointer=Tab;led_flow(pointer);}//實例33:用函數(shù)型指針控制P1口燈花樣#include<reg51.h>//包含51單片機寄存器定義的頭文件unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水燈控制碼,該數(shù)組被定義為全局變量//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:流水燈左移//voidled_flow(void){unsignedchari;for(i=0;i<8;i++)//8位控制碼{P0=Tab[i];delay();}}//函數(shù)功能:主函數(shù)/voidmain(void){void(*p)(void);//定義函數(shù)型指針,所指函數(shù)無參數(shù),無返回值p=led_flow;//將函數(shù)的入口地址賦給函數(shù)型指針pwhile(1)(*p)();//通過函數(shù)的指針p調(diào)用函數(shù)led_flow()}//實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串#include<reg51.h>//包含51單片機寄存器定義的頭文件unsignedcharcodestr1[]="TemperatureistestedbyDS18B20";//C語言中,字符串是作為字符數(shù)組來處理的unsignedcharcodestr2[]="Nowtemperatureis:";//所以,字符串的名字就是字符串的首地址unsignedcharcodestr3[]="TheSystermisdesignedbyZhangSan";unsignedcharcodestr4[]="Thedateis2008-9-30";unsignedchar*p[]={str1,str2,str3,str4};//定義p[4]為指向4個字符串的字符型指針數(shù)組//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:流水點亮PO口8位LED//voidled_display(unsignedchar*x[])//形參必須為指針數(shù)組{unsignedchari,j;for(i=0;i<4;i++)//有4個字符串要顯示{j=0;//指向待顯字符串的第0號元素while(*(x[i]+j)!二'\0')//只要第i個字符串的第j號元素不是結(jié)束標(biāo)志{P0=*(x[i]+j);//取得該元素值送到P0口顯示delay();//調(diào)用延時函數(shù)j++;//指向下一個元素}}}//函數(shù)功能:主函數(shù)//voidmain(void){unsignedchari;while(1){for(i=0;i<4;i++)led_display(p);//將指針數(shù)組名作實際參數(shù)傳遞}}//實例35:字符函數(shù)ctype?h應(yīng)用舉例#include<reg51.h>//包含51單片機寄存器定義的頭文件#include<ctype?h>voidmain(void){while(1){P3二isalpha('_')?OxfO:OxOf;//條件運算,若'_'是英文字母,P3=0xf09999〃實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例#include<reg51.h>//包含51單片機寄存器定義的頭文件#include<intrins.h>//包含函數(shù)isalpha()聲明的頭文件//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++);}//函數(shù)功能:主函數(shù)//voidmain(void){P3=0xfe;//P3=11111110Bwhile(1){P3=_crol_(P3,1);//將P3的二進制位循環(huán)左移1位后再賦給P3delay();//調(diào)用延時函數(shù)}}〃實例37:標(biāo)準(zhǔn)函數(shù)stdlib?h應(yīng)用舉例#include<reg51.h>//包含51單片機寄存器定義的頭文件#include<stdlib.h>//包含函數(shù)isalpha()聲明的頭文件//函數(shù)功能:延時約150ms//voiddelay(void){unsignedcharm,n;for(m=0;m<200;m++)for(n=0;n<250;n++)//函數(shù)功能:主函數(shù)//函數(shù)功能:主函數(shù)/voidmain(void){unsignedchari;while(1){for(i=0;i<10;i++)//產(chǎn)生10個隨機數(shù){P3=rand()/160;//將產(chǎn)生的隨機數(shù)縮小160倍后送P3顯示delay();}}}〃實例38:字符串函數(shù)string?h應(yīng)用舉例#include<reg51.h>//包含51單片機寄存器定義的頭文件#include<string.h>//包含函數(shù)isalpha()聲明的頭文件voidmain(void){unsignedcharstr1[]="Now,Thetemperatureis:";unsignedcharstr2[]="Now,Thetemperatureis36Centgrade:";unsignedchari;i=strcmp(str1,str2);//比較兩個字符串,并將結(jié)果存入iif(i==0)//str1=str2P3=0x00;elseif(i<0)//str1<str2P3=0xf0;else//str1>str2P3=0x0f;while(1);//防止程序“跑飛”}//實例39:宏定義應(yīng)用舉例2#include<reg51.h>//包含51單片機寄存器定義的頭文件#defineF(a,b)(a)+(a)*(b)/256+(b)//帶參數(shù)的宏定義,a和b為形參voidmain(void){unsignedchari,j,k;i=40;j=30;k=20;P3二F(i,j+k);//i和j+k分別為實參,宏展開時,實參將替代宏定義中的形參while(1);}//實例40:宏定義應(yīng)用舉例2#include<AT89X51.h>#include<ctype.h>voidmain(void)P3_0=0;//將P30P3_1=0;//將P30P3_2=0;//將P30P3_3=0;//將P30P3_4=1;//將P34P3_5=1;//將P35P3_6=1;//將P37P3_7=1;//將P37while(1)引腳置低電平,LED點亮引腳置低電平,LED點亮引腳置低電平,LED點亮引腳置低電平,LED點亮引腳置高電平,LED熄滅引腳置高電平,LED熄滅引腳置高電平,LED熄滅引腳置高電平,LED熄滅//實例41:宏定義應(yīng)用舉例3#include<reg51.h>//包含51單片機寄存器定義的頭文件#defineMAX100//將MAX宏定義為字符串100voidmain(void){#ifMAX>80//如果字符串100大于80P3=0xf0;//P3口低四位LED點亮#elseP3=0x0f;//否則,P3口高四位LED點亮#endif//結(jié)束本次編譯/*中斷、定時器*///實例42:用定時器T0查詢方式P2口8位控制LED閃爍#include<reg51.h>//包含51單片機寄存器定義的頭文件//函數(shù)功能:主函數(shù)//voidmain(void){//EA=1;//開總中斷//ET0=1;//定時器T0中斷允許TMOD=OxO1;//使用定時器T0的模式1TH0=(65536-46083)/256;//定時器TO的高8位賦初值TL0=(65536-46083)%256;//定時器T0的高8位賦初值TR0=1;//啟動定時器T0TF0=0;P2=0xff;while(1)//無限循環(huán)等待查詢{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256;//定時器T0的高8位賦初值TL0=(65536-46083)%256;//定時器T0的高8位賦初值TH0=(65536-46083)/256;TH0=(65536-46083)/256;//定時器T0的高8位重新賦初值TH0=(65536-46083)/256;TH0=(65536-46083)/256;//定時器T0的高8位重新賦初值TLO=256-156;TLO=256-156;//定時器TO的高8位賦初值〃實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitsound二P3八7;//將sound位定義為P3.7引腳//函數(shù)功能:主函數(shù)/voidmain(void){//EA=1;//開總中斷//ET0=1;//定時器T0中斷允許TMOD=0x10;//使用定時器T1的模式1TH1=(65536-921)/256;//定時器T1的高8位賦初值TL1=(65536-921)%256;//定時器T1的高8位賦初值TR1=1;//啟動定時器T1TF1=0;while(1)//無限循環(huán)等待查詢{while(TF1==0);TF1=0;sound=~sound;//將P3.7引腳輸出電平取反TH1=(65536-921)/256;//定時器T0的高8位賦初值TL1=(65536-921)%256;//定時器T0的高8位賦初值}}〃實例44:將計數(shù)器TO計數(shù)的結(jié)果送P1口8位LED顯示#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitS二P3八4;//將S位定義為P3.4引腳//函數(shù)功能:主函數(shù)//voidmain(void){//EA=1;//開總中斷//ET0=1;//定時器TO中斷允許TM0D=0x02;//使用定時器TO的模式2TH0=256-156;//定時器TO的高8位賦初值TR0=1;//啟動定時器TOwhile(1)//無限循環(huán)等待查詢{while(TFO==O)//如果未計滿就等待{if(S==0)//按鍵S按下接地,電平為0P仁TL0;//計數(shù)器TL0加1后送P1口顯示}TF0=0;//計數(shù)器溢出后,將TF0清0}}〃實例45:用定時器TO的中斷控制1位LED閃爍#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitD1=P2^0;//將D1位定義為P2.0引腳//函數(shù)功能:主函數(shù)//voidmain(void){EA=1;//開總中斷ET0=1;//定時器T0中斷允許TM0D=0x01;//使用定時器T0的模式2TH0=(65536-46083)/256;//定時器T0的高8位賦初值TL0=(65536-46083)%256;//定時器T0的高8位賦初值TR0=1;//啟動定時器T0while(1)//無限循環(huán)等待中斷;}//函數(shù)功能:定時器T0的中斷服務(wù)程序//voidTime0(void)interrupt1using0//“interrupt"聲明函數(shù)為中斷服務(wù)函數(shù)//其后的1為定時器T0的中斷編號;0表示使用第0組工作寄存器{D仁~D1;//按位取反操作,將P2.0引腳輸出電平取反TLO=(65536-46O83)%256;TLO=(65536-46O83)%256;//定時器TO的高8位重新賦初值TLO=(65536-46O83)%256;TLO=(65536-46O83)%256;//定時器TO的高8位重新賦初值TL0=(65536-46083)%256;//定時器TO的高8位重新賦初值}〃實例46:用定時器TO的中斷實現(xiàn)長時間定時#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitD1二P2V;//將D1位定義為P2.0引腳unsignedcharCountor;//設(shè)置全局變量,儲存定時器TO中斷次數(shù)//函數(shù)功能:主函數(shù)//voidmain(void){EA=1;//開總中斷ETO=1;//定時器TO中斷允許TM0D=0x01;//使用定時器TO的模式2TH0=(65536-46083)/256;//定時器TO的高8位賦初值TL0=(65536-46083)%256;//定時器TO的高8位賦初值TRO=1;//啟動定時器TOCountor=O;//從O開始累計中斷次數(shù)while(1)//無限循環(huán)等待中斷;}//函數(shù)功能:定時器TO的中斷服務(wù)程序//voidTimeO(void)interrupt1usingO//“interrupt"聲明函數(shù)為中斷服務(wù)函數(shù)//其后的1為定時器TO的中斷編號;O表示使用第O組工作寄存器{Countor++;//中斷次數(shù)自加1if(Countor==2O)//若累計滿2O次,即計時滿1s{D仁~D1;//按位取反操作,將P2.O引腳輸出電平取反Countor=O;//將Countor清O,重新從O開始計數(shù)}THO=(65536-46O83)/256;//定時器TO的高8位重新賦初值{{{{〃實例47:用定時器T1中斷控制兩個LED以不同周期閃爍#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitD仁P2V;//將D1位定義為P2.0引腳sbitD2=P2^1;//將D2位定義為P2.1引腳unsignedcharCountorl;//設(shè)置全局變量,儲存定時器T1中斷次數(shù)unsignedcharCountor2;//設(shè)置全局變量,儲存定時器T1中斷次數(shù)//函數(shù)功能:主函數(shù)voidmain(void){EA=1;//開總中斷ET1=1;//定時器T1中斷允許TM0D=0x10;//使用定時器T1的模式1TH仁(65536-46083)/256;//定時器T1的高8位賦初值TL仁(65536-46083)%256;//定時器T1的高8位賦初值TR1=1;Countor1=0;//啟動定時器T1//從0開始累計中斷次數(shù)Countor2=0;//從0開始累計中斷次數(shù)while(1)//無限循環(huán)等待中斷,}//函數(shù)功能:定時器T1的中斷服務(wù)程序//voidTime1(void)interrupt3using0//“interrupt"聲明函數(shù)為中斷服務(wù)函數(shù)//其后的3為定時器T1的中斷編號;0表示使用第0組工作寄存器{Countor1++;//Countor1自加1Countor2++;//Countor2自加1if(Countor仁=2)//若累計滿2次,即計時滿100ms{D仁~D1;//按位取反操作,將P2.0引腳輸出電平取反Countor仁0;//將Countor1清0,重新從0開始計數(shù)}if(Countor2==8)//若累計滿8次,即計時滿400msD2=~D2;//按位取反操作,將P2.1引腳輸出電平取反#include<reg51.h>#include<reg51.h>//包含51單片機寄存器定義的頭文件#include<reg51.h>#include<reg51.h>//包含51單片機寄存器定義的頭文件Countor2=0;//將Countorl清0,重新從0開始計數(shù)}TH1=(65536-46083)/256;//定時器T1的高8位重新賦初值TL1=(65536-46083)%256;//定時器T1的高8位重新賦初值}〃實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz音頻#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitsound二P3八7;//將sound位定義為P3.7引腳//函數(shù)功能:主函數(shù)//voidmain(void){EA=1;//開總中斷ET1=1;//定時器T1中斷允許TM0D=0x10;//TM0D=0001000B,使用定時器T1的模式1TH1=(65536-921)/256;//定時器T1的高8位賦初值TL1=(65536-921)%256;//定時器T1的高8位賦初值TR1=1;//啟動定時器T1while(1)//無限循環(huán)等待中斷;}//函數(shù)功能:定時器T1的中斷服務(wù)程序//voidTimel(void)interrupt3using0//“interrupt"聲明函數(shù)為中斷服務(wù)函數(shù){sound=~sound;TH1=(65536-921)/256;//定時器T1的高8位重新賦初值TL1=(65536-921)%256;//定時器T1的高8位重新賦初值}〃實例49:用定時器T0的中斷實現(xiàn)"渴望"主題曲的播放{{{{sbitsound二P3八7;//將sound位定義為P3.7unsignedintC;//儲存定時器的定時常數(shù)//以下是C調(diào)低音的音頻宏定義#definel_dao262//將“#definel_re286//將“#definel_mi311sbitsound二P3八7;//將sound位定義為P3.7unsignedintC;//儲存定時器的定時常數(shù)//以下是C調(diào)低音的音頻宏定義#definel_dao262//將“#definel_re286//將“#definel_mi311//將“#definel_fa349//將“_re”宏定義為低音“2”_mi”宏定義為低音“3”fa”宏定義為低音“4”的頻率349Hz#definel_sao392#definel_la440dao”宏定義為低音“1”的頻率262Hz的頻率286Hz的頻率311Hz#definel_xi494//將“l(fā)_sao”宏定義為低音“5”的頻率392Hz//將“l(fā)_a”宏定義為低音“6”的頻率440Hz//將“l(fā)_xi”宏定義為低音“7”的頻率494Hz//以下是C調(diào)中音的音頻宏定義#definedao523//將“dao”宏定義為中音“1”的頻率523Hz#definere587#definemi659//將“re”宏定義為中音“2”的頻率587Hz//將“mi”宏定義為中音“3”的頻率659Hz#definefa698//將“fa”宏定義為中音“4”的頻率698Hz#definesao784//將“sao”宏定義為中音“5”的頻率784Hz#definela880#definexi987//將“l(fā)a”宏定義為中音“6”的頻率880Hz//將“xi”宏定義為中音“7”的頻率523H//以下是C調(diào)高音的音頻宏定義#defineh_dao1046#defineh_re1174#defineh_mi1318#defineh_fa1396#defineh_sao1567#defineh_la1760#defineh_xi1975//將“h_dao”宏定義為高音“1”的頻率1046Hz//將“h_re”宏定義為高音“2”的頻率1174Hz//將“h_mi”宏定義為高音“3”的頻率1318Hz//將“h_fa”宏定義為高音“4”的頻率1396Hz//將“h_sao”宏定義為高音“5”的頻率1567Hz//將“h_la”宏定義為高音“6”的頻率1760Hz//將“h_xi”宏定義為高音“7”的頻率1975Hz//函數(shù)功能:1個延時單位,延時200ms//voiddelay(){unsignedchari,j;for(i=0;i<250;i++)for(j=0;j<250;j++)}//函數(shù)功能:主函數(shù)//voidmain(void)unsignedchari,j;//以下是《渴望》片頭曲的一段簡譜unsignedintcodef[]={re,mi,re,dao,l_la,dao,l_la,//每行對應(yīng)一小節(jié)音符l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,

l_la,l_la,dao,l_la,l_sao,l_re,l_mi,

l_sao,re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re,l_la,dao,re,l_la,dao,re,mi,re,Oxff};//以O(shè)xff作為音符的結(jié)束標(biāo)志//以下是簡譜中每個音符的節(jié)拍//"4"對應(yīng)4個延時單位,"2"對應(yīng)2個延時單位,"1"對應(yīng)1個延時單位unsignedcharcodeJP[]={4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,1O,4,2,2,4,4,2,2,2,2,4,2,2,2,2,2,2,2,1O,4,4,4,2,2,4,2,4,4,4,2,2,2,2,2,2,1O,4,2,2,4,4,2,2,2,2,6,4,2,2,4,1,1,4,1O,4,2,2,4,1,1,4,1O};EA=1;//開總中斷ETO=1;//定時器TO中斷允許{{{{//使用定時器TO的模式1(13位計數(shù)器)//無限循環(huán)TMOD=0x00;while(1){//從第1//使用定時器TO的模式1(13位計數(shù)器)//無限循環(huán)TMOD=0x00;while(1){//從第1個音符f[0]開始播放while(f[i]!=Oxff)i=0;//只要沒有讀到結(jié)束標(biāo)志就繼續(xù)播初值方法{C=460830/f[i];TH0=(8192-C)/32;//可證明這是13位計數(shù)器THO高8位的賦TL0=(8192-C)%32;//可證明這是13位計數(shù)器TL0低5位的賦初值方法//啟動定時器T0//啟動定時器T0//延時1個節(jié)拍單位//關(guān)閉定時器T0//延時1個節(jié)拍單位//關(guān)閉定時器T0//播放下一個音符TRO=O;i++;}}/函數(shù)功能:定時器T0的中斷服務(wù)子程序,使P3.7引腳輸出音頻的方波voidTimeO(void)interrupt1using1{//將//將P3.7引腳輸出電平取反,形成方波//可證明這是13位計數(shù)器TH0高8位的賦初值方法//可證明這是13位計數(shù)器TLO低5位的賦初值方法}〃實例50-1:輸出50個矩形脈沖#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitu二PL4;//將u位定義為P1.4函數(shù)功能:延時約30ms(3*100*100=30OOO^s=30m/voiddelay30ms(void)unsignedcharm,n;}}}}for(m=0;m<100;m++)for(n=0;n<100;n++)9}//函數(shù)功能:主函數(shù)/voidmain(void){unsignedchari;u=1;//初始化輸出高電平for(i=0;i<50;i++)//輸出50個矩形脈沖{u=1;delay30ms();u=0;delay30ms();}while(1);//無限循環(huán),防止程序“跑飛”}//實例50-2:計數(shù)器TO統(tǒng)計外部脈沖數(shù)#include<reg51.h>//包含51單片機寄存器定義的頭文件//函數(shù)功能:主函數(shù)//voidmain(void){TM0D=0x06;//TMOD=OOOO0110B,使用計數(shù)器TO的模式2EA=1;//開總中斷ETO=O;//不使用定時器TO的中斷TRO=1;//啟動TOTHO=O;//計數(shù)器TO高8位賦初值TLO=O;//計數(shù)器TO低8位賦初值while(1)//無限循環(huán),不停地將TL0計數(shù)結(jié)果送P1口P1=TLO;//實例51-2:定時器TO的模式2測量正脈沖寬度#include<reg51.h>//包含51單片機寄存器定義的頭文件sbitui二P3八2;//將ui位定義為P3.0(INTO)引腳,表示輸入電壓//函數(shù)功能:主函數(shù)//voidmain(void){TM0D=0x0a;//TMOD=OOOO1010B,使用定時器TO的模式2,GATE置1EA=1;//開總中斷ETO=O;//不使用定時器TO的中斷TRO=1;//啟動

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論