51單片機(jī)C語(yǔ)言編程實(shí)例_第1頁(yè)
51單片機(jī)C語(yǔ)言編程實(shí)例_第2頁(yè)
51單片機(jī)C語(yǔ)言編程實(shí)例_第3頁(yè)
51單片機(jī)C語(yǔ)言編程實(shí)例_第4頁(yè)
51單片機(jī)C語(yǔ)言編程實(shí)例_第5頁(yè)
已閱讀5頁(yè),還剩2頁(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)介

51單片機(jī) C 語(yǔ)言編程實(shí)例 標(biāo)簽 : 單片機(jī) C 語(yǔ)言 實(shí)例 2009-09-01 19:06 51單片機(jī) C 語(yǔ)言編程實(shí)例 基礎(chǔ)知識(shí): 51單片機(jī)編程基礎(chǔ) 單片機(jī)的外部結(jié)構(gòu): 1. DIP40 雙列直插; 2. P0, P1, P2, P3四個(gè) 8 位準(zhǔn)雙向 I/O引 腳;(作為 I/O輸入時(shí),要先輸出高電平) 3. 電源 VCC( PIN40)和地線 GND( PIN20); 4. 高電平復(fù)位 RESET( PIN9);( 10uF電 容 接 VCC與 RESET,即可實(shí)現(xiàn)上電復(fù)位) 5. 內(nèi)置振蕩電路,外部只要接晶體至 X1 ( PIN18)和 X0( PIN19);(頻率為主頻的 12倍) 6. 程序配置 EA( PIN31)接高電平 VCC;(運(yùn)行單片機(jī)內(nèi)部 ROM中的程序) 7. P3 支持第二功能: RXD、 TXD、 INT0、 INT1、 T0、 T1 單片機(jī)內(nèi)部 I/O部件: (所為學(xué)習(xí)單片機(jī),實(shí)際上就是編程控制以下 I/O部件,完成指定任務(wù) ) 1. 四個(gè) 8 位通用 I/O端口,對(duì)應(yīng) 引腳 P0、 P1、 P2和 P3; 2. 兩個(gè) 16位定時(shí)計(jì)數(shù)器;( TMOD, TCON, TL0, TH0, TL1, TH1) 3. 一個(gè)串行通信接口;( SCON, SBUF) 4. 一個(gè)中斷控制器;( IE, IP) 針對(duì) AT89C52單片機(jī),頭文件 AT89x52.h給出了 SFR特殊功能寄存器所有端口的定義。 C 語(yǔ)言編程基礎(chǔ): 1. 十六進(jìn)制表示字節(jié) 0x5a:二進(jìn)制為 01011010B; 0x6E為 01101110。 2. 如果將一個(gè) 16位二進(jìn)數(shù)賦給一個(gè) 8 位的字節(jié)變量,則自動(dòng)截?cái)酁榈?8 位,而丟掉高 8 位。 3. +var 表示對(duì)變量 var先增一; var 表示對(duì)變量后減一。 4. x |= 0x0f;表示為 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示給變量 TMOD的低四位賦值 0x5,而不改變 TMOD的高四位。 6. While( 1 ); 表示無(wú)限執(zhí)行該語(yǔ)句,即死循環(huán)。語(yǔ)句后的分號(hào)表示空循環(huán)體,也就是 ; 在某引腳輸出高電平的編程方法:(比如 P1.3( PIN4)引腳) 代碼 1. #include /該 頭文檔中有單片機(jī)內(nèi)部資源的符號(hào)化定義,其中包含P1.3 2. void main( void ) /void 表示沒(méi)有輸入?yún)?shù),也沒(méi)有函數(shù)返值,這入單片機(jī)運(yùn)行的復(fù)位入口 3. 4. P1_3 = 1; /給 P1_3賦值 1,引腳 P1.3就能輸出高電平 VCC 5. While( 1 ); /死循環(huán),相當(dāng) LOOP: goto LOOP; 6. 注意: P0的每個(gè)引腳要輸出高電平時(shí),必須外接上拉電阻(如 4K7)至 VCC電源。 在某 引腳輸出低電平的編程方法:(比如 P2.7引腳) 代碼 1. #include /該頭文檔中有單片機(jī)內(nèi)部資源的符號(hào)化定義,其中包含P2.7 2. void main( void ) /void 表示沒(méi)有輸入?yún)?shù),也沒(méi)有函數(shù)返值,這入單片機(jī)運(yùn)行的復(fù)位入口 3. 4. P2_7 = 0; /給 P2_7賦值 0,引腳 P2.7就能輸出低電平 GND 5. While( 1 ); /死循環(huán),相當(dāng) LOOP: goto LOOP; 6. 在某引腳輸出方波編程方法:(比如 P3.1引腳) 代碼 1. #include /該頭文檔中有單片機(jī)內(nèi)部資源的符號(hào)化定義,其中包含P3.1 2. void main( void ) /void 表示沒(méi)有輸入?yún)?shù),也沒(méi)有函數(shù)返值,這入單片機(jī)運(yùn)行的復(fù)位入口 3. 4. While( 1 ) /非零表示真,如果為真則執(zhí)行下面循環(huán)體的語(yǔ)句 5. 6. P3_1 = 1; /給 P3_1賦值 1,引腳 P3.1就能輸出高電平 VCC 7. P3_1 = 0; /給 P3_1賦值 0,引腳 P3.1就能輸出低電平 GND 8. /由于一直為真,所以不斷輸出高、低、高、低 ,從而形成方波 9. 將某引腳的輸入電平取反后,從另一個(gè)引腳輸出:( 比如 P0.4 = NOT( P1.1) ) 代碼 1. #include /該頭文檔中有單片機(jī)內(nèi)部資源的符號(hào)化定義,其中包含 P0.4和P1.1 2. void main( void ) /void 表示沒(méi)有輸入?yún)?shù),也沒(méi)有函數(shù)返值,這入單片機(jī)運(yùn)行的復(fù)位入口 3. 4. P1_1 = 1; /初始化。 P1.1作為輸入,必須輸出高電平 5. While( 1 ) /非零表示真,如果為真則執(zhí)行下面循環(huán)體的語(yǔ)句 6. 7. if( P1_1 = 1 ) /讀取 P1.1,就是認(rèn)為 P1.1為輸入,如果 P1.1輸入高電平 VCC 8. P0_4 = 0; /給 P0_4賦值 0,引腳 P0.4就能輸出低電平 GND 2 51 單片機(jī) C 語(yǔ)言編程實(shí)例 9. else /否則 P1.1輸入為低電平 GND 10. / P0_4 = 0; /給 P0_4賦值 0,引腳 P0.4就能輸出低電平 GND 11. P0_4 = 1; /給 P0_4賦值 1,引腳 P0.4就能輸出高電平 VCC 12. /由于一直為真,所以不斷根據(jù) P1.1的輸入情況,改變 P0.4的輸出電平 13. 將某端口 8個(gè)引腳輸入電平,低四位取反后,從另一個(gè)端口 8個(gè)引腳輸出:( 比如 P2 = NOT( P3 ) ) 代碼 1. #include /該頭文檔中有單片機(jī)內(nèi)部資源的符號(hào)化定義,其中包含 P2和P3 2. void main( void ) /void 表示沒(méi)有輸入?yún)?shù),也沒(méi)有函數(shù)返值,這入單片機(jī)運(yùn)行的復(fù)位入口 3. 4. P3 = 0xff; /初始化。 P3作為輸入,必須輸出高電平,同時(shí)給 P3口的 8 個(gè)引腳輸出高電平 5. While( 1 ) /非零表示真,如果為真則執(zhí)行下面循環(huán)體的語(yǔ)句 6. /取反的方法是異或 1,而不取反的方法則是異或 0 7. P2 = P30x0f /讀取 P3,就是認(rèn)為 P3為輸入,低四位異或者 1,即取反,然后輸出 8. /由于一直為真,所以不斷將 P3取反輸出到 P2 9. 注意:一個(gè)字節(jié)的 8 位 D7、 D6至 D0,分別輸出到 P3.7、 P3.6至 P3.0,比如 P3=0x0f,則 P3.7、P3.6、 P3.5、 P3.4四個(gè)引腳都輸出低電 平,而 P3.3、 P3.2、 P3.1、 P3.0四個(gè)引腳都輸出高電平。同樣,輸入一個(gè)端口 P2,即是將 P2.7、 P2.6至 P2.0,讀入到一個(gè)字節(jié)的 8 位 D7、 D6至 D0。 第一節(jié):?jiǎn)螖?shù)碼管按鍵顯示 單片機(jī)最小系統(tǒng)的硬件原理接線圖: 1. 接電源: VCC( PIN40)、 GND( PIN20)。加接退耦電容 0.1uF 2. 接晶體: X1( PIN18)、 X2( PIN19)。注意標(biāo)出晶體頻率(選用 12MHz),還有輔助電容30pF 3. 接復(fù)位: RES( PIN9)。接上電復(fù)位電路,以及手動(dòng)復(fù)位電路,分 析復(fù)位工作原理 4. 接配置: EA( PIN31)。說(shuō)明原因。 發(fā)光二極的控制:?jiǎn)纹瑱C(jī) I/O輸出 將一發(fā)光二極管 LED的正極(陽(yáng)極)接 P1.1, LED的負(fù)極(陰極)接地 GND。只要 P1.1輸出高電平 VCC, LED就正向?qū)ǎ▽?dǎo)通時(shí) LED上的壓降大于 1V),有電流流過(guò) LED,至發(fā) LED發(fā)亮。實(shí)際上由于 P1.1高電平輸出電阻為 10K,起到輸出限流的作用,所以流過(guò) LED的電流小于( 5V-1V)/10K = 0.4mA。只要 P1.1輸出低電平 GND,實(shí)際小于 0.3V, LED就不能導(dǎo)通,結(jié)果 LED不亮。 開(kāi)關(guān)雙鍵的輸入:輸入先輸出高 一個(gè)按鍵 KEY_ON接在 P1.6與 GND之間,另一個(gè)按鍵 KEY_OFF接 P1.7與 GND之間,按 KEY_ON后 LED亮,按 KEY_OFF后 LED滅。同時(shí)按下 LED半亮, LED保持后松開(kāi)鍵的狀態(tài),即 ON亮 OFF滅。 代碼 1. #include 2. #define LED P11 /用符號(hào) LED代替 P1_1 3. #define KEY_ON P16 /用符號(hào) KEY_ON代替 P1_6 4. #define KEY_OFF P17 /用符號(hào) KEY_OFF代替 P1_7 5. void main( void ) /單片機(jī)復(fù)位后的執(zhí)行入口, void表示空,無(wú)輸入?yún)?shù),無(wú)返回值 6. 7. KEY_ON = 1; /作為輸入,首先輸出高,接下 KEY_ON, P1.6則接地為 0,否則輸入為1 8. KEY_OFF = 1; /作為輸入,首先輸出高,接下 KEY_OFF, P1.7則接地為 0,否則輸入為1 9. While( 1 ) /永遠(yuǎn)為真,所以永遠(yuǎn)循環(huán)執(zhí)行如下括號(hào)內(nèi)所有語(yǔ)句 10. 11. if( KEY_ON=0 ) LED=1; /是 KEY_ON接下,所示 P1.1輸出高, LED亮 12. if( KEY_OFF=0 ) LED=0; /是 KEY_OFF接下,所示 P1.1輸出低, LED滅 13. /松開(kāi)鍵后,都不給 LED賦值,所以 LED保持最后按鍵狀態(tài)。 14. /同時(shí)按下時(shí), LED不斷亮滅,各占一半時(shí)間,交替頻率很快,由于人眼慣性,看上去為半亮態(tài) 15. 數(shù)碼管的接法和驅(qū)動(dòng)原理 一支七段數(shù)碼管實(shí)際由 8 個(gè)發(fā)光二極管構(gòu)成,其中 7 個(gè)組形構(gòu)成數(shù)字 8 的七段筆畫(huà),所以稱(chēng)為七段數(shù)碼管,而余下的 1 個(gè)發(fā)光二極管作為小數(shù)點(diǎn)。作為習(xí)慣,分別給 8 個(gè)發(fā)光二極管標(biāo)上記號(hào): a,b,c,d,e,f,g,h。對(duì)應(yīng) 8 的頂上一畫(huà),按順時(shí)針?lè)较蚺?,中間一畫(huà)為 g,小數(shù)點(diǎn)為 h。 我們通常又將各二極與一個(gè)字節(jié)的 8 位對(duì)應(yīng),a(D0),b(D1),c(D2),d(D3),e(D4),f(D5),g(D6),h(D7),相應(yīng) 8 個(gè)發(fā)光二極管正好與單片機(jī)一個(gè)端口 Pn 的 8 個(gè)引腳連接,這樣單片機(jī)就可以通過(guò)引腳輸出高低電平控制 8 個(gè)發(fā)光二極的亮與滅,從而顯示各種數(shù)字和符號(hào);對(duì)應(yīng)字節(jié),引腳接法為: a(Pn.0), b(Pn.1), c(Pn.2), d(P

溫馨提示

  • 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)論