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

下載本文檔

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

文檔簡介

目錄

實例3:用單片機控制第一個燈亮.........................................3

實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率.................3

實例5:將P1口狀態(tài)分別送入PO、P2、P3□:認識I/O口的引腳功能.....4

實例6:使用P3口流水點亮8位LED....................................4

實例7:通過對P3□地址的操作流水點亮8位LED........................5

實例8:用不同數(shù)據(jù)類型控制燈閃爍時間...................................6

實例9:用P0口、P1□分別顯示加法和減法運算結(jié)果.....................8

實例10:用P0、P1口顯示乘法運算結(jié)果...................................8

實例11:用P1、P0口顯示除法運算結(jié)果..................................9

實例12:用自增運算控制P0口8位LED流水花樣..........................9

實例13:用P0□顯示邏輯"與"運算結(jié)果..................................10

實例14:用P0口顯示條件運算結(jié)果......................................10

實例15:用P0□顯示按位"異或"運算結(jié)果................................10

實例16:用P0顯示左移運算結(jié)果........................................10

實例17:"萬能邏輯電路"實驗...........................................11

實例18:用右移運算流水點亮P1口8位LED............................11

實例19:用if語句控制P0口8位LED的流水方向........................12

實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài).................12

實例21:用for語句控制蜂鳴器鳴笛次數(shù)................................14

實例22:用whiIe語句控制LED.......................................15

實例23:用do-whiIe語句控制P0口8位LED流水點亮...................16

實例24:用字符型數(shù)組控制P0口8位LED流水點亮.......................16

實例25:用P0□顯示字符串常量.......................................17

實例26:用P0口顯示指針運算結(jié)果......................................18

實例27:用指針數(shù)組控制P0口8位LED流水點亮.........................18

實例28:用數(shù)組的指針控制P0口8位LED流水點亮......................19

實例29:用P0、P1□顯示整型函數(shù)返回值..............................20

實例30:用有參函數(shù)控制P0口8位LED流水速度.........................21

實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣................................22

實例32:用指針作函數(shù)參數(shù)控制P0口8位LED流水點亮..................23

實例33:用函數(shù)型指針控制P1□燈花樣.................................24

實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串.....................25

實例35:字符函數(shù)ctype.h應(yīng)用舉例.....................................26

實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例...................................27

實例37:標準函數(shù)stdIib.h應(yīng)用舉例....................................27

實例38:字符串函數(shù)string,h應(yīng)用舉例.................................28

實例39:宏定義應(yīng)用舉例2...........................................28

實例40:宏定義應(yīng)用舉例2...........................................29

實例41:宏定義應(yīng)用舉例3...........................................29

實例42:用定時器T0查詢方式P2口8位控制LED閃爍...................30

實例43:用定時器T1查詢方式控制單片機發(fā)出1KHz音頻.................31

實例44:將計數(shù)器T0計數(shù)的結(jié)果送P1口8位LED顯示...................31

實例45:用定時器TO的中斷控制1位LED閃爍...........................32

實例46:用定時器TO的中斷實現(xiàn)長時間定時.............................33

實例47:用定時器T1中斷控制兩個LED以不同周期閃爍..................34

實例48:用計數(shù)器T1的中斷控制蜂鳴器發(fā)出1KHz音頻...................35

實例49:用定時器TO的中斷實現(xiàn)"渴望"主題曲的播放....................35

實例50-1:輸出50個矩形脈沖..........................................38

實例50-2:計數(shù)器T0統(tǒng)計外部脈沖數(shù)....................................39

實例51-2:定時器T0的模式2測量正脈沖寬度...........................40

實例52:用定時器T0控制輸出高低寬度不同的矩形波....................40

實例53:用外中斷0的中斷方式進行數(shù)據(jù)采集............................41

實例547:榆出負脈寬為200微秒的方波................................42

實例54-2:測量負脈沖寬度.............................................43

實例55:方式0控制流水燈循環(huán)點亮.....................................44

實例56-1:數(shù)據(jù)發(fā)送程序................................................45

實例56-2:數(shù)據(jù)接妝程序................................................46

實例57-1:數(shù)據(jù)發(fā)送程序................................................47

實例57-2:數(shù)據(jù)接收程序................................................48

實例58:單片機向PC發(fā)送數(shù)據(jù)..........................................49

實例59:單片機接收PC發(fā)出的數(shù)據(jù)......................................50

實例60:用LED數(shù)碼顯示數(shù)字5.......................................51

實例61:用LED數(shù)碼顯示器循環(huán)顯示數(shù)字。?9...........................51

實例62:用數(shù)碼管慢速動態(tài)掃描顯示數(shù)字"1234”........................52

實例63:用LED數(shù)碼顯示器偽靜態(tài)顯示數(shù)字1234.......................53

實例64:用數(shù)碼管顯示動態(tài)檢測結(jié)果.....................................54

實例65:數(shù)碼秒表設(shè)計..................................................56

實例66:數(shù)碼時鐘設(shè)計..................................................57

實例67:用LED數(shù)碼管顯示計數(shù)器T0的計數(shù)值...........................61

實例68:靜態(tài)顯示數(shù)字“59”........................................62

實例69:無軟件消抖的獨立式鍵盤輸入實驗..............................63

實例70:軟件消抖的獨立式鍵盤輸入實驗................................63

實例71:CPU控制的獨立式鍵盤掃描實驗.................................64

實例72:定時器中斷控制的獨立式鍵盤掃描實驗..........................67

實例73:獨立式鍵盤控制的4級變速流水燈..............................70

實例74:獨立式鍵盤的按鍵功能擴展:"以一當四”........................72

實例75:獨立式鍵盤調(diào)時的數(shù)碼時鐘實驗................................74

實例76:獨立式鍵盤控制步進電機實驗...................................78

實例77:矩陣式鍵盤按鍵值的數(shù)碼管顯示實驗............................81

實例78:矩陣式鍵盤按鍵音.............................................84

實例79:簡易電子琴....................................................85

實例80:矩陣式鍵盤實現(xiàn)的電子密碼鎖...................................91

實例81:用LCD顯示字符'A'.........................................95

實例82:用LCD循環(huán)右移顯示"WelcometoChina"......................98

實例83:用LCD顯示適時檢測結(jié)果......................................102

實例84:液晶時鐘設(shè)計.................................................106

實例85:將數(shù)據(jù)"OxOf"寫入AT24co2再讀出送P1口顯示.................112

實例86:將按鍵次數(shù)寫入AT24co2,再讀出并用1602LCD顯示.............116

實例87:對I2C總線上掛接多個AT24co2的讀寫操作....................124

實例88:基于AT24co2的多機通信讀取程序...........................129

實例88:基于AT24C02的多機通信寫入程序............................133

實例90:DS18B20溫度檢測及其液晶顯示................................144

實例91:將數(shù)據(jù)"Oxaa"寫入X5045再讀出送P1口顯示...................153

實例92:將流水燈控制碼寫入X5045并讀出送P1口顯示.................157

實例93:對SPI總線上掛接多個X5045的讀寫操作.......................161

實例94:基于ADC0832的數(shù)字電壓表....................................165

實例95:用DAC0832產(chǎn)生鋸齒波電壓....................................171

實例96:用P1口顯示紅外遙控器的按鍵值..............................172

實例97:用紅外遙控器控制繼電器......................................174

實例98:基于DS1302的日歷時鐘.......................................177

實例99:單片機數(shù)據(jù)發(fā)送程序..........................................186

實例100:電機轉(zhuǎn)速表設(shè)計..............................................187

模擬霍爾脈沖...........................................................192

/*函數(shù)的使用和熟悉*/

〃實例3:用單片機控制第一個燈亮

#include<reg51.h>〃包含51單片機寄存器定義的頭文件

voidmain(void)

{

while(1)〃無限循環(huán)

P1=0xfe;//P1=11111110B,即P1.0輸出低電平

)

〃實例4:用單片機控制一個燈閃爍:認識單片機的工作頻率

#include<reg51.h>//包含單片機寄存器的頭文件

函數(shù)功能:延時一段時間

voiddeIay(void)//兩個void意思分別為無需返回值,沒有參數(shù)傳遞

(

unsignedinti;//定義無符號整數(shù),最大取值范圍65535

for(i=0;i<20000;i++)//做20000次空循環(huán)

;//什么也不做,等待一個機器周期

1

函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))

voidmain(void)

(

while(1)//無限循環(huán)

(

P1=0xfe;//P1=11111110B,P1.0輸出低電平

deIay();//延時一■段時間

P1=0xff;//P1=11111111B,P1.0輸出高電平

delay0;//延時一段時間

)

}

〃實例5:將P1□狀態(tài)分別送入PO、P2、P3□:認識I/O口的

引腳功能

#incIude<reg51.h>//包含單片機寄存器的頭文件

函數(shù)功能:主函數(shù)(C語言規(guī)定必須有也只能有1個主函數(shù))

voidmain(void)

{

while(1)〃無限循環(huán)

(

P1=0xff;//P1=11111111,熄滅LED

PO=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ù)功能:延時一段時間

voiddelay(void)

unsignedchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

(

while(1)

(

P3=0xfe;〃第一個燈亮

delay();〃調(diào)用延時函數(shù)

P3=0xfd;//第二個燈亮

deIay0;//調(diào)用延時函數(shù)

P3=0xfb;//第三個燈亮

delay();//調(diào)用延時函數(shù)

P3=0xf7;//第四個燈亮

deIay();//調(diào)用延時函數(shù)

P3=0xef;//第五個燈亮

delayO;//調(diào)用延時函數(shù)

P3=0xdf;//第六個燈亮

delayO;//調(diào)用延時函數(shù)

P3=0xbf;//第七個燈亮

delayO;//調(diào)用延時函數(shù)

P3=0x7f;//第八個燈亮

deIay();//調(diào)用延時函數(shù)

}

//實例7:通過對P3□地址的操作流水點亮8位LED

#incIude<reg51.h>//包含單片機寄存器的頭文件

sfrx=0xb0;//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;〃第一個燈亮

deIay();//調(diào)用延時函數(shù)

x=0xfd;//第二個燈亮

deIay();//調(diào)用延時函數(shù)

x=0xfb;//第三個燈亮

deIay0;//調(diào)用延時函數(shù)

x=0xf7;//第四個燈亮

deIay0;//調(diào)用延時函數(shù)

x=0xef;〃第五個燈亮

deIay();//調(diào)用延時函數(shù)

x=0xdf;//第六個燈亮

deIay();//調(diào)用延時函數(shù)

x=0xbf;//第七個燈亮

deIay();//調(diào)用延時函數(shù)

x=0x7f;//第八個燈亮

deIay();//調(diào)用延時函數(shù)

)

}

〃實例8:用不同數(shù)據(jù)類型控制燈閃爍時間

#include<reg51.h>//包含單片機寄存器的頭文件

函數(shù)功能:用整形數(shù)據(jù)延時一段時間

voidint_delay(void)〃延時一?段較長的時間

{

unsignedintm;//定義無符號整形變量,雙字節(jié)數(shù)據(jù),值域為0?65535

for(m=0;m<36000;m++)

;//空操作

}

函數(shù)功能:用字符型數(shù)據(jù)延時一段時間

voidchar_deIay(void)//延時一段較短的時間

(

unsignedchari,j;〃定義無符號字符型變量,單字節(jié)數(shù)據(jù),值域0?255

for(i=0;i<200;i++)

for(j=0;j<180;j++)

;//空操作

}

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedchari;

while(1)

(

for(i=0;i<3;i++)

(

P1=0xfe;〃P1.0□的燈點亮

int_deIay0;//延時一段較長的時間

P1=0xff;//熄滅

int_deIay0;〃延時一段較長的時間

}

for(i=0;i<3;i++)

(

P1=0xef;//P1.4口的燈點亮

char_delay0;//延時一段較長的時間

P1=0xff;//熄滅

char_deIay();//延時一段較長的時間

}

}

}

〃實例9:用「0口、P1口分別顯示加法和減法運算結(jié)果

#include<reg51.h>

voidmain(void)

{

unsignedcharm,n;

m=43;//即十進制數(shù)2x16+11=43

n=60;//即十進制數(shù)3x16+12=60

P1=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+HO

〃兩邊同除以256,可得17+192/256=H3*16+H2+(H1*16+H0)/256

//因此,高8位16進制數(shù)H3*16+H2必然等于17,即4544除以

256的商

〃低8位16進制數(shù)H1*16+H0必然等于192,即4544除以256

的余數(shù)

P1=s/256;〃高8位送P1口,P1=17=11H=00010001B,P1.(HnP1.4tr

滅,其余亮

P0=s%256;//低8位送P0口,P3=192=cOH=11000000B,P3.1,P3.6,P3.7

口滅,其余亮

}

//實例11:用P1、P0口顯示除法運算結(jié)果

#incIude<reg51.h>//包含單片機寄存器的頭文件

voidmain(void)

(

P1=36/5;//求整數(shù)

P0=((36%5)*10)/5;//求小數(shù)

while(1)

;//無限循環(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的值送POD

deIay();//調(diào)用延時函數(shù)

}

}

〃實例13:用P0□顯示邏輯"與"運算結(jié)果

#include<reg51.h>〃包含單片機寄存器的頭文件

voidmain(void)

(

PO=(4>0)&&(9>0xab);〃將邏輯運算結(jié)果送PO口

while(1)

;〃設(shè)置無限循環(huán),防止程序“跑飛”

//實例14:用P0口顯示條件運算結(jié)果

#include<reg51.h>//包含單片機寄存器的頭文件

voidmain(void)

(

P0=(8>4)?8:4;〃將條件運算結(jié)果送PO口,P0=8=00001000B

while(1)

;〃設(shè)置無限循環(huán),防止程序“跑飛”

〃實例15:用P0□顯示按位"異或"運算結(jié)果

#include<reg51.h>//包含單片機寄存器的頭文件

voidmain(void)

(

P0=0xa2-0x3c;〃將條件運算結(jié)果送PO口,PO二8二00001000B

while(1)

;〃設(shè)置無限循環(huán),防止程序“跑飛”

//實例16:用P0顯示左移運算結(jié)果

#incIude<reg51.h>//包含單片機寄存器的頭文件

voidmain(void)

(

P0=0x3b?2;〃將左移運算結(jié)果送PO口,P0=11101100B=0xec

while(1)

〃無限循環(huán),防止程序“跑飛”

}

//實例17:“萬能邏輯電路"實驗

#include<reg51.h>〃包含單片機寄存器的頭文件

sbitF=Pr4;〃將F位定義為P1.4

sbitX=Pr5;〃將X位定義為P1.5

sbit丫=P1%;//將丫位定義為P1.6

sbitZ=P「7;〃將Z位定義為P1.7

voidmain(void)

while(1)

F=((?X)&Y)|Z;//將邏輯運算結(jié)果賦給F

}

}

//實例18:用右移運算流水點亮P1口8位LED

#incIude<reg51.h>〃包含單片機寄存器的頭文件

函數(shù)功能:延時一段時間

voiddeIay(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位,高位補0

deIay();//調(diào)用延時函數(shù)

〃實例19:用if語句控制P0口8位LED的流水方向

#incIude<reg51.h>//包含單片機寄存器的頭文件

sbitSkP1-4;〃將S1位定義為P1.4

sbitS2=P「5;〃將S2位定義為P1.5

函數(shù)功能:主函數(shù)

voidmain(void)

while(1)

{

if(S1==0)〃如果按鍵S1按下

P0=0x0f;//PO口高四位LED點亮

if(S2==0)〃如果按鍵S2按下

P0=0xf0;//PO口低四位LED點亮

//實例20:用swtich語句的控制P0口8位LED的點亮狀態(tài)

#include<reg51.h>//包含單片機寄存器的頭文件

sbitS1=P1"4;〃將S1位定義為P1.4

函數(shù)功能:延時一段時間

voiddeIay(void)

unsignedintn;

for(n=0;n<10000;n++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedchari;

i=0;〃將i初始化為0

while(1)

{

if(S1==0)//如果S1鍵按下

{

deIay0;//延時一■段時間

if(S1==0)〃如果再次檢測到S1鍵按下

i++;//i自增1

if(i=9)//如果i=9,重新將其置為1

i=1;

)

switch(i)//使用多分支選擇語句

case1:P0=0xfe;//第一個LED亮

break;

case2:P0=0xfd;〃第二個LED亮

break;

case3:P0=0xfb;//第三個LED亮

break;

case4:P0=0xf7;〃第四個LED亮

break;

case5:P0=0xef;//第五個LED亮

break;

case6:P0=0xdf;//第六個LED亮

break;

case7:P0=0xbf;//第七個LED亮

break;

case8:P0=0x7f;//第八個LED亮

break;

default://缺省值,關(guān)閉所有LED

P0=0xff;

}

}

}

//實例21:用for語句控制蜂鳴器鳴笛次數(shù)

#incIude<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++)

}

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedinti;

while(1)

(

for(i=0;i<830;i++)

(

sound=0;//P3.7輸出低電平

deIay1600();

sound=1;//P3.7輸出高電平

deIay1600();

}

for(i=0;i<200;i++)

sound=0;//P3.7輸出低電平

delay800();

sound=1;//P3.7輸出高電平

delay800();

}

}

}

//實例22:用whiIe語句控制LED

#incIude<reg51.h>//包含單片機寄存器的頭文件

函數(shù)功能:延時約60ms(3*100*200=60000us)

voiddelay60ms(void)

(

unsignedcharm,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

1

函數(shù)功能:主函數(shù)

voidmain(void)

//無限循環(huán)

i=0;//將i初始化為0

while(i<Oxff)〃當i小于Oxff(255)時執(zhí)行循環(huán)體

(

P0=i;〃將i送P0口顯示

deIay60ms();〃延時

i++;//i自增1

}

}

}

//實例23:用do-whiIe語句控制P0口8位LED流水點亮

#incIude<reg51.h>〃包含單片機寄存器的頭文件

函數(shù)功能:延時約60ms(3*100*200=60000RS)

voiddelay60ms(void)

(

unsignedcharm,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

1

函數(shù)功能:主函數(shù)

voidmain(void)

(

do

(

P0=0xfe;〃第一個LED亮

deIay60ms();

P0=0xfd;//第二個LED亮

deIay60ms();

P0=0xfb;//第三個LED亮

deIay60ms();

P0=0xf7;//第四個LED亮

deIay60ms();

P0=0xef;〃第五個LED亮

deIay60ms();

P0=0xdf;//第六個LED亮

deIay60ms();

deIay60ms();

P0=0xbf;//第七個LED亮

deIay60ms();

P0=0x7f;//第八個LED亮

deIay60ms();

}while(1);〃無限循環(huán),使8位LED循環(huán)流水點亮

}

//實例24:用字符型數(shù)組控制P0口8位LED流水點亮

#incIude<reg51.h>〃包含單片機寄存器的頭文件

函數(shù)功能:延時約60ms(3*100*200=60000ps)

voiddeIay60ms(void)

(

unsignedcharm,n;

for(m=0;m<100;m++)

for(n=0;n<200;n++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

{

unsignedchari;

unsignedcharcodeTab[]={0xfe,Oxfd,Oxfb,0xf7,Oxef,Oxdf,Oxbf,0x7f};

〃定義無符號字符型數(shù)組

while(1)

(

for(i=0;i<8;i++)

(

P0=Tab[i];〃依次引用數(shù)組元素,并將其送P0口顯示

deIay60ms();//調(diào)用延時函數(shù)

)

}

)

//實例25:用P0口顯示字符串常量

#include<reg51.h>//包含單片機寄存器的頭文件

函數(shù)功能:延時約150ms(3*200*250=150000us=150ms

voiddeIay150ms(void)

(

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

unsignedcharstr[]={"Now,Temperatureis:"!;//將字符串賦給字符型

全部元素賦值

unsignedchari;

while(1)

(

i=0;//將i初始化為0,從第一個元素開始顯示

while(str[i]!='\0')//只要沒有顯示到結(jié)束標志‘\0'

(

P0=str[i];//將第i個字符送到P0口顯示

deIay150ms();//調(diào)用150ms延時函數(shù)

i++;//指向下一個待顯字符

〃實例26:用P0口顯示指針運算結(jié)果

#include<reg51.h>

voidmain(void)

unsignedchar*p1,*p2;//定義無符號字符型指針變量p1,p2

unsignedchari,j;//定義無符號字符型數(shù)據(jù)

i=25;〃給i賦初值25

j=15;

pk&i;//使指針變量指向i,對指針初始化

p2=&j;//使指針變量指向j,對指針初始化

P0=*p1+*p2;//*p1+*p2相當于i+j,所以P0=25+15=40=0x28

〃則P0=00101000B,結(jié)果P0.3、P0.5引腳LED熄滅,其余點亮

while(1)

//無限循環(huán),防止程序“跑飛”

//實例27:用指針數(shù)組控制P0口8位LED流水點亮

#incIude<reg51.h>

函數(shù)功能:延時約150ms(3*200*250=150000us=150ms

voiddeIay150ms(void)

(

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=O;n<250;n++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

{

unsignedcharcodeTab[]={Oxfe,Oxfd,Oxfb,0xf7,Oxef,Oxdf,Oxbf,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++)

(

PO=*p[i];

deIay150ms();

}

}

)

//實例28:用數(shù)組的指針控制P0口8位LED流水點亮

#include<reg51.h>

函數(shù)功能:延時約150ms(3*200*250=150000RS=150ms

voiddeIay150ms(void)

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

)

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedchari;

unsignedcharTab[]={0xFF,OxFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,

0x7F,OxBF,OxDF,OxEF,0xF7,OxFB,OxFD,OxFE,

OxFE,OxFC,OxFB,OxFO,OxEO,OxCO,0x80,0x00,

0xE7,OxDB,OxBD,0x7E,0x3C,0x18,0x00,0x81,

0xC3,0xE7,0x7E,OxBD,OxDB,0xE7,OxBD,OxDB};

//流水燈控制碼

unsignedchar*p;//定義無符號字符型指針

p=Tab;〃將數(shù)組首地址存入指針p

while(1)

(

for(i=0;i<32;i++)〃共32個流水燈控制碼

{

PO=*(p+i);//*(p+i)的值等于a[i]

deIay150ms();//調(diào)用150ms延時函數(shù)

)

)

}

〃實例29:用PO、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);

P1=z/256;//取得z的高8位

P0二z%256;〃取得z的低8位

while(1)

//實例30:用有參函數(shù)控制P0口8位LED流水速度

#include<reg51.h>

函數(shù)功能:延時一段時間

voiddelay(unsignedcharx)

(

unsignedcharm,n;

for(mz:0;m<x;m++)

for(n=0;n<200;n++)

}

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedchari;

unsignedcharcode

Tab[]={0xFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F);

//流水燈控制碼

while(1)

(

//快速流水點亮LED

for(i=0;i<8;i++)〃共8個流水燈控制碼

{

P0=Tab[i];

deIay(100);//延時約60ms,(3*100*200=60000us)

)

//慢速流水點亮LED

for(i=0;i<8;i++)〃共8個流水燈控制碼

{

PO=Tab[i];

deIay(250);〃延時約150ms,(3*250*200=150000ns)

)

}

}

〃實例31:用數(shù)組作函數(shù)參數(shù)控制流水花樣

#incIude<reg51.h>

函數(shù)功能:延時約150ms

voiddelay(void)

(

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

)

函數(shù)功能:流水點亮P0口8位LED

voidIed_fIow(unsignedchara[8])

{

unsignedchari;

for(i=0;i<8;i++)

(

P0=a[i];

delay();

)

}

函數(shù)功能:主函數(shù)

voidmain(void)

(

unsignedcharcode

Tab[]={0xFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F);

//流水燈控制碼

Ied_fIow(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

voidIed_fIow(unsignedchar*p)//形參為無符號字符型指針

(

unsignedchari;

while(1)

(

i=o;〃將i置為o,指向數(shù)組第一個元素

while(*(p+i)!='\0')〃只栗沒有指向數(shù)組的結(jié)束標志

(

P0=*(p+i);〃取的指針所指變量(數(shù)組元素)的值,送P0D

deIay();//調(diào)用延時函數(shù)

i++;〃指向下一個數(shù)組元素

)

)

}

函數(shù)功能:主函數(shù)

voidmain(void)

unsignedcharcodeTab[]={OxFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F,

0x7F,OxBF,OxDF,OxEF,0xF7,OxFB,OxFD,OxFE,

OxFF,OxFE,OxFC,OxFB,OxFO,OxEO,OxCO,0x80,

0x00,0xE7,OxDB,OxBD,0x7E,OxFF,OxFF,0x3C,

0x18,0x0,0x81,0xC3,0xE7,OxFF,

OxFF,0x7E};

〃流水燈控制碼

unsignedchar*pointer;

pointer=Tab;

Ied_flow(pointer);

//實例33:用函數(shù)型指針控制P1口燈花樣

#incIude<reg51.h>//包含51單片機寄存器定義的頭文件

unsignedcharcodeTab[]={OxFE,OxFD,OxFB,0xF7,OxEF,OxDF,OxBF,0x7F};

〃流水燈控制碼,該數(shù)組被定義為全局變量

函數(shù)功能:延時約150ms

voiddelay(void)

(

unsignedcharm,n;

for(m=0;m<200;m++)

for(n=0;n<250;n++)

}

函數(shù)功能:流水燈左移

voidIed_fIow(void)

{

unsignedchari;

for(i=0;i<8;i++)〃8位控制碼

PO=Tab[i];

delay();

)

}

函數(shù)功能:主函數(shù)

voidmain(void)

(

void(*p)(void);//定義函數(shù)型指針,所指函數(shù)無參數(shù),無返回值

p=led_flow;〃將函數(shù)的入口地址賦給函數(shù)型指針p

while(1)

(*p)0;//通過函數(shù)的指針p調(diào)用函數(shù)led_flow()

〃實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串

#incIude<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ù)功能:流水點亮POD8位LED

voidIed_dispIay(unsignedchar*x[])//形參必須為指針數(shù)組

unsignedchari,j;

for(i=0;i<4;i++)〃有4個字符串要顯示

(

j=0;//指向待顯字符串的第0號元素

while(*(x[i]+j)!=''0')//只要第i個字符串的第j號元素不是結(jié)束

標心

(

PO=*(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)用舉例

#incIude<reg51.h>//包含51單片機寄存器定義的頭文件

#incIude<ctype.h>

voidmain(void)

(

while(1)

(

P3=isalpha('_')?0xf0:0x0f;〃條件運算,若是英文字母,

溫馨提示

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

評論

0/150

提交評論