《單片機C語言案例教程》是中職學校電子類專業單片機課程教材。教材在編寫上貼近中職學生的學習特點,以“案例+項目”的形式展開,適合初中以上讀者自學單片機技術之用。《單片機C語言案例教程》介紹以不使用匯編語言、不使用編程器和不使用仿真器的簡約型開發手段,用Keil C51對51單片機進行系統編程的實用方法,從驅動一位數碼管顯示“8.”的最簡單的程序起步,用十多個案例作為鋪墊,翔實地講解了含時控功能的電子鐘溫度計和16×16點陣LED漢字顯示屏的功能創意和程序設計,引領學生對這兩個具有實際使用價值和市場開發前景的實用項目進行探究式學習和生產式制作,讓學生在理論與實踐相結合的學習過程中,切實掌握單片機關于兩個外中斷、兩個內中斷、單總線器件、雙總線器件、三總線器件、串并轉換、A/D轉換與D/A轉換、IAP編程和用串行通信把漢字字模從。PC寫入單片機片外Flash存儲器等核心技術。
為了方便教師的“教”和學生的“學”,《單片機C語言案例教程》還開發了電子教學包。電子教學包包含《單片機C語言案例教程》的電子教案、教學指南、案例源程序和習題解答,并有一篇講解《單片機C語言案例教程》所用單片機學習板印制電路圖設計的電子教程。需要時可登錄華信教育資源網下載。
中職學校機電類專業學生學習單片機技術,有利于提高中職學生的職業技能和就業創業能力,有利于中職學生的繼續學習和終身學習。結合中等職業學校的教學實際和中職學生的學習特點,我們編寫了這本《單片機C語言案例教程》。
學習從興趣起步!興趣是最好的老師!激發和發展學生的單片機學習興趣,是本書的編寫宗旨;強化單片機學習的操作和實踐,是本書的編寫風格。本書以“案例+項目”的形式展開中職學生單片機的學習開發過程。用案例為項目做鋪墊,用項目整合案例,用項目向學生展現其學習價值和使用價值。
全書共13章。
第1章簡要介紹了MCS-51單片機的內部結構和本書單片機學習板的電原理圖及其印制電路板圖,詳細介紹了用Keil C51編譯器和STC-ISP下載軟件完成單片機編程的整個過程步驟,并用6個案例展示了C語言對單片機編程的易用性。
第2章集中介紹了單片機C語言編程的基本知識和簡明方法,以作為全書各案例源程序分析時的理論依據,可以不按其小節順序講授。
第3章以數碼管的花樣顯示為要求,用6個案例說明了單片機C語言編程中“謀篇布局”的思謀策略。
第4章簡要介紹了中斷的概念和單片機中的中斷資源,用5個案例說明了如何設置中斷允許寄存器IE和中斷優先級寄存器IP,展示了如何使用兩個外中斷、兩個內中斷的具體方法,演示了中斷嵌套和中斷串接的特點。
第5章介紹了對三總線器件的編程要點,用一個案例展示了對三總線器件DS1302編程的軟、硬件設計。
第6章介紹了對二總線器件的編程要點,用一個案例展示了對二總線器件AT24C02編程的軟、硬件設計。
第7章介紹了對單總線器件的編程要點,用一個案例展示了對單總線器件DS18B20編程的軟、硬件設計。
第8章介紹了單片機開發中的編程整合技術,即用“有時控功能和溫度顯示的電子鐘”這一項目,展示了將三總線器件DS1302案例、二總線器件AT24C02案例、單總線器件DS18B20案例整合成一個產品項目的單片機學習開發技術。在這個項目中,還根據項目所需,綜合使用了單片機中的四個中斷資源。
第9章介紹了16×16點陣LED漢字顯示屏的軟、硬件設計。用16×16點陣LED漢字顯示屏這一項目,展示了用C語言開發小型LED漢字顯示屏的實用技術方案。
第10章介紹了基于宏晶公司技術資料的STC單片機片內E2PROM編程技術。用一個案例演示了STC單片機片內E2PROM的編程效果,用另一項目提升了“有時控功能和溫度顯示的電子鐘”的開發價值。
第11章介紹了單片機與PC間的串行通信技術。用一個案例展示了單片機與PC間串行通信的實用方法及其效果。
第12章介紹了單片機擴充片外數據存儲器的接口電路,用兩個案例示范了HM62256和W29C020的硬件接口和讀寫技術,用兩個項目展示了使用片外數據存儲器的LED漢字顯示屏的技術升級方案。
第13章介紹了模數轉換和數模轉換知識,用一個案例展示了ADC0809的接口電路和模數轉換效果,用另一個案例展示了DAC0832的接口電路和數模轉換效果。
除第2章外,本書各章均配有電子教案。每章的電子教案均按節的順序組織。對書中的每一案例的下載操作和運行效果,電子教案中都制作有一段視頻演示利于提高教學效果。
第1章 單片機基礎
1.1 單片機簡介
1.2 用單片機芯片組成單片機應用系統
1.3 對單片機編程以實現單片機系統的功能
【案例1】 在4位數碼管的最左位上顯示“8.”
1.4 把程序寫入單片機芯片的操作平臺的操作步驟
1.5 從數碼管顯示學單片機編程
【案例2】 數碼管上的“8.8.”顯示
【案例3】 被動形式的“8051”顯示
【案例4】 主動形式的“8051”顯示
【案例5】 模塊化的“8051”顯示
【案例6】 實用型的“8051”顯示
1.6 源程序的閱讀要點
1.7 REG51.h頭文件簡介
小結1
習題1
第2章 C語言編程基礎
2.1 C語言程序的組成結構和運行機制
2.2 C語言的字符集、標識符、關鍵字和語句
2.3 C語言中的數據類型
2.4 常量和變量
2.5 整型數據
2.6 實型數據
2.7 字符型數據
2.8 C51擴充數據類型
2.9 運算符與表達式
2.9.1 算術運算符與算術表達式
2.9.2 賦值運算符與賦值表達式
2.9.3 關系運算符和關系表達式
2.9.4 邏輯運算符與邏輯表達式
2.9.5 位運算符與位運算表達式
2.9.6 逗號運算符與逗號表達式
2.9.7 運算符的優先級和結合性
2.10 程序的三種基本結構
2.11 選擇結構
2.12 循環結構
2.13 數組
2.13.1 一維數組的定義和引用
2.13.2 二維數組的定義和引用
2.14 變量和數組的存儲器類型
2.15 函數的定義和調用
2.15.1 系統庫函數
2.15.2 用戶自定義函數
2.15.3 函數的定義
2.15.4 函數調用的方式和規則
2.15.5 全局變量和局部變量
小結2
習題2
第3章 用數碼管模擬的循環燈
【案例7】 “并駕齊驅”的跑馬燈
【案例8】 “邁步邊關”的巡邏燈
【案例9】 “大江東去”的流水燈
【案例10】 “孔雀開屏式”循環燈
【案例11】 奔騰不息的“8051”
【案例12】 9999倒數數的數碼管顯示
小結3
習題3
第4章 中斷資源的應用編程
4.1 中斷的概念
4.2 中斷允許寄存器IE和中斷優先級寄存器IP
4.2.1 中斷允許寄存器IE
4.2.2 中斷優先級寄存器IP
4.3 定時器/計數器簡介
4.3.1 定時器/計數器體系結構示意圖
4.3.2 特殊功能寄存器TCON
4.3.3 特殊功能寄存器TMOD
【案例13】 用外中斷INT1操作插曲顯示
【案例14】 中斷插曲的中斷插曲顯示
【案例15】 基于定時器中斷的數字鐘
【案例16】 基于計數器中斷的中斷插曲
【案例17】 定時器T1與計數器T0的串接使用
小結4
習題4
第5章 日歷時鐘DS1302的應用編程
5.1 日歷時鐘DS1302簡介
5.2 對DS1302的寫讀程序設計
5.2.1 最底層的按位寫讀函數
5.2.2 對DS1302的字節寫讀函數
【案例18】 基于DS1302的實用電子鐘
小結5
習題5
第6章 AT24C02的應用編程
6.1 I2C總線簡介
6.1.1 I2C總線接口
6.1.2 I2C器件的地址
6.1.3 對I2C器件進行數據傳送的操作時序
6.2 AT24C02簡介
6.2.1 AT24C02引腳圖
6.2.2 讀/寫AT24C02的專用函數
6.2.3 9個專用函數間的調用路線圖
【案例19】 AT24C02應用編程
小結6
習題6
第7章 DS18B20的編程應用
7.1 DS18B20使用簡介
7.1.1 DS18B20的外形及與單片機的接口
7.1.2 DS18B20的內部結構和操作指令
7.2 對DS18B20的操作時序和讀/寫專用函數
7.2.1 對DS18B20的操作時序
7.2.2 DS18B20的讀/寫專用函數
【案例20】 DS18B20的應用編程
小結7
習題7
第8章 有時控功能和溫度顯示的電子鐘項目設計
8.1 項目簡介
8.2 項目源程序設計要點分析
小結8
習題8
第9章 16×16點陣LED漢字顯示屏項目設計
9.1 項目簡介
9.2 16×16點陣LED漢字顯示屏電原理圖
9.3 74HC138功能簡介
9.4 74HC595功能簡介
9.5 單片機與LED漢字顯示屏的接口設計
9.6 漢字字模在二維數組中的存儲格式
9.7 16×64點陣LED漢字顯示屏項目源程序及分析
9.8 16×16漢字字模文件的建立
小結9
習題9
第10章 使用片內E2PROM存儲器
10.1 IAP和ISP簡介
10.2 IAP技術的接口函數
【案例21】 片內E2PROM編程案例
10.3 用片內E2PROM取代電子鐘項目中的AT24C02
小結10
習題10
第11章 單片機與PC的串行通信
【案例22】 單片機與PC的串行通信案例
小結11
習題11
第12章 單片機片外數據存儲器的擴充
12.1 HM62256存儲器的擴充及使用案例
12.1.1 HM62256存儲器的擴充
12.1.2 HM62256存儲器的使用
12.2 用HM62256存儲漢字字模案例
12.3 W29C020存儲器的擴充和使用案例
12.3.1 W29C020存儲器的擴充
12.3.2 W29C020存儲器的使用
12.4 用W29C020存儲字模的LED漢字顯示屏項目設計
小結12
習題12
第13章 A/D轉換與D/A轉換簡介
13.1 A/D器件ADC0809簡介
13.2 ADC0809的使用接口與編程
13.2.1 ADC0809與單片機的接口
13.2.2 ADC0809的應用編程
【案例23】 基于ADC0809的模/數轉換示例
13.3 D/A器件DAC0832簡介
13.4 DAC0832的使用接口與編程
13.4.1 DAC0832與單片機的接口
13.4.2 DAC0832的應用編程
【案例24】 DAC0832的應用編程
小結13
習題13
IAP(In Application Programable)是指在應用編程。其實質是,新型號的51單片機由于新增了若干特殊功能寄存器,當單片機系統在程序運行時,借助新增的特殊功能寄存器,運行程序自己可以對程序存儲器寫入數據或修改程序。
ISP(In System:Programable)是指在系統編程。其實質是,不需要將單片機芯片從其系統電路板上取下來后插在通用編程器上來寫入程序,而是將單片機芯片焊在系統電路板上被寫入程序。這種編程是由上位機運行專用軟件,通過串口和單片機芯片上出廠時已固化在芯片Flash中的引導程序Bootloader進行通信,告訴引導程序,此時要對單片機片內的Flash程序存儲器進行編程。從而引導程序使用IAP技術,把上位機下傳過來的HEX文件,寫入單片機片內的程序存儲器,以完成對在系統電路板上的單片機芯片編程。
ISP技術中包含了IAP技術。ISP技術中的重點是被編程的單片機芯片出廠時必須固化boot程序。單片機上電運行時就首先執行該boot程序,而boot程序運行時首先檢測有無上位機要下載HEX程序的要求,如果沒有上位機的下載要求,boot程序就跳轉到用戶程序首地址上去運行用戶的單片機程序;如果檢測到有上位機下載程序的要求,就和上位機利用串行通信,把上位機上的HEX程序,寫入到用戶程序首地址上,寫完后再跳轉到用戶程序首地址上,去執行這次下載而得到的新用戶程序。