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

下載本文檔

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

文檔簡介

1、精心整理目錄實例3:用單片機控制第一個燈亮.錯誤!未指定書簽。實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率錯誤!未指定書簽。實例5:將P1口狀態(tài)分別送入P0、P2、P3口:認識I/O口的引腳功能錯誤!未指定書簽。實例6:使用P3口流水點亮8位LED.錯誤!未指定書簽。實例7:通過對P3口地址的操作流水點亮8位LED錯誤!未指定書簽。實例8:用不同數(shù)據(jù)類型控制燈閃爍時間.錯誤!未指定書簽。實例9:用P0口、P1口分別顯示加法和減法運算結(jié)果錯誤!未指定書簽。實例10:用P0、P1口顯示乘法運算結(jié)果.錯誤!未指定書簽。實例11:用P1、P0口顯示除法運算結(jié)果.錯誤!未指定書簽。實例12:用自

2、增運算控制P0口8位LED流水花樣錯誤!未指定書簽。實例13:用P0口顯示邏輯與運算結(jié)果.錯誤!未指定書簽。實例14:用P0口顯示條件運算結(jié)果.錯誤!未指定書簽。實例15:用P0口顯示按位異或運算結(jié)果.錯誤!未指定書簽。實例16:用P0顯示左移運算結(jié)果.錯誤!未指定書簽。實例17:萬能邏輯電路實驗.錯誤!未指定書簽。實例18:用右移運算流水點亮P1口8位LED.錯誤!未指定書簽。實例19:用if語句控制P0口8位LED的流水方向錯誤!未指定書簽。實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)錯誤!未指定書簽。實例21:用for語句控制蜂鳴器鳴笛次數(shù).錯誤!未指定書簽。精心整理精心

3、整理實例22:用while語句控制LED.錯誤!未指定書簽。實例23:用do-while語句控制P0口8位LED流水點亮錯誤!未指定書簽。實例24:用字符型數(shù)組控制P0口8位LED流水點亮錯誤!未指定書簽。實例25:用P0口顯示字符串常量.錯誤!未指定書簽。實例26:用P0口顯示指針運算結(jié)果.錯誤!未指定書簽。實例27:用指針數(shù)組控制P0口8位LED流水點亮錯誤!未指定書簽。實例28:用數(shù)組的指針控制P0口8位LED流水點亮錯誤!未指定書簽。實例29:用P0、P1口顯示整型函數(shù)返回值.錯誤!未指定書簽。實例30:用有參函數(shù)控制P0口8位LED流水速度錯誤!未指定書簽。實例31:用數(shù)組作函數(shù)參數(shù)

4、控制流水花樣.錯誤!未指定書簽。實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮錯誤!未指定書簽。實例33:用函數(shù)型指針控制P1口燈花樣.錯誤!未指定書簽。實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串錯誤!未指定書簽。實例35:字符函數(shù)ctype.h應(yīng)用舉例.錯誤!未指定書簽。實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例.錯誤!未指定書簽。實例37:標準函數(shù)stdlib.h應(yīng)用舉例.錯誤!未指定書簽。實例38:字符串函數(shù)string.h應(yīng)用舉例.錯誤!未指定書簽。實例39:宏定義應(yīng)用舉例2.錯誤!未指定書簽。實例40:宏定義應(yīng)用舉例2.錯誤!未指定書簽。實例41:宏定義應(yīng)用舉例3.錯

5、誤!未指定書簽。實例42:用定時器T0查詢方式P2口8位控制LED閃爍錯誤!未指定書簽。實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻錯誤!未指定書簽。實例44:將計數(shù)器T0計數(shù)的結(jié)果送P1口8位LED顯示錯誤!未指定書簽。精心整理精心整理實例45:用定時器T0的中斷控制1位LED閃爍錯誤!未指定書簽。實例46:用定時器T0的中斷實現(xiàn)長時間定時.錯誤!未指定書簽。實例47:用定時器T1中斷控制兩個LED以不同周期閃爍錯誤!未指定書簽。實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz音頻錯誤!未指定書簽。實例49:用定時器T0的中斷實現(xiàn)渴望主題曲的播放錯誤!未指定書簽。實例50-1:

6、輸出50個矩形脈沖.錯誤!未指定書簽。實例50-2:計數(shù)器T0統(tǒng)計外部脈沖數(shù).錯誤!未指定書簽。實例51-2:定時器T0的模式2測量正脈沖寬度錯誤!未指定書簽。實例52:用定時器T0控制輸出高低寬度不同的矩形波錯誤!未指定書簽。實例53:用外中斷0的中斷方式進行數(shù)據(jù)采集錯誤!未指定書簽。實例54-1:輸出負脈寬為200微秒的方波.錯誤!未指定書簽。實例54-2:測量負脈沖寬度.錯誤!未指定書簽。實例55:方式0控制流水燈循環(huán)點亮.錯誤!未指定書簽。實例56-1:數(shù)據(jù)發(fā)送程序.錯誤!未指定書簽。實例56-2:數(shù)據(jù)接收程序.錯誤!未指定書簽。實例57-1:數(shù)據(jù)發(fā)送程序.錯誤!未指定書簽。實例57-

7、2:數(shù)據(jù)接收程序.錯誤!未指定書簽。實例58:單片機向PC發(fā)送數(shù)據(jù).錯誤!未指定書簽。實例59:單片機接收PC發(fā)出的數(shù)據(jù).錯誤!未指定書簽。實例60:用LED數(shù)碼顯示數(shù)字5.錯誤!未指定書簽。實例61:用LED數(shù)碼顯示器循環(huán)顯示數(shù)字09.錯誤!未指定書簽。實例62:用數(shù)碼管慢速動態(tài)掃描顯示數(shù)字1234錯誤!未指定書簽。實例63:用LED數(shù)碼顯示器偽靜態(tài)顯示數(shù)字1234錯誤!未指定書簽。精心整理精心整理實例64:用數(shù)碼管顯示動態(tài)檢測結(jié)果.錯誤!未指定書簽。實例65:數(shù)碼秒表設(shè)計.錯誤!未指定書簽。實例66:數(shù)碼時鐘設(shè)計.錯誤!未指定書簽。實例67:用LED數(shù)碼管顯示計數(shù)器T0的計數(shù)值錯誤!未指定

8、書簽。實例68:靜態(tài)顯示數(shù)字“59”.錯誤!未指定書簽。實例69:無軟件消抖的獨立式鍵盤輸入實驗.錯誤!未指定書簽。實例70:軟件消抖的獨立式鍵盤輸入實驗.錯誤!未指定書簽。實例71:CPU控制的獨立式鍵盤掃描實驗.錯誤!未指定書簽。實例72:定時器中斷控制的獨立式鍵盤掃描實驗錯誤!未指定書簽。實例73:獨立式鍵盤控制的4級變速流水燈.錯誤!未指定書簽。實例74:獨立式鍵盤的按鍵功能擴展:以一當(dāng)四錯誤!未指定書簽。實例75:獨立式鍵盤調(diào)時的數(shù)碼時鐘實驗.錯誤!未指定書簽。實例76:獨立式鍵盤控制步進電機實驗.錯誤!未指定書簽。實例77:矩陣式鍵盤按鍵值的數(shù)碼管顯示實驗錯誤!未指定書簽。實例78

9、:矩陣式鍵盤按鍵音.錯誤!未指定書簽。實例79:簡易電子琴.錯誤!未指定書簽。實例80:矩陣式鍵盤實現(xiàn)的電子密碼鎖.錯誤!未指定書簽。實例81:用LCD顯示字符A.錯誤!未指定書簽。實例82:用LCD循環(huán)右移顯示W(wǎng)elcometoChina錯誤!未指定書簽。實例83:用LCD顯示適時檢測結(jié)果.錯誤!未指定書簽。實例84:液晶時鐘設(shè)計.錯誤!未指定書簽。實例85:將數(shù)據(jù)0 x0f寫入AT24C02再讀出送P1口顯示錯誤!未指定書簽。實例86:將按鍵次數(shù)寫入AT24C02,再讀出并用1602LCD顯示錯誤!未指定書簽。精心整理精心整理實例87:對I2C總線上掛接多個AT24C02的讀寫操作錯誤!未

10、指定書簽。實例88:基于AT24C02的多機通信讀取程序.錯誤!未指定書簽。實例88:基于AT24C02的多機通信寫入程序.錯誤!未指定書簽。實例90:DS18B20溫度檢測及其液晶顯示.錯誤!未指定書簽。實例91:將數(shù)據(jù)0 xaa寫入X5045再讀出送P1口顯示錯誤!未指定書簽。實例92:將流水燈控制碼寫入X5045并讀出送P1口顯示錯誤!未指定書簽。實例93:對SPI總線上掛接多個X5045的讀寫操作錯誤!未指定書簽。實例94:基于ADC0832的數(shù)字電壓表.錯誤!未指定書簽。實例95:用DAC0832產(chǎn)生鋸齒波電壓.錯誤!未指定書簽。實例96:用P1口顯示紅外遙控器的按鍵值.錯誤!未指定

11、書簽。實例97:用紅外遙控器控制繼電器.錯誤!未指定書簽。實例98:基于DS1302的日歷時鐘.錯誤!未指定書簽。實例99:單片機數(shù)據(jù)發(fā)送程序.錯誤!未指定書簽。實例100:電機轉(zhuǎn)速表設(shè)計.錯誤!未指定書簽。模擬霍爾脈沖.錯誤!未指定書簽。/*函數(shù)的使用和熟悉*/實例3:用單片機控制第一個燈亮#include/包含51單片機寄存器定義的頭文件voidmain(void)while(1)/無限循環(huán)P1=0 xfe;/P1=11111110B,即P1.0輸出低電平精心整理精心整理/實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時一段時

12、間*/voiddelay(void)/兩個void意思分別為無需返回值,沒有參數(shù)傳遞unsignedinti;/定義無符號整數(shù),最大取值范圍65535for(i=0;i20000;i+)/做20000次空循環(huán);/什么也不做,等待一個機器周期/*函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))*/voidmain(void)while(1)/無限循環(huán)P1=0 xfe;/P1=11111110B,P1.0輸出低電平delay();/延時一段時間P1=0 xff;/P1=11111111B,P1.0輸出高電平精心整理精心整理delay();/延時一段時間/實例5:將P1口狀態(tài)分別送入P0、P2

13、、P3口:認識I/O口的引腳功能#include/包含單片機寄存器的頭文件/*函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))*/voidmain(void)while(1)/無限循環(huán)P1=0 xff;/P1=11111111,熄滅LEDP0=P1;/將P1口狀態(tài)送入P0口P2=P1;/將P1口狀態(tài)送入P2口P3=P1;/將P1口狀態(tài)送入P3口/實例6:使用P3口流水點亮8位LED#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時一段時間精心整理精心整理*/voiddelay(void)unsignedchari,j;for(i=0;i250;i+)for(j=0;j250;j

14、+);/*函數(shù)功能:主函數(shù)*/voidmain(void)while(1)P3=0 xfe;/第一個燈亮delay();/調(diào)用延時函數(shù)P3=0 xfd;/第二個燈亮delay();/調(diào)用延時函數(shù)P3=0 xfb;/第三個燈亮delay();/調(diào)用延時函數(shù)P3=0 xf7;/第四個燈亮delay();/調(diào)用延時函數(shù)精心整理精心整理P3=0 xef;/第五個燈亮delay();/調(diào)用延時函數(shù)P3=0 xdf;/第六個燈亮delay();/調(diào)用延時函數(shù)P3=0 xbf;/第七個燈亮delay();/調(diào)用延時函數(shù)P3=0 x7f;/第八個燈亮delay();/調(diào)用延時函數(shù)/實例7:通過對P3口地址的操

15、作流水點亮8位LED#include/包含單片機寄存器的頭文件sfrx=0 xb0;/P3口在存儲器中的地址是b0H,通過sfr可定義8051內(nèi)核單片機/的所有內(nèi)部8位特殊功能寄存器,對地址x的操作也就是對P1口的操作/*函數(shù)功能:延時一段時間*/voiddelay(void)unsignedchari,j;for(i=0;i250;i+)for(j=0;j250;j+)精心整理精心整理;/利用循環(huán)等待若干機器周期,從而延時一段時間/*函數(shù)功能:主函數(shù)*/voidmain(void)while(1)x=0 xfe;/第一個燈亮delay();/調(diào)用延時函數(shù)x=0 xfd;/第二個燈亮delay

16、();/調(diào)用延時函數(shù)x=0 xfb;/第三個燈亮delay();/調(diào)用延時函數(shù)x=0 xf7;/第四個燈亮delay();/調(diào)用延時函數(shù)x=0 xef;/第五個燈亮delay();/調(diào)用延時函數(shù)x=0 xdf;/第六個燈亮delay();/調(diào)用延時函數(shù)x=0 xbf;/第七個燈亮delay();/調(diào)用延時函數(shù)精心整理精心整理x=0 x7f;/第八個燈亮delay();/調(diào)用延時函數(shù)/實例8:用不同數(shù)據(jù)類型控制燈閃爍時間#include/包含單片機寄存器的頭文件/*函數(shù)功能:用整形數(shù)據(jù)延時一段時間*/voidint_delay(void)/延時一段較長的時間unsignedintm;/定義無符號

17、整形變量,雙字節(jié)數(shù)據(jù),值域為065535for(m=0;m36000;m+);/空操作/*函數(shù)功能:用字符型數(shù)據(jù)延時一段時間*/voidchar_delay(void)/延時一段較短的時間unsignedchari,j;/定義無符號字符型變量,單字節(jié)數(shù)據(jù),值域0255for(i=0;i200;i+)精心整理精心整理for(j=0;j180;j+);/空操作/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;while(1)for(i=0;i3;i+)P1=0 xfe;/P1.0口的燈點亮int_delay();/延時一段較長的時間P1=0 xff;/熄滅int_de

18、lay();/延時一段較長的時間for(i=0;i3;i+)P1=0 xef;/P1.4口的燈點亮char_delay();/延時一段較長的時間P1=0 xff;/熄滅精心整理精心整理char_delay();/延時一段較長的時間/實例9:用P0口、P1口分別顯示加法和減法運算結(jié)果#includevoidmain(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.

19、4的燈被熄滅/實例10:用P0、P1口顯示乘法運算結(jié)果#include/包含單片機寄存器的頭文件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的商/低8位16進制數(shù)H1

20、*16+H0必然等于192,即4544除以256的余數(shù)P1=s/256;/高8位送P1口,P1=17=11H=00010001B,P1.0和P1.4口滅,其余亮P0=s%256;/低8位送P0口,P3=192=c0H=11000000B,P3.1,P3.6,P3.7口滅,其余亮/實例11:用P1、P0口顯示除法運算結(jié)果#include/包含單片機寄存器的頭文件voidmain(void)P1=36/5;/求整數(shù)P0=(36%5)*10)/5;/求小數(shù)while(1);/無限循環(huán)防止程序“跑飛”/實例12:用自增運算控制P0口8位LED流水花樣#include/包含單片機寄存器的頭文件/*函數(shù)功

21、能:延時一段時間精心整理精心整理*/voiddelay(void)unsignedinti;for(i=0;i20000;i+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;for(i=0;i255;i+)/注意i的值不能超過255P0=i;/將i的值送P0口delay();/調(diào)用延時函數(shù)/實例13:用P0口顯示邏輯與運算結(jié)果#include/包含單片機寄存器的頭文件voidmain(void)精心整理精心整理P0=(40)&(90 xab);/將邏輯運算結(jié)果送P0口while(1);/設(shè)置無限循環(huán),防止程序“跑飛”/實例14:用P0口顯示條件運算結(jié)果#in

22、clude/包含單片機寄存器的頭文件voidmain(void)P0=(84)?8:4;/將條件運算結(jié)果送P0口,P0=8=00001000Bwhile(1);/設(shè)置無限循環(huán),防止程序“跑飛”/實例15:用P0口顯示按位異或運算結(jié)果#include/包含單片機寄存器的頭文件voidmain(void)P0=0 xa20 x3c;/將條件運算結(jié)果送P0口,P0=8=00001000Bwhile(1);/設(shè)置無限循環(huán),防止程序“跑飛”精心整理精心整理/實例16:用P0顯示左移運算結(jié)果#include/包含單片機寄存器的頭文件voidmain(void)P0=0 x3b2;/將左移運算結(jié)果送P0口,

23、P0=11101100B=0 xecwhile(1);/無限循環(huán),防止程序“跑飛”/實例17:萬能邏輯電路實驗#include/包含單片機寄存器的頭文件sbitF=P14;/將F位定義為P1.4sbitX=P15;/將X位定義為P1.5sbitY=P16;/將Y位定義為P1.6sbitZ=P17;/將Z位定義為P1.7voidmain(void)while(1)F=(X)&Y)|Z;/將邏輯運算結(jié)果賦給F;精心整理精心整理/實例18:用右移運算流水點亮P1口8位LED#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時一段時間*/voiddelay(void)unsignedintn;

24、for(n=0;n30000;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;while(1)P1=0 xff;delay();for(i=0;i1;/每次循環(huán)P1的各二進位右移1位,高位補0delay();/調(diào)用延時函數(shù)/實例19:用if語句控制P0口8位LED的流水方向#include/包含單片機寄存器的頭文件sbitS1=P14;/將S1位定義為P1.4sbitS2=P15;/將S2位定義為P1.5/*函數(shù)功能:主函數(shù)*/voidmain(void)while(1)if(S1=0)/如果按鍵S1按下P0=0 x0f;/P0口高四位LED點亮if(S

25、2=0)/如果按鍵S2按下P0=0 xf0;/P0口低四位LED點亮精心整理精心整理/實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)#include/包含單片機寄存器的頭文件sbitS1=P14;/將S1位定義為P1.4/*函數(shù)功能:延時一段時間*/voiddelay(void)unsignedintn;for(n=0;n10000;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;i=0;/將i初始化為0while(1)精心整理精心整理if(S1=0)/如果S1鍵按下delay();/延時一段時間if(S1=0)/如果再次檢測到S1鍵按下i

26、+;/i自增1if(i=9)/如果i=9,重新將其置為1i=1;switch(i)/使用多分支選擇語句case1:P0=0 xfe;/第一個LED亮break;case2:P0=0 xfd;/第二個LED亮break;case3:P0=0 xfb;/第三個LED亮break;case4:P0=0 xf7;/第四個LED亮break;case5:P0=0 xef;/第五個LED亮break;case6:P0=0 xdf;/第六個LED亮break;case7:P0=0 xbf;/第七個LED亮精心整理精心整理break;case8:P0=0 x7f;/第八個LED亮break;default:/

27、缺省值,關(guān)閉所有LEDP0=0 xff;/實例21:用for語句控制蜂鳴器鳴笛次數(shù)#include/包含單片機寄存器的頭文件sbitsound=P37;/將sound位定義為P3.7/*函數(shù)功能:延時形成1600Hz音頻*/voiddelay1600(void)unsignedcharn;for(n=0;n100;n+);/*函數(shù)功能:延時形成800Hz音頻精心整理精心整理*/voiddelay800(void)unsignedcharn;for(n=0;n200;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedinti;while(1)for(i=0;i830;i

28、+)sound=0;/P3.7輸出低電平delay1600();sound=1;/P3.7輸出高電平delay1600();for(i=0;i200;i+)精心整理精心整理sound=0;/P3.7輸出低電平delay800();sound=1;/P3.7輸出高電平delay800();/實例22:用while語句控制LED#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時約60ms(3*100*200=60000s)*/voiddelay60ms(void)unsignedcharm,n;for(m=0;m100;m+)for(n=0;n200;n+);/*函數(shù)功能:主函數(shù)精心整理

29、精心整理*/voidmain(void)unsignedchari;while(1)/無限循環(huán)i=0;/將i初始化為0while(i0 xff)/當(dāng)i小于0 xff(255)時執(zhí)行循環(huán)體P0=i;/將i送P0口顯示delay60ms();/延時i+;/i自增1/實例23:用do-while語句控制P0口8位LED流水點亮#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時約60ms(3*100*200=60000s)*/voiddelay60ms(void)精心整理精心整理unsignedcharm,n;for(m=0;m100;m+)for(n=0;n200;n+);/*函數(shù)功能:主

30、函數(shù)*/voidmain(void)doP0=0 xfe;/第一個LED亮delay60ms();P0=0 xfd;/第二個LED亮delay60ms();P0=0 xfb;/第三個LED亮delay60ms();P0=0 xf7;/第四個LED亮delay60ms();P0=0 xef;/第五個LED亮delay60ms();P0=0 xdf;/第六個LED亮精心整理精心整理delay60ms();delay60ms();P0=0 xbf;/第七個LED亮delay60ms();P0=0 x7f;/第八個LED亮delay60ms();while(1);/無限循環(huán),使8位LED循環(huán)流水點亮/

31、實例24:用字符型數(shù)組控制P0口8位LED流水點亮#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時約60ms(3*100*200=60000s)*/voiddelay60ms(void)unsignedcharm,n;for(m=0;m100;m+)for(n=0;n200;n+);/*函數(shù)功能:主函數(shù)精心整理精心整理*/voidmain(void)unsignedchari;unsignedcharcodeTab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/定義無符號字符型數(shù)組while(1)for(i=0;i8;i+)P0=

32、Tabi;/依次引用數(shù)組元素,并將其送P0口顯示delay60ms();/調(diào)用延時函數(shù)/實例25:用P0口顯示字符串常量#include/包含單片機寄存器的頭文件/*函數(shù)功能:延時約150ms(3*200*250=150000s=150ms*/voiddelay150ms(void)精心整理精心整理unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedcharstr=Now,Temperatureis:;/將字符串賦給字符型全部元素賦值unsignedchari;while(1)i=

33、0;/將i初始化為0,從第一個元素開始顯示while(stri!=0)/只要沒有顯示到結(jié)束標志0P0=stri;/將第i個字符送到P0口顯示delay150ms();/調(diào)用150ms延時函數(shù)i+;/指向下一個待顯字符精心整理精心整理/實例26:用P0口顯示指針運算結(jié)果#includevoidmain(void)unsignedchar*p1,*p2;/定義無符號字符型指針變量p1,p2unsignedchari,j;/定義無符號字符型數(shù)據(jù)i=25;/給i賦初值25j=15;p1=&i;/使指針變量指向i,對指針初始化p2=&j;/使指針變量指向j,對指針初始化P0=*p1+*p2;/*p1+*

34、p2相當(dāng)于i+j,所以P0=25+15=40=0 x28/則P0=00101000B,結(jié)果P0.3、P0.5引腳LED熄滅,其余點亮while(1);/無限循環(huán),防止程序“跑飛”/實例27:用指針數(shù)組控制P0口8位LED流水點亮#include/*函數(shù)功能:延時約150ms(3*200*250=150000s=150ms*/voiddelay150ms(void)精心整理精心整理unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedcharcodeTab=0 xfe,0 xfd,0

35、xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;unsignedchar*p=&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5,&Tab6,&Tab7;unsignedchari;/定義無符號字符型數(shù)據(jù)while(1)for(i=0;i8;i+)P0=*pi;delay150ms();精心整理精心整理/實例28:用數(shù)組的指針控制P0口8位LED流水點亮#include/*函數(shù)功能:延時約150ms(3*200*250=150000s=150ms*/voiddelay150ms(void)unsignedcharm,n;for(m=0;m200;m+)f

36、or(n=0;n250;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;unsignedcharTab=0 xFF,0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE,0 xFE,0 xFC,0 xFB,0 xF0,0 xE0,0 xC0,0 x80,0 x00,精心整理精心整理0 xE7,0 xDB,0 xBD,0 x7E,0 x3C,0 x18,0 x00,0 x81,0 xC3,0 xE7,0 x7E,0 xBD,0 xD

37、B,0 xE7,0 xBD,0 xDB;/流水燈控制碼unsignedchar*p;/定義無符號字符型指針p=Tab;/將數(shù)組首地址存入指針pwhile(1)for(i=0;i32;i+)/共32個流水燈控制碼P0=*(p+i);/*(p+i)的值等于aidelay150ms();/調(diào)用150ms延時函數(shù)/實例29:用P0、P1口顯示整型函數(shù)返回值#include/*函數(shù)功能:計算兩個無符號整數(shù)的和*/unsignedintsum(inta,intb)unsignedints;精心整理精心整理s=a+b;return(s);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedz

38、;z=sum(2008,2009);P1=z/256;/取得z的高8位P0=z%256;/取得z的低8位while(1);/實例30:用有參函數(shù)控制P0口8位LED流水速度#include/*函數(shù)功能:延時一段時間*/voiddelay(unsignedcharx)精心整理精心整理unsignedcharm,n;for(m=0;mx;m+)for(n=0;n200;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;unsignedcharcodeTab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;/流水燈

39、控制碼while(1)/快速流水點亮LEDfor(i=0;i8;i+)/共8個流水燈控制碼P0=Tabi;delay(100);/延時約60ms,(3*100*200=60000s)/慢速流水點亮LEDfor(i=0;i8;i+)/共8個流水燈控制碼精心整理精心整理P0=Tabi;delay(250);/延時約150ms,(3*250*200=150000s)/實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣#include/*函數(shù)功能:延時約150ms*/voiddelay(void)unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:流水點

40、亮P0口8位LED*/voidled_flow(unsignedchara8)精心整理精心整理unsignedchari;for(i=0;i8;i+)P0=ai;delay();/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedcharcodeTab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;/流水燈控制碼led_flow(Tab);/實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮#include/*函數(shù)功能:延時約150ms*/精心整理精心整理voiddelay(void)unsignedcharm,n;for(

41、m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:流水點亮P0口8位LED*/voidled_flow(unsignedchar*p)/形參為無符號字符型指針unsignedchari;while(1)i=0;/將i置為0,指向數(shù)組第一個元素while(*(p+i)!=0)/只要沒有指向數(shù)組的結(jié)束標志P0=*(p+i);/取的指針所指變量(數(shù)組元素)的值,送P0口delay();/調(diào)用延時函數(shù)i+;/指向下一個數(shù)組元素精心整理精心整理/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedcharcodeTab=0 xFE,0 xFD,0 xFB,0 xF7,

42、0 xEF,0 xDF,0 xBF,0 x7F,0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE,0 xFF,0 xFE,0 xFC,0 xFB,0 xF0,0 xE0,0 xC0,0 x80,0 x00,0 xE7,0 xDB,0 xBD,0 x7E,0 xFF,0 xFF,0 x3C,0 x18,0 x0,0 x81,0 xC3,0 xE7,0 xFF,0 xFF,0 x7E;/流水燈控制碼unsignedchar*pointer;pointer=Tab;led_flow(pointer);/實例33:用函數(shù)型指針控制P1口燈花樣#includ

43、e/包含51單片機寄存器定義的頭文件unsignedcharcodeTab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;/流水燈控制碼,該數(shù)組被定義為全局變量/*函數(shù)功能:延時約150ms精心整理精心整理*/voiddelay(void)unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:流水燈左移*/voidled_flow(void)unsignedchari;for(i=0;i8;i+)/8位控制碼P0=Tabi;delay();/*函數(shù)功能:主函數(shù)*/精心整理精心整理void

44、main(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/包含51單片機寄存器定義的頭文件unsignedcharcodestr1=TemperatureistestedbyDS18B20;/C語言中,字符串是作為字符數(shù)組來處理的unsignedcharcodestr2=Nowtemperatureis:;/所以,字符串的名字就是字符串的首地址unsignedch

45、arcodestr3=TheSystermisdesignedbyZhangSan;unsignedcharcodestr4=Thedateis2008-9-30;unsignedchar*p=str1,str2,str3,str4;/定義p4為指向4個字符串的字符型指針數(shù)組/*函數(shù)功能:延時約150ms*/voiddelay(void)精心整理精心整理unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:流水點亮P0口8位LED*/voidled_display(unsignedchar*x)/形參必須為指針數(shù)組unsignedcha

46、ri,j;for(i=0;i4;i+)/有4個字符串要顯示j=0;/指向待顯字符串的第0號元素while(*(xi+j)!=0)/只要第i個字符串的第j號元素不是結(jié)束標志P0=*(xi+j);/取得該元素值送到P0口顯示delay();/調(diào)用延時函數(shù)j+;/指向下一個元素/*精心整理精心整理函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;while(1)for(i=0;i4;i+)led_display(p);/將指針數(shù)組名作實際參數(shù)傳遞/實例35:字符函數(shù)ctype.h應(yīng)用舉例#include/包含51單片機寄存器定義的頭文件#includevoidmain(vo

47、id)while(1)P3=isalpha(_)?0 xf0:0 x0f;/條件運算,若_是英文字母,P3=0 xf0/實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例精心整理精心整理#include/包含51單片機寄存器定義的頭文件#include/包含函數(shù)isalpha()聲明的頭文件/*函數(shù)功能:延時約150ms*/voiddelay(void)unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)P3=0 xfe;/P3=11111110Bwhile(1)P3=_crol_(P3,1);/將P3

48、的二進制位循環(huán)左移1位后再賦給P3delay();/調(diào)用延時函數(shù)精心整理精心整理/實例37:標準函數(shù)stdlib.h應(yīng)用舉例#include/包含51單片機寄存器定義的頭文件#include/包含函數(shù)isalpha()聲明的頭文件/*函數(shù)功能:延時約150ms*/voiddelay(void)unsignedcharm,n;for(m=0;m200;m+)for(n=0;n250;n+);/*函數(shù)功能:主函數(shù)*/voidmain(void)unsignedchari;while(1)精心整理精心整理for(i=0;i10;i+)/產(chǎn)生10個隨機數(shù)P3=rand()/160;/將產(chǎn)生的隨機數(shù)縮小

49、160倍后送P3顯示delay();/實例38:字符串函數(shù)string.h應(yīng)用舉例#include/包含51單片機寄存器定義的頭文件#include/包含函數(shù)isalpha()聲明的頭文件voidmain(void)unsignedcharstr1=Now,Thetemperatureis:;unsignedcharstr2=Now,Thetemperatureis36Centgrade:;unsignedchari;i=strcmp(str1,str2);/比較兩個字符串,并將結(jié)果存入iif(i=0)/str1=str2P3=0 x00;elseif(i0)/str1str2精心整理精心整理

50、P3=0 x0f;while(1);/防止程序“跑飛”/實例39:宏定義應(yīng)用舉例2#include/包含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#includevoidmain(void)精心整理精心整理P3_0=0;/將P3.0引腳置低電平,LED點亮P3_1=0;/將P3.0

51、引腳置低電平,LED點亮P3_2=0;/將P3.0引腳置低電平,LED點亮P3_3=0;/將P3.0引腳置低電平,LED點亮P3_4=1;/將P3.4引腳置高電平,LED熄滅P3_5=1;/將P3.5引腳置高電平,LED熄滅P3_6=1;/將P3.7引腳置高電平,LED熄滅P3_7=1;/將P3.7引腳置高電平,LED熄滅while(1);/實例41:宏定義應(yīng)用舉例3#include/包含51單片機寄存器定義的頭文件#defineMAX100/將MAX宏定義為字符串100voidmain(void)#ifMAX80/如果字符串100大于80P3=0 xf0;/P3口低四位LED點亮#elseP

52、3=0 x0f;/否則,P3口高四位LED點亮#endif/結(jié)束本次編譯精心整理精心整理/*中斷、定時器*/實例42:用定時器T0查詢方式P2口8位控制LED閃爍#include/包含51單片機寄存器定義的頭文件/*函數(shù)功能:主函數(shù)*/voidmain(void)/EA=1;/開總中斷/ET0=1;/定時器T0中斷允許TMOD=0 x01;/使用定時器T0的模式1TH0=(65536-46083)/256;/定時器T0的高8位賦初值TL0=(65536-46083)%256;/定時器T0的高8位賦初值TR0=1;/啟動定時器T0TF0=0;P2=0 xff;while(1)/無限循環(huán)等待查詢w

53、hile(TF0=0);TF0=0;P2=P2;精心整理精心整理TH0=(65536-46083)/256;/定時器T0的高8位賦初值TL0=(65536-46083)%256;/定時器T0的高8位賦初值/實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻#include/包含51單片機寄存器定義的頭文件sbitsound=P37;/將sound位定義為P3.7引腳/*函數(shù)功能:主函數(shù)*/voidmain(void)/EA=1;/開總中斷/ET0=1;/定時器T0中斷允許TMOD=0 x10;/使用定時器T1的模式1TH1=(65536-921)/256;/定時器T1的高8位賦初值TL1

54、=(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ù)器T0計數(shù)的結(jié)果送P1口8位LED顯示#include/包含51單片機寄存器定義的頭文件sbitS=P34;/將S位定義為P3.4引腳/*函數(shù)功能:主函數(shù)*/voidmain(void)/EA=1;/開總中斷/

55、ET0=1;/定時器T0中斷允許TMOD=0 x02;/使用定時器T0的模式2TH0=256-156;/定時器T0的高8位賦初值TL0=256-156;/定時器T0的高8位賦初值TR0=1;/啟動定時器T0while(1)/無限循環(huán)等待查詢精心整理精心整理while(TF0=0)/如果未計滿就等待if(S=0)/按鍵S按下接地,電平為0P1=TL0;/計數(shù)器TL0加1后送P1口顯示TF0=0;/計數(shù)器溢出后,將TF0清0/實例45:用定時器T0的中斷控制1位LED閃爍#include/包含51單片機寄存器定義的頭文件sbitD1=P20;/將D1位定義為P2.0引腳/*函數(shù)功能:主函數(shù)*/vo

56、idmain(void)EA=1;/開總中斷ET0=1;/定時器T0中斷允許TMOD=0 x01;/使用定時器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組工作寄存器D1=D1;/按位取反操作,將P2.0引腳輸出電

57、平取反TH0=(65536-46083)/256;/定時器T0的高8位重新賦初值TL0=(65536-46083)%256;/定時器T0的高8位重新賦初值/實例46:用定時器T0的中斷實現(xiàn)長時間定時#include/包含51單片機寄存器定義的頭文件sbitD1=P20;/將D1位定義為P2.0引腳unsignedcharCountor;/設(shè)置全局變量,儲存定時器T0中斷次數(shù)/*函數(shù)功能:主函數(shù)*/voidmain(void)精心整理精心整理EA=1;/開總中斷ET0=1;/定時器T0中斷允許TMOD=0 x01;/使用定時器T0的模式2TH0=(65536-46083)/256;/定時器T0的

58、高8位賦初值TL0=(65536-46083)%256;/定時器T0的高8位賦初值TR0=1;/啟動定時器T0Countor=0;/從0開始累計中斷次數(shù)while(1)/無限循環(huán)等待中斷;/*函數(shù)功能:定時器T0的中斷服務(wù)程序*/voidTime0(void)interrupt1using0/“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù)/其后的1為定時器T0的中斷編號;0表示使用第0組工作寄存器Countor+;/中斷次數(shù)自加1if(Countor=20)/若累計滿20次,即計時滿1sD1=D1;/按位取反操作,將P2.0引腳輸出電平取反Countor=0;/將Countor清0,重新從0開始

59、計數(shù)精心整理精心整理TH0=(65536-46083)/256;/定時器T0的高8位重新賦初值TL0=(65536-46083)%256;/定時器T0的高8位重新賦初值/實例47:用定時器T1中斷控制兩個LED以不同周期閃爍#include/包含51單片機寄存器定義的頭文件sbitD1=P20;/將D1位定義為P2.0引腳sbitD2=P21;/將D2位定義為P2.1引腳unsignedcharCountor1;/設(shè)置全局變量,儲存定時器T1中斷次數(shù)unsignedcharCountor2;/設(shè)置全局變量,儲存定時器T1中斷次數(shù)/*函數(shù)功能:主函數(shù)*/voidmain(void)EA=1;/開

60、總中斷ET1=1;/定時器T1中斷允許TMOD=0 x10;/使用定時器T1的模式1TH1=(65536-46083)/256;/定時器T1的高8位賦初值TL1=(65536-46083)%256;/定時器T1的高8位賦初值TR1=1;/啟動定時器T1Countor1=0;/從0開始累計中斷次數(shù)Countor2=0;/從0開始累計中斷次數(shù)精心整理精心整理while(1)/無限循環(huán)等待中斷;/*函數(shù)功能:定時器T1的中斷服務(wù)程序*/voidTime1(void)interrupt3using0/“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù)/其后的3為定時器T1的中斷編號;0表示使用第0組工作寄存

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論