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