單片機(jī)編程100例_第1頁(yè)
單片機(jī)編程100例_第2頁(yè)
單片機(jī)編程100例_第3頁(yè)
單片機(jī)編程100例_第4頁(yè)
單片機(jī)編程100例_第5頁(yè)
已閱讀5頁(yè),還剩134頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、文檔來(lái)源為:從網(wǎng)絡(luò)收集整理.word版本可編輯.歡迎下載支持.單片機(jī)編程實(shí)例100例大全單片機(jī)編程實(shí)例*實(shí)例1:使用P3 口流水點(diǎn)亮8位LED#include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)一段時(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; / 第一個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)P3=0xfd; / 第二個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)P3=0xfb

2、; / 第三個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)P3=0x億第四個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)P3=0xef; / 第五個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)P3=0xdf; / 第六個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)P3=0xbf; / 第七個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)P3=0x7f; / 第八個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù) / /*實(shí)例2:通過(guò)對(duì)P3 口地址的操作流水點(diǎn)亮8位LED#include<reg51.h> /包含單片機(jī)寄存器的頭文件sfr x=0xb0; /P3 口在存儲(chǔ)器中的地址是 b0H,通過(guò)sfr可定義8051 內(nèi)核單片機(jī)/的所有

3、內(nèi)部8位特殊功能寄存器,對(duì)地址x的操作也就是對(duì)P1 口的 操作/函數(shù)功能:延時(shí)一段時(shí)間void delay(void)unsigned char i,j;for(i=0;i<250;i+)for(j=0;j<250;j+);/利用循環(huán)等待若干機(jī)器周期,從而延時(shí)一段時(shí)間/函數(shù)功能:主函數(shù)/void main(void)while(1)x=0xfe; 第一個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)x=0xfd; 第二個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)x=0xfb; / 第三個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)x=0x億第四個(gè)燈亮delay(); / 調(diào)用延時(shí)函數(shù)x=0xef;

4、第五個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)x=0xdf; 第六個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)x=0xbf; 第七個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)x=0x7f; / 第八個(gè)燈亮delay(); /調(diào)用延時(shí)函數(shù)*實(shí)例3:用不同數(shù)據(jù)類型控制燈閃爍時(shí)間#include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:用整形數(shù)據(jù)延時(shí)一段時(shí)間/void int_delay(void) 延時(shí)一段較長(zhǎng)的時(shí)間unsigned int m; /定義無(wú)符號(hào)整形變量,雙字節(jié)數(shù)據(jù),值域?yàn)?65535 for(m=0;m<36000;m+);/空操作/函數(shù)功能:用字符型數(shù)據(jù)延時(shí)一段

5、時(shí)間/void char_delay(void) /延時(shí)一段較短的時(shí)間unsigned char i,j; 定義無(wú)符號(hào)字符型變量,單字節(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+)P1=0xfe;/P1.0 口的燈點(diǎn)亮int_delay(); 延時(shí)一段較長(zhǎng)的時(shí)間P1=0xff; / 熄滅int_delay(); 延時(shí)一段較長(zhǎng)的時(shí)間for(i=0;i<3;i+)P1=0xef;/P1.4口的燈

6、點(diǎn)亮char_delay(); /延時(shí)一段較長(zhǎng)的時(shí)間 P1=0xff; / 熄滅char_delay(); /延時(shí)一段較長(zhǎng)的時(shí)間 # 實(shí)例4:用單片機(jī)控制第一個(gè)燈亮# include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件void main(void)P1=0xfe; P1=1111 1110B ,即 P1.0 輸出低電平# 實(shí)例5:用單片機(jī)控制一個(gè)燈閃爍:認(rèn)識(shí)單片機(jī)的工作頻率# include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)一段時(shí)間/void delay(void) /兩個(gè)void意思分別為無(wú)需返回值,沒(méi)有參數(shù)傳遞for(

7、i=0;i<20000;i+) unsigned int i; /定義無(wú)符號(hào)整數(shù),最大取值范圍65535做20000次空循環(huán);/什么也不做,等待一個(gè)機(jī)器周期/函數(shù)功能:主函數(shù)(C語(yǔ)言規(guī)定必須有也只能有1個(gè)主函數(shù))/void main(void)while(1) 無(wú)限循環(huán)P1=0xfe;/P1=1111 1110B , P1.0 輸出低電平delay(); 延時(shí)一段時(shí)間P1=0xff; /P1 = 1111 1111B, P1.0 輸出高電平delay(); /延時(shí)一段時(shí)間*實(shí)例6:將P1 口狀態(tài)分別送入 P0、P2、P3 口:認(rèn)識(shí)I/O 口的引腳功能#include<reg51.h

8、> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:主函數(shù)(C語(yǔ)言規(guī)定必須有也只能有1個(gè)主函數(shù))/void main(void)while(1) 無(wú)限循環(huán)P1=0xff; / P1 = 1111 1111B, 熄滅 LEDP0=P1; 將P1 口狀態(tài)送入 P0 口P2=P1; 將P1 口狀態(tài)送入 P2 口P3=P1; 將P1 口狀態(tài)送入 P3 口* 實(shí)例7:用P0 口、P1 口分別顯示加法和減法運(yùn)算結(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

9、=60P1=m+n;P1=103=0110 0111B,結(jié)果 P1.3、P1.4、P1.7 口的燈被點(diǎn)亮 P0=n-m; P0=17=0001 0001B,結(jié)果 P0.0、P0.4 的燈被熄滅* 實(shí)例8:用PR P1 口顯示乘法運(yùn)算結(jié)果* include<reg51.h> /包含單片機(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

10、 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; / 高 8 位送 P1 口,P1 = 17=11H=0001O001B, P1.0 和 P1.4 口滅,其余亮P0=s%256; 低 8 位送 P0 口,P3=192=c0H=11000000B,P3.1,P3.6,P3.7 口滅,其余亮* 實(shí)例9:用P1、P0 口顯示除法運(yùn)算結(jié)果* in

11、clude<reg51.h> /包含單片機(jī)寄存器的頭文件void main(void)P1=36/5; 求整數(shù)P0=(36%5) 10)/5; / 求小數(shù)while(1);/無(wú)限循環(huán)防止程序“跑飛”*實(shí)例10:用自增運(yùn)算控制P0 口 8位LEDf水花樣#include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)一段時(shí)間/void 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+)/

12、 注意i的值不能超過(guò)255P0=i; 將i的值送P0 口delay(); /調(diào)用延時(shí)函數(shù)*實(shí)例11:用P0 口顯示邏輯"與"運(yùn)算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件 void main(void)P0=(4>0)&&(9>0xab);將邏輯運(yùn)算結(jié)果送P0 口while(1);/設(shè)置無(wú)限循環(huán),防止程序“跑飛”* 實(shí)例12:用P0 口顯示條件運(yùn)算結(jié)果* include<reg51.h> /包含單片機(jī)寄存器的頭文件 voidmain(void)P0=(8>4)?8:4; 將條件運(yùn)算結(jié)果送 P0

13、 口,P0=8=0000 1000Bwhile(1);/設(shè)置無(wú)限循環(huán),防止程序“跑飛”* 實(shí)例13:用P0 口顯示按位"異或"運(yùn)算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件 void main(void)P0=0xa2八0x3c;/ 將條件運(yùn)算結(jié)果送 P0 口,P0=8=0000 1000Bwhile(1);/設(shè)置無(wú)限循環(huán),防止程序“跑飛”* 實(shí)例16:用P0顯示左移運(yùn)算結(jié)果* include<reg51.h> /包含單片機(jī)寄存器的頭文件 voidmain(void)P0=0x3b<<2; 將左移運(yùn)算結(jié)果送 P0

14、口,P0=1110 1100B=0xecwhile(1);/無(wú)限循環(huán),防止程序“跑飛”* 實(shí)例17:“萬(wàn)能邏輯電路”實(shí)驗(yàn)* include<reg51.h> /包含單片機(jī)寄存器的頭文件sbit F=P1A4; / 將 F 位定義為 P1.4sbit X=P1A5; 將 X位定義為 P1.5sbit Y=P1A6; 將 Y位定義為 P1.6sbit Z=P1A7; 將 Z 位定義為 P1.7void main(void)while(1)F=(X)&Y)|Z; /將邏輯運(yùn)算結(jié)果賦給F;*實(shí)例18:用右移運(yùn)算流水點(diǎn)亮 P1 口 8位LED#include<reg51.h&g

15、t; /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)一段時(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;for(i=0;i<8;i+)delay();設(shè)置循環(huán)次數(shù)為8P1=P1>>1; 每次循環(huán)P1的各二進(jìn)位右移1位,高位補(bǔ)0 delay();/調(diào)用延時(shí)函數(shù)*實(shí)例19:用if語(yǔ)句控制P0 口 8位LED的流水方向#include<reg51.h> /包含單片機(jī)寄存器的頭文件sbit S1=P

16、1A4; /將 S1 位定義為 P1.4sbit S2=P1A5;/ 將 S2 位定義為 P1.5/函數(shù)功能:主函數(shù)/void main(void)while(1) if(S1=0) 如果按鍵S1按下P0=0x0f;/P0 口高四位LED點(diǎn)亮 if(S2=0) /如果按鍵S2按下P0=0xf0; /P0 口低四位LED點(diǎn)亮*實(shí)例20:用swtich語(yǔ)句的控制P0口 8位LED的點(diǎn)亮狀態(tài)#include<reg51.h> /包含單片機(jī)寄存器的頭文件sbit S1=P1A4;/ 將 S1 位定義為 P1.4/函數(shù)功能:延時(shí)一段時(shí)間/void delay(void)unsigned in

17、t n;for(n=0;n<10000;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;i=0; / 將i初始化為0while(1)if(S1=0)/ 如果S1鍵按下delay(); 延時(shí)一段時(shí)間if(S1=0) 如果再次檢測(cè)到S1鍵按下i+;/i 自增 1if(i=9) / 如果i=9 ,重新將其置為1 i=1;switch使用多分支選擇語(yǔ)句 case 1: P0=0xfe; 第一個(gè) LED亮 break; case 2: P0=0xfd; 第二個(gè) LED亮 break; case 3:P0=0xfb; / 第三個(gè) LED亮 break; ca

18、se 4:P0=0xf7; / 第四個(gè) LED亮 break; case 5:P0=0xef; / 第 五個(gè) LED亮 break; case 6:P0=0xdf; / 第六個(gè) LED亮 break; case 7:P0=0xbf; / 第七個(gè) LED亮 break; case 8:P0=0x7f; / 第八個(gè) LED 亮 break; default: / 缺省值,關(guān)閉所有 LED P0=0xff; *實(shí)例21:用for語(yǔ)句控制蜂鳴器鳴笛次數(shù)#include<reg51.h> /包含單片機(jī)寄存器的頭文件 sbitsound=P3A7;/將sound位定義為P3.7 /函數(shù)功能:延

19、時(shí)形成 1600Hz音頻/ void delay1600(void) unsigned char n;for(n=0;n<100;n+)/函數(shù)功能:延時(shí)形成800Hz音頻/ 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+)sou

20、nd=0;/P3.7輸出低電平 delay800();sound=1;/P3.7輸出高電平 delay800();# 實(shí)例22:用while語(yǔ)句控制LED# include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)約 60ms (3 100 200=6000 0 s) / 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) /無(wú)限循環(huán)i=0; / 將i初始化為

21、0while(i<0xff) / 當(dāng)i小于0xff (255)時(shí)執(zhí)行循環(huán)體P0=i; 將i送P0 口顯示delay60ms(); /延時(shí)i+; /i 自增 1# 實(shí)例23:用do-while 語(yǔ)句控制P0 口 8位LE斑水點(diǎn)亮# include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)約 60ms (3 100 200=60000 s)/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=0xf

22、e; / 第一個(gè) LED亮delay60ms();P0=0xfd; 第二個(gè) LED亮 delay60ms(); P0=0xfb; /第三個(gè) LED亮 delay60ms();P0=0xf7; / 第四個(gè) LED亮 delay60ms(); P0=0xef;/ 第五個(gè) LED亮 delay60ms(); P0=0xdf; 第六個(gè) LED亮delay60ms(); delay60ms(); P0=0xbf; 第七個(gè) LED亮delay60ms(); P0=0x7f; / 第八個(gè) LED亮 delay60ms(); while(1);/無(wú)限循環(huán),使8位LED1環(huán)流水點(diǎn)亮*實(shí)例24:用字符型數(shù)組控制P

23、0 口 8位LED流水點(diǎn)亮#include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)約 60ms (3 100 200=60000 s)/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;unsigned char code定義無(wú)Tab =0xfe,0xfd,0xfb,0x億0xef,0xdf,0xbf,0x7f); /符號(hào)字符型數(shù)組while(1)for(i=0;i<

24、8;i+)P0=Tabi;/依次引用數(shù)組元素,并將其送P0 口顯示delay60ms();/ 調(diào)用延時(shí)函數(shù)*實(shí)例25:用P0 口顯示字符串常量#include<reg51.h> /包含單片機(jī)寄存器的頭文件/函數(shù)功能:延時(shí)約 150ms (3 200 250=150 000 ps=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

25、:>將字符串賦給字符型全部元素賦值unsigned char i;while(1)i=0; /將i初始化為0,從第一個(gè)元素開始顯示while(stri!='0') /只要沒(méi)有顯示到結(jié)束標(biāo)志'0'P0=stri;/ 將第i個(gè)字符送到P0 口顯示delay150ms();/調(diào)用 150ms 延時(shí)函數(shù)i+; /指向下一個(gè)待顯字符*實(shí)例26:用P0 口顯示指針運(yùn)算結(jié)果#include<reg51.h>void main(void)unsigned char p1, p2; 定義無(wú)符號(hào)字符型指針變量 p1,p2unsigned char i,j; 定義無(wú)

26、符號(hào)字符型數(shù)據(jù)i=25; / 給i賦初值25j=15;p1=&i;/使指針變量指向i ,對(duì)指針初始化p2=&j;/使指針變量指向j ,對(duì)指針初始化P0= p1+ p2; / p1+ p2 相當(dāng)于 i+j,所以 P0=25+15=40=0x28/則P0=0010 1000B,結(jié)果P0.3、P0.5引腳LED熄滅,其余點(diǎn)亮 while(1);/無(wú)限循環(huán),防止程序“跑飛”*實(shí)例27:用指針數(shù)組控制P0 口 8位LEDf水點(diǎn)亮#include<reg51.h>/函數(shù)功能:延時(shí)約 150ms (3 200 250=150 000 ps=150ms/void delay150m

27、s(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char codeTab尸0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f);unsigned charp =&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5, &Tab6,&Tab7;unsigned char i; 定義無(wú)符號(hào)字符型數(shù)據(jù)while(1)for(i=0;i<8

28、;i+)P0= pi;delay150ms();*實(shí)例28:用數(shù)組的指針控制P0 口 8位LED流水點(diǎn)亮#include<reg51.h>/函數(shù)功能:延時(shí)約 150ms (3 200 250=150 000 s=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 charTab =0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7

29、F,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;/ 流水燈控制碼unsigned char p; 定義無(wú)符號(hào)字符型指針p=Tab;/將數(shù)組首地址存入指針pwhile(1)for(i=0;i<32;i+) /共32個(gè)流水燈控制碼P0= (p+i); (p+i)的值等于 aidelay150ms();/調(diào)用 150ms延時(shí)函數(shù) *

30、實(shí)例29:用P0、P1 口顯示整型函數(shù)返回值 #include<reg51.h>/函數(shù)功能:計(jì)算兩個(gè)無(wú)符號(hào)整數(shù)的和/ unsigned int sum(int a,int b)unsigned int s;s=a+b;return (s);/函數(shù)功能:主函數(shù)/ void main(void)unsigned z;z=sum(2008,2009);P1=z/256; / 取得z的高8位P0=z%256; 取得z的低8位while(1);*實(shí)例30:用有參函數(shù)控制P0D 8位LED克水速度 #include<reg51.h>/函數(shù)功能:延時(shí)一段時(shí)間/ void delay(

31、unsigned char x)unsigned char m,n;for(m=0;m<x;m+)for(n=0;n<200;n+);/函數(shù)功能:主函數(shù)/void main(void)unsigned char i;unsigned char codeTab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; / 流水燈控制碼while(1)/快速流水點(diǎn)亮LEDfor(i=0;i<8;i+) / 共8個(gè)流水燈控制碼P0=Tabi;delay(100); / 延時(shí)約 60ms, (3 100 200=60 000 s) /慢速流水點(diǎn)亮LEDfor

32、(i=0;i<8;i+) / 共8個(gè)流水燈控制碼P0=Tabi;delay(250); / 延時(shí)約 150ms, (3 250 200=150 000 s) *實(shí)例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣#include<reg51.h>/函數(shù)功能:延時(shí)約150ms/void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);函數(shù)功能:流水點(diǎn)亮 P0 口 8位LED/void led_flow(unsigned char a8)unsigned char i;for(i=0;i<8;i+

33、)P0=ai;delay();/函數(shù)功能:主函數(shù)/void main(void)unsigned char codeTab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F; / 流水燈控制碼led_flow(Tab);*實(shí)例32:用指針作函數(shù)參數(shù)控制 P0 口 8位LED流水點(diǎn)亮#include<reg51.h>/函數(shù)功能:延時(shí)約150ms/void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:流水點(diǎn)亮 P0 口 8位LED/void led

34、_flow(unsigned char p) 形參為無(wú)符號(hào)字符型指針unsigned char i;while(1)i=0; /將i置為0,指向數(shù)組第一個(gè)元素while( (p+i)!='0') /只要沒(méi)有指向數(shù)組的結(jié)束標(biāo)志P0= (p+i);/ 取的指針?biāo)缸兞?數(shù)組元素)的值,送P0口 delay();/調(diào)用延時(shí)函數(shù)i+; /指向下一個(gè)數(shù)組元素/函數(shù)功能:主函數(shù)/void main(void)unsigned char codeTab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0x7F,0xBF,0xDF,0xEF,0xF7,0xFB

35、,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;/流水燈控制碼unsigned char pointer;pointer=Tab;led_flow(pointer);*實(shí)例33:用函數(shù)型指針控制P1 口燈花樣#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件unsigned char codeTab尸0xFE,0xFD,0xFB,0xF7,0xEF

36、,0xDF,0xBF,0x7F; /流水燈控制碼,該數(shù)組被定義為全局變量/函數(shù)功能:延時(shí)約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;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ù)無(wú)參數(shù),無(wú)返回值p=led_flow; 將函數(shù)的入口地址賦

37、給函數(shù)型指針pwhile(1)(p)(); 通過(guò)函數(shù)的指針p調(diào)用函數(shù)led_flow ()*實(shí)例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個(gè)字符串#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件unsigned char code str1 ="Temperature is tested byDS18B20"/C語(yǔ)言中,字符串是作為字符數(shù)組來(lái)處理的unsigned char code str2 ="Now temperature is:" /所以,字符串的名字就是字符串的首地址unsigned char code str3

38、="The Systerm is designed by ZhangSan"unsigned char code str4 ="The date is 2008-9-30”;unsigned char p =str1,str2,str3,str4; 定義 p4為指向4個(gè)字符串的字符型指針數(shù)組/函數(shù)功能:延時(shí)約150ms/ void delay(void)unsigned char m,n;for(m=0;m<200;m+)for(n=0;n<250;n+);/函數(shù)功能:流水點(diǎn)亮P0 口 8位LED/ void led_display(unsigned

39、char x ) /形參必須為指針數(shù)組unsigned char i,j;for(i=0;i<4;i+) / 有4個(gè)字符串要顯示j=0; 指向待顯字符串的第0號(hào)元素while( (xi+j)!='0') 只要第i個(gè)字符串的第j號(hào)元素不是結(jié)束標(biāo)志P0= (xi+j); 取得該元素值送到P0 口顯示delay(); /調(diào)用延時(shí)函數(shù)j+; 指向下一個(gè)元素/函數(shù)功能:主函數(shù)/ void main(void)unsigned char i;while(1)for(i=0;i<4;i+)led_display(p); /將指針數(shù)組名作實(shí)際參數(shù)傳遞* 實(shí)例35:字符函數(shù)ctype

40、.h應(yīng)用舉例#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件#include<ctype.h>void main(void)while(1)P3=isalpha('_')?0xf0:0x0f;條件運(yùn)算,若'_'是英文字母,P3=0xf0 * 實(shí)例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件#include<intrins.h> / 包含函數(shù)isalpha ()聲明的頭文件/函數(shù)功能:延時(shí)約150ms/ void delay(

41、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=_crol_(P3,1);將P3的二進(jìn)制位循環(huán)左移1位后再賦給P3delay(); /調(diào)用延時(shí)函數(shù)* 實(shí)例37:標(biāo)準(zhǔn)函數(shù)stdlib.h應(yīng)用舉例#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件#include<stdlib.h> /包含函數(shù)isalpha ()聲明的頭文件/函數(shù) 功能:延時(shí)約150ms/

42、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+) 產(chǎn)生 10 個(gè)隨機(jī)數(shù)P3=rand()/160;/將產(chǎn)生的隨機(jī)數(shù)縮小160倍后送P3顯示delay();*實(shí)例38:字符串函數(shù)string.h 應(yīng)用舉例#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件#include<string.h> 包含函數(shù) isalph

43、a ()聲明的頭文件 voidmain(void)unsigned char str1 ="Now, The temperature is :"unsigned char str2 ="Now, The temperature is 36 Centgrade:"unsigned char i;i=strcmp(str1,str2); 比較兩個(gè)字符串,并將結(jié)果存入 iif(i=0) /str1=str2P3=0x00;elseif(i<0)/str1<str2P3=0xf0;else /str1>str2P3=0x0f;while(1);

44、/防止程序“跑飛”*實(shí)例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;P3=F(i,j+k);/i 和j+k分別為實(shí)參,宏展開時(shí),實(shí)參將替代宏定義中的形參while(1);*實(shí)例40:宏定義應(yīng)用舉例2#include<AT89X51.h>#include<ctype.h>void main(void)P3_0

45、=0; /將P3.0引腳置低電平,LED點(diǎn)亮P3_1=0; /將P3.0引腳置低電平,LED點(diǎn)亮P3_2=0; /將P3.0引腳置低電平,LED點(diǎn)亮P3_3=0; /將P3.0引腳置低電平,LED點(diǎn)亮P3_4=1; /將P3.4引腳置高電平,LED熄滅P3_5=1; /將P3.5引腳置高電平,LED熄滅P3_6=1; / 將P3.7引腳置高電平,LEW息滅P3_7=1; /將P3.7引腳置高電平,LED熄滅 while(1);*實(shí)例41:宏定義應(yīng)用舉例3#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件#define MAX 100 / 將 MAXg定義為字符

46、串 100void main(void)#if MAX>80 /如果字符串100大于80P3=0xf0; P3口低四位LED點(diǎn)亮#elseP3=0x0f;/ 否則,P3 口高四位LED點(diǎn)亮#endif / 結(jié)束本次編譯/中斷、定時(shí)器中斷、定時(shí)器中斷、定時(shí)器中斷、定時(shí)器/*實(shí)例42:用定時(shí)器T0查詢方式P2 口 8位控制LED閃爍#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件/函數(shù)功能:主函數(shù)/ void main(void)/ EA=1;/ 開總中斷/ ET0=1; / 定時(shí)器T0中斷允許TMOD=0x01; 使用定時(shí)器T0的模式1TH0=(6553

47、6-46083)/256; 定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; 定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0TF0=0;P2=0xff;while(1) 無(wú)限循環(huán)等待查詢while(TF0=0);TF0=0;P2=P2;TH0=(65536-46083)/256; 定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; 定時(shí)器T0的高8位賦初值*實(shí)例43:用定時(shí)器T1查詢方式控制單片機(jī)發(fā)出1KHz音頻#include<reg51.h> /包含51單片機(jī)寄存器定義的頭文件 sbitsound=P3A7;/ 將 sound 位定

48、義為 P3.7 引腳/函數(shù)功能:主函數(shù)/ void main(void)/ EA=1;/ 開總中斷/ ET0=1; / 定時(shí)器T0中斷允許TMOD=0x10; /使用定時(shí)器T1的模式1TH1=(65536-921)/256; 定時(shí)器T1的高8位賦初值TL1=(65536-921)%256; /定時(shí)器T1的高8位賦初值TR1 = 1; /啟動(dòng)定時(shí)器T1TF1=0;while(1) 無(wú)限循環(huán)等待查詢while(TF1=0);TF1=0;sound=sound; /將P3.7引腳輸出電平取反TH1=(65536-921)/256; 定時(shí)器T0的高8位賦初值TL1=(65536-921)%256; /

49、定時(shí)器T0的高8位賦初值*實(shí)例44:將計(jì)數(shù)器T0計(jì)數(shù)的結(jié)果送P1 口 8位LED顯示#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件 sbitS=P3八4;/將S位定義為P3.4引腳/函數(shù)功能:主函數(shù)/ void main(void) / EA=1;/開總中斷/ ET0=1; / 定時(shí)器T0中斷允許TMOD=0x02; /使用定時(shí)器T0的模式2TH0=256-156; /定時(shí)器T0的高8位賦初值TL0=256-156; 定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0while(1) 無(wú)限循環(huán)等待查詢while(TF0=0) 如果未計(jì)滿就等待if(S=

50、0) 按鍵S按下接地,電平為0P1=TL0; /計(jì)數(shù)器TL0力口 1后送P1 口顯示TF0=0; 計(jì)數(shù)器溢出后,將TF0清0*實(shí)例45:用定時(shí)器T0的中斷控制1位LED閃爍#include<reg51.h>/包含51單片機(jī)寄存器定義的頭文件sbit D1=P2八0;/將D1位定義為P2.0引腳/函數(shù)功能:主函數(shù)/ void main(void)EA=1;/開總中斷ET0=1; 定時(shí)器T0中斷允許TMOD=0x01; 使用定時(shí)器T0的模式2TH0=(65536-46083)/256; 定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; 定時(shí)器T0的高8位賦初值TR0

51、=1; /啟動(dòng)定時(shí)器T0 while(1)/ 無(wú)限循環(huán)等待中斷 ; /函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序/ void TimeO(void) interrupt 1 using 0 /“interrupt ”聲明函數(shù)為中斷服務(wù)函數(shù)其后的1為定時(shí)器T0的中斷編號(hào);0表示使 用第0組工作寄存器 D1=D1;/按位取反操作,將P2.0引腳輸出電平取反TH0=(65536-46083)/256; 定時(shí)器T0的高8位重新賦初值TL0=(65536-46083)%256; 定時(shí)器T0的高8位重新賦初值 *實(shí)例46:用定時(shí)器T0的中斷實(shí)現(xiàn)長(zhǎng)時(shí)間定時(shí)#include<reg51.h> / 包含51

52、單片機(jī)寄存器定義的頭文件sbit D1=P2八0;/將D1位定義為P2.0引腳unsigned char Counter; /設(shè)置全局變量,儲(chǔ)存定時(shí)器 T0中斷次數(shù)/函數(shù)功能:主函數(shù)/ void main(void)EA=1;/開總中斷ET0=1; 定時(shí)器T0中斷允許TMOD=0x01; 使用定時(shí)器T0的模式2TH0=(65536-46083)/256; 定時(shí)器T0的高8位賦初值TL0=(65536-46083)%256; 定時(shí)器T0的高8位賦初值TR0=1; /啟動(dòng)定時(shí)器T0Countor=0; 從0開始累計(jì)中斷次數(shù)while(1)/ 無(wú)限循環(huán)等待中斷;/函數(shù)功能:定時(shí)器T0的中斷服務(wù)程序/ void Time0(void) interrupt 1 using 0 /“interrupt ”聲明函數(shù)為中斷服務(wù)函數(shù)/其后的1為定時(shí)器T0的中斷編號(hào);0表示使用第0組工作寄存器 Countor+;/中斷次數(shù)自加1if(Countor=20)/若累計(jì)滿20次,即計(jì)時(shí)滿1sD1=D1;/按位取反操作,將P2.0引腳輸出電平取反Countor=0; / 將Countor清0,重新從0開始計(jì)數(shù) TH0=(65536-46083)/256; 定時(shí)器T0的高8位重新賦初值TL0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論