C51單片機(jī)C語言程序100例_Keil_第1頁
C51單片機(jī)C語言程序100例_Keil_第2頁
C51單片機(jī)C語言程序100例_Keil_第3頁
C51單片機(jī)C語言程序100例_Keil_第4頁
C51單片機(jī)C語言程序100例_Keil_第5頁
已閱讀5頁,還剩187頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

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

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

4、花樣.23實例 32:用指針作函數(shù)參數(shù)控制 P0 口 8 位 LED 流水點亮. 23實例 33:用函數(shù)型指針控制 P1 口燈花樣.25實例 34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串.26實例 35:字符函數(shù) ctype.h 應(yīng)用舉例.27實例 36:內(nèi)部函數(shù) intrins.h 應(yīng)用舉例. 27實例 37:標(biāo)準(zhǔn)函數(shù) stdlib.h 應(yīng)用舉例.28實例 38:字符串函數(shù) string.h 應(yīng)用舉例. 29實例 39:宏定義應(yīng)用舉例 2.291 / 192實例 40:宏定義應(yīng)用舉例 2.30實例 41:宏定義應(yīng)用舉例 3.30中斷、定時器* .31實例 42:用定時器 T0 查詢方式 P2

5、 口 8 位控制 LED 閃爍. 31實例 43:用定時器 T1 查詢方式控制單片機(jī)發(fā)出 1KHz 音頻.31實例 44:將計數(shù)器 T0 計數(shù)的結(jié)果送 P1 口 8 位 LED 顯示. 32實例 45:用定時器 T0 的中斷控制 1 位 LED 閃爍.33實例 46:用定時器 T0 的中斷實現(xiàn)長時間定時.34實例 47:用定時器 T1 中斷控制兩個 LED 以不同周期閃爍.34實例 48:用計數(shù)器 T1 的中斷控制蜂鳴器發(fā)出 1KHz 音頻.36實例 49:用定時器 T0 的中斷實現(xiàn)"渴望"主題曲的播放. 36實例 50-1:輸出 50 個矩形脈沖. 39實例 50-2:計

6、數(shù)器 T0 統(tǒng)計外部脈沖數(shù). 40實例 51-2:定時器 T0 的模式 2 測量正脈沖寬度. 40實例 52:用定時器 T0 控制輸出高低寬度不同的矩形波.41實例 53:用外中斷 0 的中斷方式進(jìn)行數(shù)據(jù)采集.42實例 54-1:輸出負(fù)脈寬為 200 微秒的方波. 43實例 54-2:測量負(fù)脈沖寬度. 43實例 55:方式 0 控制流水燈循環(huán)點亮.44實例 56-1:數(shù)據(jù)發(fā)送程序. 45實例 56-2:數(shù)據(jù)接收程序. 47實例 57-1:數(shù)據(jù)發(fā)送程序. 47實例 57-2:數(shù)據(jù)接收程序. 49實例 58:單片機(jī)向 PC 發(fā)送數(shù)據(jù). 50實例 59:單片機(jī)接收 PC 發(fā)出的數(shù)據(jù). 51*數(shù)碼管顯

7、示 .52實例 60:用 LED 數(shù)碼顯示數(shù)字 5.52實例 61:用 LED 數(shù)碼顯示器循環(huán)顯示數(shù)字 09.52實例 62:用數(shù)碼管慢速動態(tài)掃描顯示數(shù)字"1234". 53實例 63:用 LED 數(shù)碼顯示器偽靜態(tài)顯示數(shù)字 1234. 54實例 64:用數(shù)碼管顯示動態(tài)檢測結(jié)果.54實例 65:數(shù)碼秒表設(shè)計.56實例 66:數(shù)碼時鐘設(shè)計.58實例 67:用 LED 數(shù)碼管顯示計數(shù)器 T0 的計數(shù)值.62實例 68:靜態(tài)顯示數(shù)字“59”.63*鍵盤控制2/192*/.63實例 69:無軟件消抖的獨立式鍵盤輸入實驗.64實例 70:軟件消抖的獨立式鍵盤輸入實驗.64實例 71:C

8、PU 控制的獨立式鍵盤掃描實驗.65實例 72:定時器中斷控制的獨立式鍵盤掃描實驗.68實例 73:獨立式鍵盤控制的 4 級變速流水燈.71實例 74:獨立式鍵盤的按鍵功能擴(kuò)展:"以一當(dāng)四". 73實例 75:獨立式鍵盤調(diào)時的數(shù)碼時鐘實驗.75實例 76:獨立式鍵盤控制步進(jìn)電機(jī)實驗.79實例 77:矩陣式鍵盤按鍵值的數(shù)碼管顯示實驗.82/實例 78:矩陣式鍵盤按鍵音.85實例 79:簡易電子琴.86實例 80:矩陣式鍵盤實現(xiàn)的電子密碼鎖.92* *液晶顯示 LCD*液晶顯示 LCD *液晶顯示 LCD */.95實例 81:用 LCD 顯示字符'A'. 96

9、實例 82:用 LCD 循環(huán)右移顯示"Welcome to China". 99實例 83:用 LCD 顯示適時檢測結(jié)果. 102實例 84:液晶時鐘設(shè)計.106*一些芯片的使用*24c02 . DS18B20 X5045 ADC0832 DAC0832 DS1302紅外遙控*/. 112實例 85:將數(shù)據(jù)"0x0f"寫入 AT24C02 再讀出送 P1 口顯示.112實例 86:將按鍵次數(shù)寫入 AT24C02,再讀出并用 1602LCD 顯示.117實例 87:對 I2C 總線上掛接多個 AT24C02 的讀寫操作.124實例 88:基于 AT24C0

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

11、74實例 98:基于 DS1302 的日歷時鐘. 177實例 99:單片機(jī)數(shù)據(jù)發(fā)送程序.185實例 100:電機(jī)轉(zhuǎn)速表設(shè)計.186模擬霍爾脈沖.1923/192/*函數(shù)的使用和熟悉*/實例 3:用單片機(jī)控制第一個燈亮#include<reg51.h> /包含 51 單片機(jī)寄存器定義的頭文件void main(void)P1=0xfe; /P1=1111 1110B,即 P1.0 輸出低電平/4/實例 4:用單片機(jī)控制一個燈閃爍:認(rèn)識單片機(jī)的工作頻率#include<reg51.h> /包含單片機(jī)寄存器的頭文件/*函數(shù)功能:延時一段時間*/void delay(void)

12、 /兩個 void 意思分別為無需返回值,沒有參數(shù)傳遞unsigned int i; /定義無符號整數(shù),最大取值范圍 65535for(i=0;i<20000;i+) /做 20000 次空循環(huán); /什么也不做,等待一個機(jī)器周期/*函數(shù)功能:主函數(shù) (C 語言規(guī)定必須有也只能有 1 個主函數(shù))*/void main(void)while(1) /無限循環(huán)P1=0xfe; /P1=1111 1110B, P1.0 輸出低電平delay(); /延時一段時間P1=0xff; /P1=1111 1111B, P1.0 輸出高電平delay(); /延時一段時間4 / 192/5P1P0P2P3

13、I/O/實例 5:將#include<reg51.h>P1 口狀態(tài)分別送入 P0、P2、P3 口:認(rèn)識 I/O 口的引腳功能/包含單片機(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; / 將 P1 口狀態(tài)送入 P2 口P3=P1; / 將 P1 口狀態(tài)送入 P3 口/實例 6:使用 P3 口流水點亮 8 位 LED#include<reg51.h> /包含

14、單片機(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)5 / 192while(1)P3=0xfe;delay();P3=0xfd;delay();P3=0xfb;delay();P3=0xf7;delay();P3=0xef;/第一個燈亮/調(diào)用延時函數(shù)/第二個燈亮/調(diào)用延時函數(shù)/第三個燈亮/調(diào)用延時函數(shù)/第四個燈亮/調(diào)用延時函數(shù)/第五個燈亮delay();/調(diào)用延時函數(shù)P3=0xdf;delay

15、();P3=0xbf;/第六個燈亮/調(diào)用延時函數(shù)/第七個燈亮delay();/調(diào)用延時函數(shù)P3=0x7f;/第八個燈亮delay();/調(diào)用延時函數(shù)/實例 7:通過對 P3 口地址的操作流水點亮 8 位 LED#include<reg51.h> /包含單片機(jī)寄存器的頭文件sfr x=0xb0; /P3 口在存儲器中的地址是 b0H, 通過 sfr 可定義 8051 內(nèi)核單片機(jī)/的所有內(nèi)部 8 位特殊功能寄存器,對地址 x 的操作也就是對 P1 口的操作/*函數(shù)功能:延時一段時間*/void delay(void)unsigned char i,j;for(i=0;i<250;

16、i+)for(j=0;j<250;j+); /利用循環(huán)等待若干機(jī)器周期,從而延時一段時間/*函數(shù)功能:主函數(shù)6 / 192*/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; /第六個燈亮delay(); /調(diào)用延時函數(shù)x=0xbf; /第七個燈亮delay(); /調(diào)用延時函數(shù)x

17、=0x7f; /第八個燈亮delay(); /調(diào)用延時函數(shù)/實例 8:用不同數(shù)據(jù)類型控制燈閃爍時間#include<reg51.h> /包含單片機(jī)寄存器的頭文件/*函數(shù)功能:用整形數(shù)據(jù)延時一段時間*/void int_delay(void) /延時一段較長的時間unsigned int m; /定義無符號整形變量,雙字節(jié)數(shù)據(jù),值域為 065535for(m=0;m<36000;m+); /空操作/*函數(shù)功能:用字符型數(shù)據(jù)延時一段時間*/7 / 192void char_delay(void) /延時一段較短的時間unsigned char i,j; /定義無符號字符型變量,單

18、字節(jié)數(shù)據(jù),值域 0255for(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 口的燈點亮int_delay(); /延時一段較長的時間P1=0xff; /熄滅int_delay(); /延時一段較長的時間for(i=0;i<3;i+)P1=0xef; /P1.4 口的燈點亮char_delay(); /延時一段較長的時間P1=0xff; /熄滅char_delay(); /延時一段較長

19、的時間/實例 9:用 P0 口、P1#include<reg51.h>void main(void)unsigned char m,n;口分別顯示加法和減法運算結(jié)果m=43;/即十進(jìn)制數(shù) 2x16+11=438 /192n=60;P1=m+n;/即十進(jìn)制數(shù) 3x16+12=60/P1=103=0110 0111B,結(jié)果 P1.3、P1.4、P1.7口的燈被點亮P0=n-m;/P0=17=0001 0001B,結(jié)果 P0.0、P0.4 的燈被熄滅/實例 10:用 P0、P1 口顯示乘法運算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件void main

20、(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ù)

21、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 口顯示除法運算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件void main(void)P1=36/5; /求整數(shù)P0=(36%5)*10)/5; /求小數(shù)while(1)9 / 192;/無限循環(huán)防止程序“跑飛”/實例 12:用自增運算控制 P0 口 8 位 LED 流

22、水花樣#include<reg51.h> /包含單片機(jī)寄存器的頭文件/*函數(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+) /注意 i 的值不能超過 255P0=i; /將 i 的值送 P0 口delay(); /調(diào)用延時函數(shù)/實例 13:用 P0 口顯示邏輯"與"運算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭

23、文件void main(void)P0=(4>0)&&(9>0xab);/將邏輯運算結(jié)果送 P0 口while(1); /設(shè)置無限循環(huán),防止程序“跑飛”110 / 192/14P0/實例 14:用 P0 口顯示條件運算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件void main(void)P0=(8>4)?8:4;/將條件運算結(jié)果送 P0 口,P0=8=0000 1000Bwhile(1); /設(shè)置無限循環(huán),防止程序“跑飛”/實例 15:用 P0 口顯示按位"異或"運算結(jié)果#include<reg5

24、1.h> /包含單片機(jī)寄存器的頭文件void main(void)P0=0xa20x3c;/將條件運算結(jié)果送 P0 口,P0=8=0000 1000Bwhile(1); /設(shè)置無限循環(huán),防止程序“跑飛”/16P0/實例 16:用 P0 顯示左移運算結(jié)果#include<reg51.h> /包含單片機(jī)寄存器的頭文件void main(void)P0=0x3b<<2;/將左移運算結(jié)果送 P0 口,P0=1110 1100B=0xecwhile(1); /無限循環(huán),防止程序“跑飛”#include<reg51.h>sbit F=P14;/實例 17:&quo

25、t;萬能邏輯電路"實驗/包含單片機(jī)寄存器的頭文件/將 F 位定義為 P1.4111 / 192sbit X=P15;sbit Y=P16;sbit Z=P17;void main(void)while(1)/將 X 位定義為/將 Y 位定義為/將 Z 位定義為P1.5P1.6P1.7F=(X)&Y)|Z; /將邏輯運算結(jié)果賦給 F;/實例 18:用右移運算流水點亮 P1 口 8 位 LED#include<reg51.h> /包含單片機(jī)寄存器的頭文件/*函數(shù)功能:延時一段時間*/void delay(void)unsigned int n;for(n=0;n<

26、;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 位,高位補(bǔ) 0delay(); /調(diào)用延時函數(shù)112 / 192/19iffP08LED/實例 19:用 iff 語句控制 P0 口 8 位 LED 的流水方向#include<reg51.h> /包含單片機(jī)寄存器的頭文件sbit S1=P14; /將 S1 位定義為 P1.4sbit S2=P15; /

27、將 S2 位定義為 P1.5/*函數(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ī)寄存器的頭文件sbit S1=P14; /將 S1 位定義為 P1.4/*函數(shù)功能:延時一段時間*/void delay(void)unsigned int n;for(n=0;n<10000;n+);/*函數(shù)功能:主函數(shù)*/void main(void)unsigned char i;113 / 192i=0;while(1)/將 i 初始化為 0if(S1=0)delay();/如果 S1 鍵按下/延時一段時間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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論