本書以MCS51單片機為主體,從實際應用入手,結合大量實例循序漸進地講述51單片機C語言編程方法,以及51單片機的硬件結構和功能應用。全書分為基礎篇、應用篇和綜合提高篇。所有實例均采用仿真軟件Proteus仿真和實驗板實驗,使讀者真正做到"邊理論、邊實踐,在實踐中逐步掌握單片機的硬件結構和開發(fā)方法。
作者基于現(xiàn)有良好的單片機開發(fā)環(huán)境和近20年的教學經(jīng)驗,對單片機課程的傳統(tǒng)教學模式進行了改革:首先通俗地介紹單片機的開發(fā)條件,接著通過一個簡單實例,使讀者能夠完整地掌握單片機的整個開發(fā)過程,消除對單片機的畏懼感,然后再采用邊理論、邊實踐,學一樣、會一樣的案例教學模式,使單片機的硬件結構在實例學習中逐步掌握。另外,由于本書采用了易于掌握的C語言進行單片機應用程序設計,大大降低了讀者對單片機硬件結構了解程度的要求,使初學者在很短時間內就可以用C語言開發(fā)出功能強大的單片機實用系統(tǒng)。因此,本書可幫助讀者快速、輕松地邁入單片機大門。
前 言
《單片機C語言應用100例》第1版自2009年10月出版以來,得到了讀者的支持與肯定,在短短的3年時間內重印7次,并于2013年出版本書第2版。
第3版對第2版的一些例子進行了修改,擴寬了單片機應用領域。
本書作者從事單片機開發(fā)工作多年,常有讀者及學員問及:如何才能快速入門?我本人的體會:一定要動手做!僅僅看書是遠遠不夠的。和很多的讀者一樣,包括單片機在內的許多知識,我都是通過讀書等方法自學的。作者深深地認識到,一本好書對于自學者來說其重要性是不言而喻的,一本好的書可以引導學習者進入知識的大門,一本不合適的書則會斷送學習者的熱情。因此,作者基于現(xiàn)有良好的單片機開發(fā)環(huán)境和近20年的教學經(jīng)驗,對單片機課程的傳統(tǒng)教學模式進行了改革:首先通俗地介紹單片機的開發(fā)條件,接著通過一個簡單實例,使讀者能夠完整地掌握單片機的整個開發(fā)過程,消除對單片機的畏懼感,然后再采用邊理論、邊實踐,學一樣、會一樣的案例教學模式,使單片機的硬件結構在實例學習中逐步掌握。另外,由于本書采用了易于掌握的C語言進行單片機應用程序設計,大大降低了讀者對單片機硬件結構了解程度的要求,使初學者在很短時間內就可以用C語言開發(fā)出功能強大的單片機實用系統(tǒng)。因此,本書可幫助讀者快速、輕松地邁入單片機大門。
本書第1版出版后,受到了讀者的歡迎,許多讀者認為這是單片機入門的好書、本書的確可以做到輕松入門、本書值得向入門者推薦。
本書由王會良、王東鋒、董冠強編著。其中,第1~4章由河南科技大學王會良編寫;第5~7章由河南科技大學董冠強編寫;第8章由鄭州電子信息職業(yè)技術學院曲利紅編寫;第9~10章由河南科技大學李向攀編寫;第11章由空軍第一航空學院王東鋒編寫。全書由王會良統(tǒng)稿并定稿。
為便于讀者學習,本書有配套的實驗器材設備,其能進行的實驗有流水燈控制、數(shù)碼管顯示、鍵盤控制、音樂播放、繼電器控制、步進電動機控制、SPI 通信、I2C通信、液晶顯示、紅外接收、模/數(shù)轉換、數(shù)/模轉換、溫度檢測和串口通信等。
本書附送超值視頻光盤主要內容如下:
(1)單片機仿真軟件Proteus的教學視頻;
(2)單片機開發(fā)軟件Keil的教學視頻;
(3)前80例仿真實例與源程序;
(4)第11章仿真實例與源程序;
(5)配套實驗板的加工圖紙,讀者可拿到工廠直接加工成PCB,自己焊接上元器件即可進行實驗。
由于水平有限,書中不妥之處在所難免,敬請廣大讀者批評指正。
王會良
2017年4月
王會良,博士,副教授,畢業(yè)于西北工業(yè)大學,任職于河南科技大學機電工程學院,承擔多項國家自然科學出版基金項目,參與出版多項著作。
目 錄
基 礎 篇
第1章 單片機概述及實驗器材介紹2
1.1 單片機概述2
1.1.1 單片機的定義、分類與內部組成2
1.1.2 單片機應用系統(tǒng)的結構及其工作過程5
1.1.3 單片機的應用6
1.2 單片機基礎知識7
1.2.1 數(shù)制與數(shù)制間的轉換7
1.2.2 單片機中數(shù)的表示方法及常用數(shù)制的對應關系10
1.2.3 邏輯數(shù)據(jù)的表示10
1.2.4 單片機中常用的基本術語12
1.3 單片機入門的有效方法與途徑12
1.4 學習單片機的基本條件13
1.4.1 軟件條件13
1.4.2 硬件條件15
習題16
第2章 單片機開發(fā)軟件及開發(fā)過程17
2.1 仿真軟件Proteus的使用17
2.1.1 Proteus的主要功能特點17
2.1.2 實例1:功能感受Proteus仿真單片機播放《渴望》主題曲17
2.1.3 Proteus軟件的界面與操作介紹19
2.1.4 實例2:Proteus仿真設計快速入門21
2.2 Keil C51的使用31
2.2.1 單片機最小系統(tǒng)31
2.2.2 實例3:用Keil C51編寫點亮一個發(fā)光二極管的程序31
2.3 程序燒錄器及燒錄軟件的使用38
習題與實驗38
第3章 逐步認識單片機基本結構40
3.1 實例4:用單片機控制一個燈閃爍40
3.1.1 實現(xiàn)方法40
3.1.2 程序設計40
3.1.3 用Proteus軟件仿真41
3.1.4 延時程序分析43
3.2 實例5:將 P1口狀態(tài)送入P0、P2和P3口44
3.2.1 實現(xiàn)方法44
3.2.2 程序設計45
3.2.3 用Proteus軟件仿真45
3.2.4 用實驗板實驗46
3.2.5 I/O口功能介紹46
3.2.6 I/O口的結構分析46
3.3 實例6:使用P3口流水點亮8位LED49
3.3.1 實現(xiàn)方法49
3.3.2 程序設計50
3.3.3 用Proteus軟件仿真51
3.3.4 用實驗板實驗51
3.4 實例7:通過對P3口地址的操作流水點亮8位LED51
3.4.1 實現(xiàn)方法51
3.4.2 程序設計52
3.4.3 用Proteus軟件仿真53
3.4.4 用實驗板實驗53
3.5 MCS51單片機存儲器的基本結構53
3.5.1 程序存儲器53
3.5.2 數(shù)據(jù)存儲器53
3.6 單片機的復位電路55
習題與實驗55
第4章 單片機C語言開發(fā)基礎56
4.1 C語言源程序的結構特點56
4.2 標志符與關鍵字57
4.3 C語言的數(shù)據(jù)類型與運算符59
4.3.1 數(shù)據(jù)類型59
4.3.2 運算符62
4.3.3 實例8:用不同數(shù)據(jù)類型控制LED的閃爍65
4.3.4 實例9:用P0口、P1 口分別顯示加法和減法運算結果68
4.3.5 實例10:用P0、P1口顯示乘法運算結果70
4.3.6 實例11:用P1、P0口顯示除法運算結果71
4.3.7 實例12:用自增運算控制P0口8位LED的閃爍花樣73
4.3.8 實例13:用P0口顯示邏輯與運算結果74
4.3.9 實例14:用P0口顯示條件運算結果74
4.3.10 實例15:用P0口顯示按位異或運算結果75
4.3.11 實例16:用P0顯示左移運算結果76
4.3.12 實例17:萬能邏輯電路實驗77
4.3.13 實例18:用右移運算流水點亮P1口8位LED78
4.4 C語言的語句79
4.4.1 概述79
4.4.2 控制語句80
4.4.3 實例19:用if語句控制P0口8位LED的點亮狀態(tài)84
4.4.4 實例20:用switch語句控制P0口8位LED的點亮狀態(tài)86
4.4.5 實例21:用for語句設計鳴笛報警程序88
4.4.6 實例22:用while語句控制P0口8位LED閃爍花樣92
4.4.7 實例23:用do-while語句控制P0口8位LED流水點亮93
4.5 C語言的數(shù)組95
4.5.1 數(shù)組的定義和引用95
4.5.2 實例24:用字符型數(shù)組控制P0口8位LED流水點亮97
4.5.3 實例25:用P0口顯示字符串常量98
4.6 C語言的指針99
4.6.1 指針的定義與引用100
4.6.2 實例26:用P0口顯示指針運算結果102
4.6.3 實例27:用指針數(shù)組控制P0口8位LED流水點亮103
4.6.4 實例28:用數(shù)組的指針控制P0 口8 位LED流水點亮104
4.7 C語言的函數(shù)106
4.7.1 函數(shù)的定義與調用106
4.7.2 實例29:用P0 、P1口顯示整型函數(shù)返回值109
4.7.3 實例30:用有參數(shù)函數(shù)控制P0口8位LED流水速度111
4.7.4 實例31:用數(shù)組作為函數(shù)參數(shù)控制P0口8位LED流水點亮112
4.7.5 實例32:用指針作為函數(shù)參數(shù)控制P0口8位LED流水點亮113
4.7.6 實例33:用函數(shù)型指針控制P0口8位LED流水點亮115
4.7.7 實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串116
4.7.8 實例35:字符函數(shù)ctype.h應用舉例118
4.7.9 實例36:內部函數(shù)intrins.h應用舉例119
4.7.10 實例37:標準函數(shù)stdlib.h應用舉例121
4.7.11 實例38:字符串函數(shù)string.h應用舉例122
4.8 C語言的編譯預處理123
4.8.1 常用預處理命令介紹123
4.8.2 實例39:宏定義應用舉例126
4.8.3 實例40:文件包含應用舉例127
4.8.4 實例41:條件編譯應用舉例128
習題與實驗129
第5章 單片機的定時器/計數(shù)器131
5.1 定時器/計數(shù)器的基本概念131
5.2 定時器/計數(shù)器的結構及工作原理132
5.2.1 定時器/計數(shù)器的結構133
5.2.2 定時器/計數(shù)器的工作原理133
5.3 定時器/計數(shù)器的控制134
5.3.1 定時器/計數(shù)器的方式控制寄存器(TMOD)134
5.3.2 定時器/計數(shù)器控制寄存器(TCON)134
5.3.3 定時器/計數(shù)器的4種工作方式135
5.3.4 定時器/計數(shù)器中定時/計數(shù)初值的計算138
5.4 定時器/計數(shù)器應用舉例138
5.4.1 實例42:用定時器T0控制跑馬燈實現(xiàn)138
5.4.2 實例43:用定時器T1查詢方式控制報警器鳴笛實現(xiàn)140
習題與實驗142
第6章 單片機的中斷系統(tǒng)143
6.1 中斷系統(tǒng)的基本概念143
6.2 中斷系統(tǒng)的結構及控制144
6.2.1 中斷系統(tǒng)的結構144
6.2.2 中斷系統(tǒng)的控制145
6.3 中斷系統(tǒng)應用舉例148
6.3.1 實例44:用定時器T0的中斷方式控制跑馬燈實現(xiàn)148
6.3.2 實例45:用定時器T1分式1控制控制報警器鳴笛實現(xiàn)149
6.3.3 實例46:用定時器T0的中斷方式控制PWM波實現(xiàn)151
6.3.4 實例47:用定時器T0的音樂播放器的實現(xiàn)154
6.3.5 實例48:用定時器T0的門控制位測量外部正脈沖寬度159
6.3.6 實例49:用外中斷 測量負跳變信號累計數(shù)161
習題與實驗163
第7章 串行通信技術164
7.1 串行通信的基本概念164
7.2 串行通信口的結構166
7.3 串行通信口的控制166
7.3.1 串行口控制寄存器SCON167
7.3.2 電源控制寄存器PCON167
7.3.3 4種工作方式與波特率的設置168
7.4 串行通信口應用舉例171
7.4.1 實例50:基于方式1的單工通信171
7.4.2 實例51:基于方式3的單工通信173
7.4.3 實例52:單片機向計算機發(fā)送數(shù)據(jù)176
7.4.4 實例53:計算機控制單片機LED顯示178
習題與實驗180
應 用 篇
第8章 接口技術182
8.1 LED數(shù)碼管接口技術182
8.1.1 LED數(shù)碼管的原理和接口電路182
8.1.2 實例54:用LED數(shù)碼管顯示數(shù)字5184
8.1.3 實例55:用LED數(shù)碼管循環(huán)顯示數(shù)字0~9185
8.1.4 實例56:用數(shù)碼管慢速動態(tài)掃描顯示數(shù)字1234186
8.1.5 實例57:快速動態(tài)掃描顯示數(shù)字1234188
8.1.6 實例58:點陣LED動態(tài)顯示實現(xiàn)189
8.2 鍵盤接口技術191
8.2.1 獨立式鍵盤的工作原理192
8.2.2 實例59:無軟件消抖的獨立式鍵盤輸入實驗193
8.2.3 實例60:帶軟件消抖的獨立式鍵盤輸入實驗194
8.2.4 實例61:CPU控制的鍵盤掃描實驗195
8.2.5 實例62:定時器中斷控制的鍵盤掃描實驗200
8.2.6 實例63:一鍵多能實驗201
8.2.7 實例64:獨立式鍵盤控制步進電動機實驗204
8.2.8 矩陣鍵盤的工作原理209
8.2.9 實例65:矩陣鍵盤按鍵值的數(shù)碼管顯示210
8.2.10 實例66:簡易電子琴設計214
8.3 字符型LCD接口技術220
8.3.1 1602字符型LCD簡介220
8.3.2 實例67:用LCD顯示字符A225
8.3.3 實例68:液晶時鐘設計230
習題與實驗231
第9章 新型串行接口芯片應用232
9.1 I2C總線器件及其應用實例232
9.1.1 I2C總線接口232
9.1.2 實例69:將按鍵次數(shù)寫入AT24C02,再讀出送LCD顯示235
9.1.3 實例70:對I2C總線上掛接兩個AT24C02的讀/寫操作236
9.1.4 實例71:將好人一生平安樂譜寫入AT24C02并播放238
9.2 單總線器件及其應用實例239
9.2.1 單總線簡介239
9.2.2 實例72:DS18B20溫度檢測及其LCD顯示244
9.3 SPI總線接口芯片及其應用實例245
9.3.1 SPI串行總線簡介245
9.3.2 實例73:將數(shù)據(jù)0xaa寫入X5045再讀出送P1口顯示248
9.3.3 實例74:將流水燈控制碼寫入X5045并讀出送P1口顯示250
9.3.4 實例75:對SPI總線上掛接的兩個X5045的讀/寫操作251
習題與實驗252
第10章 常用功能器件應用舉例254
10.1 模/數(shù)(A/D)轉換器件254
10.1.1 A/D轉換基礎254
10.1.2 實例76:基于ADC0832的5V直流數(shù)字電壓表256
10.2 數(shù)/模(D/A)轉換器件258
10.2.1 D/A轉換基礎258
10.2.2 實例77:用DAC0832產(chǎn)生鋸齒波電壓260
10.3 紅外線遙控信號接收器件261
10.3.1 紅外線信號接收基礎261
10.3.2 實例78:用P1口顯示紅外遙控器的按鍵值263
10.3.3 實例79:用紅外線遙控器控制繼電器265
10.4 適時時鐘芯片266
10.4.1 常用適時時鐘芯片介紹267
10.4.2 實例80:基于DS1302的日歷時鐘269
習題與實驗271
綜合提高篇
第11章 綜合應用實例274
11.1 實例81:中文字符的液晶顯示274
11.1.1 圖形點陣顯示器簡介274
11.1.2 仿真原理圖設計278
11.1.3 程序設計與仿真279
11.2 實例82:12位A/D轉換器TLC2543的使用284
11.2.1 TLC2543介紹284
11.2.2 仿真原理圖設計286
11.2.3 程序設計與仿真288