版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、學習單片機100例目錄目錄1*函數的使用和熟悉* */4實例3:用單片機控制第一個燈亮4實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率4實例5:將 P1口狀態(tài)分別送入P0、P2、P3口:認識I/O口的引腳功能5實例6:使用P3口流水點亮8位LED5實例7:通過對P3口地址的操作流水點亮8位LED6實例8:用不同數據類型控制燈閃爍時間7實例9:用P0口、P1 口分別顯示加法和減法運算結果8實例10:用P0、P1口顯示乘法運算結果9實例11:用P1、P0口顯示除法運算結果9實例12:用自增運算控制P0口8位LED流水花樣10實例13:用P0口顯示邏輯"與"運算結果10實例
2、14:用P0口顯示條件運算結果11實例15:用P0口顯示按位"異或"運算結果11實例16:用P0顯示左移運算結果11實例17:"萬能邏輯電路"實驗11實例18:用右移運算流水點亮P1口8位LED12實例19:用if語句控制P0口8位LED的流水方向13實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)13實例21:用for語句控制蜂鳴器鳴笛次數14實例22:用while語句控制LED16實例23:用do-while語句控制P0口8位LED流水點亮16實例24:用字符型數組控制P0口8位LED流水點亮17實例25: 用P0口顯示字符串常量18實例
3、26:用P0 口顯示指針運算結果19實例27:用指針數組控制P0口8位LED流水點亮19實例28:用數組的指針控制P0 口8 位LED流水點亮20實例29:用P0 、P1口顯示整型函數返回值21實例30:用有參函數控制P0口8位LED流水速度22實例31:用數組作函數參數控制流水花樣23實例32:用指針作函數參數控制P0口8位LED流水點亮23實例33:用函數型指針控制P1口燈花樣25實例34:用指針數組作為函數的參數顯示多個字符串26實例35:字符函數ctype.h應用舉例27實例36:內部函數intrins.h應用舉例27實例37:標準函數stdlib.h應用舉例28實例38:字符串函數s
4、tring.h應用舉例29實例39:宏定義應用舉例229實例40:宏定義應用舉例230實例41:宏定義應用舉例330* *中斷、定時器*中斷、定時器* *中斷、定時器*中斷、定時器* * */31實例42:用定時器T0查詢方式P2口8位控制LED閃爍31實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻31實例44:將計數器T0計數的結果送P1口8位LED顯示32實例45:用定時器T0的中斷控制1位LED閃爍33實例46:用定時器T0的中斷實現長時間定時34實例47:用定時器T1中斷控制兩個LED以不同周期閃爍34實例48:用計數器T1的中斷控制蜂鳴器發(fā)出1KHz音頻36實例49:用定時
5、器T0的中斷實現"渴望"主題曲的播放36實例50-1:輸出50個矩形脈沖39實例50-2:計數器T0統計外部脈沖數40實例51-2:定時器T0的模式2測量正脈沖寬度40實例52:用定時器T0控制輸出高低寬度不同的矩形波41實例53:用外中斷0的中斷方式進行數據采集42實例54-1:輸出負脈寬為200微秒的方波43實例54-2:測量負脈沖寬度43實例55:方式0控制流水燈循環(huán)點亮44實例56-1:數據發(fā)送程序45實例56-2:數據接收程序47實例57-1:數據發(fā)送程序47實例57-2:數據接收程序49實例58:單片機向PC發(fā)送數據50實例59:單片機接收PC發(fā)出的數據51*數
6、碼管顯示*數碼管顯示* 數碼管顯示*數碼管顯示*/52實例60:用LED數碼顯示數字552實例61:用LED數碼顯示器循環(huán)顯示數字0952實例62:用數碼管慢速動態(tài)掃描顯示數字"1234"53實例63:用LED數碼顯示器偽靜態(tài)顯示數字123454實例64:用數碼管顯示動態(tài)檢測結果54實例65:數碼秒表設計56實例66:數碼時鐘設計58實例67:用LED數碼管顯示計數器T0的計數值62實例68:靜態(tài)顯示數字“59”63* *鍵盤控制*鍵盤控制* *鍵盤控制* *鍵盤控制* * */63實例69:無軟件消抖的獨立式鍵盤輸入實驗64實例70:軟件消抖的獨立式鍵盤輸入實驗64實例7
7、1:CPU控制的獨立式鍵盤掃描實驗65實例72:定時器中斷控制的獨立式鍵盤掃描實驗68實例73:獨立式鍵盤控制的4級變速流水燈71實例74:獨立式鍵盤的按鍵功能擴展:"以一當四"73實例75:獨立式鍵盤調時的數碼時鐘實驗75實例76:獨立式鍵盤控制步進電機實驗79實例77:矩陣式鍵盤按鍵值的數碼管顯示實驗82/實例78:矩陣式鍵盤按鍵音85實例79:簡易電子琴86實例80:矩陣式鍵盤實現的電子密碼鎖92* *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * *液晶顯示LCD*液晶顯示LCD *液晶顯示LCD * * */95實例81:用LCD顯示字符'A'
8、;96實例82:用LCD循環(huán)右移顯示"Welcome to China"99實例83:用LCD顯示適時檢測結果102實例84:液晶時鐘設計106*一些芯片的使用*24c02 DS18B20 X5045 ADC0832 DAC0832 DS1302 紅外遙控*/112實例85:將數據"0x0f"寫入AT24C02再讀出送P1口顯示112實例86:將按鍵次數寫入AT24C02,再讀出并用1602LCD顯示117實例87:對I2C總線上掛接多個AT24C02的讀寫操作124實例88:基于AT24C02的多機通信 讀取程序129實例88:基于AT24C02的多機
9、通信 寫入程序133實例90:DS18B20溫度檢測及其液晶顯示144實例91:將數據"0xaa"寫入X5045再讀出送P1口顯示153實例92:將流水燈控制碼寫入X5045并讀出送P1口顯示157實例93:對SPI總線上掛接多個X5045的讀寫操作161實例94:基于ADC0832的數字電壓表165實例95:用DAC0832產生鋸齒波電壓171實例96:用P1口顯示紅外遙控器的按鍵值171實例97:用紅外遙控器控制繼電器174實例98:基于DS1302的日歷時鐘177實例99:單片機數據發(fā)送程序185實例100:電機轉速表設計186模擬霍爾脈沖192/*函數的使用和熟悉*
10、 */實例3:用單片機控制第一個燈亮#include<reg51.h> /包含51單片機寄存器定義的頭文件void main(void) P1=0xfe; /P1=1111 1110B,即P1.0輸出低電平 /實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時一段時間*/void delay(void) /兩個void意思分別為無需返回值,沒有參數傳遞 unsigned int i; /定義無符號整數,最大取值范圍65535 for(i=0;i<20000;i+) /做20000次空
11、循環(huán) ; /什么也不做,等待一個機器周期/*函數功能:主函數 (C語言規(guī)定必須有也只能有1個主函數)*/void main(void) while(1) /無限循環(huán) P1=0xfe; /P1=1111 1110B, P1.0輸出低電平 delay(); /延時一段時間 P1=0xff; /P1=1111 1111B, P1.0輸出高電平 delay(); /延時一段時間 /實例5:將 P1口狀態(tài)分別送入P0、P2、P3口:認識I/O口的引腳功能#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:主函數 (C語言規(guī)定必須有也只能有1個主函數)*/void ma
12、in(void) while(1) /無限循環(huán) P1=0xff;/ P1=1111 1111B,熄滅LED P0=P1;/ 將 P1口狀態(tài)送入P0口 P2=P1; / 將 P1口狀態(tài)送入P2口 P3=P1; / 將 P1口狀態(tài)送入P3口 /實例6:使用P3口流水點亮8位LED #include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時一段時間*/void delay(void) unsigned char i,j; for(i=0;i<250;i+) for(j=0;j<250;j+) ; /*函數功能:主函數 */void main(void)
13、while(1) P3=0xfe; /第一個燈亮 delay(); /調用延時函數 P3=0xfd; /第二個燈亮 delay(); /調用延時函數P3=0xfb; /第三個燈亮 delay(); /調用延時函數P3=0xf7; /第四個燈亮 delay(); /調用延時函數P3=0xef; /第五個燈亮 delay(); /調用延時函數P3=0xdf; /第六個燈亮 delay(); /調用延時函數P3=0xbf; /第七個燈亮 delay(); /調用延時函數P3=0x7f; /第八個燈亮 delay(); /調用延時函數 /實例7:通過對P3口地址的操作流水點亮8位LED#include
14、<reg51.h> /包含單片機寄存器的頭文件sfr x=0xb0; /P3口在存儲器中的地址是b0H, 通過sfr可定義8051內核單片機 /的所有內部8位特殊功能寄存器,對地址x的操作也就是對P1口的操作/*函數功能:延時一段時間*/void delay(void) unsigned char i,j; for(i=0;i<250;i+) for(j=0;j<250;j+) ; /利用循環(huán)等待若干機器周期,從而延時一段時間 /*函數功能:主函數 */void main(void) while(1) x=0xfe; /第一個燈亮 delay(); /調用延時函數 x=
15、0xfd; /第二個燈亮 delay(); /調用延時函數 x=0xfb; /第三個燈亮 delay(); /調用延時函數 x=0xf7; /第四個燈亮 delay(); /調用延時函數x=0xef; /第五個燈亮 delay(); /調用延時函數x=0xdf; /第六個燈亮 delay(); /調用延時函數x=0xbf; /第七個燈亮 delay(); /調用延時函數x=0x7f; /第八個燈亮 delay(); /調用延時函數 /實例8:用不同數據類型控制燈閃爍時間#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:用整形數據延時一段時間*/void i
16、nt_delay(void) /延時一段較長的時間 unsigned int m; /定義無符號整形變量,雙字節(jié)數據,值域為065535 for(m=0;m<36000;m+) ; /空操作 /*函數功能:用字符型數據延時一段時間*/void char_delay(void) /延時一段較短的時間 unsigned char i,j; /定義無符號字符型變量,單字節(jié)數據,值域0255for(i=0;i<200;i+) for(j=0;j<180;j+) ; /空操作/*函數功能:主函數*/void main(void) unsigned char i; while(1) fo
17、r(i=0;i<3;i+) P1=0xfe; /P1.0口的燈點亮 int_delay(); /延時一段較長的時間 P1=0xff; /熄滅 int_delay(); /延時一段較長的時間 for(i=0;i<3;i+) P1=0xef; /P1.4口的燈點亮 char_delay(); /延時一段較長的時間 P1=0xff; /熄滅 char_delay(); /延時一段較長的時間 /實例9:用P0口、P1 口分別顯示加法和減法運算結果#include<reg51.h>void main(void) unsigned char m,n; m=43; /即十進制數2x1
18、6+11=43 n=60; /即十進制數3x16+12=60 P1=m+n; /P1=103=0110 0111B,結果P1.3、P1.4、P1.7 口的燈被點亮 P0=n-m; /P0=17=0001 0001B,結果P0.0、P0.4的燈被熄滅 /實例10:用P0、P1口顯示乘法運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) unsigned char m,n; unsigned int s; m=64; n=71; s=m*n; /s=64*71=4544,需要16位二進制數表示,高8位送P1口,低8位送P0口 /由于45
19、44=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進制數H3*16+H2必然等于17,即4544除以256的商/低8位16進制數H1*16+H0必然等于192,即4544除以256的余數 P1=s/256; /高8位送P1口 ,P1=17=11H=0001 0001B, P1.0和P1.4口滅,其余亮 P0=s%256; /低8位送P0口 , P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口滅,其余亮/實例11:用P1、P0
20、口顯示除法運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) P1=36/5; /求整數 P0=(36%5)*10)/5; /求小數 while(1) ; /無限循環(huán)防止程序“跑飛” /實例12:用自增運算控制P0口8位LED流水花樣#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時一段時間*/void delay(void) unsigned int i; for(i=0;i<20000;i+) ;/*函數功能:主函數*/void main(void) unsigned char i
21、; for(i=0;i<255;i+) /注意i的值不能超過255 P0=i; /將i的值送P0口 delay(); /調用延時函數/實例13:用P0口顯示邏輯"與"運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) P0=(4>0)&&(9>0xab);/將邏輯運算結果送P0口 while(1) ; /設置無限循環(huán),防止程序“跑飛”/實例14:用P0口顯示條件運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) P0=
22、(8>4)?8:4;/將條件運算結果送P0口,P0=8=0000 1000B while(1) ; /設置無限循環(huán),防止程序“跑飛”/實例15:用P0口顯示按位"異或"運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) P0=0xa20x3c;/將條件運算結果送P0口,P0=8=0000 1000B while(1) ; /設置無限循環(huán),防止程序“跑飛”/實例16:用P0顯示左移運算結果#include<reg51.h> /包含單片機寄存器的頭文件void main(void) P0=0x3b&
23、lt;<2;/將左移運算結果送P0口,P0=1110 1100B=0xec while(1) ; /無限循環(huán),防止程序“跑飛”/實例17:"萬能邏輯電路"實驗#include<reg51.h> /包含單片機寄存器的頭文件sbit F=P14; /將F位定義為 P1.4sbit X=P15; /將X位定義為 P1.5sbit Y=P16; /將Y位定義為 P1.6sbit Z=P17; /將Z位定義為 P1.7void main(void) while(1) F=(X)&Y)|Z; /將邏輯運算結果賦給F ; /實例18:用右移運算流水點亮P1口8位
24、LED#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時一段時間*/void delay(void) unsigned int n; for(n=0;n<30000;n+) ;/*函數功能:主函數*/void main(void) unsigned char i; while(1) P1=0xff;delay();for(i=0;i<8;i+)/設置循環(huán)次數為8 P1=P1>>1; /每次循環(huán)P1的各二進位右移1位,高位補0delay(); /調用延時函數 /實例19:用if語句控制P0口8位LED的流水方向#include&l
25、t;reg51.h> /包含單片機寄存器的頭文件sbit S1=P14; /將S1位定義為P1.4sbit S2=P15; /將S2位定義為P1.5/*函數功能:主函數*/void main(void) while(1) if(S1=0) /如果按鍵S1按下 P0=0x0f; /P0口高四位LED點亮 if(S2=0) /如果按鍵S2按下 P0=0xf0; /P0口低四位LED點亮 /實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)#include<reg51.h> /包含單片機寄存器的頭文件sbit S1=P14; /將S1位定義為P1.4/*函數功能:延時一段
26、時間*/void delay(void) unsigned int n; for(n=0;n<10000;n+) ;/*函數功能:主函數*/void main(void) unsigned char i;i=0; /將i初始化為0while(1) if(S1=0) /如果S1鍵按下 delay(); /延時一段時間 if(S1=0) /如果再次檢測到S1鍵按下 i+; /i自增1 if(i=9) /如果i=9,重新將其置為1 i=1; switch(i) /使用多分支選擇語句 case 1: P0=0xfe; /第一個LED亮break;case 2: P0=0xfd; /第二個LED亮
27、 break;case 3:P0=0xfb; /第三個LED亮 break;case 4:P0=0xf7; /第四個LED亮 break;case 5:P0=0xef; /第五個LED亮 break;case 6:P0=0xdf; /第六個LED亮 break;case 7:P0=0xbf; /第七個LED亮 break;case 8:P0=0x7f; /第八個LED亮 break;default: /缺省值,關閉所有LED P0=0xff; /實例21:用for語句控制蜂鳴器鳴笛次數#include<reg51.h> /包含單片機寄存器的頭文件sbit sound=P37; /將
28、sound位定義為P3.7/*函數功能:延時形成1600Hz音頻*/void delay1600(void) unsigned char n; for(n=0;n<100;n+) ;/*函數功能:延時形成800Hz音頻*/void delay800(void) unsigned char n; for(n=0;n<200;n+) ;/*函數功能:主函數*/void main(void) unsigned int i;while(1) for(i=0;i<830;i+) sound=0; /P3.7輸出低電平 delay1600(); sound=1; /P3.7輸出高電平 d
29、elay1600(); for(i=0;i<200;i+) sound=0; /P3.7輸出低電平 delay800(); sound=1; /P3.7輸出高電平 delay800(); /實例22:用while語句控制LED#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時約60ms (3*100*200=60000s)*/void delay60ms(void) unsigned char m,n; for(m=0;m<100;m+) for(n=0;n<200;n+) ;/*函數功能:主函數*/void main(void) u
30、nsigned char i;while(1) /無限循環(huán) i=0; /將i初始化為0 while(i<0xff) /當i小于0xff(255)時執(zhí)行循環(huán)體 P0=i; /將i送P0口顯示 delay60ms(); /延時 i+; /i自增1 /實例23:用do-while語句控制P0口8位LED流水點亮#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時約60ms (3*100*200=60000s)*/void delay60ms(void) unsigned char m,n; for(m=0;m<100;m+) for(n=0;n&l
31、t;200;n+) ;/*函數功能:主函數*/void main(void) do 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); /
32、無限循環(huán),使8位LED循環(huán)流水點亮/實例24:用字符型數組控制P0口8位LED流水點亮#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時約60ms (3*100*200=60000s)*/void delay60ms(void) unsigned char m,n; for(m=0;m<100;m+) for(n=0;n<200;n+) ;/*函數功能:主函數*/void main(void) unsigned char i; unsigned char code Tab =0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xb
33、f,0x7f; /定義無符號字符型數組 while(1) for(i=0;i<8;i+) P0=Tabi;/依次引用數組元素,并將其送P0口顯示 delay60ms();/調用延時函數 /實例25: 用P0口顯示字符串常量#include<reg51.h> /包含單片機寄存器的頭文件/*函數功能:延時約150ms (3*200*250=150 000s=150ms*/void delay150ms(void) unsigned char m,n; for(m=0;m<200;m+) for(n=0;n<250;n+) ;/*函數功能:主函數*/void main(
34、void) unsigned char str="Now,Temperature is :" /將字符串賦給字符型全部元素賦值 unsigned char i; while(1) i=0; /將i初始化為0,從第一個元素開始顯示 while(stri!='0') /只要沒有顯示到結束標志'0' P0=stri; /將第i個字符送到P0口顯示 delay150ms(); /調用150ms延時函數 i+; /指向下一個待顯字符 /實例26:用P0 口顯示指針運算結果#include<reg51.h>void main(void) un
35、signed char *p1,*p2; /定義無符號字符型指針變量p1,p2 unsigned char i,j; /定義無符號字符型數據 i=25; /給i賦初值25 j=15; p1=&i; /使指針變量指向i ,對指針初始化 p2=&j; /使指針變量指向j ,對指針初始化 P0=*p1+*p2; /*p1+*p2相當于i+j,所以P0=25+15=40=0x28 /則P0=0010 1000B,結果P0.3、P0.5引腳LED熄滅,其余點亮 while(1) ; /無限循環(huán),防止程序“跑飛”/實例27:用指針數組控制P0口8位LED流水點亮#include<re
36、g51.h>/*函數功能:延時約150ms (3*200*250=150 000s=150ms*/void delay150ms(void) unsigned char m,n; for(m=0;m<200;m+) for(n=0;n<250;n+) ;/*函數功能:主函數*/void main(void) unsigned char code Tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; unsigned char *p =&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5, &Tab6,&Tab7; unsigned char i; /定義無符號字符型數據 while(1) for(i=0;i<8;i+) P0=*pi;delay150ms(); /實例28:用數組的指針控制P0 口8 位LED流水點亮#include<reg51.h>/*函數功能:延時約150ms (3*200*250=150 000s=150ms
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互動廣告推廣合同
- 2025年醫(yī)藥制造擔保合同
- 2025年度個人寫字樓租賃合同協議書(商務洽談中心)
- 2025年河南洛陽市眾達人力資源管理服務有限公司招聘筆試參考題庫附帶答案詳解
- 2025年浙江臺州溫嶺市社會事業(yè)發(fā)展集團有限公司招聘筆試參考題庫附帶答案詳解
- 2025年粵教新版八年級地理下冊月考試卷
- 2025年度個人二手房買賣合同樣本及貸款服務協議
- 個人應急周轉借款合同(2024年版)
- 二零二五年度木材出口代理及貿易合同3篇
- 2025年華東師大版選修3歷史上冊月考試卷含答案
- 中鐵十四局合同范本
- 農耕研學活動方案種小麥
- 七年級下冊-備戰(zhàn)2024年中考歷史總復習核心考點與重難點練習(統部編版)
- 2024年佛山市勞動合同條例
- 污水管網規(guī)劃建設方案
- 城鎮(zhèn)智慧排水系統技術標準
- 采購管理制度及流程采購管理制度及流程
- 五年級美術下冊第9課《寫意蔬果》-優(yōu)秀課件4人教版
- 節(jié)能降耗課件
- 尼爾森數據市場分析報告
- 氧氣霧化吸入法
評論
0/150
提交評論