本書是在多年課程改革和工程實踐的基礎上編寫的。以80C51單片機為主芯片,按照理實一體化的編寫模式,將內容分為除緒論外的15個課題,涵蓋了80C51單片機軟件實驗環境的建立、硬件實驗電路板的制作、Proteus仿真軟件的使用以及80C51單片機的I/O口、中斷系統、定時器/計數器、指令系統和串行接口與串行通信,還講解了單片機與外圍設備接口的具體實現,包括顯示接口、模擬量轉換接口、鍵盤接口、I2C串行接口總線等,并介紹了實時時鐘芯片、LED點陣顯示屏、液晶顯示屏等幾種常用的接口芯片及其具體應用。
根據單片機應用技術實戰性很強的特點,本書在編寫過程結合理論與實踐,邊學邊練。同時,為了消除讀者硬件資源的差別,書中所有的應用程序都采用Proteus仿真實現,選用切合生活實際的任務,具有很強的可操作性和趣味性。
為了方便教學,本書配有免費電子教案及交流網站,歡迎大家在線索取和交流。
本書可作為職業學校和成人教育單片機課程教材,也是電子愛好者自學單片機的首選。
“工學結合、校企合作”是遵循了職業教育發展規律,體現了職業教育特色的技能型人才培養模式。實行“工學結合、校企合作”是職業教育堅持以就業為導向、有效促進學生就業的需要,是減輕學生負擔、優化職業教育資源、擴大職業教育規模的需要。
為了貫徹落實《教育部關于職業院校試行工學結合、校企合作的意見》以及《教育部關于全面提高職業教育教學質量的若干意見》的精神,由機械工業出版社牽頭,組織來自全國中、高等職業學校教學工作一線的骨干教師和學科帶頭人,通過社會調研、對勞動力市場人才需求分析和進行課題研究,在企業有關人員的積極參與下,結合職業教育相關專業學生的基礎情況,參考國家勞動和社會保障部最新頒布實施的國家職業標準的要求;開發了數控技術應用、機電技術應用、電工電子等專業“工學結合、校企合作”課程改革系列教材,力爭為全面提升職業教育教學質量、為社會培養更多技能型應用人才提供基礎保障。
本書是在長期進行“工學結合、校企合作”人才培養模式改革的基礎上編寫的,融進了編者多年教學、科研實踐所獲取的經驗及實例,著重從職業院校學生、業余電子愛好者的實際需求出發,適當增加常用計算機基礎知識,力求深入淺出,盡量結合實例說明問題。
本書在內容安排上,打破學科體系的束縛,以滿足讀者的實際需求為目標,將全書分為緒論和15個課題。緒論部分介紹了單片機的基本知識、計算機中數據的表示方法及常用的基本術語、存儲器的工作原理及分類等。課題1和課題2分別介紹了建立單片機軟件實驗環境和硬件實驗環境的方法;課題3~課題6分別介紹了單片機片內常用外圍部件,即I/O口、中斷系統、定時器/計數器、串行接口的結構特點、編程方法;課題7和課題8是單片機的指令系統和程序設計初步;課題9~課題15是單片機各種接口電路的實現和應用,包括顯示接口、模擬量轉換接口、鍵盤接口、I2C串行接口總線、實時時鐘芯片及其應用、液晶顯示屏及其應用等。每個課題都包含若干個任務,以任務為核心,配置為完成該任務而必須掌握的指令、硬件結構知識、軟件操作知識等。通過這種方式將學習者普遍感到比較困難的知識分解,使其一開始就能體會到成功的喜悅,有利于學習的順利進行。如I/O口部分由“單片機控制LED”、“用單片機發聲”、“用指撥開關設置音調”、“用單片機制作風火輪玩具”等4個任務組成;圍繞這些任務配置知識點,如單片機I/O口的結構、單片機的時序、單片機的內存等;通過一些指令編寫的簡單程序來實現相應的功能;通過Proteus模擬看到、聽到的效果,同時提供硬件實現方法。讀者既可以用模擬仿真的方法來觀察效果,也可以做出硬件,成為一個“小作品”。教師在講授這部分內容時,可以按照項目教學法的要求來組織教學。
本書將定時器/計數器、中斷、串行接口等內容安排在指令系統的前面,但在進行教學時,需要用到一些指令來編寫程序。
周堅,副教授,中國職業技術教育學會教學工作委員會電工與電子技術專業教學研究會委員,第二屆江蘇省職業教育教研中心組成員,江蘇省常州市第二屆名教師工作室領街人。從事教學科研工作近20年,先后在東南大學、德國格羅什·蓋羅職業學校進修,多次被評為各級教科研先進個人、先進教育工作者。近年來積極參與教學改革,進行“工學結合、校企合作”人才培養模式的推廣實踐,成果頗豐,并根據改革成果出版了多部教材,其中《單片機輕松入門》獲得第七屆全國高校出版社優秀暢銷書一等獎,《單片機C語言輕松入門》獲得中國書刊業發行協會“2007年度全行業優秀暢銷品種(科技類)”獎。此外還在國家雙獎期刊《無線電》等各類報刊、雜志上發表科研與教學論文20多篇,并多次在省市各級獲獎。建立的單片機技術應用與教學網站——平凡單片機工作室,多年來為廣大單片機愛好者及工程技術人員提供了許多大力幫助,受到《無線電》等專業雜志的推薦。
前言
緒論
0.1 單片機簡介
0.2 常見的單片機品種
0.3 計算機中數據的表示
0.3.1 常用的數制
0.3.2 二進制的算術運算
0.3.3 數制間的轉換
0.3.4 數的表示方法及常用計數制的對應關系
0.3.5 邏輯數據的表示
0.4 計算機中常用的基本術語
0.5 存儲器
0.5.1 存儲器的工作原理
0.5.2 半導體存儲器的分類
課題1 80C51單片機軟件實驗環境的建立
任務1 Keil軟件簡介、安裝與使用
1.1.1 Keil軟件簡介
1.1.2 安裝Keil軟件
1.1.3 使用Keil軟件
任務2 Proteus軟件簡介、安裝與使用
1.2.1 Proteus軟件簡介
1.2.2 安裝Proteus軟件
1.2.3 使用Proteus軟件
課題2 80C51單片機硬件實驗環境的建立
任務1 使用STC89C51單片機制作實驗板
2.1.1 電路原理圖
2.1.2 實驗板的制作與代碼的寫入
任務2 讓實驗板具有仿真功能
2.2.1 仿真的概念
2.2.2 仿真芯片制作
任務3 認識和使用成品實驗板
2.3.1 實驗板功能簡介
2.3.2 成品實驗板硬件結構
2.3.3 成品實驗板的基本使用方法
課題3 認識80C51單片機I/O端口
任務1 用單片機控制LED
3.1.1 任務分析
3.1.2 用Proteus仿真實現
任務2 用單片機發出聲音
3.2.1 任務分析
3.2.2 用Proteus仿真實現
3.2.3 延時工作過程分析
任務3 用指拔開關設置音調
3.3.1 音名與頻率的關系
3.3.2 用Proteus仿真實現
3.3.3 單片機內部的并行I/O口
任務4 用單片機制作風火輪玩具
3.4.1 用Proteus仿真實現
3.4.2 用硬件仿真實現
3.4.3 單片機的內部結構
課題4 80C51單片機的中斷系統
任務1 緊急停車控制器
4.1.1 中斷的概念
4.1.2 用Proteus仿真實現
4.1.3 80C51單片機的中斷結構
任務2 通過外部信號來改變風火輪的轉速
4.2.1 任務分析
4.2.2 用Proteus仿真實現
4.2.3 中斷響應分析
課題5 80C51單片機的定時器/計數器
任務1 包裝流水線中的計數器
5.1.1 定時/計數的基本知識
5.1.2 用Proteus仿真實現
5.1.3 單片機中的定時器/計數器工作原理
任務2 用單片機來唱歌
5.2.1 歌譜與歌曲的基本知識
5.2.2 用定時中斷來獲得不同頻率的信號
5.2.3 用單片機實現唱歌
課題6 80C51單片機的串行口與串行通信
任務1 使用串行口擴展并行口
6.1.1 用串行口擴展并行輸出口
6.1.2 用串行口擴展并行輸入口
6.1.3 80C51單片機的串行口
任務2 單片機與PC通信
6.2.1 串行通信的基本知識
6.2.2 單片機與PC通信的具體實現
6.2.3 串行口工作方式與波特率設置
課題7 80C51單片機的指令系統
任務1 指令的概念
7.1.1 有關指令與程序的基本概念
7.1.2 匯編語言指令格式
任務2 指令的尋址方式
7.2.1 尋址的概念
7.2.2 尋址方式
7.2.3 指令中的操作數標記
任務3 數據傳送類指令
7.3.1 數據傳送類指令介紹
7.3.2 用仿真軟件進行指令練習
任務4 算術運算類指令
任務5 邏輯運算類指令
任務6 控制轉移類指令
任務7 位操作類指令
課題8 程序設計初步
任務1 數制轉換程序
任務2 雙字節數運算程序
任務3 多字節移位程序
任務4 子程序設計
課題9 顯示接口
任務1 一位計數器
9.1.1 單個數碼管的結構
9.1.2 用單個數碼管顯示數字
9.1.3 數碼管顯示中的其他問題
任務2 銀行利率屏的制作
9.2.1 相關知識
9.2.2 任務實現
9.2.3 使用普通I/O擴展串行口
任務3 秒表的制作
9.3.1 LED數碼管動態接口原理
9.3.2 動態顯示程序編寫
9.3.3 秒表的實現
課題10 模擬量轉換接口
任務1 數字電壓表的制作
10.1.1 A/D轉換器工作原理
10.1.2 數字電壓的制作
任務2 數字化信號發生器
10.2.1 D/A轉換器工作原理
10.2.2 數字化信號發生器的實現
課題11 鍵盤接口
任務1 鍵控風火輪
11.1.1 單片機鍵盤簡介
11.1.2 鍵控風火輪的實現
任務2 可預置數的倒計時時鐘
11.2.1 倒計時時鐘功能描述
11.2.2 倒計時時鐘的實現
11.2.3 單片機鍵盤處理的方法
任務3 智能儀器的鍵盤
11.3.1 相關知識
11.3.2 智能儀器鍵盤功能的實現
課題12 I2C串行接口總線
任務1 I2C串行接口與VIIC軟件包
12.1.1 I2C總線簡介
12.1.2 典型I2C總線接口芯片AT24系列EEPROM
任務2 AT24C01A編程器的制作
12.2.1 編程器功能描述
12.2.2 編程器的制作
課題13 實時時鐘芯片及其應用
任務1 認識DS1302芯片
任務2 用DS1302制作實時時鐘
任務3 使用DS1302片內RAM存取數據
課題14 LED點陣顯示屏及其應用
任務1 認識LED點陣顯示屏及字模
14.1.1 LED點陣顯示屏的結構
14.1.2 字模的產生
任務2 用LED點陣顯示屏顯示漢字
14.2.1 用LED點陣顯示屏顯示單個漢字
14.2.2 用LED點陣顯示屏顯示多個漢字
課題15 液晶顯示屏及其應用
任務1 小小迎賓屏
15.1.1 字符型液晶顯示器簡介
15.1.2 字符型液晶顯示屏驅動程序
……
參考文獻
定時器/計數器是單片機中最常用的外圍功能部件之一,本課題通過流水線包裝計數器、單片機唱歌等任務來學習80C51單片機中定時器/計數器的結構及編程方法。任務1包裝流水線中的計數器
在某包裝流水線上有這樣的要求:每12瓶飲料為1打,做一個包裝。流水線上要對每瓶飲料計數,每計數到12就產生一個電信號以帶動某機械機構做出相應的動作,這就需要用到單片機的計數功能。本任務用單片機對信號進行計數,每到一個指定的數值就送出一個脈沖信號。
5.1.1定時/計數的基本知識
在學習定時器/計數器的結構、功能之前,首先了解一下關于定時/計數的概念。
1.計數
計數一般是指對事件的統計,通常以“1”為單位進行累加。生活中常見的計數應用有:錄音機上的磁帶量計數器;家用電度表;汽車、摩托車上的里程表等。此外,計數的工作也廣泛應用于各種工業生產活動中。
2.計數器的容量
錄音機上的計數器通常最多只能計到999,汽車上的里程表位數一般是6~7位,可見計數器總有一定的容量。80C51單片機中有兩個計數器,分別稱為T0和T1,這兩個計數器分別由兩個8位的計數單元組成的,即每個計數器都是16位的,最大的計數量是65536。
3.計數器的溢出
計數器的容量是有限的,當計數值大到一定程度就會出現錯誤。如:錄音機上的計數器,其計數值最大只到999,如果已經計數到了999,再來一個計數信號,計數值就會變成000,此時如果認為錄音機沒有動作顯然是錯誤的。有一些應用場合必須要有一定的方法來記錄這種超出計數器容量的情況。單片機中的計數器容量也是有限的,超出計數器的容量也會產生溢出,一旦產生溢出將使TFO或TF1變為1,這樣就記錄了溢出事件。在生活中,鬧鐘的鬧響可視作定時時間到產生的“溢出”,這通常意味著要求我們開始做某件事(起床、出門等),其他例子中的溢出也有類似的功能。推而廣之,溢出通常都意味著要求對某些事件進行處理。
4.任意設定計數個數的方法
801351單片機中2個計數器最大的計數值是65536,因此每次計數到65536會產生溢出。