導航:首頁 > 操作系統 > 手把手教你單片機之八

手把手教你單片機之八

發布時間:2022-06-27 00:08:49

1. 51單片機如何使用

使用51單片機需要達到以下基本條件:

1、至少要搭建一個最小系統;

2、你需要編制一個51的控製程序;

3、你需要將程序編譯連接成HEX或BIN格式的代碼並下載或燒錄到51單片機。

這樣你就可以使用這款51單片機了。

2. 學單片機步驟

使用單片機就是理解單片機硬體結構,以及內部資源的應用,在匯編或C語言中學會各種功能的初始化設置,以及實現各種功能的程序編制。?

第一步:數字I/O的使用

使用按鈕輸入信號,發光二極體顯示輸出電平,就可以學習引腳的數字I/O功能,在按下某個按鈕後,某發光二極體發亮,這就是數字電路中組合邏輯的功能,雖然很簡單,但是可以學習一般的單片機編程思想,例如,必須設置很多寄存器對引腳進行初始化處理,才能使引腳具備有數字輸入和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。

第二步:定時器的使用

學會定時器的使用,就可以用單片機實現時序電路,時序電路的功能是強大的,在工業、家用電氣設備的控制中有很多應用,例如,可以用單片機實 現一個具有一個按鈕的樓道燈開關,該開關在按鈕按下一次後,燈亮3分鍾後自動滅,當按鈕連續按下兩次後,燈常亮不滅,當按鈕按下時間超過2s,則燈滅。數 字集成電路可以實現時序電路,可編程邏輯器件(PLD)可以實現時序電路,可編程式控制制器(PLC)也可以實現時序電路,但是只有單片機實現起來最簡單,成本最低。定時器的使用是非常重要的,邏輯加時間控制是單片機使用的基礎。

第三步:中斷

單片機的特點是一段程序反復執行,程序中的每個指令的執行都需要一定的執行時間,如果程序沒有執行到某指令,則該指令的動作就不會發生,這樣就會耽誤很多快速發生的事情,例如,按鈕按下時的下降沿。要使單片機在程序正常運行過程中,對快速動作做出反應,就必須使用單片機的中斷功能,該功能就是在快速動作發生後,單片機中斷正常運行的程序,處理快速發生的動作,處理完成後,在返回執行正常的程序。中斷功能使用中的困難是需要精確地知道什麼時候不允許中斷發生(屏蔽中斷)、什麼時候允許中斷發生(開中斷),需要設置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應該干什麼,中斷完成後,程序應該干什麼等等。中斷學會後,就可以編制更復雜結構的程序,這樣的程序可以干著一件事,監視著一件事,一旦監視的事情發生,就中斷正在乾的事情,處理監視的事情,當然也可以監視多個事情,形象的比喻,中斷功能使單片機具有吃著碗里的,看著鍋里的功能。

以上三步學會,就相當於降龍十八掌武功,會了三掌了,可以勉強護身。

第四步:與PC機進行RS232通信

單片機都有USART介面,特別是MSP430系列中很多型號,都具有兩個USART介面。USART介面不能直接與PC機的RS232介面連接,它們之間的邏輯電平不同,需要使用一個MAX3232晶元進行電平轉換。

USART介面的使用是非常重要的,通過該介面,可以使單片機與PC機之間交換信息,雖然RS232通信並不先進,但是對於介面的學習是非常重要的。正確使用USART介面,需要學習通信協議,PC機的RS232介面編程等等知識。試想,單片機實驗板上的數據顯示在PC機監視器上,而PC機的鍵盤信號可以在單片機實驗板上得到顯示,將是多麼有意思的事情啊!

第五步:學會A/D轉換

MAP430單片機帶有多通道12位A/D轉換器,通過這些A/D轉換器可以使單片機操作模擬量,顯示和檢測電壓、電流等信號。學習時注意模擬地與數字地、參考電壓、采樣時間,轉換速率,轉換誤差等概念。使用A/D轉換功能的簡單的例子是設計一個電壓表。

第六步:學會PCI、I2C介面和液晶顯示器介面

這些介面的使用可以使單片機更容易連接外部設備,在擴展單片機功能方面非常重要。

第七步:學會比較、捕捉、PWM功能

這些功能可以使單片機能夠控制電機,檢測轉速信號,實現電機調速器等控制起功能。如果以上七步都學會,就可以設計一般的應用系統,相當於學會十招降龍十八掌,可以出手攻擊了。

第八步:學習USB介面、TCP/IP介面、各種工業匯流排的硬體與軟體設計????

學習USB介面、TCP/IP介面、各種工業匯流排的硬體與軟體設計是非常重要的,因為這是當前產品開發的發展方向。

到此為止,相當於學會15招降龍十八掌,但還不到打遍天下無敵手的境界。即使如此,也算是單片機大蝦了!!

3. 手把手教你學51單片機的目 錄

第1章 MCS-51系列單片機的起源和發展 1
1.1 MCS-51系列單片機的起源 2
1.1.1 單片機的誕生 2
1.1.2 單片機的歷史 2
1.1.3 MCS-51單片機的歷史 3
1.1.4 MCS-51系列單片機的特點 4
1.2 MCS-51系列單片機的發展現況 5
1.2.1 概述 5
1.2.2 最新51系列單片機介紹 6
1.3 小結 12
第2章 開發一個51系列單片機項目需要的資源 14
2.1 基礎知識的學習 15
2.1.1 單片機基礎知識 15
2.1.2 匯編語言 15
2.1.3 C語言 16
2.1.4 模擬電路和數字電路 16
2.2 硬體資源 17
2.2.1 單片機試驗電路板 17
2.2.2 模擬器 17
2.2.3 模擬器的選擇和安裝 19
2.2.4 編程器(燒錄器) 20
2.3 軟體開發環境 21
2.3.1 軟體編輯環境 21
2.3.2 KEIL軟體的安裝 21
2.3.3 KEIL軟體的使用方法 22
2.4 單片機型號的選擇 22
2.5 51單片機下載線的製作 23
2.5.1 硬體調試 24
2.5.2 使用方法 24
2.6 MON51模擬器的製作 25
2.6.1 原理圖 25
2.6.2 Mon51硬體調試 26
2.6.3 軟體調試 27
2.7 小結 27
第3章 單片機項目的開發流程和需要遵守的規范 28
3.1 單片機項目開發流程介紹 29
3.2 原理圖設計規范 30
3.3 PCB圖設計規范 31
3.4 匯編語言設計規范 32
3.5 C51語言設計規范 34
3.6 小結 38
第4章 51單片機的基本結構 39
4.1 單片機的基本結構 40
4.1.1 中央處理器(CPU) 41
4.1.2 存儲器 43
4.1.3 定時器/計數器 45
4.1.4 中斷控制系統 45
4.1.5 串列口、並行口 46
4.1.6 匯流排(BUS) 46
4.1.7 時鍾電路 47
4.2 二進制、十進制、十六進制 47
4.3 哈佛結構與馮·諾伊曼結構 48
4.3.1 哈佛結構 48
4.3.2 馮·諾伊曼結構 49
4.4 單片機的指令系統 50
4.4.1 指令系統 50
4.4.2 定址方式 51
4.4.3 程序的執行過程 52
4.5 復雜指令集與精簡指令集 52
4.5.1 基本概念 52
4.5.2 復雜指令集與精簡指令集的特點 52
4.6 小結 53
第5章 51系列單片機指令系統 54
5.1 指令和指令格式 55
5.2 定址模式 56
5.2.1 直接定址 56
5.2.2 寄存器定址 57
5.2.3 寄存器間接定址 57
5.2.4 立即定址 57
5.2.5 變址定址 58
5.2.6 位定址 58
5.2.7 相對定址 58
5.3 數據傳送指令 58
5.4 算術運算指令 60
5.5 邏輯運算及移位指令 63
5.6 控制轉移指令 64
5.7 布爾變數操作指令 66
5.8 小結 67
第6章 匯編語言編程 68
6.1 什麼是宏匯編器(Macro Assembler) 69
6.2 匯編語言的開發環境 69
6.3 匯編語言的匯編過程 70
6.3.1 源文件(.ASM) 70
6.3.2 目標代碼文件(.HEX) 70
6.3.3 列表輸出文件(.LST) 70
6.3.4 匯編處理過程 71
6.3.5 常見的編譯錯誤 72
6.4 51單片機匯編語言指令與偽指令 72
6.4.1 常用單位與術語 72
6.4.2 常量與數值運算 72
6.4.3 匯編語言指令 74
6.4.4 匯編語言偽指令 74
6.5 用匯編語言設計程序的步驟 79
6.5.1 匯編語言程序設計的步驟 79
6.5.2 編製程序流程圖 79
6.6 程序設計結構 80
6.6.1 主程序和子程序 80
6.6.2 順序程序設計 81
6.6.3 分支結構程序設計 82
6.6.4 循環結構程序設計 83
6.6.5 查表程序設計 86
6.6.6 子程序設計 88
6.7 程序設計舉例 90
6.7.1 多位元組算術運算程序 90
6.7.2 數制轉換程序 91
6.7.3 多分支程序 93
6.8 小結 95
第7章 單片機C51語言編程 96
7.1 單片機C51語言概述 97
7.1.1 單片機C51語言的起源和發展 97
7.1.2 C51語言編程的優點 97
7.2 C51關鍵字和標識符 98
7.3 C51語言的數據類型 99
7.3.1 基本數據類型 99
7.3.2 構造型數據類型 101
7.4 常量、變數和指針 105
7.4.1 常量 105
7.4.2 變數 106
7.4.3 指針 108
7.4.4 存儲類型和存儲模式 109
7.5 C51的基本運算 112
7.5.1 C51的賦值運算 112
7.5.2 C51的算術運算 113
7.5.3 關系運算符 114
7.5.4 邏輯運算符 115
7.5.5 位運算符 116
7.6 函數 116
C51的庫函數 121
7.7 程序結構 122
7.7.1 順序控制結構 123
7.7.2 選擇控制語句 123
7.7.3 循環語句 124
7.7.4 C51語言編程實例 127
7.8 C51語言與匯編語言混合編程 128
7.8.1 在C51語言函數中嵌入匯編語言 128
7.8.2 在C51項目中加入匯編語言文件 129
7.9 一個簡單的C語言項目的實施 131
7.10 小結 135
第8章 一些簡單的實例 136
8.1 建立一個單片機小系統 137
8.1.1 原理圖設計 137
8.1.2 製作電路 139
8.1.3 調試 140
8.2 利用單片機的I/O口控制LED 140
8.2.1 原理圖設計 140
8.2.2 製作電路 141
8.2.3 設計程序 141
8.2.4 模擬和調試 143
8.3 利用定時器控制LED閃爍 143
8.3.1 原理圖設計 143
8.3.2 製作電路 143
8.3.3 設計程序 143
8.3.4 模擬和調試 145
8.4 控制蜂鳴器發聲 145
8.4.1 工作原理 145
8.4.2 原理圖設計 146
8.4.3 製作電路 146
8.4.4 程序設計 146
8.4.5 模擬調試 148
8.5 用一個按鍵控制LED閃爍 148
8.5.1 工作原理 148
8.5.2 原理圖設計 148
8.5.3 製作電路 149
8.5.4 程序設計 149
8.5.5 模擬調試 152
8.6 製作LED數碼管顯示 152
8.6.1 LED數碼管結構 152
8.6.2 工作原理 153
8.6.3 原理圖設計 153
8.6.4 製作電路 154
8.6.5 程序設計 155
8.6.6 模擬調試 157
8.7 設計一個鍵盤 158
8.7.1 鍵盤工作原理 158
8.7.2 原理圖設計 159
8.7.3 製作電路 161
8.7.4 程序設計 161
8.7.5 模擬調試 164
8.8 看門狗電路的設計 165
8.8.1 工作原理 165
8.8.2 原理圖設計 166
8.8.3 製作電路 168
8.8.4 程序設計 168
8.8.5 模擬調試 171
8.9 小結 172
第9章 51單片機電源系統的設計 173
9.1 開關穩壓電源和線性穩壓電源的基本知識 174
9.2 線性穩壓電源工作原理 174
9.2.1 串聯反饋型穩壓電源的工作過程 174
9.2.2 穩壓電路的保護環節 175
9.3 開關穩壓電源工作原理 176
9.3.1 開關電源的起源和發展趨勢 176
9.3.2 開關電源的分類 177
9.3.3 開關電源的工作原理 178
9.3.4 開關電源的選用 185
9.4 常用電源轉換晶元介紹 186
9.4.1 三端集成穩壓器 186
9.4.2 低壓差線性穩壓器(LDO)的原理與應用 188
9.4.3 常用DC/DC開關穩壓電源晶元的選擇 191
9.5 設計一個簡單的線性電源單片機供電系統 193
常用的三端集成穩壓電源 193
9.6 DC/DC開關電源單片機供電系統的設計 194
9.6.1 工作原理 194
9.6.2 基本應用設計 195
9.7 用MC34063設計開關電源 198
9.7.1 MC34063性能簡介 198
9.7.2 MC34063降壓變換器電路 199
9.7.3 MC34063升壓變換器電路 199
9.7.4 MC34063大電流降壓變換器電路 200
9.7.5 MC34063大電流升壓變換器電路 200
9.7.6 MC34063反向變換電路 201
9.8 小結 201
第10章 51單片機通信介面實例 202
10.1 單片機常用匯流排簡述 203
10.1.1 晶元級匯流排 203
10.1.2 設備級匯流排 204
10.2 單片機系統數據的並行傳送方式與串列傳送方式 207
10.3 單片機系統和計算機之間實現串列通信 207
10.3.1 RS232串列通信工作原理 207
10.3.2 MCS-51系列單片機的串列口和控制寄存器 209
10.3.3 原理圖設計 210
10.3.4 製作電路 212
10.3.5 程序設計 213
10.3.6 模擬調試 216
10.4 實現與其他器件間的I2C通信 216
10.4.1 I2C協議 216
10.4.2 原理圖設計 220
10.4.3 製作電路 221
10.4.4 程序設計 221
10.4.5 模擬調試 228
10.5 添加一個實時時鍾 229
10.5.1 工作原理 229
10.5.2 原理圖設計 231
10.5.3 製作電路 232
10.5.4 程序設計 233
10.6 液晶顯示模塊介面實例 238
10.6.1 液晶顯示模塊簡介 238
10.6.2 原理圖設計 243
10.6.3 製作電路 243
10.6.4 程序設計 243
10.6.5 模擬調試 251
10.7 小結 251
第11章 51系列單片機的系統擴展 252
11.1 單片機系統擴展原理 253
11.1.1 為什麼擴展系統 253
11.1.2 單片機系統擴展原理 253
11.1.3 程序存儲器晶元的選擇 257
11.1.4 數據存儲器晶元的選擇 259
11.1.5 擴展系統I/O介面 260
11.2 存儲器系統擴展系統實例 260
11.2.1 擴展系統程序存儲器 260
11.2.2 用SRAM擴展數據存儲器舉例 262
11.2.3 同時擴展數據存儲器和程序存儲器 264
11.2.4 並行介面Flash存儲器擴展實例 265
11.2.5 串列介面Flash存儲器擴展實例 274
11.3 系統擴展I/O口實例 278
11.3.1 利用解碼器擴展I/O口 278
11.3.2 利用並口擴展晶元8255擴展I/O口 280
11.3.3 8155擴展並行I/O介面 282
11.3.4 利用串並位移寄存器晶元擴展I/O口 286
11.3.5 利用I2C介面擴展I/O口 289
11.4 小結 291
第12章 信號轉換介面 292
12.1 單片機與A/D轉換介面 293
12.1.1 A/D轉換原理 293
12.1.2 A/D轉換器的主要技術指標 294
12.1.3 A/D轉換器的分類 295
12.1.4 A/D轉換器的選擇原則 298
12.2 A/D轉換設計實例 299
12.2.1 ADC0809介紹 299
12.2.2 原理圖設計 300
12.2.3 製作電路 301
12.2.4 程序設計 301
12.2.5 模擬調試 306
12.3 D/A轉換原理 306
12.3.1 D/A轉換原理 306
12.3.2 D/A轉換器的主要技術指標 307
12.3.3 D/A轉換器的分類 308
12.3.4 D/A轉換器的選擇 309
12.4 D/A轉換設計實例 310
12.4.1 DAC0832晶元介紹 310
12.4.2 原理圖設計 311
12.4.3 製作電路 312
12.4.4 程序設計 312
12.4.5 模擬調試 314
12.5 實現PWM控制 314
12.5.1 PWM原理 314
12.5.2 PWM的實現和應用 314
12.5.3 程序設計 315
12.6 小結 317
第13章 單片機綜合實例 318
13.1 用DS18B20實現的溫控加熱模塊 319
13.1.1 DS18B20性能簡介 319
13.1.2 DSl8B20時序及工作過程 322
13.1.3 原理圖設計 324
13.1.4 程序設計 326
13.1.5 模擬調試 332
13.2 直流電動機控制 333
13.2.1 C8051F300簡介 333
13.2.2 原理圖設計 334
13.2.3 程序設計 335
13.2.4 模擬調試 340
13.3 數據採集儀設計實例 340
13.3.1 C8051F020介紹 340
13.3.2 CP2102簡介 342
13.3.3 原理圖設計 343
13.3.4 程序設計 345
13.4 小結 365
附錄A 80C51單片機 指令速查表 366
附錄B ASIIC碼表 370

4. 51單片機流水燈實驗(我用的是手把手教你學單片機的教程)

呵呵,這個延時有點長哦,有10S,你耐心再看看,有沒有變化,如果再沒變化,你可以軟體模擬一下那個i變數。看他是不是能加到10000,。還有,學51單片機的話建議你去學 郭天祥十天學會51單片機 那個很不錯。希望採納

5. 51單片機怎麼入門

1、建議你買個開發板,200塊的配置都非常全了,硬體有個直觀認識
2、網上有視頻教程《十天學會單片機》、《力天手把手教你單片機》等一些可以讓你快速入門,看視頻做筆記,邊練習,進步很快。手頭應該有些比較全面的單片機的書,方便查閱。
3、如果沒有開發板,只有用proteus模擬軟體,我推薦《單片機C語言程序設計實訓100例——基於8051+Proteus模擬》這本書
請看郭天祥大師的《怎樣學習單片機》
很多單片機初學者問我的第一句話就是怎樣才能學好單片機?對於這個問題我今天就我自己是如何開始學單片機、如何開始上手、如何開始熟練這個過程給大家講講。先說說單片機,我們現在用的比較多的是8051單片機,它的資料比較多,用的人也較多,市場也很大,51單片機內部結構比較簡單,非常適合初學者學習,建議初學者將51單片機做為入門級晶元。單片機屬於硬體,我強烈不推薦大家使用單片機模擬軟體來學習單片機,也可以肯定的告訴大家,使用模擬軟體是學不會單片機的,硬體只有把它擺在你的面前,親自操作它,才會有深刻的體會,才能學明白它。單片機這門課是一科非常重視動手實踐的科目,不能總是看書,但是也不能完全不看書,我們需要從書中大概了解一下單片機的各個功能寄存器,如果看的多了反而容易搞亂,尤其是現在市場上大多數講單片機的書一開始就講解較復雜的內存、地址、存儲器什麼的,更讓初學者感到不知所雲、難以入門。簡單的說,當我們使用單片機時,實際上就是用我們自己編寫的軟體去控制單片機的各個功能寄存器,再簡單些,就是控制單片機哪些引腳的電平什麼時候輸出高,什麼時候輸出低。由這些高低變化的電平來控制外圍電路,實現我們需要的各個功能。

關於看書,大家只需大概了解單片機各引腳的功能,了解下寄存器。第一次、第二次你可能看不明白,但這不要緊,因為還缺少實際的感觀認識。所以我總是說,學單片機看書看兩三天就夠了,而我們要把更多的時間放到實踐中去,這才是最關鍵的,在實踐的過程有不懂之處再查書,這樣記憶才深刻。關於實踐有兩種方法你可以選擇,方法一、你自己花錢買一塊單片機的學習板,不要求那種價格上千塊功能太太全的,對於初學者來說你買功能太全的板子,上面有很多東西你這輩子都用不著,我建議有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD 和DA、液晶、蜂鳴器、IIC匯流排、有USB擴展也最好,這些就差不多了。如果說我上面提到的這些功能你能熟練應用,那可以說對於單片機本身的操作你已經入門了,剩下的就是自己練習設計外圍電路,不斷的積累經驗。只要過了第一關,後面的路就好走多了,萬事開頭難,大家都聽過。方法二、你身邊如果有單片機方面的高手,向他求助,讓他幫你搭個簡單的最小系統板。對於高手來說,做個單片機的最小系統板可能只需要幾分鍾的時間,而對於初學者可就難多了,因為只有對硬體徹底了解了,你才能熟練的駕馭它。而如果你身邊沒有這樣的高手,又找不到可以幫助你的人,那我勸你還是選擇方法一,畢竟自己有一塊學習板要方便的多,以後做單片機類的小實驗時經常都能用得上,省時又省事。

有了單片機學習板之後你就要多練習,最好是自己有台電腦,少看電影,少打游戲,把學習板和電腦連好,打開調試軟體坐在電腦前,先學會怎麼用調試軟體,然後從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意願隨意流動時你已經入門了,你會發現單片機是多麼迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,比起跑跑卡丁車,比起魔獸世界,要好玩的多的多。當你編寫的程序按你的意願實現時,你比做任何事都開心,你會上癮的,真的,做電子設計的人真的會上癮。然後讓數碼管亮起來,這兩項會了後,你已經不能自拔了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,或是上網搜索。當得到解答後你會記住一輩子的,知識必須應用於現實生活中,解決實際問題,這樣才能發揮它的作用,你自己好好想想,上了這么多年大學,天天上課,你在課堂上學到了什麼?是不是為了期末考試而忙碌呢?考完得了90分,哈哈哈好高興啊,過一個假期,甚至過一個周末,然後忘的一干二凈,是不是?你學到什麼了?我認為這樣的生活沒有意義。但是我告訴你單片機一旦學會,永遠不會忘了。

另外我再說說關於用匯編語言還是C語言編程的問題。很多同學大一、二就開設了C語言的課,我也上過,我知道那時上課老師講的就是幾乘幾、幾加幾、求個階乘、畫個星星、編個月亮什麼的。學完了有什麼用?雖然考試我考了90分,可我心裡比誰都明白,C語言到底是什麼?它有什麼用?到底它能做什麼我一無所知。我們不能過多的評價當今的高校教育,但我們必須得為自己負責任。讓你用C語言編單片機的程序你是不是就傻了?單片機編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C語言很簡單,只是一門工具而已,我勸大家最好學好學精它,將來肯定用得著,要不然以後也得學,你一點匯編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。給大家推薦一本書,作者譚浩強,書名<程序設計>>,清華大學出版社,大家在學習本書的同時再參考上面提到的這本書更有利C語言學習。也根本沒必要再從頭把<程序設計>>學一邊,就算再學一邊也許結果還是和你現在一樣,最好的辦法就是用到哪裡學哪裡。匯編寫程序代碼效率高,但相對難度較大,而且很繁瑣,尤其是遇到演算法方面的問題時,根本是麻煩的不得了,現在單片機的主頻在不斷的提高,我們完全不需要那麼高效率的代碼,因為有高頻率的時鍾,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,所以我勸大家用C語言。

總結上面,只要你有信心,做事能堅持到底,有不成功絕不放棄的強烈意志,那學個單片機對你來說就是件非常容易的事。建議步驟:
1 、看書大概了解一下單片機結構,大概了解就行。不用都看懂,又不讓你出書。
2 、用學習板練習編寫程序,學單片機主要就是練編程序,遇到不會的再問人或查書。
3 、自己網上找些小電路類的資料練習設計外圍電路。焊好後自己調試,熟悉過程。
4 、自己完全設計具有個人風格的電路、產品 … 你已經是高手了。

6. 手把手教你學51單片機

這個我還是很有發言權的,因為我可謂搞單片機的「革命先烈」。要自學單片機最好先從51單片機開始入門,市面上有很多教程,我推薦去凡億課程看下,比較詳細。 網路裡面也有詳細介紹。

7. 手把手教你學51單片機的前 言

目前,51系列單片機在我國已得到大力推廣和廣泛應用,從工業控制系統到小型電子產品都可以見到51單片機的身影,它經典的結構使其成為單片機學習的入門首選,得到了廣大單片機使用者的一致推崇,關於51單片機學習和應用的書也五彩紛呈,本書也是其中的一本。
編寫本書的目的
筆者從事單片機設計工作已有多年,在這期間設計和參與設計了較多的單片機項目,取得了很多單片機實際設計經驗,對單片機設計有了一些較深的認識。所以希望能通過這本書對初步學習單片機的讀者有所幫助,並且也是自己對學習和應用單片機的一個總結。
通常在學校學習的單片機知識偏重於理論而不是技能,可是在工作中需要面對的是實際問題,而不是在紙上談兵;作為一名單片機工程師,筆者在工作中對此深有感觸。所以本書的著重點是想讓讀者了解一個完整的單片機設計過程所需的知識,而不僅僅只是講述單片機的原理。通過本書的學習,讀者可以獨立設計和完成一個簡單的單片機控制系統,即體驗從原理圖設計、製作電路板到單片機系統調試的整個過程。
本書的主要內容
本書概括地論述了單片機的基礎知識,包括單片機的基本結構和工作原理;並就實際單片機項目開發中會遇到的各種問題進行了闡述,列舉了單片機開發的流程和必須遵守的一些規范,說明了模擬器和編程器在開發中的作用以及基本的使用方法。具體內容如下。
 首先論述了單片機的基礎知識,包括單片機的基本結構和工作原理,闡述了目前單片機的發展情況,列舉了最新流行的單片機種類,總結了單片機的選擇方法。
 在了解單片機基本知識的基礎上,詳細講解了單片機的主要開發語言——匯編語言和C51語言;編程語言的使用是單片機和其他集成電路的重要區別,用它來賦給單片機命令,使單片機按照設計者的意志運行命令。
 本書也花了一定的篇幅講解了模擬器和編程器的原理和使用說明。編程器和模擬器是單片機項目開發中常用的工具,模擬器是單片機程序調試中很有用的輔助工具,可以逐步地觀察單片機的運行過程,以便發現程序中的錯誤;而編程器是用來將編寫好的程序寫入單片機的工具。除了傳統的模擬器和編程器外,還列舉了一些最新的單片機開發手段,如在線模擬和ISP(在系統編程),這些新的方法大大降低了單片機的開發費用,在線模擬使得設計者不需要去購買昂貴的模擬器,而ISP則替代了編程器,這進一步降低了學習單片機開發的門檻。
 在講解這些理論知識的過程中,本書還簡單講述了單片機開發中的一些規范,包括單片機原理圖、PCB圖以及程序設計的設計規范。這在實際工作中是必須了解和遵守的,也是一個單片機設計工程師必須具備的基本知識。
 完成了基本知識的學習後,本書由易至難列舉了一些設計實例,這些實例基本上概括了單片機項目設計中遇到的各種問題。
通常,一個單片機系統設計可以分為如下五大方面。
(1)單片機能夠運行的最小系統,包括振盪電路、復位電路以及電源電路。
(2)單片機I/O口的使用方法和定時器、中斷系統的使用。
(3)單片機的通信介面,單片機的通信在單片機設計中是經常遇到的功能,所以必須注意目前單片機系統常用的各種通信介面和協議。
(4)單片機的系統擴展,系統擴展通常可以分為程序存儲器的擴展、數據存儲器的擴展以及單片機I/O口的擴展三部分。
(5)信號轉換介面,主要是A/D、D/A轉換以及PWM的實現。這是單片機信號處理中經常遇到的問題。
前面兩部分是單片機最基本的功能,後面三部分則是單片機的擴展應用,掌握了這些基本知識,便可應對用單片機解決的各種項目。
本書的特點
 本書具有知識全面、實例豐富、操作性強的特點,力求以全面、系統的知識和豐富、簡短的實例指導初學者學習單片機各方面的知識。因此,本書適合於開始學習單片機設計和具有一定單片機基礎知識的讀者,目的是使讀者通過本書的學習可以初步掌握單片機的開發應用。
 本書安排有「提示」、「注意」、「說明」小欄目,通過這些小欄目可和讀者分享一些經驗和心得,同時也可為讀者清除學習過程中的難點和疑點。
 本光碟內容超值豐富,不但提供了書中全部範例的源代碼和電路圖,而且提供了多媒體視頻教學錄像,用以講解如何使用本書光碟中的源代碼,手把手引導讀者直觀深入地學習。
本書閱讀順序
本書章節的安排是依據讀者對單片機學習的過程、以循序漸進的方式建立的,建議初學者從前至後閱讀。
 首先閱讀第1章至第7章,這些章節是單片機設計的基礎知識,必須掌握。只有熟讀了這幾章的內容,才能閱讀後面的章節。其中,第3章可以放到完成基本知識的學習後閱讀。
 閱讀第8章至第12章,這幾章是講述單片機設計中的一些基本手段和方法,涉及單片機系統設計中的方方面面,掌握這些知識可以解決單片機設計中的大部分問題。
 閱讀第13章——綜合實例,它由淺入深、由簡入繁,將前面講解的一些知識應用到實際項目中,可以讓讀者對單片機設計項目有具體的認識。
致謝
經過緊張的策劃、寫作和編寫,本書才得已完稿。在寫作的過程中,得到了參與本書策劃的各位編輯的大力協助;在此,對所有參與該書編輯、出版的老師表示衷心的感謝。
惠 仇
2008.6.28

8. 單片機教程

王雲 51單片機教程,就很好,身邊很多同學在用。

9. 手把手教你學會單片機,宋雪松老師的簡易計算器,怎麼用普中科技單片機實現怎麼接線

/* S16 S12 S8 S4分別是123+

S15 S11 S7 S3分別是456-

S14 S10 S6 S2分別是789*

S13 S9 S5 S1分別是0 CLR = /

*/

/* 實現兩個數的運算,每個數的位數至少可以八位 */

#include<reg52.h>

typedef unsigned char uint8;

typedef unsigned int uint16;

sbit rw=P2^5;

sbit rs=P2^6;

sbit e=P2^7;

sbit led=P3^7;

sbit beep=P2^0;

uint8 key,num;

uint8 fuhao;//定義具體的那個符號,是加減還是乘除。

uint8 flag; //定義有沒有按下符號鍵,這個是統稱

long a,b,c,d; //定義運算數據的第一個和第二個及等於的數變數

uint8 k; //定義小數點後面顯示的位數

uint8 biao;

uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//保存顯示的數據

void delay(uint16 i)

{

while(i--);

}

void lcdwrc(uint8 c)

{

delay(1000);

rs=0;

rw=0;

e=0;

P0=c;

e=1;

delay(1000);

e=0;

}

void lcdwrd(uint8 dat)

{

delay(1000);

rs=1;

rw=0;

e=0;

P0=dat;

e=1;

delay(1000);

e=0;

rs=0;

}

void lcdinit()

{

delay(1500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

delay(500);

lcdwrc(0x38);

lcdwrc(0x08);

lcdwrc(0x01);

lcdwrc(0x06);

lcdwrc(0x0c);

key=0;

num=0;

flag=0;

fuhao=0;

a=0;

b=0;

c=0;

d=0;

biao=0;

led=0;

}

void keyscan()

{

P1=0xfe; //令第一行為0,然後判斷是哪一列按下

if(P1!=0xfe)

{

delay(1000);

if(P1!=0xfe)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=0;break; //1

case 0xd0: num=1;break; //2

case 0xb0: num=2;break; //3

case 0x70: num=3;break; //加

}

}

while(P1!=0xfe);

if(num==0||num==1||num==2) //確認第一行的數1,2,3

{

if(flag==0) //沒有按下符號鍵

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

if(num==3)

{

//led=0;

flag=1;

fuhao=1;//加號+

}

lcdwrd(0x30+dat1[num]);

}

P1=0xfd; //令第二行為0,判斷是哪一列按下

if(P1!=0xfd)

{

delay(1000);

if(P1!=0xfd)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=4;break; //4

case 0xd0: num=5;break; //5

case 0xb0: num=6;break; //6

case 0x70: num=7;break; //減—

}

}

while(P1!=0xfd);

if(num==4||num==5||num==6)

{

if(flag==0) //沒有按下符號鍵

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

else

{

flag=1;

fuhao=2;//帶表減號

}

lcdwrd(0x30+dat1[num]);

}

P1=0xfb; //令第三行為0,判斷哪一列按下

if(P1!=0xfb)

{

delay(1000);

if(P1!=0xfb)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=8;break; //7

case 0xd0: num=9;break; //8

case 0xb0: num=10;break; //9

case 0x70: num=11;break; //乘*

}

}

while(P1!=0xfb);

if(num==8||num==9||num==10)

{

if(flag==0) //沒有按下符號鍵

{

//led=1;

a=a*10+dat1[num];

}

else

{

//led=1;

b=b*10+dat1[num];

}

}

else

{

flag=1;

fuhao=3;//帶表乘號*

}

lcdwrd(0x30+dat1[num]);

}

P1=0xf7; //令第四行為0,判斷哪一列按下

if(P1!=0xf7)

{

delay(1000);

if(P1!=0xf7)

{

key=P1&0xf0;

switch(key)

{

case 0xe0: num=12;break; //0

case 0xd0: num=13;break; //清除rst

case 0xb0: num=14;break; //等號=

case 0x70: num=15;break; //除/

}

}

while(P1!=0xf7);

switch(num)

{

case 12:

if(flag==0) //沒有按下符號鍵

{

//led=1;

a=a*10+dat1[num];

lcdwrd(0x30);

}

else

{

//led=1;

b=b*10+dat1[num];

lcdwrd(0x30);

}

break;

case 13:

lcdwrc(0x01); //清屏指令

a=0;

b=0;

flag=0;

fuhao=0;

break;

case 15:

flag=1;

fuhao=4;

lcdwrd(0x2f);//除號/

break;

case 14:

if(fuhao==1)//加

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//設置游標左移,屏幕不移動

c=a+b;

while(c!=0) //一位一位顯示

{

lcdwrd(0x30+c%10);//顯示結果的最後一位在0x4f的位置

c=c/10;//取前面的結果數據

}

lcdwrd(0x3d); //顯示等於號=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除為0

}

if(fuhao==2) //減

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//設置游標左移,屏幕不移動

if(a>b)

c=a-b;

else

c=b-a;

while(c!=0) //一位一位顯示

{

lcdwrd(0x30+c%10);//顯示結果的最後一位在0x4f的位置

c=c/10;//取前面的結果數據

}

if(a<b) lcdwrd(0x2d); //顯示-號

lcdwrd(0x3d); //顯示等於號=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除為0

}

if(fuhao==3)//乘法

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//設置游標左移,屏幕不移動

c=a*b;

while(c!=0) //一位一位顯示

{

lcdwrd(0x30+c%10);//顯示結果的最後一位在0x4f的位置

c=c/10;//取前面的結果數據

}

lcdwrd(0x3d); //顯示等於號=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除為0

}

if(fuhao==3)//乘法

{

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//設置游標左移,屏幕不移動

c=a*b;

while(c!=0) //一位一位顯示

{

lcdwrd(0x30+c%10);//顯示結果的最後一位在0x4f的位置

c=c/10;//取前面的結果數據

}

lcdwrd(0x3d); //顯示等於號=

a=0;

b=0;

flag=0;

fuhao=0;//全部清除為0

}

if(fuhao==4)

{

k=0;

lcdwrc(0x4f+0x80);

lcdwrc(0x04);//設置游標左移,屏幕不移動

c=(long)(((float)a/b)*1000);//強制轉換為long。

while(c!=0) //一位一位顯示

{

k++;

lcdwrd(0x30+c%10);//顯示結果的最後一位在0x4f的位置

c=c/10;//取前面的結果數據

if(k==3)

{

lcdwrd(0x2e);

k=0;

}

}

if(a/b<0) //如果a比b小的話那麼除的結果最高位是0

{

lcdwrd(0x30);

}

lcdwrd(0x3d); //顯示等號

a=0;

b=0;

flag=0;

fuhao=0;//全部清除為0

}

break;

}

}

}

void main()

{

lcdinit();

while(1)

{

keyscan();

}

}

閱讀全文

與手把手教你單片機之八相關的資料

熱點內容
sqlserver編程語言 瀏覽:650
gpa國際標准演算法 瀏覽:238
伺服器編程語言排行 瀏覽:947
怎麼下載快跑app 瀏覽:966
小紅書app如何保存視頻 瀏覽:170
如何解開系統加密文件 瀏覽:809
linux切換root命令 瀏覽:283
c編譯之後界面一閃而過怎麼辦 瀏覽:880
怎麼看ic卡是否加密 瀏覽:725
lgplc編程講座 瀏覽:809
cnc手動編程銑圓 瀏覽:723
cad中幾種命令的意思 瀏覽:327
oraclelinux安裝目錄 瀏覽:134
安卓系統可以安裝編譯器嗎 瀏覽:571
javajson實體類 瀏覽:691
板加密鋼筋是否取代原鋼筋 瀏覽:67
學習編程的思路 瀏覽:231
app易語言post怎麼學 瀏覽:966
地梁的箍筋加密區位置 瀏覽:304
二分法排序程序及編譯結果 瀏覽:681