單片機(jī)原理及應(yīng)用項(xiàng)目化教程完整版課件全套ppt整本書(shū)電子講義全書(shū)ppt電子課件最全教學(xué)教程_第1頁(yè)
單片機(jī)原理及應(yīng)用項(xiàng)目化教程完整版課件全套ppt整本書(shū)電子講義全書(shū)ppt電子課件最全教學(xué)教程_第2頁(yè)
單片機(jī)原理及應(yīng)用項(xiàng)目化教程完整版課件全套ppt整本書(shū)電子講義全書(shū)ppt電子課件最全教學(xué)教程_第3頁(yè)
單片機(jī)原理及應(yīng)用項(xiàng)目化教程完整版課件全套ppt整本書(shū)電子講義全書(shū)ppt電子課件最全教學(xué)教程_第4頁(yè)
單片機(jī)原理及應(yīng)用項(xiàng)目化教程完整版課件全套ppt整本書(shū)電子講義全書(shū)ppt電子課件最全教學(xué)教程_第5頁(yè)
已閱讀5頁(yè),還剩303頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

單片機(jī)原理及應(yīng)用項(xiàng)目化教程(C語(yǔ)言版)

項(xiàng)目結(jié)構(gòu)項(xiàng)目一:?jiǎn)纹瑱C(jī)介紹項(xiàng)目二:輸入/輸出功能項(xiàng)目三:數(shù)碼管基礎(chǔ)與矩陣鍵盤掃描項(xiàng)目四:定時(shí)器與數(shù)碼管動(dòng)態(tài)顯示項(xiàng)目五:外部中斷與串行通信項(xiàng)目六:LCD1602顯示原理及實(shí)現(xiàn)項(xiàng)目七:I2C總線與EEPROM項(xiàng)目八:DS18B20與蜂鳴器項(xiàng)目九:A/D與D/A轉(zhuǎn)換項(xiàng)目十:實(shí)時(shí)時(shí)鐘DS1302項(xiàng)目十一:紅外通信與步進(jìn)電機(jī)項(xiàng)目一:?jiǎn)纹瑱C(jī)介紹單片機(jī)最小系統(tǒng)單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹Proteus仿真軟件的使用單片機(jī)介紹1.1.1單片機(jī)的基本概念

單片微型計(jì)算機(jī)(Single-ChipMicrocomputer),簡(jiǎn)稱單片機(jī),是將微處理器(CPU)、存儲(chǔ)器(存放程序或數(shù)據(jù)的ROM和RAM)、總線、定時(shí)器/計(jì)數(shù)器、輸入/輸出接口(I/O口)和其他多種功能器件集成在一塊芯片上的微型計(jì)算機(jī)。由于單片機(jī)的重要應(yīng)用領(lǐng)域?yàn)橹悄芑娮赢a(chǎn)品,一般需要嵌入儀器設(shè)備內(nèi),故又稱為嵌入式微控制器(EmbeddedMicrocontroller)。單片機(jī)介紹單片機(jī)的主要特點(diǎn)如下:(1)可靠性高;(2)便于擴(kuò)展;(3)控制功能強(qiáng);(4)低功耗、低電壓;(5)易于嵌入、發(fā)展迅速、應(yīng)用廣泛?jiǎn)纹瑱C(jī)介紹1.1.2單片機(jī)的應(yīng)用領(lǐng)域(1)工業(yè)控制與檢測(cè)(2)智能儀器儀表(3)消費(fèi)類電子產(chǎn)品(4)網(wǎng)絡(luò)和通信(5)設(shè)備領(lǐng)域(6)武器裝備(7)汽車電子

此外,單片機(jī)在工商、金融、科研、教育、電力、通信、物流和國(guó)防航空航天等領(lǐng)域都有著十分廣泛的用途。單片機(jī)介紹1.1.3單片機(jī)有哪些系列

單片機(jī)種類繁多,一般常用的有以下幾種:(1)8051單片機(jī)(2)MOTOROLA單片機(jī)(3)Microchip單片機(jī)(4)Atmel單片機(jī)(5)NEC單片機(jī)(6)東芝單片機(jī)單片機(jī)介紹(7)富士通單片機(jī)(8)LG公司生產(chǎn)的GMS90系列單片機(jī)(9)凌陽(yáng)16位單片機(jī)(10)Scenix單片機(jī)(11)EPSON單片機(jī)(12)華邦單片機(jī)單片機(jī)介紹1.1.4單片機(jī)的選擇

當(dāng)今單片機(jī)琳瑯滿目,產(chǎn)品性能各異。如何選擇好單片機(jī)是項(xiàng)目開(kāi)發(fā)首要解決的問(wèn)題。(1)單片機(jī)的基本參數(shù)及其內(nèi)部資源,如:程序存儲(chǔ)器容量,I/O引腳數(shù)量,AD或DA通道數(shù)量及轉(zhuǎn)換樣精度等;(2)單片機(jī)的增強(qiáng)功能,例如看門狗,RTC,EEPROM,擴(kuò)展RAM,CAN總線接口,I2C接口,SPI接口等。(3)Flash和OTP(一次性可編程)相比較,最好是Flash。(4)封裝,一般來(lái)說(shuō)貼片的比直插的體積小,抗干擾性強(qiáng),但是價(jià)格要貴一些。單片機(jī)介紹(5)工作溫度范圍,工業(yè)級(jí)還是商業(yè)級(jí),如果設(shè)計(jì)戶外產(chǎn)品,必須選用工業(yè)級(jí)。(6)工作電壓范圍,例如設(shè)計(jì)電視機(jī)遙控器,2節(jié)干電池供電,至少應(yīng)該能在1.8-3.6V電壓范圍內(nèi)工作。(7)功耗,能夠滿足設(shè)計(jì)要求的前提下功耗越低越好。(8)性價(jià)比高。(9)供貨渠道暢通,盡量選用市場(chǎng)上容易購(gòu)買到的單片機(jī)。(10)有服務(wù)商,像Microchip公司推PIC,周立功公司推Philips,雙龍公司推AVR,都提供了很多有用的技術(shù)資料,起碼燒寫(xiě)器有地方買。單片機(jī)介紹1.1.5MCS-51單片機(jī)識(shí)讀1、MCS-51單片機(jī)內(nèi)部結(jié)構(gòu) MCS-51單片機(jī)由中央處理器(CPU)、程序存儲(chǔ)器(ROM/EPROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、I/O接口、中斷系統(tǒng)等組成。內(nèi)部中斷外部中斷CPU振蕩器基準(zhǔn)時(shí)鐘源4KBROM256BRAM總線控制擴(kuò)展I/O串行口2個(gè)16位的TC控制并行I/O串行輸入串行輸出計(jì)數(shù)器8051的結(jié)構(gòu)框圖內(nèi)部結(jié)構(gòu)如下:運(yùn)算器控制器CPU128字節(jié)的RAM,作用是存放運(yùn)算的中間結(jié)果以及數(shù)據(jù)暫存。00H~7FH4K程序存儲(chǔ)區(qū),地址從0000H開(kāi)始,用于存放程序代碼和表格數(shù)據(jù)2個(gè)16位的定時(shí)計(jì)數(shù)器4個(gè)IO(P0,P1,P2,P3共32線)口與外界交換信息1.2MHz~12MHz一個(gè)全雙工的串口UART5個(gè)中斷源,三個(gè)內(nèi)部,二個(gè)外部單片機(jī)介紹2、引腳功能說(shuō)明

DIP引腳圖邏輯符號(hào)

單片機(jī)介紹電源引腳(2根)

VCC(40腳):電源端,接+5V電源。

VSS(20腳):接地端。I/O引腳(4×8=32根)控制引腳(6根)

時(shí)鐘電路引腳XTAL1(19腳)和XTAL2(18腳)XTAL1:接外部晶振和微調(diào)電容的一端,在片內(nèi)它是振蕩器倒相放大器的輸入,若使用外部TTL時(shí)鐘時(shí),該引腳必須接地。XTAL2:接外部晶振和微調(diào)電容的另一端,在片內(nèi)它是振蕩器倒相放大器的輸出,若使用外部TTL時(shí)鐘時(shí),該引腳為外部時(shí)鐘的輸入端。單片機(jī)介紹ALE/PROG(30腳):地址鎖存允許信號(hào)輸出當(dāng)CPU訪問(wèn)片外存儲(chǔ)器時(shí),ALE輸出信號(hào)控制鎖存P0口輸出的低8位地址,從而實(shí)現(xiàn)P0口數(shù)據(jù)與低位地址的分時(shí)復(fù)用。EA/VPP(31腳):外部程序存儲(chǔ)器地址允許輸入端。當(dāng)為高電平時(shí),CPU執(zhí)行片內(nèi)程序存儲(chǔ)器指令,但當(dāng)PC中的值超過(guò)0FFFH時(shí),將自動(dòng)轉(zhuǎn)向執(zhí)行片外程序存儲(chǔ)器指令。當(dāng)為低電平時(shí),CPU只執(zhí)行片外程序存儲(chǔ)器指令。PSEN(32腳):外部程序存儲(chǔ)器讀選通信號(hào)。是讀外部程序存儲(chǔ)器的選通信號(hào),低電平有效。RST(9腳):復(fù)位信號(hào)輸入端。該信號(hào)高電平有效,在輸入端保持兩個(gè)機(jī)器周期的高電平后,就可以完成復(fù)位操作。單片機(jī)介紹1.1.6單片機(jī)最小系統(tǒng)的組成

所謂單片機(jī)最小系統(tǒng),是指用最少的元件能使單片機(jī)工作起來(lái)的一個(gè)最基本的組成電路。對(duì)51系列單片機(jī)來(lái)說(shuō),最小系統(tǒng)一般應(yīng)該包括:電源、晶振電路、復(fù)位電路等。同時(shí)單片機(jī)要正常運(yùn)行,還必須具備電源正常、時(shí)鐘正常、復(fù)位正常三個(gè)基本條件。單片機(jī)介紹(1)電源

電源是單片機(jī)工作的動(dòng)力源泉。我們所選用的STC89C52,它需要5V的供電系統(tǒng),我們的開(kāi)發(fā)板是使用USB口輸出的5V直流直接供電的。供電電路在40腳和20腳的位置上,40腳接的是+5V,通常也稱為VCC或VDD,代表的是電源正極,20腳接的是GND,代表的是電源的負(fù)極。(2)時(shí)鐘電路

時(shí)鐘電路為單片機(jī)產(chǎn)生時(shí)序脈沖,單片機(jī)所有運(yùn)算與控制過(guò)程都是在統(tǒng)一的時(shí)序脈沖的驅(qū)動(dòng)下進(jìn)行的。STC89C52單片機(jī)的18腳和19腳是晶振引腳,我們接一個(gè)11.0592MHz的晶振(它每秒振蕩11059200次),外加兩個(gè)20pF的電容,電容的作用是幫助晶振起振,并維持振蕩信號(hào)的穩(wěn)定。單片機(jī)介紹(3)復(fù)位電路

在復(fù)位引腳(9腳)腳持續(xù)出現(xiàn)24個(gè)振蕩器脈沖周期(即2個(gè)機(jī)器周期)的高電平信號(hào)將使單片機(jī)復(fù)位,此時(shí),一些專用寄存器的狀態(tài)值將恢復(fù)為初始值。單片機(jī)復(fù)位一般是3種情況:上電復(fù)位、手動(dòng)復(fù)位、程序自動(dòng)復(fù)位。(a)上電復(fù)位電路

(b)按鍵復(fù)位電路單片機(jī)介紹復(fù)位后各特殊功能寄存器初始狀態(tài)寄存器狀態(tài)寄存器狀態(tài)PC0000HTCON00HACC00HTL000HPSW00HTH000HSP07HTL100HDPTR0000HTH100HP0--P3FFHSCON00HIPxxx00000HSBUF不確定IE0xx00000HPCON0xxx0000HTMOD00H

單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹

單片機(jī)開(kāi)發(fā),首要的兩個(gè)軟件一個(gè)是編程軟件,一個(gè)是下載軟件。編程軟件我們用KeiluVision的51版本,也叫KeilC51,KeilC51集編輯,編譯,仿真于一體,支持匯編、PLM語(yǔ)言和C語(yǔ)言的程序設(shè)計(jì),界面友好,易學(xué)易用。在51系列單片機(jī)的學(xué)習(xí)與開(kāi)發(fā)過(guò)程中,keilC51軟件的使用為程序設(shè)計(jì)開(kāi)發(fā)提供了一個(gè)高效率的平臺(tái)。單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹用keilC51軟件編輯編譯一段C程序,實(shí)現(xiàn)打印的KeilC51歡迎界面:“HelloIamKEIL,Iwillbeyourfriend.”。根據(jù)任務(wù)編寫(xiě)的C源程序如下:#include<reg52.h>//包含頭文件#include<stdio.h>voidmain(void)//主函數(shù){SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;//PRINTF函數(shù)所必須printf(“HelloIamKEIL.\n”);printf(“Iwillbeyourfriend.\n”);while(1);}單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(1)建立一個(gè)新的工程項(xiàng)目單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(2)保存工程項(xiàng)目單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(3)為工程項(xiàng)目選擇單片機(jī)型號(hào)單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(4)新建源程序文件單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(5)保存源程序文件單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(6)為工程項(xiàng)目添加源程序文件單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(7)輸入源程序文件單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(8)編譯源程序單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(9)調(diào)試源程序單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(10)查看分析結(jié)果單片機(jī)開(kāi)發(fā)系統(tǒng)軟件介紹(11)生成Hex代碼文件

Protues仿真軟件的使用 ProteusISIS是英國(guó)Labcenter公司開(kāi)發(fā)的電路分析與實(shí)物仿真軟件。它運(yùn)行于Windows操作系統(tǒng)上,可以仿真、分析(SPICE)各種模擬器件和集成電路。在51系列單片機(jī)的學(xué)習(xí)與開(kāi)發(fā)過(guò)程中,keilC51軟件是程序設(shè)計(jì)開(kāi)發(fā)的平臺(tái),不能直接的進(jìn)行單片機(jī)的硬件仿真。如果將keilC51軟件和Proteus軟件有機(jī)結(jié)合起來(lái),那么51系列單片機(jī)的設(shè)計(jì)與開(kāi)發(fā)將在軟硬件仿真上得到完美的結(jié)合。主頁(yè)ISISARES3D瀏覽Proteus8.0Professional的主頁(yè)界面元件清單關(guān)于Proteus8.0幫助信息簡(jiǎn)介PCB設(shè)計(jì)模擬入門指導(dǎo)新版本等打開(kāi)設(shè)計(jì)圖/新建設(shè)計(jì)圖…最近的設(shè)計(jì)圖主頁(yè)文件(F)編輯(E)瀏覽(V)工具(T)設(shè)計(jì)(D)繪圖(G)除錯(cuò)(D)庫(kù)(L)模板(T)系統(tǒng)(S)幫助(H)Proteus中ISIS的主窗口示意圖ISIS通用工具菜單專用工具菜單電路編輯窗口坐標(biāo)原點(diǎn)瀏覽窗口器件工具列表窗口ARES電氣規(guī)則檢查主菜單交互仿真按鍵元件清單←點(diǎn)擊鼠標(biāo):點(diǎn)擊此鍵可取消左鍵的放置功能,但可編輯對(duì)象?!x擇元器件:在元件表選中器件,在編輯窗中移動(dòng)鼠標(biāo),點(diǎn)擊左鍵放置←標(biāo)注聯(lián)接點(diǎn):當(dāng)兩條連線交叉時(shí),放個(gè)接點(diǎn)表示連通?!麡?biāo)志網(wǎng)絡(luò)線標(biāo)號(hào):電路聯(lián)線可用網(wǎng)絡(luò)標(biāo)號(hào)代替,相同標(biāo)號(hào)的線是相同的?!胖梦谋菊f(shuō)明:是對(duì)電路的說(shuō)明,與電路仿真無(wú)關(guān)!←放置總線:當(dāng)多線并行簡(jiǎn)化聯(lián)線,用總線標(biāo)示?!胖闷骷_:有普通.反相.正時(shí)鐘.反時(shí)鐘.短引腳.總線。←放置圖紙內(nèi)部終端:有普通.輸入.輸出.雙向.電源.接地.總線?!胖米与娐?可將部分電路以子電路形式畫(huà)在另一圖紙上。編輯工具←放置分析圖:有模擬.數(shù)字.混合.頻率特性.傳輸特

性.噪聲分析等?!胖娩浄乓粼O(shè)置:

←放置電源.信號(hào)源:有直流電源,正弦信號(hào)源,脈沖

信號(hào)源等?!胖秒妷弘娏魈结?顯示網(wǎng)絡(luò)線上的電壓或串聯(lián)

在指定的網(wǎng)絡(luò)線上顯示電流值。←放置虛擬儀器:有示波器.計(jì)數(shù)器.RS232終端.SPI調(diào)

試器.I2C調(diào)試器.信號(hào)發(fā)生器.圖形發(fā)生器.直流

電壓表.直流電流表,交流電壓表.交流電流表。調(diào)試工具←放置各種線:有器件.引腳.端口.圖形線.總線等?!胖镁匦慰?移動(dòng)鼠標(biāo)到框的一角,按下左鍵拖動(dòng),釋放后完成。←放置圓形框:移動(dòng)鼠標(biāo)到圓心,按左鍵拖動(dòng),釋放后完成?!胖脠A弧線:鼠標(biāo)移到起點(diǎn),按下左鍵拖動(dòng),釋放后調(diào)整弧長(zhǎng),點(diǎn)擊鼠

標(biāo)完成?!?huà)閉合多邊形:鼠標(biāo)移到起點(diǎn),點(diǎn)擊產(chǎn)生折點(diǎn),閉合后完成?!胖梦淖謽?biāo)簽:在編輯框放置說(shuō)明文本標(biāo)簽。←放置特殊圖形:可在庫(kù)中選擇各種圖形?!胖锰厥夤?jié)點(diǎn):可有原點(diǎn).節(jié)點(diǎn).標(biāo)簽引腳名.引腳號(hào)。←圖形正/反旋轉(zhuǎn)?!麍D形垂直/水平翻轉(zhuǎn)。圖形工具

Protues仿真軟件的使用用Proteus仿真軟件,實(shí)現(xiàn)單片機(jī)最小系統(tǒng)的簡(jiǎn)單應(yīng)用。要求:P1口控制8個(gè)發(fā)光二極管LED循環(huán)點(diǎn)亮。電路原理圖如下圖所示。

Protues仿真軟件的使用(1)建立一個(gè)新的設(shè)計(jì)項(xiàng)目

Protues仿真軟件的使用(2)保存設(shè)計(jì)項(xiàng)目

Protues仿真軟件的使用(3)為設(shè)計(jì)項(xiàng)目選擇電路元器件

Protues仿真軟件的使用(4)設(shè)計(jì)電路元器件的布局與連線

Protues仿真軟件的使用(5)編輯電路原理圖元件

Protues仿真軟件的使用(6)編輯設(shè)計(jì)原理圖界面

Protues仿真軟件的使用(7)保存設(shè)計(jì)的原理圖電路文件

單擊保存按鈕,保存原理圖電路文件。

到此,一個(gè)完整的單片機(jī)最小系統(tǒng)電路原理圖就設(shè)計(jì)完成了。接下來(lái)需要做的就是將在KeilC51軟件中編譯生成的.Hex文件添加到原理圖的單片機(jī)中就可以了。

Protues仿真軟件的使用(8)為單片機(jī)添加.Hex程序文件

在原理圖中右鍵選中單片機(jī),單擊左鍵,在彈出的對(duì)話框中選中ProgramFile選項(xiàng),再單擊“

打開(kāi)”按鈕,添加.Hex文件。保存后就可以進(jìn)行電路仿真了,仿真電路如下圖所示。然后根據(jù)仿真現(xiàn)象,不斷進(jìn)行源程序調(diào)試,完善設(shè)計(jì)。附:?jiǎn)纹瑱C(jī)常用學(xué)習(xí)網(wǎng)站周立功單片機(jī)()武漢力源()中源單片機(jī)()嵌入開(kāi)發(fā)網(wǎng)()

51單片機(jī)()單片機(jī)學(xué)習(xí)網(wǎng)()單片機(jī)愛(ài)好者(www.mcufan.con)項(xiàng)目二輸入/輸出功能項(xiàng)目描述

我們所熟悉的電腦的輸入設(shè)備有鍵盤、鼠標(biāo)、麥克風(fēng)等,輸出設(shè)備有顯示器、音響等。如同電腦,輸入/輸出是單片機(jī)最基本的功能,單片機(jī)最常用的輸入設(shè)備為按鍵,最常用的輸出設(shè)備為發(fā)光二極管LED、數(shù)碼管以及液晶顯示器LCD。本項(xiàng)目基于KST-51開(kāi)發(fā)板,通過(guò)編程實(shí)現(xiàn)獨(dú)立按鍵檢測(cè)與LED燈點(diǎn)亮功能。輸出功能──點(diǎn)亮LED燈2.1.1LED燈介紹

LED(light-emittingdiode),即發(fā)光二極管,俗稱LED小燈,我們板子上用的是普通的貼片發(fā)光二極管,其正向?qū)妷菏?.8V到2.2V之間,工作電流一般在1mA~20mA之間。當(dāng)電流在1mA~5mA之間變化時(shí),隨著通過(guò)LED的電流越來(lái)越大,我們的肉眼會(huì)明顯感覺(jué)到這個(gè)小燈越來(lái)越亮,而當(dāng)電流從5mA~20mA之間變化時(shí),我們看到的發(fā)光二極管的亮度變化就不是太明顯了。當(dāng)電流超過(guò)20mA時(shí),LED就會(huì)有燒壞的危險(xiǎn)了,電流越大,燒壞的也就越快。輸出功能──點(diǎn)亮LED燈LED驅(qū)動(dòng)電路如下圖所示。若接入的VCC電壓是5V,發(fā)光二極管自身壓降大概是2V,電阻兩端電壓U=3V,當(dāng)電流是1mA的時(shí)候,電阻值是3K;當(dāng)電流是20mA的時(shí)候,電阻值是150歐,也就是R34的取值范圍是150~3K歐姆。這個(gè)電阻我們通常稱之為“限流電阻”。圖中R用的是1K,可以計(jì)算出流過(guò)LED的電流大約為3mA。輸出功能──點(diǎn)亮LED燈

將上頁(yè)圖變換一下,用一個(gè)單片機(jī)的IO口來(lái)驅(qū)動(dòng)LED,有兩種方式輸出功能──點(diǎn)亮LED燈2.1.2源程序編寫(xiě)1、特殊功能寄存器和位定義①

sfrP0=0x80; sfr這個(gè)關(guān)鍵字,是51單片機(jī)特有的,他的作用是定義一個(gè)單片機(jī)特殊功能寄存器SFR(specialfunctionregister)。51單片機(jī)內(nèi)部有很多寄存器,如果我們想使用的話必須提前進(jìn)行sfr聲明。不過(guò)Keil軟件已經(jīng)把所有這些聲明都預(yù)先寫(xiě)好并保存到一個(gè)專門的文件中去了,我們要用的話只要文件開(kāi)頭添加一行#include<reg52.h>即可。輸出功能──點(diǎn)亮LED燈②sbitLED=P0^0;

這個(gè)sbit用來(lái)定義寄存器或者變量中的某一位。經(jīng)過(guò)上邊語(yǔ)句后,以后只要在程序里寫(xiě)LED,就代表了P0.0口,注意這個(gè)P必須大寫(xiě),也就是說(shuō)我們給P0.0又取了一個(gè)更形象的名字叫做LED。輸出功能──點(diǎn)亮LED燈2、程序編寫(xiě)(用C語(yǔ)言編寫(xiě)程序點(diǎn)亮LED燈)#include<reg52.h>//包含特殊功能寄存器定義的頭文件sbitLED=P1^0;//位地址聲明,注意:sbit必須小寫(xiě)、P大寫(xiě)!voidmain()//任何一個(gè)C程序都必須有且僅有一個(gè)main函數(shù){ //{}是成對(duì)存在的,在這里表示函數(shù)的起始和結(jié)束 LED=0;//分號(hào)表示一條語(yǔ)句結(jié)束}邏輯上來(lái)看,程序這樣寫(xiě)就可以了,但是在實(shí)際單片機(jī)應(yīng)用中,存在一個(gè)問(wèn)題。比如我們的程序空間可以容納100行代碼,但是我們實(shí)際上的程序只用了50行代碼,當(dāng)運(yùn)行完了50行,再繼續(xù)運(yùn)行時(shí),第51行的程序不是我們想運(yùn)行的程序,而是不確定的未知內(nèi)容,一旦執(zhí)行下去程序就會(huì)出錯(cuò)從而可能導(dǎo)致單片機(jī)自動(dòng)復(fù)位。輸出功能──點(diǎn)亮LED燈

通常在程序中加入一個(gè)死循環(huán),讓程序停留在我們希望的這個(gè)狀態(tài)下,不要亂運(yùn)行,有以下兩種寫(xiě)法可以參考:參考程序一:

參考程序二:#include<reg52.h> #include<reg52.h>sbitLED=P0^0; sbitLED=P0^0;voidmain() voidmain(){ { while(1) LED=0; { while(1); LED=0; } }}

理論上這兩個(gè)程序都能點(diǎn)亮LED小燈,但是下載到開(kāi)發(fā)板以后板子上的LED等并沒(méi)亮,為什么呢?輸出功能──點(diǎn)亮LED燈

我們做單片機(jī)編程,實(shí)際上算是硬件底層驅(qū)動(dòng)程序開(kāi)發(fā),這種程序的開(kāi)發(fā),是離不開(kāi)電路圖的,必須根據(jù)硬件電路圖來(lái)進(jìn)行程序的編寫(xiě)。輸出功能──點(diǎn)亮LED燈

分析電路可知:若要點(diǎn)亮LED2,必須使得DB0端口(通過(guò)鎖存器74HC245連接至單片機(jī)P0.0端口)輸出低電平,同時(shí)Q16三極管9012導(dǎo)通,即LEDS6端口輸出低電平,而LEDS6接至74HC138的Y6端,Y6端輸出低電平的條件是74HC138正常工作(E1、E2端為低電平,E3端為高電平)且A2A1A0端口電平分別為1、1、0,因此,程序初始化時(shí)應(yīng)將ENLED置0,ADDR3置1,ADDR2置1,ADDR1置1,ADDR0置0。輸出功能──點(diǎn)亮LED燈#include<reg52.h>//包含特殊功能寄存器定義的頭文件sbitLED=P0^0;//位地址聲明,注意:sbit必須小寫(xiě)、P大寫(xiě)!sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;voidmain(){ ENLED=0; ADDR3=1; ADDR2=1; ADDR1=1; ADDR0=0; LED=0;//點(diǎn)亮小燈 while(1);//程序停止在這里}輸出功能──點(diǎn)亮LED燈3、程序下載

首先,我們要把硬件連接好,把板子插到電腦上,打開(kāi)設(shè)備管理器查看所使用的是哪個(gè)COM口,如左圖所示,找到“USB-SERIALCH340(COM3)”這一項(xiàng),這里最后的數(shù)字就是開(kāi)發(fā)板目前所使用的COM端口號(hào)。注意要先在電腦上安裝USB轉(zhuǎn)串口的驅(qū)動(dòng)程序以后才能看到相應(yīng)的COM端口,否則如右圖所示,將無(wú)法下載程序。輸出功能──點(diǎn)亮LED燈打開(kāi)STC系列單片的下載軟件——STC-ISP輸出功能──點(diǎn)亮LED燈下載軟件列出了5個(gè)步驟:①選擇單片機(jī)型號(hào),我們現(xiàn)在用的單片機(jī)型號(hào)是STC89C52RC②點(diǎn)擊“打開(kāi)程序文件”,找到我們剛才建立工程文件夾,找到步驟二編譯所生成的hex文件LED.hex,點(diǎn)擊打開(kāi);③選擇剛才查到的COM口,波特率使用默認(rèn)的就行;④這里的所有選項(xiàng)都使用默認(rèn)設(shè)置,不要隨便更改,有的選項(xiàng)改錯(cuò)了以后可能會(huì)產(chǎn)生麻煩。⑤因?yàn)镾TC單片機(jī)要冷啟動(dòng)下載,就是先點(diǎn)下載,然后再給單片機(jī)上電,所以我們先關(guān)閉板子上的電源開(kāi)關(guān),然后點(diǎn)擊“Download/下載”按鈕,等待軟件提示你請(qǐng)上電后,然后再按下板子的電源開(kāi)關(guān),就可以將程序下載到單片機(jī)里邊了。當(dāng)軟件顯示“已加密”就表示程序下載成功了。輸入功能—按鍵檢測(cè)2.2.1鍵盤介紹

在單片機(jī)應(yīng)用系統(tǒng)中,鍵盤主要用于向計(jì)算機(jī)輸入數(shù)據(jù)、傳送命令等,是人工干預(yù)計(jì)算機(jī)的主要手段。鍵盤要通過(guò)接口與單片機(jī)相連,分為編碼鍵盤和非編碼鍵盤兩類。

鍵盤上閉合鍵的識(shí)別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生鍵編碼號(hào)或鍵值的稱為編碼鍵盤,如計(jì)算機(jī)鍵盤。而靠軟件編程來(lái)識(shí)別的稱為非編碼鍵盤,在單片機(jī)組成的各種系統(tǒng)中,使用最廣泛的是非編碼鍵盤。當(dāng)然,也有用到編碼鍵盤的。

非編碼鍵盤有分為:獨(dú)立鍵盤和行列式(又稱為矩陣式)鍵盤。輸入功能—按鍵檢測(cè)

獨(dú)立鍵盤每個(gè)鍵相互獨(dú)立,各自與一條I/O線相連,CPU可直接讀取該I/O線的高/低電平狀態(tài)。其優(yōu)點(diǎn)是硬件、軟件結(jié)構(gòu)簡(jiǎn)單,判鍵速度快,使用方便;缺點(diǎn)是占I/O口線多。多用于設(shè)置控制鍵、功能鍵。適用于鍵數(shù)少的場(chǎng)合。輸入功能—按鍵檢測(cè)

矩陣鍵盤的鍵按矩陣排列,各鍵處于行/列的結(jié)點(diǎn)處,CPU通過(guò)對(duì)連在行(列)的I/O線送已知電平的信號(hào),然后讀取列(行)線的狀態(tài)信息。逐線掃描,得出鍵碼。其特點(diǎn)是鍵多時(shí)占用I/O口線少,硬件資源利用合理,但判鍵速度慢。多用于設(shè)置數(shù)字鍵,適用于鍵數(shù)多的場(chǎng)合。輸入功能—按鍵檢測(cè)

在2.1節(jié)中,IO口作為輸出口時(shí),只需要在程序中將P0.0端口設(shè)為低電平即可點(diǎn)亮LED燈,將P0.0端口設(shè)為高電平即可熄滅LED燈。STC89C52單片機(jī)的輸入功能比輸出功能稍微復(fù)雜一些,在使用之前需進(jìn)行一些設(shè)置,否則有可能無(wú)法準(zhǔn)確識(shí)別輸入端口電平!(1)P0口

P0口為雙向三態(tài)輸入/輸出口,P0口既可作為地址/數(shù)據(jù)總線口,又可作為通用I/O口,作通用I/O口時(shí),P0口只是一個(gè)準(zhǔn)雙向口,需要在外部引腳處外接上拉電阻。VCC作輸入口使用時(shí)必須先給鎖存器置1!Q(2)P2口

P2口常用做外部存儲(chǔ)器的高8位地址口。當(dāng)不用做地址口時(shí),P2口也可作為通用I/O口,這時(shí)它也是一個(gè)準(zhǔn)雙向I/O口,即作輸入口使用時(shí)必須先給鎖存器置1。不必外接上拉電阻就可以驅(qū)動(dòng)任何MOS驅(qū)動(dòng)電路。(3)P1口

P1口常用做通用I/O口,它也是一個(gè)標(biāo)準(zhǔn)的準(zhǔn)雙向I/O口,不必外接上拉電阻就可以驅(qū)動(dòng)任何MOS驅(qū)動(dòng)電路。P1口的位結(jié)構(gòu)如下圖所示。(4)P3口

P3口是一個(gè)雙功能口,第一功能與P1口一樣可用做通用I/O口,也是一個(gè)準(zhǔn)雙向I/O口。另外還具有第二功能。P3口工作在第二功能時(shí)各管腳定義如下表所示。P3口的位結(jié)構(gòu)圖如右圖所示。

引腳功能引腳信號(hào)名稱P3.0串行數(shù)據(jù)接收口(RXD)P3.4定時(shí)器/計(jì)數(shù)器0的外部輸入口(T0)P3.1串行數(shù)據(jù)發(fā)送口(TXD)P3.5定時(shí)器/計(jì)數(shù)器1的外部輸入口(T1)P3.2外部中斷0(INT0)P3.6外部RAM寫(xiě)選通信號(hào)(WR)P3.3外部中斷1(INT1)P3.7外部RAM讀選通信號(hào)(RD)輸入功能—按鍵檢測(cè)

分析IO口電路就可以得出一個(gè)結(jié)論,這種具有上拉的準(zhǔn)雙向IO口,如果要正常讀取外部信號(hào)的狀態(tài),必須首先得保證自己內(nèi)部輸出的是1,如果內(nèi)部輸出0,則無(wú)論外部信號(hào)是1還是0,這個(gè)引腳讀進(jìn)來(lái)的都是0。因此,輸入數(shù)據(jù)時(shí),應(yīng)先向端口寫(xiě)1,使場(chǎng)效應(yīng)管截止,然后方可作為輸入。(注:P0口作為通用IO口使用時(shí)需加上拉電阻,其他IO口內(nèi)部有上拉電阻,不需外接上拉電阻)輸入功能—按鍵檢測(cè)2.2.2獨(dú)立按鍵掃描

單獨(dú)的按鍵掃描程序執(zhí)行后看不到任何現(xiàn)象,為了有個(gè)直觀的效果,我們可以將之前的點(diǎn)亮LED燈的程序加進(jìn)來(lái),當(dāng)K1鍵按下時(shí)點(diǎn)亮一個(gè)LED燈(如板子最右側(cè)的LED2)。1、構(gòu)建獨(dú)立按鍵若要將K1變?yōu)楠?dú)立按鍵,只需KeyOut1端接地即可,因此,只要將單片機(jī)的P2.3(KeyOut1接至P2.3端口)端口輸出低電平,就可以將K1看成是一個(gè)獨(dú)立按鍵。輸入功能—按鍵檢測(cè)2、獨(dú)立式按鍵的軟件設(shè)計(jì)開(kāi)始初始化按鍵是否按下?延時(shí)去抖點(diǎn)亮LEDYN輸入功能—按鍵檢測(cè)3、按鍵消抖

在鍵盤的軟件設(shè)計(jì)中還要注意按鍵的去抖動(dòng)問(wèn)題。由于按鍵一般是由機(jī)械式觸點(diǎn)構(gòu)成的,在按鍵按下和斷開(kāi)的瞬間均有一個(gè)抖動(dòng)過(guò)程,時(shí)間大約為5ms~10ms,可能會(huì)造成單片機(jī)對(duì)按鍵的誤識(shí)別。按鍵消抖一般有兩種方法,即硬件消抖和軟件消抖。軟件消抖方式經(jīng)濟(jì)實(shí)惠,且操作簡(jiǎn)單,因此應(yīng)用廣泛。在軟件設(shè)計(jì)中,當(dāng)單片機(jī)檢測(cè)到有鍵按下時(shí),可以先延時(shí)一段時(shí)間越過(guò)抖動(dòng)過(guò)程再對(duì)按鍵識(shí)別。輸入功能—按鍵檢測(cè)

實(shí)際應(yīng)用中,一般希望按鍵一次按下單片機(jī)只處理一次,但由于單片機(jī)執(zhí)行程序的速度很快,按鍵一次按下可能被單片機(jī)多次處理。為避免此問(wèn)題,可在按鍵第一次按下時(shí)延時(shí)10ms之后再次檢測(cè)按鍵是否按下,如果此時(shí)按鍵仍然按下,則確定有按鍵輸入。這樣便可以避免按鍵的重復(fù)處理。輸入功能—按鍵檢測(cè)2.2.3源程序編寫(xiě)#include<reg52.h> //包含特殊功能寄存器定義的頭文件sbitLED0=P0^0; //位地址聲明sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;sbitKeyIn1=P2^4;sbitKeyOut1=P2^3;

voiddelay10ms(void)//延時(shí)10ms子函數(shù){ unsignedchari,k;//變量定義 for(i=20;i>0;i--)//for語(yǔ)句循環(huán)體 for(k=250;k>0;k--);}輸入功能—按鍵檢測(cè)voidmain() //主程序{ KeyIn1=1; //向輸入端口寫(xiě)1,為輸入做準(zhǔn)備 KeyOut1=0; //將K1作為獨(dú)立按鍵使用 ENLED=0; ADDR3=1; ADDR2=1; ADDR1=1; ADDR0=0; while(1) { if(KeyIn1==0) //判斷K1鍵是否按下 {

輸入功能—按鍵檢測(cè) delay10ms(); //延時(shí)去抖 if(KeyIn1==0) { while(KeyIn1==0); //等待按鍵釋放 LED0=0; //點(diǎn)亮LED燈 } }}}程序?qū)懲暌院?,按照Keil寫(xiě)程序的過(guò)程,建立工程->保存工程->建立文件->添加文件到工程->編寫(xiě)程序->編譯->下載程序。程序下載完成以后,可以發(fā)現(xiàn),按K1鍵,松開(kāi)以后開(kāi)發(fā)板上最右側(cè)的LED燈(LED2)點(diǎn)亮。項(xiàng)目三數(shù)碼管基礎(chǔ)與

矩陣鍵盤掃描項(xiàng)目描述

單片機(jī)項(xiàng)目開(kāi)發(fā)過(guò)程中經(jīng)常要用到“0~9”的數(shù)字顯示,如:顯示實(shí)時(shí)時(shí)鐘、顯示檢測(cè)到的溫度、電壓等。數(shù)碼管是實(shí)現(xiàn)“0~9”的數(shù)字顯示的最簡(jiǎn)單的元件,其結(jié)構(gòu)簡(jiǎn)單、價(jià)格便宜、驅(qū)動(dòng)程序編寫(xiě)容易,因此得到廣泛應(yīng)用。本項(xiàng)目通過(guò)編程掃描4×4矩陣鍵盤,并將鍵值編號(hào)(0~F)顯示在數(shù)碼管上。數(shù)碼管基礎(chǔ)3.1.1數(shù)碼管的基本介紹七段LED數(shù)碼管顯示器能夠顯示十進(jìn)制或十六進(jìn)制數(shù)字及某些簡(jiǎn)單字符。從原理圖可以看出數(shù)碼管共有a、b、c、d、e、f、g、dp這么8個(gè)段,而實(shí)際上,這8個(gè)段每一段都是一個(gè)LED小燈,所以一個(gè)數(shù)碼管就是由8個(gè)LED小燈組成的。數(shù)碼管基礎(chǔ)

從開(kāi)發(fā)板的電路圖上能看出來(lái),我們所用的數(shù)碼管都是共陽(yáng)數(shù)碼管,一共有6個(gè)。 6個(gè)數(shù)碼管的com都是接到了正極上,由74HC138控制三極管的導(dǎo)通來(lái)控制整個(gè)數(shù)碼管的使能。先來(lái)看最右邊的DS1這個(gè)數(shù)碼管,原理圖上可以看出,控制DS1的三極管是Q17,控制Q17的引腳是LEDS0,對(duì)應(yīng)到74HC138上邊就是U3的Y0輸出。數(shù)碼管基礎(chǔ)數(shù)碼管基礎(chǔ)

要最右邊的DS1數(shù)碼管亮,LEDS0這個(gè)引腳必須輸出低電平,由上圖分析可知ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;ENLED=0.數(shù)碼管通常是用來(lái)顯示數(shù)字的,我們板子上有6個(gè)數(shù)碼管,習(xí)慣上稱之為6位,那控制位選擇的就是74HC138了。而數(shù)碼管內(nèi)部的8個(gè)LED小燈我們稱之為數(shù)碼管的段,那么數(shù)碼管的段選擇(即該段的亮滅)是通過(guò)P0口控制,經(jīng)過(guò)74HC245驅(qū)動(dòng)。數(shù)碼管基礎(chǔ)3.1.2數(shù)碼管真值表

數(shù)碼管的8個(gè)段,我們直接當(dāng)成8個(gè)LED小燈來(lái)控制,那就是a、b、c、d、e、f、g、dp一共8個(gè)LED小燈。我們通過(guò)原理圖可以看出,如果點(diǎn)亮b和c這兩個(gè)LED小燈,也就是數(shù)碼管的b段和c段,其他的所有的段都熄滅的話,就可以讓數(shù)碼管顯示出一個(gè)數(shù)字1,那么這個(gè)時(shí)候?qū)嶋H上P0的值就是0b11111001,十六進(jìn)制就是0xF9。數(shù)碼管基礎(chǔ)

用同樣的方法,我們可以把其他的數(shù)字字符列出來(lái),如下表所示,稱為數(shù)碼管真值表。

思考:如果是共陰數(shù)碼管,其真值表應(yīng)如何列??數(shù)碼管基礎(chǔ)#include<reg52.h>sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;voidmain(){ ENLED=0;//使能U3,選擇數(shù)碼管DS1 ADDR3=1; ADDR2=0; ADDR1=0; ADDR0=0; P0=0xF9;//點(diǎn)亮數(shù)碼管段b和c while(1);}

把上面這個(gè)程序編譯一下,并下載到單片機(jī)中,就可以看到程序運(yùn)行的結(jié)果是在最右側(cè)的數(shù)碼管上顯示了一個(gè)數(shù)字1。數(shù)碼管基礎(chǔ)3.1.3數(shù)碼管的靜態(tài)顯示LED數(shù)碼管顯示器的工作方式:靜態(tài)和動(dòng)態(tài)兩種顯示方式。

靜態(tài)顯示方式各數(shù)碼管在顯示過(guò)程中持續(xù)得到送顯信號(hào),與各數(shù)碼管接口的I/O口線是專用的。其特點(diǎn)是顯示穩(wěn)定,無(wú)閃爍,用元器件多,占I/O線多,無(wú)須掃描。系統(tǒng)運(yùn)行過(guò)程中,在需要更新顯示內(nèi)容時(shí),CPU才去執(zhí)行顯示更新子程序,節(jié)省CPU時(shí)間,提高CPU的工作效率,編程簡(jiǎn)單。

動(dòng)態(tài)顯示方式是指一位一位地輪流點(diǎn)亮每位顯示器,與各數(shù)碼管接口的I/O口線是共用的。其特點(diǎn)是有閃爍,用元器件少,占I/O線少,必須掃描,花費(fèi)CPU時(shí)間,編程復(fù)雜。STC89C52P0.0…P0.7P1.0…P1.7P2.0…P2.7靜態(tài)顯示方式電路動(dòng)態(tài)顯示方式驅(qū)動(dòng)電路數(shù)碼管基礎(chǔ)

靜態(tài)顯示如同74HC138在同一時(shí)刻只能讓一個(gè)輸出口為低電平,也就是說(shuō)在一個(gè)時(shí)刻內(nèi),我們只能使能一個(gè)數(shù)碼管,并根據(jù)我們給出的P0的值來(lái)改變這個(gè)數(shù)碼管的顯示字符,我們可以將此理解為數(shù)碼管的靜態(tài)顯示。數(shù)碼管靜態(tài)顯示是對(duì)應(yīng)動(dòng)態(tài)顯示而言的,靜態(tài)顯示對(duì)于一兩個(gè)數(shù)碼管還行,多個(gè)數(shù)碼管,靜態(tài)顯示實(shí)現(xiàn)的意義就沒(méi)有了。下面我們編程實(shí)現(xiàn)數(shù)碼管靜態(tài)循環(huán)顯示字符0~F。數(shù)碼管基礎(chǔ)

先介紹一個(gè)51單片機(jī)的關(guān)鍵字code。前面定義變量時(shí),一般用到unsignedchar或者unsignedint這兩個(gè)關(guān)鍵字,這樣定義的變量都是放在單片機(jī)的RAM中,我們?cè)诔绦蛑锌梢噪S意去改變這些變量的值。但是還有一種數(shù)據(jù),在程序中要使用,但是卻不會(huì)改變它的值,定義這種數(shù)據(jù)時(shí)可以加一個(gè)code關(guān)鍵字修飾一下,這個(gè)數(shù)據(jù)就會(huì)存儲(chǔ)到程序空間Flash中,這樣可以大大節(jié)省單片機(jī)的RAM的使用量,畢竟單片機(jī)RAM空間比較小,而程序空間則大的多。那么現(xiàn)在要使用的數(shù)碼管真值表,我們只會(huì)使用它們的值,而不需要改變它們,就可以用code關(guān)鍵字把它放入Flash中了。數(shù)碼管基礎(chǔ)#include<reg52.h>sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4; //用數(shù)組來(lái)存儲(chǔ)數(shù)碼管的真值表unsignedcharcodeLedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};voiddelay() //軟件延時(shí)子程序{unsignedinti,k;for(i=200;i>0;i--)for(k=250;k>0;k--);}數(shù)碼管基礎(chǔ)voidmain(){unsignedcnt=0; //定義變量,用于控制循環(huán)顯示ENLED=0;//使能U3,選擇數(shù)碼管DS1ADDR3=1;ADDR2=0;ADDR1=0;ADDR0=0;while(1){ P0=LedChar[cnt]; cnt++; delay(); if(cnt==16) { cnt=0; }}}數(shù)碼管基礎(chǔ)

把上面程序編譯一下,并下載到單片機(jī)中,就可以看到程序運(yùn)行的結(jié)果是在最右側(cè)的數(shù)碼管上循環(huán)顯示0~F。

修改延時(shí)子程序中的參數(shù),將延時(shí)時(shí)間改短,如:去掉第一重for循環(huán)for(i=200;i>0;i--)語(yǔ)句,重新編譯下載程序,觀察實(shí)驗(yàn)現(xiàn)象,并分析產(chǎn)生該實(shí)驗(yàn)現(xiàn)象的原因。矩陣鍵盤掃描3.2.1結(jié)構(gòu)和工作原理

當(dāng)輸入部分有多個(gè)按鍵時(shí),若仍然采用獨(dú)立鍵盤,必然會(huì)占用大量的I/O口,采用矩陣鍵盤是一種比較節(jié)省資源的方法。矩陣式鍵盤又稱行列式鍵盤,往往用于按鍵數(shù)量較多的場(chǎng)合。矩陣式鍵盤的按鍵設(shè)置在行與列的交點(diǎn)上。

我們的開(kāi)發(fā)板上是一個(gè)4*4的矩陣鍵盤,如下圖所示,共有16個(gè)按鍵,按4×4的矩陣式排列,鍵號(hào)依次設(shè)為0~F。單片機(jī)的P2.0~P2.3為輸出口,連接4條行線;P2.4~P2.7為輸入口,連接4條列線。矩陣鍵盤掃描P2.3P2.2P2.1P2.0P2.4P2.5P2.6P2.7矩陣鍵盤掃描

確定鍵盤上哪一個(gè)鍵被按下可以采用逐行掃描或逐列掃描的方法,稱為行(列)掃描法。(1)先將全部行線置為低電平,然后通過(guò)列線接口讀取列線電平,判斷鍵盤中是否有按鍵被按下。(2)判斷閉合鍵的具體位置。在確認(rèn)鍵盤中有按鍵被按下后,依次將列線置為低電平,再逐行檢測(cè)各行的電平狀態(tài)。若某行為低電平,則該列與置為低電平的行線相交處的按鍵即為閉合按鍵。(3)綜合上述兩步的結(jié)果,即可確定出閉合鍵所在的行和列,從而識(shí)別出所按下的鍵。矩陣鍵盤掃描3.2.2軟件設(shè)計(jì)思路

矩陣式鍵盤的掃描常用編程掃描方式、定時(shí)掃描方式或中斷掃描方式,無(wú)論采用哪種方式,都要編制相應(yīng)的鍵盤掃描程序。在鍵盤掃描程序中一般要完成以下幾個(gè)功能:(1)判斷鍵盤上有無(wú)按鍵按下;(2)去鍵的機(jī)械抖動(dòng)影響;(3)求所按鍵的鍵號(hào);(4)轉(zhuǎn)向鍵處理程序。矩陣鍵盤掃描

在編程掃描方式中,只有當(dāng)單片機(jī)空閑時(shí),才執(zhí)行鍵盤掃描任務(wù)。一般是把鍵盤掃描程序編成子程序,在主程序循環(huán)執(zhí)行時(shí)調(diào)用。在主程序執(zhí)行任務(wù)太多或執(zhí)行時(shí)間太長(zhǎng)時(shí),按鍵的反應(yīng)速度會(huì)變慢。

在定時(shí)掃描方式中單片機(jī)可以定時(shí)對(duì)鍵盤進(jìn)行掃描,方法是利用單片機(jī)內(nèi)部定時(shí)器,每隔一定的時(shí)間就產(chǎn)生定時(shí)中斷,CPU響應(yīng)中斷后對(duì)鍵盤進(jìn)行掃描,并在有按鍵按下時(shí)進(jìn)行處理。

在中斷掃描方式中,當(dāng)鍵盤上有按鍵被按下時(shí)產(chǎn)生中斷申請(qǐng),單片機(jī)響應(yīng)中斷后,在中斷服務(wù)程序中完成鍵掃描、識(shí)別鍵號(hào)并進(jìn)行鍵功能處理。

以上幾種鍵盤掃描方式只是轉(zhuǎn)入鍵盤掃描程序的方式不同,而鍵盤掃描程序的設(shè)計(jì)方法是類似的。矩陣鍵盤掃描

下面以編程掃描方式介紹矩陣鍵盤掃描程序。通過(guò)編程掃描4*4矩陣鍵盤,并將得到的鍵值編號(hào)(0~F)通過(guò)開(kāi)發(fā)上最右邊的數(shù)碼管DS1顯示出來(lái)。

在矩陣式按鍵的掃描程序中,要對(duì)按鍵逐行逐列地掃描,得到按下鍵的行列信息,然后還要轉(zhuǎn)換成鍵號(hào),以便據(jù)此轉(zhuǎn)到相應(yīng)的鍵處理程序。

按鍵掃描子函數(shù)中,先對(duì)4條行線送高電平,當(dāng)判斷有按鍵按下之后,延時(shí)30ms之后再判斷該按鍵是否按下。若仍然有按鍵按下,則能知道被按下按鍵所處的行編碼。之后再在判斷被按下按鍵所處列編碼,綜合行、列編碼得到按鍵位置,從而判斷出鍵值。程序流程圖如下圖所示。矩陣鍵盤掃描矩陣鍵盤掃描3.2.3源程序編寫(xiě)#include<reg52.h>

sbitADDR0=P1^0;sbitADDR1=P1^1;sbitADDR2=P1^2;sbitADDR3=P1^3;sbitENLED=P1^4;

#defineucharunsignedchar#defineuintunsignedintucharkey;unsignedcharcodeLedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};矩陣鍵盤掃描unsignedcharcodekey_code[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};

voiddelayms(uintms){uchart;while(ms--){for(t=0;t<120;t++);}}矩陣鍵盤掃描ucharkeyscan()//鍵盤掃描程序{ucharscan1,scan2,keycode,j;P2=0x0f;scan1=P2;if((scan1&0x0f)!=0x0f)//判鍵是否按下{delayms(30);//延時(shí)30msscan1=P2;if((scan1&0x0f)!=0x0f)//二次判鍵是否按下{P2=0xf0;scan2=P2;keycode=scan1|scan2;//組合成鍵編碼for(j=0;j<=15;j++){if(keycode==key_code[j])//查表得鍵值 {矩陣鍵盤掃描 key=j;return(key);}}}}elseP2=0xff;return(16);}voidkeydown()//判斷是否有鍵按下{P2=0xf0;if((P2&0xf0)!=0xf0){keyscan();P0=LedChar[key];//在數(shù)碼管上顯示鍵值}}矩陣鍵盤掃描main(){ ENLED=0;//使能U3,選擇數(shù)碼管DS1 ADDR3=1; ADDR2=0; ADDR1=0; ADDR0=0;

P0=0xbf;//數(shù)碼管顯示"-"P3=0xff;while(1){keydown();}}矩陣鍵盤掃描

將上述程序編譯一下,并下載到單片機(jī)中,就可以看到程序運(yùn)行的結(jié)果是當(dāng)每按下一個(gè)按鍵,其編號(hào)(0~F)在最右側(cè)的數(shù)碼管上顯示。思考:1、修改3.1節(jié)中的程序,使6個(gè)數(shù)碼管同時(shí)循環(huán)顯示0~F。2、矩陣鍵盤中,如果有兩個(gè)按鍵同時(shí)按下,能否識(shí)別?項(xiàng)目四定時(shí)器與數(shù)碼管

動(dòng)態(tài)顯示項(xiàng)目描述

定時(shí)器用來(lái)實(shí)現(xiàn)精確定時(shí),是單片機(jī)系統(tǒng)的一個(gè)重點(diǎn),應(yīng)用十分廣泛,大家一定要完全理解并熟練掌握定時(shí)器的應(yīng)用。本項(xiàng)目利用定時(shí)器設(shè)計(jì)一個(gè)實(shí)時(shí)時(shí)鐘,利用六位數(shù)碼管分別顯示時(shí)鐘的時(shí)、分、秒等信息。定時(shí)器4.1.1定時(shí)器的初步認(rèn)識(shí)

學(xué)習(xí)定時(shí)器之前,我們先來(lái)了解單片機(jī)時(shí)序中的幾個(gè)概念:時(shí)鐘周期、機(jī)器周期和指令周期。

時(shí)鐘周期:時(shí)鐘周期T是時(shí)序中最小的時(shí)間單位,具體計(jì)算的方法就是1/時(shí)鐘源頻率,我們KST-51單片機(jī)開(kāi)發(fā)板上用的晶振是11.0592M,那么對(duì)于我們這個(gè)單片機(jī)系統(tǒng)來(lái)說(shuō),時(shí)鐘周期=1/11059200秒。定時(shí)器

機(jī)器周期:?jiǎn)纹瑱C(jī)完成一個(gè)操作的最短時(shí)間。機(jī)器周期主要針對(duì)匯編語(yǔ)言而言,在匯編語(yǔ)言下程序的每一條語(yǔ)句執(zhí)行所使用的時(shí)間都是機(jī)器周期的整數(shù)倍,而且語(yǔ)句占用的時(shí)間是可以計(jì)算出來(lái)的。51單片機(jī)系列,在其標(biāo)準(zhǔn)架構(gòu)下一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,也就是12/11059200秒。定時(shí)器指令周期:執(zhí)行一條指令(這里指匯編語(yǔ)言指令)所需要的時(shí)間稱為指令周期,指令周期是時(shí)序中的最大單位。由于機(jī)器執(zhí)行不同指令所需時(shí)間不同,因此不同指令所包含的機(jī)器周期數(shù)也不盡相同。51系列單片機(jī)的指令可能包括1~4個(gè)不等的機(jī)器周期。通常,包含一個(gè)機(jī)器周期的指令稱為單周期指令,包含兩個(gè)機(jī)器周期的指令稱為雙周期指令,等等。指令所包含的機(jī)器周期數(shù)決定了指令的運(yùn)算速度,機(jī)器周期數(shù)越少的指令,其執(zhí)行速度越快。定時(shí)器

定時(shí)器用來(lái)進(jìn)行定時(shí)。定時(shí)器內(nèi)部有一個(gè)寄存器,開(kāi)始計(jì)數(shù)后,這個(gè)寄存器的值每經(jīng)過(guò)一個(gè)機(jī)器周期(也就是12/11059200秒)就會(huì)自動(dòng)加1。加到一定的值時(shí)會(huì)自動(dòng)溢出,后面會(huì)講到定時(shí)器有多種工作模式,分別使用不同的位寬(指使用多少個(gè)二進(jìn)制位),假如是16位的定時(shí)器,也就是2個(gè)字節(jié),最大值就是65535,那么加到65535后,再加1就算溢出,對(duì)于51單片機(jī)來(lái)說(shuō),溢出后,這個(gè)值會(huì)直接變成0。從某一個(gè)初始值開(kāi)始,經(jīng)過(guò)確定的時(shí)間后溢出,這個(gè)過(guò)程就是定時(shí)的含義。定時(shí)器4.1.2定時(shí)器的寄存器標(biāo)準(zhǔn)的51單片機(jī)內(nèi)部有T0和T1這兩個(gè)定時(shí)器。(1)定時(shí)值存儲(chǔ)寄存器下表的寄存器是存儲(chǔ)定時(shí)器的計(jì)數(shù)值的。TH0/TL0用于T0,TH1/TL1用于T1。先學(xué)習(xí)如何看寄存器TF1TR1TF0TR0IE1IT1IE0IT0TCON1、先分清每一位屬于哪個(gè)模塊2、查看每一位是可讀、可寫(xiě)、可讀寫(xiě)位的哪一種3、看每一位的具體功能以及在0或1時(shí)分別是什么狀態(tài)4、如何通過(guò)指令設(shè)置寄存器或者寄存器某一位的值5、寄存器的物理地址定時(shí)器(2)定時(shí)器控制寄存器TCON(地址0x88、可位尋址)TF0/TF1:T0/T1計(jì)數(shù)溢出標(biāo)志位??捎糜谏暾?qǐng)中斷或供CPU查詢。在進(jìn)入中斷服務(wù)程序時(shí)會(huì)自動(dòng)清零;但在查詢方式時(shí)必須軟件清零。

=1:計(jì)數(shù)溢出;=0:計(jì)數(shù)未滿。TR0/TR1:T0/T1啟??刂莆弧?/p>

=1:?jiǎn)?dòng)計(jì)數(shù);=0:停止計(jì)數(shù)。低四位IE1、IT1、IE0、IT0用于外部中斷,下一章再做介紹。

M1,M0:工作方式選擇位。

=00:13位定時(shí)器/計(jì)數(shù)器;

=01:16位定時(shí)器/計(jì)數(shù)器(常用);

=10:可自動(dòng)重裝的8位定時(shí)器/計(jì)數(shù)器(常用);

=11:T0分為2個(gè)8位定時(shí)器/計(jì)數(shù)器;僅適用于T0。

C/:定時(shí)方式/計(jì)數(shù)方式選擇位。

=1:選擇計(jì)數(shù)器工作方式,對(duì)T0/T1引腳輸入外部事件的負(fù)脈沖計(jì)數(shù);

=0:選擇定時(shí)器工作方式,對(duì)機(jī)器周期脈沖計(jì)數(shù)定時(shí)。GATEC/TM1M0GATEC/TM1M0T1T0定時(shí)器(3)定時(shí)器模式寄存器TMOD(地址0x89、不可位尋址)GATE:門控位,定時(shí)/計(jì)數(shù)器的啟/??捎绍浖c硬件兩者控制

=0:軟件控制,只由TCON中的啟/??刂莆籘R0/TR1控制 定時(shí)器/計(jì)數(shù)器的啟/停。

=1:硬件控制,由外部中斷請(qǐng)求信號(hào)/和TCON中 的啟/??刂莆籘R0/TR1組合狀態(tài)控制定時(shí)器/計(jì)數(shù)器的啟/停。定時(shí)器定時(shí)器定時(shí)器/計(jì)數(shù)器的4種工作方式M1M0工作方式功能描述00工作方式013位計(jì)數(shù)器01工作方式116位計(jì)數(shù)器10工作方式2自動(dòng)再裝入8位計(jì)數(shù)器11工作方式3定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器,定時(shí)器1:停止計(jì)數(shù)定時(shí)器

MCS-51單片機(jī)的定時(shí)器/計(jì)數(shù)器共有4種工作模式,現(xiàn)以T0為例加以介紹,T1與T0的工作原理相同,但在方式3下,T1停止計(jì)數(shù)。1.工作方式0(M1M0=00,13位定時(shí)器/計(jì)數(shù)器)由TH0的全部8位和TL0的低5位(TL0的高3位未用)構(gòu)成13位加1計(jì)數(shù)器,當(dāng)TL0低5位計(jì)數(shù)滿時(shí)直接向TH0進(jìn)位,并當(dāng)全部13位計(jì)數(shù)滿溢出時(shí),溢出標(biāo)志位TF0置“1”。2.工作方式1(M1M0=01,16位定時(shí)器/計(jì)數(shù)器)由TH0和TL0構(gòu)成16位加1計(jì)數(shù)器,其他特性與工作方式0相同。3.工作方式2(M1M0=10,自動(dòng)重裝計(jì)數(shù)初值的8位定時(shí)器/計(jì)數(shù)器)

16位定時(shí)器/計(jì)數(shù)器被拆成兩個(gè)8位寄存器TH0和TL0,CPU在對(duì)它們初始化時(shí)必須裝入相同的定時(shí)器/計(jì)數(shù)器初值。以TL0作計(jì)數(shù)器,而TH0作為預(yù)置寄存器。當(dāng)計(jì)數(shù)滿溢出時(shí),TF0置“1”,同時(shí)TH0將計(jì)數(shù)初值以硬件方法自動(dòng)裝入TL0。這種工作方式很適合于那些重復(fù)計(jì)數(shù)的應(yīng)用場(chǎng)合(如串行數(shù)據(jù)通信的波特率發(fā)生器)。定時(shí)器4、工作方式3(M1M0=11,2個(gè)8位定時(shí)器/計(jì)數(shù)器,僅適用于T0)TL0:8位定時(shí)器/計(jì)數(shù)器,使用T0原有控制資源TR0和TF0,其功能和操作與方式0或方式1完全相同。TH0:只能作為8位定時(shí)器,借用T1的控制位TR1和TF1,只能對(duì)片內(nèi)機(jī)器周期脈沖計(jì)數(shù)。在方式3模式下,定時(shí)器/計(jì)數(shù)器0可以構(gòu)成兩個(gè)定時(shí)器或者一個(gè)定時(shí)器和一個(gè)計(jì)數(shù)器。

一般,只有在T1以方式2運(yùn)行(當(dāng)波特率發(fā)生器用)時(shí),才讓T0工作于方式3下。定時(shí)器定時(shí)器例:設(shè)定定時(shí)器1為定時(shí)工作方式,要求軟件啟動(dòng)定時(shí)器1按方式2工作。定時(shí)器0為計(jì)數(shù)方式,要求由軟件啟動(dòng)定時(shí)器0,按方式1工作。怎么來(lái)實(shí)現(xiàn)這個(gè)要求呢?①控制定時(shí)器1工作在定時(shí)方式或計(jì)數(shù)方式是哪個(gè)位?

位(D6)是定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)=0時(shí)定時(shí)/計(jì)數(shù)器就為定時(shí)工作方式。②設(shè)定定時(shí)器1按方式2工作。要使定時(shí)/計(jì)數(shù)器1工作在方式2,M0(D4)M1(D5)的值必須是10。③設(shè)定定時(shí)器0為計(jì)數(shù)方式。當(dāng)=1時(shí),就工作在計(jì)數(shù)器方式。④由軟件啟動(dòng)定時(shí)器0,當(dāng)門控位GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟停就由軟件控制。定時(shí)器⑤設(shè)定定時(shí)/計(jì)數(shù)器工作在方式1,使定時(shí)/計(jì)數(shù)器0工作在方式1,M0(D0)M1(D1)的值必須是01。

從上面的分析我們可以知道,只要將TMOD的各位,按規(guī)定的要求設(shè)置好后,定時(shí)器/計(jì)數(shù)器就會(huì)按我們預(yù)定的要求工作。我們分析的這個(gè)例子最后各位的情況如下: D7D6D5D4D3D2D1D0 00100101

二進(jìn)制數(shù)00100101b=十六進(jìn)制數(shù)25H。所以執(zhí)行TMOD=0x25(或者用匯編語(yǔ)言MOVTMOD,#25H)這條指令就可以實(shí)現(xiàn)上述要求。定時(shí)器4.1.3定時(shí)器初始化

由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以一般在使用前都要對(duì)其進(jìn)行初始化,初始化的步驟一般如下:(1)確定工作方式(即對(duì)TMOD賦值);(2)預(yù)置定時(shí)或計(jì)數(shù)的初值(可直接將初值寫(xiě)入TH0、TL0或TH1、TL1);(3)根據(jù)需要開(kāi)放定時(shí)器/計(jì)數(shù)器中斷(直接對(duì)IE位賦值)(4)啟動(dòng)定時(shí)器/計(jì)數(shù)器(若已規(guī)定用軟件啟動(dòng),則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動(dòng),則需給外引腳加啟動(dòng)電平。)。定時(shí)器下面介紹一下確定時(shí)時(shí)/計(jì)數(shù)器初值的具體方法。在不同工作方式下計(jì)數(shù)器位數(shù)不同,最大計(jì)數(shù)值也不同?,F(xiàn)假設(shè)最大計(jì)數(shù)值為M,那么各方式下的最大值M值如下:方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:定時(shí)器0分成兩個(gè)8位計(jì)數(shù)器,所以兩個(gè)M均為256。

因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作“加1”計(jì)數(shù),并在計(jì)數(shù)滿溢出時(shí)產(chǎn)生中斷,因此初值X可以這樣計(jì)算: X=M-計(jì)數(shù)值定時(shí)器例:選擇T1方式0用于定時(shí),在P1.1輸出周期為1ms方波,晶振

fosc=6MHz。解:根據(jù)題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時(shí)時(shí)間為500us,因定時(shí)時(shí)間不長(zhǎng),取方式1即可。則M1M0=1;因是定時(shí)器方式,所以=0;在此用軟件啟動(dòng)T1,所以GATE=0。T0不用,方式字可任意設(shè)置,只要不使其進(jìn)入方式3即可,一般取0,故TMOD=10H。計(jì)算500us定時(shí)T1初始值:

機(jī)器周期:T=12/fosc=12/(6×106)Hz=2μs設(shè)初值為X,則:(216-X)×2×10-6s=500×10-6s定時(shí)器X=216-250=65286=FF06H=1111111100000110B因此TH1=FFH,TL1=06H。初始化程序如下:TMOD=0x10; //定時(shí)器1方式1TH1=0XFF;TL1=0X06; //裝入時(shí)間常數(shù)TR1=1; //啟動(dòng)定時(shí)器定時(shí)器4.1.4定時(shí)器中斷1、中斷的基本概念

中斷的定義:所謂“中斷”,是指CPU執(zhí)行正常程序時(shí),系統(tǒng)中出現(xiàn)特殊請(qǐng)求,CPU暫時(shí)中止當(dāng)前的程序,轉(zhuǎn)去處理更緊急的事件(執(zhí)行中斷服務(wù)程序),處理完畢(中斷服務(wù)完成)后,CPU自動(dòng)返回原程序的過(guò)程。

中斷后轉(zhuǎn)向執(zhí)行的程序叫中斷服務(wù)程序或中斷處理程序。原程序被斷開(kāi)的位置(地址)叫作斷點(diǎn)。

發(fā)出中斷信號(hào)的設(shè)備稱為中斷源。中斷源要求中斷服務(wù)所發(fā)出的標(biāo)志信號(hào)稱為中斷請(qǐng)示或中斷申請(qǐng)。

定時(shí)器

中斷源向CPU發(fā)出中斷申請(qǐng),CPU經(jīng)過(guò)判斷認(rèn)為滿足條件,則對(duì)中斷源作出答復(fù),這叫中斷響應(yīng)。中斷響應(yīng)后就去處理中斷源的有關(guān)請(qǐng)求,即轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。2.引入中斷的主要優(yōu)點(diǎn)(1)提高CPU工作效率(2)實(shí)現(xiàn)實(shí)時(shí)處理功能(3)實(shí)現(xiàn)分時(shí)操作定時(shí)器3.STC89C52中斷源 STC89C52單片機(jī)共有6個(gè)中斷源。它們分別是:2個(gè)外部中斷,4個(gè)片內(nèi)中斷,即定時(shí)器T0的溢出中斷、定時(shí)器T1的溢出中斷、定時(shí)器T2的溢出中斷和串行口中斷;這6個(gè)中斷源,可以根據(jù)需要隨時(shí)向CPU發(fā)出中斷申請(qǐng)。(1)外部中斷源

外部中斷是由外部信號(hào)引起的,請(qǐng)求有兩種信號(hào)觸發(fā)方式,即低電平觸發(fā)和下降沿觸發(fā)。外部中斷請(qǐng)求的這兩種信號(hào)方式,可通過(guò)設(shè)置寄存器TCON中的IT0和IT1位狀態(tài)的值來(lái)設(shè)定。定時(shí)器控制寄存器TCON各位定義如下表所示。定時(shí)器IE0/IE1:外部中斷申請(qǐng)標(biāo)志位(由硬件自動(dòng)置位,中斷響

應(yīng)后轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)清0)

=0:沒(méi)有外部中斷申請(qǐng);

=1:有外部中斷申請(qǐng)。IT0/IT1:外部中斷請(qǐng)求的觸發(fā)方式控制位(可由用戶通過(guò)軟

件設(shè)置)。 =0:在端申請(qǐng)中斷的信號(hào)低電平有效; =1:在端申請(qǐng)中斷的信號(hào)負(fù)跳變有效。定時(shí)器(2)定時(shí)器溢出中斷源

定時(shí)/計(jì)數(shù)器中斷由單片機(jī)內(nèi)部定時(shí)器產(chǎn)生,屬于內(nèi)部中斷。STC89C52內(nèi)部有三個(gè)16位的定時(shí)器/計(jì)數(shù)器T0、T1和T2,最常用的是T0和T1,它們以計(jì)數(shù)的方法來(lái)實(shí)現(xiàn)定時(shí)或計(jì)數(shù)的。當(dāng)它作為定時(shí)器使用時(shí),其計(jì)數(shù)信號(hào)來(lái)自于CPU內(nèi)部的機(jī)器周期脈沖,當(dāng)它作為計(jì)數(shù)器使用時(shí),其計(jì)數(shù)信號(hào)來(lái)自于CPU的T0(P3.4)、T1(P3.5)引腳。

在啟動(dòng)定時(shí)/計(jì)數(shù)器后,每來(lái)一個(gè)機(jī)器周期或在對(duì)應(yīng)的引腳上每檢測(cè)到一個(gè)脈沖信號(hào)時(shí),定時(shí)/計(jì)數(shù)器就加1一次,當(dāng)計(jì)數(shù)器的值從全1變?yōu)槿?時(shí),就去置位一個(gè)溢出標(biāo)志位,CPU查詢到后就知道有定時(shí)/計(jì)數(shù)器的溢出中斷的申請(qǐng)。定時(shí)器(3)串行中斷源

串行口中斷源分為串行口發(fā)送中斷和串行口接收中斷兩種。串行中斷是為串行數(shù)據(jù)傳送的需要而設(shè)置的。每當(dāng)串行口發(fā)送完一組串行數(shù)據(jù)時(shí),就會(huì)使串行口控制寄存器SCON中的串行發(fā)送中斷標(biāo)志位TI置1,每當(dāng)串行口接收完一組串行數(shù)據(jù)時(shí),就會(huì)使串行接收中斷標(biāo)志位RI置1,作為串行口中斷請(qǐng)求標(biāo)志,產(chǎn)生一個(gè)中斷請(qǐng)求。串行口控制寄存器SCON的內(nèi)容如下表所示。SCOND7D6D5D4D3D2D1D0位符號(hào)SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H定時(shí)器其中與中斷請(qǐng)求標(biāo)志有關(guān)的位如下:①TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位

當(dāng)發(fā)送完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,需要用軟件對(duì)該位清“0”。②RI:串行口接收中斷請(qǐng)求標(biāo)志位

當(dāng)接收完一幀串行數(shù)據(jù)后,由硬件置“1”;在轉(zhuǎn)向中斷服務(wù)程序后,需要用軟件對(duì)該位清“0”。串行中斷請(qǐng)求由TI和RI的邏輯或得到。就是說(shuō),無(wú)論是發(fā)送標(biāo)志還是接收標(biāo)志,都會(huì)產(chǎn)生串行中斷請(qǐng)求。定時(shí)器4.中斷控制51系列單片機(jī)中斷系統(tǒng)的硬件結(jié)構(gòu)如下圖所示定時(shí)器對(duì)中斷信號(hào)進(jìn)行鎖存、屏蔽、優(yōu)先級(jí)控制是通過(guò)設(shè)置一些特殊功能寄存器,如寄存器TCON、SCON、IE和IP來(lái)進(jìn)行的。(1)中斷允許控制寄存器IE(0A8H)

EAESET1EX1ET0EX0EX0/EX1/ET0/ET1/ES位:分別是

,T0/T1,串行口的中斷允許控制位。

=0:禁止中斷;

=1:允許中斷。EA:總的中斷允許控制位(總開(kāi)關(guān)):

=0:禁止全部中斷;

=1:允許中斷。(4)中斷優(yōu)先級(jí)控制寄存器IP(0B8H)

51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即高優(yōu)先級(jí)和低優(yōu)先級(jí),每個(gè)中斷源都可設(shè)置為高或低中斷優(yōu)先級(jí),以便CPU對(duì)所有的中斷實(shí)現(xiàn)兩級(jí)中斷嵌套。51單片機(jī)內(nèi)部中斷系統(tǒng)對(duì)各中斷源的中斷優(yōu)先級(jí)有一個(gè)統(tǒng)一的規(guī)定,稱為自然優(yōu)先級(jí)。如下表所示。中斷源入口地址中斷號(hào)優(yōu)先級(jí)別說(shuō)

明外部中斷00003H0高低來(lái)自P3.2引腳(INT0)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器0000BH1定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求外部中斷10013H2來(lái)自P3.3引腳(INT1)的外部中斷請(qǐng)求定時(shí)/計(jì)數(shù)器1001BH3定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求串行口0023H4串行口完成一幀數(shù)據(jù)的發(fā)送或接受請(qǐng)求定時(shí)/計(jì)數(shù)器2002BH5定時(shí)/計(jì)數(shù)器T2溢出中斷請(qǐng)求↓定時(shí)器

中斷優(yōu)先級(jí)控制寄存器IP(0B8H)

PSP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論