版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、word.單片機(jī)編程實例100例大全單片機(jī)編程實例*實例1:使用P3口流水點亮8位LED#include<reg51.h> /包含單片機(jī)存放器的頭文件 / 函數(shù)功能:延時一段時間void delay(void)unsigned char i,j;for(i=0;i<250;i+)for(j=0;j<250;j+);/ 函數(shù)功能:主函數(shù)void main(void)while(1)P3=0xfe; /第一個燈亮delay(); /調(diào)用延時函數(shù)P3=0xfd; /第二個燈亮delay(); /調(diào)用延時函數(shù)P3=0xfb; /第三個燈亮delay(); /調(diào)用延時函數(shù)P3=0
2、xf7; /第四個燈亮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ù) / /*實例2:通過對P3口地址的操作流水點亮8位LED#include<reg51.h> /包含單片機(jī)存放器的頭文件sfr x=0xb0; /P3口在存儲器中的地址是b0H, 通過sfr可定義8051內(nèi)核單片機(jī)/的所有內(nèi)部8位特殊功能存放器,對地址x的操作也就是對P1口的操作/函數(shù)
3、功能:延時一段時間/void delay(void)unsigned char i,j;for(i=0;i<250;i+)for(j=0;j<250;j+); /利用循環(huán)等待假設(shè)干機(jī)器周期,從而延時一段時間/函數(shù)功能:主函數(shù)/void main(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;
4、/第六個燈亮delay(); /調(diào)用延時函數(shù)x=0xbf; /第七個燈亮delay(); /調(diào)用延時函數(shù)x=0x7f; /第八個燈亮delay(); /調(diào)用延時函數(shù)*實例3:用不同數(shù)據(jù)類型控制燈閃爍時間#include<reg51.h> /包含單片機(jī)存放器的頭文件/函數(shù)功能:用整形數(shù)據(jù)延時一段時間/void int_delay(void) /延時一段較長的時間unsigned int m; /定義無符號整形變量,雙字節(jié)數(shù)據(jù),值域為065535 for(m=0;m<36000;m+); /空操作/函數(shù)功能:用字符型數(shù)據(jù)延時一段時間/void char_delay(void) /
5、延時一段較短的時間unsigned char i,j; /定義無符號字符型變量,單字節(jié)數(shù)據(jù),值域0255 for(i=0;i<200;i+)for(j=0;j<180;j+); /空操作/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;while(1)for(i=0;i<3;i+)int_delay(); /延時一段較長的時間P1=0xff; /熄滅int_delay(); /延時一段較長的時間for(i=0;i<3;i+)char_delay(); /延時一段較長的時間 P1=0xff; /熄滅 char_delay(); /延時一段較
6、長的時間 *實例4:用單片機(jī)控制第一個燈亮#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件void main(void)P1=0xfe; /P1=1111 1110B,即P1.0輸出低電平*實例5:用單片機(jī)控制一個燈閃爍:認(rèn)識單片機(jī)的工作頻率 #include<reg51.h> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時一段時間/void delay(void) /兩個void意思分別為無需返回值,沒有參數(shù)傳遞 unsigned int i; /定義無符號整數(shù),最大取值范圍65535 for(i=0;i<20000;i+) /做20000次空
7、循環(huán); /什么也不做,等待一個機(jī)器周期/ 函數(shù)功能:主函數(shù) C語言規(guī)定必須有也只能有1個主函數(shù) / void main(void)while(1) /無限循環(huán)delay(); /延時一段時間delay(); /延時一段時間*實例6:將 P1口狀態(tài)分別送入P0、P2、P3口:認(rèn)識I/O口的引腳功能#include<reg51.h> /包含單片機(jī)存放器的頭文件/ 函數(shù)功能:主函數(shù) C語言規(guī)定必須有也只能有1個主函數(shù) /void main(void)while(1) /無限循環(huán)P1=0xff; / P1=1111 1111B,熄滅LEDP0=P1; / 將 P1口狀態(tài)送入P0口P2=P1
8、; / 將 P1口狀態(tài)送入P2口P3=P1; / 將 P1口狀態(tài)送入P3口*實例7:用P0口、P1 口分別顯示加法和減法運算結(jié)果 #include<reg51.h>void main(void)unsigned char m,n;m=43; /即十進(jìn)制數(shù)2x16+11=43n=60; /即十進(jìn)制數(shù)3x16+12=60P1=m+n; /P1=103=0110 0111B,結(jié)果P1.3、P1.4、P1.7 口的燈被點亮 P0=n-m; /P0=17=0001 0001B,結(jié)果P0.0、P0.4的燈被熄滅 *實例8:用P0、P1口顯示乘法運算結(jié)果#include<reg51.h&g
9、t; /包含單片機(jī)存放器的頭文件void main(void)unsigned char m,n;unsigned int s;m=64;n=71;s=m n; /s=64 71=4544,需要16位二進(jìn)制數(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進(jìn)制數(shù)H3 16+H2必然等于17,即4544除以256的商/低8位16進(jìn)制數(shù)H1 16+H0必然等于192,即4544除以256的余數(shù)P1=s/256;
10、 /高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口滅,其余亮*實例9:用P1、P0口顯示除法運算結(jié)果#include<reg51.h> /包含單片機(jī)存放器的頭文件void main(void)P1=36/5; /求整數(shù)P0=(36%5) 10)/5; /求小數(shù)while(1); /無限循環(huán)防止程序“跑飛*實例10:用自增運算控制P0口8位LED流水把戲> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時一段時間/void
11、delay(void)unsigned int i;for(i=0;i<20000;i+);/ 函數(shù)功能:主函數(shù)/ void main(void)unsigned char i;for(i=0;i<255;i+) /注意i的值不能超過255P0=i; /將i的值送P0口delay(); /調(diào)用延時函數(shù)*實例11:用P0口顯示邏輯"與"運算結(jié)果 #include<reg51.h> /包含單片機(jī)存放器的頭文件 void main(void)P0=(4>0)&&(9>0xab);/將邏輯運算結(jié)果送P0口while(1); /設(shè)置
12、無限循環(huán),防止程序“跑飛*實例12:用P0口顯示條件運算結(jié)果#include<reg51.h> /包含單片機(jī)存放器的頭文件 void main(void)P0=(8>4)8:4;/將條件運算結(jié)果送P0口,P0=8=0000 1000B while(1); /設(shè)置無限循環(huán),防止程序“跑飛*實例13:用P0口顯示按位"異或"運算結(jié)果 #include<reg51.h> /包含單片機(jī)存放器的頭文件 void main(void)P0=0xa20x3c;/將條件運算結(jié)果送P0口,P0=8=0000 1000B while(1); /設(shè)置無限循環(huán),防止程
13、序“跑飛*實例16:用P0顯示左移運算結(jié)果#include<reg51.h> /包含單片機(jī)存放器的頭文件 void main(void)P0=0x3b<<2;/將左移運算結(jié)果送P0口,P0=1110 1100B=0xec while(1); /無限循環(huán),防止程序“跑飛*實例17:"萬能邏輯電路"實驗#include<reg51.h> /包含單片機(jī)存放器的頭文件void main(void)while(1)F=(X)&Y)|Z; /將邏輯運算結(jié)果賦給F;*實例18:用右移運算流水點亮P1口8位LED #include<reg5
14、1.h> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時一段時間/void delay(void)unsigned int n;for(n=0;n<30000;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;while(1)P1=0xff;delay();for(i=0;i<8;i+)/設(shè)置循環(huán)次數(shù)為8P1=P1>>1; /每次循環(huán)P1的各二進(jìn)位右移1位,高位補0 delay(); /調(diào)用延時函數(shù)*實例19:用if語句控制P0口8位LED的流水方向 #include<reg51.h> /包含單片機(jī)存放器的頭文件/函
15、數(shù)功能:主函數(shù)/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> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時一段時間/void delay(void)unsigned int n;for(n=0;n<10000;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;i=0; /將i初
16、始化為0while(1)if(S1=0) /如果S1鍵按下delay(); /延時一段時間if(S1=0) /如果再次檢測到S1鍵按下i+; /i自增1if(i=9) /如果i=9,重新將其置為1i=1;switch(i) /使用多分支選擇語句 case 1: P0=0xfe; /第一個LED亮 break; case 2: P0=0xfd; /第二個LED亮 break; case 3:P0=0xfb; /第三個LED亮 break; case 4:P0=0xf7; /第四個LED亮 break; case 5:P0=0xef; /第五個LED亮 break; case 6:P0=0xdf;
17、 /第六個LED亮 break; case 7:P0=0xbf; /第七個LED亮 break; case 8:P0=0x7f; /第八個LED亮 break; default: /缺省值,關(guān)閉所有LED P0=0xff; *實例21:用for語句控制蜂鳴器鳴笛次數(shù)#include<reg51.h> /包含單片機(jī)存放器的頭文件 sbit sound=P37; /將sound位定義為P3.7 / 函數(shù)功能:延時形成1600Hz音頻/ void delay1600(void)unsigned char n;for(n=0;n<100;n+);/ 函數(shù)功能:延時形成800Hz音頻/
18、 void delay800(void)unsigned char n;for(n=0;n<200;n+);/ 函數(shù)功能:主函數(shù)/ void main(void)unsigned int i;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
19、<reg51.h> /包含單片機(jī)存放器的頭文件 / 函數(shù)功能:延時約60ms (3 100 200=60000s) / void delay60ms(void)unsigned char m,n;for(m=0;m<100;m+)for(n=0;n<200;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;while(1) /無限循環(huán)i=0; /將i初始化為0while(i<0xff) /當(dāng)i小于0xff255)時執(zhí)行循環(huán)體 P0=i; /將i送P0口顯示delay60ms(); /延時i+; /i自增1*實例23:用do-
20、while語句控制P0口8位LED流水點亮 #include<reg51.h> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時約60ms (3 100 200=60000s)/void delay60ms(void)unsigned char m,n;for(m=0;m<100;m+)for(n=0;n<200;n+);/函數(shù)功能:主函數(shù)/void main(void)doP0=0xfe; /第一個LED亮delay60ms();P0=0xfd; /第二個LED亮 delay60ms(); P0=0xfb; /第三個LED亮 delay60ms(); P0=0xf7; /第
21、四個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)流水點亮*實例24:用字符型數(shù)組控制P0口8位LED流水點亮 #include<reg51.h> /包含單片機(jī)存放器的頭文件/函數(shù)功能:延時約60ms (3 100 200=60000s)/void delay60ms(voi
22、d)unsigned char m,n;for(m=0;m<100;m+)for(n=0;n<200;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;unsigned char code Tab =0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /定義無符號字符型數(shù)組while(1)for(i=0;i<8;i+)P0=Tabi;/依次引用數(shù)組元素,并將其送P0口顯示delay60ms();/調(diào)用延時函數(shù)*實例25: 用P0口顯示字符串常量#include<reg51.h> /包含單片機(jī)存放
23、器的頭文件/函數(shù)功能:延時約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+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char str="Now,Temperature is :" /將字符串賦給字符型全部元素賦值unsigned char i;while(1)i=0; /將i初始化為0,從第一個元素開始顯示while(stri!='0') /只要沒有顯示到結(jié)
24、束標(biāo)志'0'P0=stri; /將第i個字符送到P0口顯示delay150ms(); /調(diào)用150ms延時函數(shù)i+; /指向下一個待顯字符*實例26:用P0 口顯示指針運算結(jié)果#include<reg51.h>void main(void)unsigned char p1, p2; /定義無符號字符型指針變量p1,p2 unsigned char i,j; /定義無符號字符型數(shù)據(jù)i=25; /給i賦初值25j=15;p1=&i; /使指針變量指向i ,對指針初始化p2=&j; /使指針變量指向j ,對指針初始化P0= p1+ p2; / p1+ p2
25、相當(dāng)于i+j,所以P0=25+15=40=0x28/那么P0=0010 1000B,結(jié)果P0.3、P0.5引腳LED熄滅,其余點亮 while(1); /無限循環(huán),防止程序“跑飛*實例27:用指針數(shù)組控制P0口8位LED流水點亮 #include<reg51.h>/函數(shù)功能:延時約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+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char co
26、de Tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char p =&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5, &Tab6,&Tab7;unsigned char i; /定義無符號字符型數(shù)據(jù)while(1)for(i=0;i<8;i+)P0= pi;delay150ms();*實例28:用數(shù)組的指針控制P0 口8 位LED流水點亮 #include<reg51.h>/函數(shù)功能:延時約150ms (3 200 250=150
27、 000s=150ms/void delay150ms(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;unsigned char Tab =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,
28、0x18,0x00,0x81, 0xC3,0xE7,0x7E,0xBD,0xDB,0xE7,0xBD,0xDB; /流水燈控制碼unsigned char p; /定義無符號字符型指針p=Tab; /將數(shù)組首地址存入指針pwhile(1)for(i=0;i<32;i+) /共32個流水燈控制碼P0= (p+i); / p+i)的值等于aidelay150ms(); /調(diào)用150ms延時函數(shù) *實例29:用P0 、P1口顯示整型函數(shù)返回值 #include<reg51.h>/ 函數(shù)功能:計算兩個無符號整數(shù)的和/ unsigned int sum(int a,int b)unsi
29、gned int s;s=a+b;return (s);/ 函數(shù)功能:主函數(shù)/ void main(void)unsigned z;z=sum(2022,2009);P1=z/256; /取得z的高8位P0=z%256; /取得z的低8位while(1);*實例30:用有參函數(shù)控制P0口8位LED流水速度 #include<reg51.h>/ 函數(shù)功能:延時一段時間/ void delay(unsigned char x)unsigned char m,n;for(m=0;m<x;m+)for(n=0;n<200;n+);/函數(shù)功能:主函數(shù)/void main(void
30、)unsigned char i;unsigned char code Tab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; /流水燈控制碼while(1)/快速流水點亮LEDfor(i=0;i<8;i+) /共8個流水燈控制碼P0=Tabi;delay(100); /延時約60ms, (3 100 200=60 000s /慢速流水點亮LEDfor(i=0;i<8;i+) /共8個流水燈控制碼P0=Tabi;delay(250); /延時約150ms, (3 250 200=150 000s *實例31:用數(shù)組作函數(shù)參數(shù)控制流水把戲#incl
31、ude<reg51.h>/函數(shù)功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:流水點亮P0口8位LED/void led_flow(unsigned char a8)unsigned char i;for(i=0;i<8;i+)P0=ai;delay();/函數(shù)功能:主函數(shù)/void main(void)unsigned char code Tab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; /流水燈
32、控制碼led_flow(Tab);*實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮 #include<reg51.h>/函數(shù)功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:流水點亮P0口8位LED/void led_flow(unsigned char p) /形參為無符號字符型指針unsigned char i;while(1)i=0; /將i置為0,指向數(shù)組第一個元素while( (p+i)!='0') /只要沒有指向
33、數(shù)組的結(jié)束標(biāo)志P0= (p+i);/ 取的指針?biāo)缸兞繑?shù)組元素的值,送P0口 delay(); /調(diào)用延時函數(shù)i+; /指向下一個數(shù)組元素/函數(shù)功能:主函數(shù)/void main(void)unsigned char code Tab =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,0x
34、E7,0xFF, 0xFF,0x7E;/流水燈控制碼unsigned char pointer;pointer=Tab;led_flow(pointer);*實例33:用函數(shù)型指針控制P1口燈把戲#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件unsigned char code Tab=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; /流水燈控制碼,該數(shù)組被定義為全局變量/函數(shù)功能:延時約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;
35、n<250;n+);/ 函數(shù)功能:流水燈左移/ void led_flow(void)unsigned char i;for(i=0;i<8;i+) /8位控制碼P0=Tabi;delay();/ 函數(shù)功能:主函數(shù)/ void 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<reg51.h> /包含51單片機(jī)存放器定義的頭
36、文件unsigned char code str1 ="Temperature is tested by DS18B20"/C語言中,字符串是作為字符數(shù)組來處理的unsigned char code str2 ="Now temperature is:" /所以,字符串的名字就是字符串的首地址unsigned char code str3 ="The Systerm is designed by Zhang San"unsigned char code str4 ="The date is 2008-9-30"un
37、signed char p =str1,str2,str3,str4; /定義p4為指向4個字符串的字符型指針數(shù)組/ 函數(shù)功能:延時約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/ 函數(shù)功能:流水點亮P0口8位LED/ void led_display(unsigned char x ) /形參必須為指針數(shù)組unsigned char i,j;for(i=0;i<4;i+) /有4個字符串要顯示j=0; /指向待顯字符串的第0號元素while( (xi+j)!='
38、;0') /只要第i個字符串的第j號元素不是結(jié)束標(biāo)志 P0= (xi+j); /取得該元素值送到P0口顯示delay(); /調(diào)用延時函數(shù)j+; /指向下一個元素/ 函數(shù)功能:主函數(shù)/ void main(void)unsigned char i;while(1)for(i=0;i<4;i+)led_display(p); /將指針數(shù)組名作實際參數(shù)傳遞#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件 #include<ctype.h>void main(void)while(1)P3=isalpha('_')0xf0:
39、0x0f;/條件運算,假設(shè)'_'是英文字母,P3=0xf0 *實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件 #include<intrins.h> /包含函數(shù)isalpha聲明的頭文件 / 函數(shù)功能:延時約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/ 函數(shù)功能:主函數(shù)/ void main(void)P3=0xfe; /P3=1111 1110Bwhile(1)P3
40、=_crol_(P3,1);/ 將P3的二進(jìn)制位循環(huán)左移1位后再賦給P3 delay(); /調(diào)用延時函數(shù)#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件 #include<stdlib.h> /包含函數(shù)isalpha聲明的頭文件 / 函數(shù)功能:延時約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/ 函數(shù)功能:主函數(shù)/ void main(void)unsigned char i;while(1)for(i=0;i<10;i+
41、) /產(chǎn)生10個隨機(jī)數(shù)P3=rand()/160; /將產(chǎn)生的隨機(jī)數(shù)縮小160倍后送P3顯示 delay();#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件 #include<string.h> /包含函數(shù)isalpha聲明的頭文件 void main(void)unsigned char str1 ="Now, The temperature is :"unsigned char str2 ="Now, The temperature is 36 Centgrade:" unsigned char i;i
42、=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單片機(jī)存放器定義的頭文件# define F(a,b) (a)+(a) (b)/256+(b) /帶參數(shù)的宏定義,a和b為形參 void main(void)unsigned char i,j,k;i=40;j=30;k=20;P
43、3=F(i,j+k); /i和j+k分別為實參,宏展開時,實參將替代宏定義中的形參while(1);*實例40:宏定義應(yīng)用舉例2#include<AT89X51.h>#include<ctype.h>void main(void)P3_0=0; /將P3.0引腳置低電平,LED點亮P3_1=0; /將P3.0引腳置低電平,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引腳
44、置高電平,LED熄滅 P3_7=1; /將P3.7引腳置高電平,LED熄滅 while(1) ;*實例41:宏定義應(yīng)用舉例3#include<reg51.h> /包含51單片機(jī)存放器定義的頭文件#define MAX 100 /將MAX宏定義為字符串100void main(void)#if MAX>80 /如果字符串100大于80P3=0xf0; /P3口低四位LED點亮#elseP3=0x0f; /否那么,P3口高四位LED點亮#endif /結(jié)束本次編譯/ 中斷、定時器 中斷、定時器中斷、定時器 中斷、定時器 /*實例42:用定時器T0查詢方式P2口8位控制LED閃爍#
45、include<reg51.h> / 包含51單片機(jī)存放器定義的頭文件/函數(shù)功能:主函數(shù)/ void main(void)/ EA=1; /開總中斷/ ET0=1; /定時器T0中斷允許 TMOD=0x01; /使用定時器T0的模式1TH0=(65536-46083)/256; /定時器T0的高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位賦
46、初值 TL0=(65536-46083)%256; /定時器T0的高8位賦初值 *實例43:用定時器T1查詢方式控制單片機(jī)發(fā)出1KHz音頻 #include<reg51.h> / 包含51單片機(jī)存放器定義的頭文件 sbit sound=P37/ 函數(shù)功能:主函數(shù)/ void main(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;w
47、hile(1)/無限循環(huán)等待查詢while(TF1=0);TF1=0;sTH1=(65536-921)/256; /定時器T0的高8位賦初值 TL1=(65536-921)%256; /定時器T0的高8位賦初值 / 函數(shù)功能:主函數(shù)/ void main(void)/ EA=1; /開總中斷/ ET0=1; /定時器T0中斷允許 TMOD=0x02; /使用定時器T0的模式2TH0=256-156; /定時器T0的高8位賦初值TL0=256-156; /定時器T0的高8位賦初值TR0=1; /啟動定時器T0while(1)/無限循環(huán)等待查詢while(TF0=0) /如果未計滿就等待if(S=
48、0) /按鍵S按下接地,電平為0P1=TL0; /計數(shù)器TL0加1后送P1口顯示TF0=0; /計數(shù)器溢出后,將TF0清0*實例45:用定時器T0的中斷控制1位LED閃爍 #include<reg51.h> / 包含51單片機(jī)存放器定義的頭文件/ 函數(shù)功能:主函數(shù)/ void main(void)EA=1; /開總中斷ET0=1; /定時器T0中斷允許TMOD=0x01; /使用定時器T0的模式2TH0=(65536-46083)/256; /定時器T0的高8位賦初值TL0=(65536-46083)%256; /定時器T0的高8位賦初值TR0=1; /啟動定時器T0while(1
49、)/無限循環(huán)等待中斷;/ 函數(shù)功能:定時器T0的中斷效勞程序/ void Time0(void) interrupt 1 using 0 /“interrupt聲明函數(shù)為中斷效勞函數(shù) /其后的1為定時器T0的中斷編號;0表示使用第0組工作存放器TH0=(65536-46083)/256; /定時器T0的高8位重新賦初值TL0=(65536-46083)%256; /定時器T0的高8位重新賦初值*實例46:用定時器T0的中斷實現(xiàn)長時間定時#include<reg51.h> / 包含51單片機(jī)存放器定義的頭文件unsigned char Countor; /設(shè)置全局變量,儲存定時器T0
50、中斷次數(shù)/ 函數(shù)功能:主函數(shù)/ void main(void)EA=1; /開總中斷ET0=1; /定時器T0中斷允許TMOD=0x01; /使用定時器T0的模式2TH0=(65536-46083)/256; /定時器T0的高8位賦初值TL0=(65536-46083)%256; /定時器T0的高8位賦初值TR0=1; /啟動定時器T0Countor=0; /從0開始累計中斷次數(shù)while(1)/無限循環(huán)等待中斷;/ 函數(shù)功能:定時器T0的中斷效勞程序/ void Time0(void) interrupt 1 using 0 /“interrupt聲明函數(shù)為中斷效勞函數(shù)/其后的1為定時器T0
51、的中斷編號;0表示使用第0組工作存放器Countor+; /中斷次數(shù)自加1if(Countor=20) /假設(shè)累計滿20次,即計時滿1sCountor=0; /將Countor清0,重新從0開始計數(shù)TH0=(65536-46083)/256; /定時器T0的高8位重新賦初值TL0=(65536-46083)%256; /定時器T0的高8位重新賦初值*實例47:用定時器T1中斷控制兩個LED以不同周期閃爍 #include<reg51.h> / 包含51單片機(jī)存放器定義的頭文件sbit D1=P20; /將Dunsigned char Countor1; /設(shè)置全局變量,儲存定時器T
52、1中斷次數(shù)unsigned char Countor2; /設(shè)置全局變量,儲存定時器T1中斷次數(shù)/ 函數(shù)功能:主函數(shù)/ void main(void)EA=1; /開總中斷ET1=1; /定時器T1中斷允許TMOD=0x10; /使用定時器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的中斷效勞程序/ vo
53、id Time1(void) interrupt 3 using 0 /“interrupt聲明函數(shù)為中斷效勞函數(shù) /其后的3為定時器T1的中斷編號;0表示使用第0組工作存放器Countor1+; /Countor1自加1Countor2+; /Countor2自加1if(Countor1=2) /假設(shè)累計滿2次,即計時滿100msD1=D1; /按位取反操作,將P2.0引腳輸出電平取反 Countor1=0; /將Countor1清0,重新從0開始計數(shù)if(Countor2=8) /假設(shè)累計滿8次,即計時滿400msD2=D2; /按位取反操作,將P2.1引腳輸出電平取反 Countor2=0; /將Countor1清0,重新從0開始計數(shù)TH1=(65536-46083)/256; /定時器T1的高8位重新賦初值TL1=(65536-46083)%256; /定時器T1的高8位重新賦初值*實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 集成吊頂合同范例范例
- 工廠清包合同范例
- 廠家代購合同范例
- 石材清洗工程合同范例
- 礦山鉆探合同范例
- 配套件采購合同范例
- 公司分賬合同范例
- 辦公樓廣告合同范例
- 湖南清洗空調(diào)合同范例
- 環(huán)保行業(yè)oem合同范例
- GB/T 26470-2011架橋機(jī)通用技術(shù)條件
- 橫版介紹信(帶存根打印版)
- 胃脘痛中醫(yī)護(hù)理方案-課件
- 《大學(xué)生職業(yè)發(fā)展與就業(yè)指導(dǎo)》第二章自我認(rèn)知
- 氣壓治療儀的使用方法課件
- 最新營銷中心物業(yè)服務(wù)可視化操作指引說明詳解新實用手冊
- 食材配送投標(biāo)服務(wù)方案
- 排污許可證守法承諾書(2篇)
- 矩形頂管施工方案28
- 液壓轉(zhuǎn)向器廠總平面布置課程設(shè)計
- 說明性語段的壓縮(課堂PPT)
評論
0/150
提交評論