《單片機技術及應用》校本教材_第1頁
《單片機技術及應用》校本教材_第2頁
《單片機技術及應用》校本教材_第3頁
《單片機技術及應用》校本教材_第4頁
《單片機技術及應用》校本教材_第5頁
已閱讀5頁,還剩129頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

單片機技術及應用校本教材

目錄第一單元單片機基礎知識 1項目1.1初步了解單片機 2項目1.2AT89S52單片機的硬件資源 7第二單元單片機系統的顯示界面 21項目2.1流水燈 22項目2.2電子鐘 42第三單元單片機系統的鍵盤 65項目3.1按鍵計數器 65項目3.2搶答器 69項目3.3簡易計算器 74第四單元單片機系統的模擬量處理 84項目4.2數字電子溫度計 95第五單元單片機系統的電氣控制 102項目5.1直流電機正反轉控制 102第六單元綜合實訓 109實訓項目智能往返小車 109活動1描述 109活動2分析 111活動3實施 112《單片機技術及應用》第一單元單片機基礎知識綜合教學目標了解單片機的相關常識,掌握AT89S52單片機的構造與原理。主要內容:計算機的基礎知識,單片機的發展歷史、類型以及應用,以及AT89S52單片機的CPU、存儲器、引腳功能及標識。崗位技能綜合職業素質要求:學會識別AT89S52單片機的標識。隨著電子技術的發展,生產生活中的設備、儀器、電器等的智能化水平越來越高,如微電腦洗衣機、智能冰箱、遙控電視、公交車刷卡器、公交車報站器等,這些設備都內嵌了極小型化的計算機—單片機。單片機是單片微型計算機的簡稱,它將構成計算機的基本部件集成到一塊芯片上,組成一個小巧卻完善的計算機系統。因此學習單片機除了要掌握它的硬件電路原理,還要學習計算機程序設計。本教材講解的AT89S52單片機是美國ATMEL公司生產的低功耗、高性能CMOS8位單片機,它采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準8051指令系統及引腳,其照片如圖1-1所示。圖1-1AT89S52單片機項目1.1初步了解單片機一、計算機的常用術語1.位(bit)位是計算機數據存儲的最基本、最小的數據單位。計算機采用二進制,因此位就是1個二進制位,若干二進制位的組合就可以表示各種數據、字符等。2.字(word)和字長字是計算機內部進行數據處理的基本單位。通常它與計算機內部寄存器、算術邏輯單元、數據總線的長度一致。一個字所包含的二進制位數稱為字長。3.字節(byte)相鄰的8位二進制數構成1個字節,可以用字節作為計算機字長的單位。8位計算機的字長等于1個字節,16位計算機的字長等于2個字節,32位計算機的字長等于4個字節。習慣上把1個字節定為8位,把1個字定為16位,把1個雙字定為32位。字節也是計算機數據存儲的單位。1KB=1024B(B表示字節lyte),1MB=1024KB1GB=1024MB。4.指令指令是規定計算機進行某種操作的命令,由一串二進制數碼組成,是計算機自動控制的依據。5.程序程序是指令的有序組合,是為實現特定目標或解決特定問題而用計算機語言編寫的命令序列。6.機器語言用二進制(或十六進制)數表示的指令和數據總和稱為機器語言,是計算機能直接識別和執行的。7.匯編語言用助記符號表達的指令稱為匯編語言,是機器語言的符號表示。8.高級語言高級語言是采用接近人類自然語言的習慣表達的程序設計語言,例如BASIC、C語言。現在一般使用C51語言設計51單片機程序。二、計算機的數制計算機由觸發器、計數器、加法器、邏輯門等基本的數字電路構成。數字電路具有兩種不同的穩定狀態且能相互轉換,用“0”和“1”表示最為方便,因此計算機處理一切信息(包括數據、指令、字符、顏色、語音、圖像等)均用二進制數表示。但是二進制數書寫起來太長,且不便于閱讀和記憶,所以一般都將二進制數轉換成十六進制數來呈現。另外,人們最常用的是十進制數,因此我們將對這三種數制及其之間的轉換進行介紹。1.數制介紹(1)十進制(Decimal)數碼:0,1,2,3,4,5,6,7,8,9①十進制有0~9十個不同的數碼。②十進制數逢十進一,即當低位滿十則向相鄰高位進一(2)二進制(Bimary)數碼:0,1①二進制有0,1兩個不同的數碼。②二進制數逢二進一。(3)十六進制(Hexadecimal)數碼:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F①十六進制有0~F十六個不同的數碼。②十六進制數逢十六進一。為方便起見,現將部分十進制、二進制、十六進制數的對照表列于表1-1中。表1-1部分十進制、二進制、十六進制數的對照表十進制二進制十六進制十進制二進制十六進制000000810008100011910019200102101010A300113111011B401004121100C501015131101D601106141110E701117151111F2.數制的書寫為區別不同數制,要求在書寫時要注意規范,數制書寫一般有以下方法。(1)可以給數加括號,并在括號右下角標注數制代號,例如:十進制數,(32)10,(1000)10。二進制數,(1001)2,(0100)2,十六進制數,(123)16,(AIEF)16(2)匯編語言中,可以在數后面用英文字母標記。十進制數以字母D結尾,例如:32D,1000D。二進制數以字母B結尾,例如:1001B,0100B十六進制數以字母日結尾,例如:123H,AlEFH。(3)C51語言中,可以在數前面標記。十六進制數以0x開頭,例如:0x64,0xfffe等。3.不同數制之間的轉換(1)二進制數與十進制數相互轉換①二進制數轉換成十進制數,將二進制數按權展開后相加,例如:11010B=1x24+1×23+0×22+1×21+0×20=26D②十進制數轉換成二進制數,采用“除2取余法”。即用2連續去除十進制數,直到商為0為止,然后把各次余數按最后得到的為最高位、最早得到的為最低位(從下至上),依次排列起來,所得到的數便是所求的二進制數。例:試求出十進制數125的二進制數。把125連續除以2,直到商為0,相應豎式如下:2121…余123…余127…余1215…余1231…余0262…余02125…余10按照逆序將各余數記下,得到轉換后的二進制數為:1111101B。(2)十六進制數與十進制數相互轉換①十六進制數轉換成十進制數,采用將十六進制數按權展開后相加的方法,例如:64H=6×161+4×160=100D②十進制數轉換成十六進制數,采用“除16取余法”,即用16連續去除要轉換的十進制數,直到商為0為止,然后把各次余數按得到順序的逆序依次排列起來,所得的數便是所求的十六進制數。(3)二進制數與十六進制數相互轉接①二進制數轉換成十六進制數,采用“4位合1位”的方法,即從二進制數最低位開始,每4位一組,不足4位以0補足,然后分別把每組用十六進制數表示,并按序相連。例:把二進制數1101111100110B轉換成十六進制數,則有00011011111001101BE6所以,1101111100110B=1BE6H②十六進制數轉換成二進制數,采用“1位分4位”的方法,即把十六進制數的每一位分別用4位二進制數表示,然后將其按序連成一體。例:把十六進制數2AESH轉換成二進制數,則有2AE50010101011100101所以,2AE5H=0010101011100101B三、單片機的概念單片機,全稱為單片微型計算機,就是在一塊芯片上集成了微處理器(CPU)、程序存儲器(R0M)、數據存儲器(RAM)、定時/計數器以及多種I/O接口電路的具行一規模的微型計算機,因最早被應用在工業控制領域,所以又被稱為微控制器。四、單片機的發展歷史單片機誕生于20世紀70年代末,經歷了SCM、MCU、SOC三大發展階段。(1)SCM即單片微型計算機(SingleChipMicrocomputer)階段,主要尋求單片形態嵌入式系統的最佳體系結構。因受集成度和工藝的限制,常采用雙片形式的單片機。例如:仙童公司的F8須外接一塊3851電路才能構成一個完整的計算機。(2)MCU即微控制器(MieroControllerUnit)階段,主要致力于不斷擴展滿足嵌入式應用的對象系統要求而采用的各種外圍電路與接口電路,突顯其對象的智能化控制力。它所涉及的領域都與對象系統相關,因此,發展MCU的重任不可避免地落在電氣、電子技術廠家。在發展MCU方面,最著名的當數Philips公司。Plilips公司以其在嵌入式應用方面的巨大優勢,將80C51從單片微型計算機迅速發展到微控制器。(3)S0C即專用化片上系統(SyslemOnChip)階段,是指將微處理器、模擬IP核、數字IP核和存儲器(或片外存儲控制接口)集成在單一芯片上,它通常是客戶定制的,或是面向特定用途的標準產品。單片機是嵌人式系統的獨立發展之路,向MCU階段發展的重要因素,就是尋求應用系統在芯片上的最大化解決。因此,標準化專用單片機的發展自然形成了SOC化趨勢。隨著微電子技術、IC設計、EDA工具的發展,基于SOC的單片機應用系統設計會有較大的發展。五、單片機的分類單片機按用途可分為兩類:專用型單片機和通用型單片機。專用型單片機用途專一,內部程序在出廠時已經固化,不能被再次修改,例如電子表里的單片機,其生產成本很低。通用型單片機的用途廣泛,程序可以不斷修改,用戶可以根據需要給此類單片機植入不同的程序,配合不同接口的輸入和輸出來完成所需功能。小到家用電器、儀器儀表,大到機器設備和整套生產線都可用通用型單片機來實現自動化控制。通用型單片機按位數分為4位機、8位機、16位機和32位機等。單片機還可按生產廠家分類,我國目前最常用的單片機有如下幾家:·Intel—MCS51系列、MCS96系列;·Atmel—AT89系列、MCS51內核;·Microchip—PIC系列;·Molorola—68HCXX系列;·Zilog—Z86系列;·Philips-87.80系列,MCS51內核;·Siemens—SAB80系列,MCS51內核;·NEC-78系列。六、單片機的應用范圍在信息化高速發展的時代,單片機以其體積小、功耗低、控制功能強等優勢迅速滲透到我們生活的各個領域。單片機廣泛應用于儀器儀表、家用電器、醫用設備、航空航天、專用設備的智能化管理及過程控制等領域,大致可分為如下幾個范疇。1.在智能儀器儀表上的應用結合不同類型的傳感器,單片機可實現諸如電壓、濕度、流量、溫度、壓力等物理量的測量。采用單片機控制使儀器儀表更加數字化、智能化、微型化,且功能更加強大。例如精密的測量設備,功率計、溫濕度計、各種分析儀。2.在工業控制中的應用用單片機可以構成形式多樣的控制系統、數據采集系統。例如工廠流水線的智能化管理,電梯智能化控制,各種報警系統,與計算機聯網構成二級控制系統。3.在醫療設備領域中的應用醫療行業的智能化系統都用到了單片機。例如醫用呼吸機,各種分析儀,監護儀,超聲診斷設備及病床呼叫系統等。4.在汽車設備領域中的應用單片機的使用使得汽車智能電子控制系統越來越發達,汽車也變得越來越聰明。駕駛汽車時,行車電腦能夠自動處理大量的信息,比如當車輛轉彎時,助力轉向會助你一臂之力;當急剎車時,ABS會自動啟動,防止側滑。5.在計算機及網絡和通信領適中的應用現代的單片機普漏具備通信接口,可以很方便地與計算機進行數據通信,為計算機網絡和通信設備間的應用提供了極好的物質條件。現在的通信設備基本上都實現了單片機智能控制、河如手機、電話機、小型程控交換機、樓宇自動通信呼叫系統、列車無線通信、集群移動通信、無線電對講機等。6.在家用電器中的應用現在、很多家用電器中都采用了單片機控制,例如電飯煲、洗衣機、電冰箱、空調機、彩電、音視頻器材、電子秤量設備等,五花八門,無處不在。此外,單片機在工商、金融、科研、教育、國防、航空航天等領域都有著十分廣泛的用途。項目1.2AT89S52單片機的硬件資源一、ATB9S52單片機的基本組成AT89S52單片機內部結構框圖如圖1-2所示。AT89S52單片機內部包括:一個8位微處理器(CPU),是單片機的運算和指揮中心。片內8K字節程序存儲器(ROM),用于存放程序、原始數據及表格。片內256字節數據存儲器(RAM),用于存放臨時數據,例如運算的中間結果。4組8位并行輸入/輸出端口(I/O端口)PO~P3,每組端口均有8條I/O線,用于與外部交換信息。3個16位的定時器/計數器,均可以根據需要設為定時器或計數器使用。圖1-2AT89S52單片機的內部結構框圖1個6向量2級中斷結構,有6個中斷源和2個中斷優先級,中斷源分別是兩個外部中斷(INT0和INT1)、三個定時中斷(定時器0、1.2)和一個串行中斷。1個全雙工UART(通用異步接收發送器)的串行I/O口,用于實現單片機之間或單片機與計算機之間的串行通信。片內晶振及時鐘電路,AT89S52單片機有一個用于構成內部振蕩器的反相放大器,外接石英晶體或陶瓷諧振器都可構成自激振蕩器;也可從外部時鐘源輸入時鐘信號,最高允許振蕩頻率為24MHz。二、AT89S52單片機的中央處理器(CPU)中央處理器(CPU)也稱微處理器,是單片機的核心部件,即單片機的控制和指揮中心。它主要包含運算器和控制器。1.運算器運算器可以對數據進行算術運算、邏輯運算和位操作運算。運算器包括算術邏輯運算單元ALU、累加器A、通用寄存器B、暫存器、程序狀態字寄存器PSW等。算術邏輯運算單元ALU:可進行4位(半字節)、8位(全字節)、16位(雙字節)數據的加、減、乘、除、加1.減1等算術運算,邏輯與、或、異或、求補等邏輯運算,以及數據的位操作。累加器A(Acumulator):8位寄存器。通常,存儲的一個運算數經暫存器2進入ALU的輸入端,與另一個來自暫存器1的運算數進行運算,運算結果又送回累加器A,即運算前放操作數,運算后放操作結果,是單片機中最忙碌的一個寄存器。通用寄存器B(GeneralPurposeRegiser):8位寄存器。在乘、除運算之前存放乘數或除數,運算之后存放乘積的高8位或除法的余數,也可作為一般存儲器使用。程序狀態字寄存器PSW(Program

Status

Word):8位標志寄存器。用于存放指令執行后的狀態信息,供程序查詢和判別使用。2.控制器控制器由程序計數器PC、指令寄存器IR、指令譯碼器ID、振蕩器及定時電路等組成。程序計數器PC(Progran

Counter):16位寄存器,用于存放將要執行的下一條指令的地址,能自動加1。振蕩器及定時電路:AT89S52單片機片內有振蕩電路,只需外接石英晶體和頻率微調電容就可產生脈沖信號。CPU在這種基本節拍的控制下發出控制信號,協調各部件的工作。三、AT89S52單片機的存儲器AT89S52單片機內部的存儲器一般分為兩種:程序存儲器ROM和數據存儲器RAM。程序存儲器ROM用于存放程序、原始數據或表格,可在線編寫程序,掉電后數據保持不變。數據存儲器RAM用于存放運算的中間結果、最終結果或欲顯示的數據等,其數據可隨時改寫,掉電后數據消失。AT89S52單片機存儲器空間配置如圖1-3所示。圖1-3AT8952單片機存儲器空間配置1.程序存儲器A189S52單片機片內程序存儲器ROM有8K字節,其地址為0000H~1FFFH;片外可接擴展程序存儲器ROM,最大達64K字節,地址為0000H~FFFFH,片內外統一編址。CPU訪問片內、片外程序存儲器ROM時用MOVC指令。當EA引腳(31腳)接低電平(接地)(EA=0)時,AT89S52單片機片內ROM不起作用,CPU只能從片外ROM(0000H~FFFFH)中取指令。當EA引腳接高電平(EA=1)時,AT89S52單片機的程序計數器PC只在0000H~FFFFH范圍內執行片內ROM中的指令。只有當PC的值超過1FFFH后,CPU才自動轉到片外ROM相應的地址(2000H~FFFFH)取指令。系統在程序存儲器低端的一些固定存儲單元是特定程序的入口地址。0000H:單片機上電復位后主程序的入口地址;0003H:外部中斷0的中斷服務程序入口地址;000BH:定時器0的中斷服務程序入口地址;0013H:外部中斷1的中斷服務程序入口地址;001BH:定時器1的中斷服務程序入口地址;0023H:串行通信的中斷服務程序入口地址;002BH:定時器2的中斷服務程序入口地址。當單片機上電復位后,程序計數器PC中的內容清零(PC=0000H),所以CPU總是從0000H單元開始執行程序。通常在該單元中存放一條絕對轉移指令(例如LJMP0030H),指明用戶程序所在的單元地址(0030H),則CPU會跳轉到該地址執行主程序。除0000H日單元外,其他的六個特殊單元分別存放著單片機六種中斷源的中斷服務程序入口地址。編程時,通常在這些單元中存放一條絕對轉移指令,而真正的中斷服務程序是從轉移地址開始存放的。當發生中斷時,CPU會根據指令指示的地址在程序存儲器相應的區域找到中斷服務程序并執行。例如在允許中斷的情況下,當外部中斷引腳INT0(P3.2,12腳)有效(INT0=0)時,即引起中斷0請求,CPU響應中斷后自動將地址0003H裝入PC,程序就自動轉向0030H單元開始執行。如果事先在0003H~000AH存放一條轉移指令,程序就被引導到指定的中斷服務程序空間去執行。2.數據存儲器AT89S52單片機片內數據存儲器RAM有256字節,其地址為00H~FFH;片外可接擴展數據存儲器RAM,最大達64K字節,地址為0000H~FFFFH。訪問片內RAM時用MOV指令,訪間片外RAM時用MOVX指令。在AT89552單片機中,片內數據存儲器RAM的容量不大,但功能較多,使用較靈活。其中低地址的128B可直接尋址訪間,也可間接尋址訪間,高地址的128B只能間接尋址訪問。它分為工作寄存器區、位尋址區和通用RAM區三部分,如圖1-4所示。0FFH80H高128B通用RAM區7FH30H通用RAM區2FH20H位尋址區地址工作寄存器1FH18HR7R0寄存器3組02H07HR706HR617H10HR7R0寄存器2組05HR5R40FH08HR7R0寄存器1組03HR3R207H00HR7R0寄存器0組(默認)01HR100HR0圖1-4A18952單片機數據存儲器結構(1)工作寄存器區AM89S52單片機在片內RAM中劃分出低地址的32個字節單元(00H-1FH)作為工作寄存器區,供用戶使用。工作寄存器區分為4個工作寄存器組。每組有8個寄存器,分別稱為R7~R0,占8個字節。在單片機工作時,只有一組寄存器作為當前工作寄存器組R7~R0使用。當單片機復位后,系統默認工作寄存器0組為當前工作寄存器組。(2)位尋址區在工作寄存器區后的20H~2FH共16個字節為位尋址區,共有128位(8×16=128)。每一位都有相應的位地址00H~7FH。利用位尋址可以對某一位進行單獨操作,而無須將一個字節的8位全部重新操作一遍。AT89S52單片機數據存儲器位尋址區如圖1-5所示。圖1-5A18952單片機數據存儲器位置尋址區例如,要將20H存儲單元的第7位D7置“1”,可以用一條語句直接實現,使用非常靈活。單片機的位尋址功能是一般計算機所沒有的,這也是單片機重要的特點之一。(3)通用RAM區AT98S52單片機片內通用RAM區地址為30H~FFH,這里通常設為堆棧區,棧頂的位置由堆棧寄存器SP指定。系統復位時,SP的初始值為07H。注意,此時SP的初始值在工作寄存器區內,為防止堆棧區的數據將寄存器區數據覆蓋,一般要將SP的值重新設置到通用RAM區。3.特殊功能寄存器

SFR在AT89S52單片機片內80H~0FFH的128個地址中,離散分布了一些特殊功能寄存器SFR,它們與片內RAM高128B數據存儲器地址相同,但訪問方式不同,特殊功能寄存器只能直接尋址訪問,而片內RAM高128B只能間接尋址訪問,所以不會混淆。部分特殊功能寄存器的地址和名稱如圖1-6所示。其中有12個具有位尋址能力,它們的字節地址正好能被8整除(即16進制的地址碼尾數是0或8),在圖1-6中標星號的寄存器即可位尋址。圖1-6AT89552單片機數據存儲器特殊功能寄存器區特殊功能寄存器SFR的內容與單片機的硬件相關,它起著管理單片機的作用。下面先簡要介紹與CPU相關的部分,其他部分將在相應章節中介紹。①累加器ACC(E0H)。累加器ACC是AT89S52最常用、最忙碌的8位特殊功能寄存器,許多指令的操作數取自于ACC,許多運算中間結果也存放于ACC。在指令系統中,用A作為累加器ACC的助記符。②寄存器B(F0H)。在乘、除指令中,用到了8位寄存器B。乘法指令的兩個操作數分別取自A和B,乘積存于B和A兩個8位寄存器中。除法指令中,A中存放被除數,B中存放除數,商存放于A,余數存放于B。在其他指令中,B可作為一般通用寄存器使用。③程序狀態寄存器PSW(D0H)。程序狀態寄存器PSW是一個8位特殊功能寄存器,它的各位包含了程序執行后的各種狀態信息,供程序查詢或判別之用。其各位的含義見表1-2。表1-2程序狀態寄存器PSW功能表地址D0H寄存器名稱程序狀態寄存器PSW位地址D7D6D5D4D3D2D1D0位名稱CYACF0RS1RS0OVF1P位意義進/借輔進用戶標志寄存器組選擇溢出用戶標志奇/偶CY(PSW.7):進/借位標志位。在執行加法(或減法)運算指令時,如果運算結果的最高位(D7位)向前有進位(或借位),則CY位由硬件自動置為1(CY=1);如果運算結果的最高位無進位(或借位),則CY位被清零(CY=0)。AC(PSW.6):輔助進/借位標志位。當執行加法(或減法)操作時,如果運算結果(和或差)的低4位(D3位)向高4位(D4位)有半進位(或借位),則AC位將被硬件自動置為1(AC=1);否則AC位被清零(AC=0)。F0(PSW.5):用戶標志位0。用戶可以根據自己的需要對F0位賦予一定的含義,由用戶置位或復位,以作為軟件標志。RS1.RSO(PSW.4.PSW.3):工作寄存器組選擇位。在單片機數據存儲器中有四組工作寄存器組(寄存器3組、寄存器2組、寄存器l組、寄存器0組),每個寄存器組中有8個寄存器R7~R0。程序運行時只能有一組寄存器組工作,到底是哪組寄存器組工作?我們可以通過設置RSI、RS0的值來進行選取。其選取組合關系見表1-3。表1-3工作寄存器組選擇表RS1RS0工作寄存器組片內RAM地址00寄存器0組00H~07H01寄存器1組08H~0FH10寄存器2組10H~17H11寄存器3組18H~1F7H單片機上電復位時,RS1=RSO=0,CPU自動選擇寄存器0組為當前工作寄存器組。0V(PSW.2):溢出標志位。當進行算術運算時,如果運算結果超出了-128~+127的范圍,則有溢出,OV位由硬件自動置為1(OV=1);否則無溢出,OV位清零(0V=0)。Fl(PSW.1):用戶標志位1(僅AT89S52有)。作用與用戶標志位0相同。P(PSW.0):奇偶標志位。每條指令執行完后,該位始終跟蹤指示累加器ACC中1的個數。如果A中的1為奇數,則P=1;A中的1為偶數,則P=0。此位常用于校驗串行通信中的數據傳送是否出錯。④堆棧指針SP(81H)。堆棧指針SP是一個8位特殊功能寄存器,SP的內容可指向A189S52片內00H~FFHRAM的任何單元。系統復位后,SP初始化為07H,即指向地址為07H的RAM單元。⑤數據指針DPTR(83H,82H)。數據指針DPTR是一個16位特殊功能寄存器,其高位字節寄存器用DPH表示(地址83H),低位字節寄存器用DPL表示(地址82H)。數據指針DPTR用于存放16位地址,以便對64KB片外RAM作間接尋址。四、AT89S52單片機的并行端口AT89S52單片機有4組8位并行準雙向IVO端口,分別為P0,Pl,P2和PB,共占32個引腳。每個端口均包含一個端口鎖存器(特殊功能寄存器P0~P3)、一個輸出驅動器和輸入緩沖器。每個端口可以8條線一起用做1V0口線傳輸字節信息,也可以每一根IV0口線單獨使用。對端口鎖存器進行讀/寫就可以實現端口的輸入/輸出。1.PO口的使用P0口可作為通用的8位輸入/輸出端口使用。在單片機外接擴展存儲器時,它還可以作為分時復用的低8位地址/數據總線使用,此時高8位地址總線由P2端口擔任。PO口的每一位可驅動8個TTL負載。(1)P0口作為通用輸出口,需外接上拉電阻才能輸出電平。(2)P0口作為通用輸入口,分為讀鎖存器和讀引腳兩種情況。在讀端口引腳數據前,應先向端口鎖存器寫入1。2.P1口的使用P1口常作為通用的輸入/輸出端口,內部有上拉電阻,不需外接電阻。當從端口引腳讀入數據時,應先向端口寫1,再讀引腳數據。P1口每一位可驅動4個TTL負載。在AT89S52單片機中,P1端口還用于一些復用功能。其復用功能見表1-4。表1-4AT89S52單片機P1端口各引腳復用功能表引腳號第二功能P1.0T2(定時器/計數器T2的外部計數輸入),時鐘輸出P1.1T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)P1.5MOSI(在系統編程用)P1.6MISO(在系統編程用)P1.7SCK(在系統編程用)3.P2口的使用P2口可作為通用的8位輸入/輸出端口使用。在單片機外接擴展存儲器時,它還可以作為高8位地址總線,與P0口的低8位地址總線一起形成16位I/O口地址。P2口的每一位可驅動4個TTL負載。P2口作為通用I/0口使用時,不需外接電阻,讀引腳狀態前,應先向端口寫1。4.P3口的使用P3口是單片機中使用最靈活、功能最多的一個并行端口,它具有通用的輸入/輸出功能,還具有多種用途的第二功能(見表1-5)。同樣,P3口的每一位也可驅動4個TL負載。P3口作為輸入使用時,同P0~P2口一樣,應先由軟件向端口寫1,再讀引腳數據。P3口也無須外接電阻。表1-5AT89S52單片機P3端口各引腳復用功能表引腳號第二功能引腳號第二功能P3.0RXD(串行輸入)P3.4T0(定時器0外部輸入)P3.1TXD(串行輸出)P3.5T1(定時器1外部輸入)P3.2INT0(外部中斷0)P3.6WR(外部數據存儲器寫選通)P3.3INT1(外部中斷1)P3.7RD(外部數據存儲器寫選通)五、AT89S52單片機的封裝形式與引腳介紹1.AT89S52單片機的封裝形式AT89S52單片機有PDIP(雙列直插式封裝)、PLCC(帶引線的塑料芯片載體封裝)和TOFP(方形扁平封裝)三種封裝形式(P指塑料),其引腳分布如圖1-7~圖1-9所示。圖1-8PLCC封裝圖1-9PDIP封裝2.AT89S52單片機的引腳介紹電源引腳VCC和GND。VCC(40腳):電源端,接+5V。GND(20腳):接地端。②外接晶體振蕩器引腳XTALl和XTAL2。XTALI(19腳):接外部晶振和微調電容的一端,在片內接振蕩電路反相放大器的輸入端。當采用外部時鐘時,此引腳作為外部時鐘信號的輸入端。XTAL2(18腳):接外部晶振和微調電容的另一端,在片內接振蕩電路反相放大器的輸出端。當采用外部時鐘時,此引腳懸空。③控制信號引腳RST、PSEN、ALE/PROG、EA/VPPRST(9腳):復位信號輸入端,高電平有效。當此輸入端保持2個機器周期的高電平時,就可以完成單片機的復位操作。PSEN(29腳):外部程序存儲器選通信號。當AT89S52單片機從外部程序存儲器取指令(或常數)時,每個機器周期輸出兩次PSEN信號(即2個脈沖信號),作為外部程序存儲器選通信號。而在訪問外部數據存儲器時,無PSEN信號輸出。ALE/PROG(30腳):地址鎖存允許信號輸出/編程脈沖輸入端。當AT89S52單片機上電正常工作后,ALE引腳不斷向外部輸出正脈沖信號,此頻率是振蕩頻率0SC的1/6。在CPU訪問外部程序/數據存儲器(執行MOVX或MOVC指令)時、ALE輸出信號作為鎖存低8位地址的控制信號。在CPU不訪問外部程序/數據存儲器時,ALE端仍以振蕩頻率1/6的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。有的單片機可以關閉“ALE”輸出,用以降低輸出干擾。此引腳的第2功能PROG是在對片內8KFlash

ROM進行編程寫入(固化程序)時,作為編程脈沖輸入端。EA/VPP(31腳):內部與外部程序存儲器選擇端/片內Flash

ROM編程電壓輸入端。當EA引腳接高電平時

CPU只執行內部程序存儲器Flash

ROM中的指令;但當PC(程序計數器)的值超過1FFFH(AT89S52單片機程序存儲器為8K)時,CPU將自動轉到外部程序存儲器相應的地址取指令,并執行該指令。當EA引腳接低電平(接地)時,CPU只執行外部程序存儲器中的指令。此引腳的第2功能VPP在對片內程序存儲器FlashROM編程期間,接收編程允許電壓VPP12V(如果選用12V電壓編程)。④輸入/輸出端口P0、Pl、P2和P3。六、AT89S52單片機的時鐘與時序單片機時序就是CPU在執行指令時所需控制信號的時間順序。在執行指令時,CPU首先到程序存儲器中取出需要執行指令的指令碼存入指令寄存器,通過指令譯碼器對其譯碼,并由時序部件產生一系列時鐘信號去完成指令的執行。這些指令的時鐘控制信號在時間上的相互關系就是CPU時序。單片機通過時鐘電路產生時序。1.單片機系統的時鐘電路A189852單片機的時鐘信號由兩種方式產生;內部振蕩方式、外部時鐘方式。內部振蕩方式電路原理圖如圖1-10所示。(1)內部振蕩方式AT89S52單片機芯片內部有一個振蕩器,在引腳XTAL1.XTAL2外接晶體振蕩器(簡稱晶振),就構成了內部振蕩方式。典型振蕩頻率為12MHz和11.0592MHz。在圖1-10中,電容C1.C2起穩定振蕩器頻率、快速起振的作用,電容值一般為20~40pF。內部振蕩方式所得的時鐘信號比較穩定,因此使用得較多。圖1-10T8952單片機的時鐘(2)外部時鐘方式圖1-10T8952單片機的時鐘電路一內部振蕩方式這種方式下,外部時鐘信號由XTAL1引腳接入單片機(XTAL2懸空),此時單片機將按照外部時鐘信號工作。2.單片機的時鐘信號為了對CPU時序進行分析,需要為其定義一種能夠度量各種時序信號出現時間的尺度。這個尺度通常為振蕩周期、機器周期和指令周期。(1)振蕩周期振蕩周期T又稱為時鐘周期,由單片機片內振蕩電路的晶振產生,常定義為時鐘脈沖頻率f的倒數,是時序中最小的時間單位。如果接入的晶振是12MHz,則振蕩周期為1/12MHz,即0.083μs。時鐘脈沖是計算機的基本工作脈沖,它控制著計算機的工作節奏。(2)機器周期機器周期定義為實現特定功能所需的時間,通常由若干個振蕩周期T構成。AT89S52單片機的機器周期常定義為12個振蕩周期。它是計算機執行一種基本操作的時間單位。若晶振是12MHz,則機器周期為12/12MHz,即lμs。(3)指令周期指令周期是時序中最大的時間單位,定義為執行一條指令所需的時間。1個指令周期由1~4個機器周期組成。通常將包含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。七、AT89S52單片機的復位單片機的復位操作完成單片機片內電路的初始化,使單片機從一種確定的狀態開始運行。當復位信號(高電平)加到單片機RST引腳并維持2個機器周期時,CPU就可以響應并將系統復位。如果RST持續為高電平,單片機就處于循環復位狀態,而無法執行程序。因此要求單片機復位后能脫離復位狀態。實際應用中,復位操作有兩種方式:上電復位,開關復位(圖1-11)。(a)上電復位(b)開關復位圖1-11單片機復位電路上電復位要求接通電源后,自動實現復位操作。開關復位要求在電源接通的情況下,用按鈕開關操作使單片機復位。單片機的復位操作使單片機進入初始化狀態。初始化后各內部計算器的狀態如下。程序計數器PC:0000H;累加器ACC:00H;寄存器B:00H;程序狀態字PSW:00H;堆棧指針SP:07H;數據指針DPTR:0000H;端口鎖存器P0~P3:0FFH;寄存器IP:各有效位為0;寄存器IE:各有效位為0;寄存器TCON:00H;寄存器TMOD:00H;寄存器T0、T1.T2:00H;寄存器SCON:00H;寄存器PCON:各有效位為0;串行數據緩沖器SBUF:不定。八、AT89S52單片機的標識在市場上購買AT8952單片機時,有必要了解單片機上的標識,下面以圖1-1為例介紹。(1)第1行的標識“ATMEL”,表示單片機生產公司的名稱,美國ATMEL(愛特梅爾)公司。(2)第2行的標識“AT89S52”,表示單片機的型號。(3)第3行的標識“24PC”①數字部分,表示支持的最高系統時鐘。對于AT89S52-24PC,“24”表示可支持最高為24MHz的系統時鐘。②數字后第一個字母,表示封裝形式。“P”:DIP封裝;“A”:TOFP封裝;“J”:PLCC封裝。對于AT89S52-24PC,“P”表示PDIP封裝。③數字后最后一個字母,表示應用級別。“C”:商業級;“I”:工業級(有鉛);“U”:工業級(無鉛)。對于AT89S52-24PC,“C”表示商業級。(4)第4行的標識“0525”,表示生產日期。本例中表示2005年的第25周生產。本單元技能重點考核內容小結:掌握AT89S52單片機引腳的功能和使用要求,了解單片機的基本硬件知識,學會識別其上的標識。習題與實訓1.簡述什么是單片機。2.將下列十進制數轉換為十六進制數和二進制數:100,258,31,127,300,463.將下列二進制數轉換為十六進制數和十進制數:01100100B,10101010B,01010101B,001011001010B4.訪問AT89S52單片機SFR、片內高128B的RAM區時,怎樣區分二者?5.單片機系統的晶振頻率越高,其程序運行的速度越_______。當晶振頻率為6MHz時,1個機器周期為________us。6.AT89S52單片機的片內RAM有多大范圍?如何分類?7.AT89S52單片機的程序存儲器有多大范圍?哪些地址有特殊用途?8.AT89S52單片機的P0~P3口在使用時有何要求?第二單元單片機系統的顯示界面綜合教學目標學習單片機編程常用軟件的操作;掌握單片機系統中常用顯示模塊的程序設計。主要內容項目2.1流水燈、項目2.2電子秒表、項目2.3電子鐘、項目2.4兩級萊單的顯示界面。分別介紹了發光二極管、數碼管、字符型液晶顯示器RTC1602.點陣型液晶顯示器TG12864。崗位技能綜合職業素質要求:學會操作相關軟件,處理燒錄芯片時的問題。單片機系統的顯示界面主要用于顯示系統的參數設置界面、輸出結果界面、系統運行中的報警界面等。友好的人機界面將使產品大受歡迎。本教材中選用“YL-236型單片機控制功能實訓考核裝置”作為項目實訓平臺。YL-236裝置將單片機系統中的常用顯示模塊集中在MCU04顯示模塊上,其照片如圖2-1所示。其中包含有:8個發光二權管LED0~LED7(左下)、8個數。圖2-1YL-236裝置中的MCUO4顯示模塊碼管顯示器(右下)、1個RTC1602液晶顯示器(左中)、1個TG12864液晶顯示器(左上)、點陣顯示器(右上)。項目實訓中可以根據需要選擇其中某個或多個顯示器來使用。項目2.1流水燈2.1.1項目描述本項目要求采用顯示模塊MCU04中的發光二極管(LED),完成下述任務。任務2-1-1:點亮一個發光二極管①了解發光二極管工作原理。②點亮第一個發光二極管。③掌握51單片機仿真器的使用,以及KeiluVision4軟件操作。任務2-1-2:實現二極管閃爍①了解ms級延時C51函數。②用單片機控制發光二極管閃爍③掌握雙龍下載器的使用。任務2-1-3:實現流水燈2.1.2項目分析通過項目描述,實現本項目需完成以下兩方面工作。①硬件電路的設計:以單片機為控制中心,通過其I/O口與MCU04顯示模塊中的發光二極管連接,構成單片機控制LED電路。②程序的設計:用C51語言編寫單片機控制LED程序。2.1.3

任務2-1-1點亮一個發光二極管一、發光二極管的工作原理在YL-236裝置的MCU04顯示模塊中,發光二極管部分的照片如圖2-2(a)所示。LED顯示電路工作原理分析:如圖2-2(b)所示,當LEDO端口為低電平時,發光二極管D1正向導通,有電流通過D1,D1發光;當LEDO端口為高電平時,發光二極管D1無導通,D1熄滅。將單片機某IV0口與LEDO端口相連,通過軟件控制該VO輸出高或低電平就可以使D1滅或亮。圖2-2MCU04顯示模塊中的發光二極管照片與電路原理圖任務2-1-1的實施1.硬件電路的設計本任務需要使用YL-236裝置中的三個模塊:MCU01主機模塊、MCU02電源模塊、MCUO4顯示模塊。模塊接線圖如圖2-3所示,其中主機模塊的P0.0~P0.7用排線接到顯示模塊的LEDO~LED7;主機模塊、顯示模塊的+5V電源端子接到電源模塊的+5V端口;主機模塊、顯示模塊的GND端子接到電源模塊的GND端口。圖2-3單片機控制LED顯示的模塊接線圖2、點亮LEDO的程序設計(1)單片機PO.0的輸出電平與LEDO狀態關系表由LED工作原理可知,單片機P0.0的輸出電平與LED0狀態關系見表2-1。表2-1PO.0的輸出電平與LEDO狀態關系表P0.0的輸出電平LED0的狀態1(高電平)滅0(低電平)亮(2)用C51語言指令控制單片機I/O口輸出在C51語言中,使單片機P0.0輸出低電平,只需要寫語句“P00=0;”,使單片機P0.0輸出高電平,只需要寫語句“P00=1;”。任務2-1-1的程序清單#include<at89x52.h>∥頭文件包含sbit

LED0=P0^0;∥定義符號LED0為單片機的P0.0引腳void

main(){LED0=0;//P0.0輸出低電平,燈亮;P0.0輸出高電平,燈熄滅while(1);//死循環}【知識鏈接一】C程序的基礎知識1.C程序的基本結構(1)C程序是由函數構成的。一個C源程序至少且僅包含一個main函數,也可以包含一個main

函數和若干其他函數。函數體的內容由一對1括起來,必須成對出現。(2)main為“主函數”,一個C程序總是從main函數開始執行,而且不論main函數在整個程序中的位置如何。(3)C程序書寫格式自由,一行內可以寫幾條語句,一條語句可以分寫在多行上。(4)每條語句和數據聲明的最后必須有一個分號,分號是C語句的必要組成部分,不可缺少。既使程序中最后一條語句也應包含分號。2.文件包含“文件包含”是指一個文件將另外一個文件的內容全部包含進來。其格式為:①#include<文件名稱>②#include“文件名稱"兩者區別在于“”和<>。<>表示頭文件在編譯器(KeilC51)的安裝目錄下,一般都是編譯器自帶的頭文件;“”表示頭文件在當前工程的目錄下,一般都是自己寫的頭文件,編譯器將首先查找當前目錄,如果沒找到,則在由菜單選擇項所確定的目錄中查找。任務2-1-1的程序中,文件a89x52.h在路徑“C:Keil\C51\INC\Atmel”中,是編譯器自帶的頭文件,它主要定義了ATMEL公司的52單片機內部相關資源名稱,以方便使用。3.Keil

C51單片機集成開發環境Keil

C51是目前使用最廣泛的基于51單片機內核的開發平臺之一,其編譯器性能較好。4.使用KeilC的關鍵字sbt來定義位變量第一種方法:sbit

位變量名=位地址值第二種方法:sbit

位變量名=字節名稱序號第三種方法:sbit位變量名=字節地址值序號例如:sbit

OV=PSW^2。三、單片機仿真器及其軟件的使用YL-236裝置中配備的仿真器為南京萬利公司的“insight”51單片機仿真器。YL-236裝置的主機模塊與仿真器模塊的照片如圖2-4所示。先將主機模塊上的AT89S52芯片取下,將仿真頭的引腳插在主機模塊的卡座上并卡緊,注意仿真頭上的弧形標識對準卡座的上方,方向不能插反;然后按照圖2-3連接好系統接線,并接通仿真器的電源與USB線等。圖2-4主機模塊與仿真器模塊照片“insight”51單片機仿真器的配套軟件為MedWin3.0,它是一個國產的中文州面單片機集成開發平臺,比Keil

C51更好操作,但其自身不帶C51編詳器,需要調用KeilC編譯器。操作步驟如下。(1)啟動MedWin3.0,創建項目,命名后保存。啟動MedWin3.0后,在菜單“項目管理”中選擇“新建項目”,如圖2-5所示。圖2-5新建項目彈出對話框如圖2-6所示。點擊其中“設備驅動程序名”后的下拉按鈕,出現若干選項:第一項“Insight

ME-52HU

Family

Emulator”為上述萬利仿真器,使用仿真器時應選此項;第二項“80C51Simlator

Driver”為軟件仿真,若不連接仿真器,只是使用MedWin

編譯源程序產生機器碼,可以選此項。這里選中第一項,點擊“下一步”按鈕。圖2-6選擇驅動程序在第2步的對話框中,選擇如圖2-7所示編譯工具,然后點擊“下一步”按鈕。圖2-7選擇編譯工具然后,在圖2-8所示對話框中輸入項目名稱led0,然后點擊“下一步”按鈕。其存儲位置一般默認在計算機最后一個盤符根目錄的“WorkDir”文件夾下。也可點擊“瀏覽”按鈕自行設定存儲路徑。圖2-8輸入項目名稱然后,在圖2-9所示對話框中,設置有關參數。點擊“片內RAM長度”選項后的下拉按鈕,選擇“256”,可以充分使用AT89S52的256字節RAM空間;若單片機為AT89S51,則選擇“128”。圖2-9設置有關參數點擊“操作系統內核”選項后的下拉按鈕,出現3個選項:①None(無操作系統);②RTX_51

Tiny(RTX51操作系統精簡版);③PTX-51Full(RTX_51操作系統完整版)。本項目沒有采用操作系統,因此選①。在圖2-9中,點擊“完成”按鈕后,項目led0就創建完畢,如圖2-10所示。圖2-10新建項目完成(2)創建源程序文件并命名保存。選中菜單“文件/新建”,創建源程序文件,如圖2-11所示。圖2-11創建源程序文件選中菜單“文件/另存為”,保存為C語言程序文件格式,如圖2-12所示。圖2-12另存為C語言程序文件格式(3)導入/添加C文件到項目中。(4)用鼠標右鍵單擊源文件組,在彈出的菜單中選擇“導入/添加文件”,如圖2-13所示。圖2-13導人C文件(一)(5)找到之前保存的C文件,并添加到項目工程的源文件組中去,如圖2-14所示。(6)導人源程序文件后,源文件組將出現該文件,如圖2-15所示。(7)在剛導入的C文件中編寫C51程序。(8)在程序編輯區輸入C51源程序,如圖2-16所示。圖2-14導入C文件(二)圖2-15文件導入完成圖2-16輸入C51程序(9)編譯C51程序。由于MedWin3.0自身不帶編譯器,因此選中菜單“設置/設置編譯工具”,如圖2-17所示。圖2-17設置編譯工具(一)(10)在如圖2-18所示的對話框中,設置編譯工具及相關文件路徑后,點擊“確定”按鈕。圖2-18設置編譯工具(二)(11)選中菜單“項目管理/重新產生代碼并裝入”,如圖2-19所示用軟件編譯C51源程序,如果編譯鏈接無誤,將產生機器碼,并裝入仿真器;若編譯鏈接中發現錯誤(主要為語法錯誤),則會在構建窗口中提示錯誤種類,無法產生機器碼,此時應該改正程序中的錯誤,重新產生代碼并裝入,正確后,才能進行下一步。2-19重新產生代碼并裝入序(12)調試C51程序。如圖2-20所示,點擊菜單“調試”后出現的下拉菜單中,可選擇以“單步”或“全速運行”等方式運行程序,并在系統中查看程序運行結果。若結果有錯(主要為邏輯錯誤),則應改正程序錯誤,重新編譯、調試,直至程序運行結果完全正確。圖2-20調試C51程序本任務中,以“全速運行”方式運行程序后,將會看到LEDO亮。在“調試”狀態下,選中菜單“調試/返回監控”,將退出“調試”狀態。2.1.4任務2-1-2實現二極管閃爍一、任務要求本任務要求單片機控制LEDO間隔1s閃爍,就是讓LED0燈亮1s,然后熄滅1s,反復循環不止。二、任務2-1-2的實施1.硬件電路的設計硬件電路的設計與任務2-1-1相同。2.程序的設計(1)下面函數為ms級延時函數。void

delayms(uintx)//當晶振為12MHz,延時xms,{//用MedWin3.0的“查看/工具欄/時間”功能測試結果:uchari;//x小于500(ms)時,最大誤差為17us;while(x--)//x為1000、2000、3000(ms)時,誤差分別為19.23.27us。for(i=0;i<123;i++);//當晶振為11.0592MHz,延時12x/11ms。}(2)單片機控制LEDO閃爍的程序流程圖如圖2-21所示。圖2-21單片機控制LEDO閃爍的程序流程圖任務2-1-2的程序清單#include<at89x52.h>#define

uint

unsigned

int//定義uint=unsigned

int(無符號整型)#define

uchar

unsigned

char

//定義char=unsigned

char(無符號字符型)sbit

LED0=P0^0;//定義符號LEDO為單片機的P0.0引腳void

delayms(uintx)//函數省略,請參考上文void

main(){while(1){LED0=0;//LED0亮1sdelayms(922);//實際晶振11.0592MHz,1000*11.0592/12=922LED0=1;//LED0滅1sdelayms(922);}}正確連接好仿真器,在MedWin3.0中建立名為ledl項目,輸入上面的源程序,編譯連接正確后,全速運行,可以看到發光二極管LED0亮1s、滅1s,不停閃爍。【知識鏈接二】程序流程圖與程序的構成等程序流程圖程序流程圖是用一些圖框來表示各種操作,直觀形象,易于理解。美國國家標準化協會ANSI(American

National

Standard

Institute)規定的一些常用的流程圖符號如知識鏈接,如圖2-1所示。知識鏈接圖2-1程序的構成程序=數據結構+算法①對數據的指述,在程序中指定數據的類型和數據的組織形式,即數據結構。②對操作的描述,即操作步驟,也就是算法。3.邏輯運算符“!”的作用為邏輯非運算符,其作用是將邏輯量或位變量的值取反,即原來為1的,變為0;原來為0的,變為1。三、單片機程序的燒錄程序調試成功后,下一步要把程序代碼下載(燒錄)到單片機芯片AT89S52中。YL-236裝置中配備了雙龍ISP下載器。按照其光盤里產品說明書上的步驟,安裝好相關軟件后,第一次用USB線連接雙龍ISP下載器和計算機時,會在電腦屏幕上看到“已經找到新硬件”的提示,選擇“自動安裝軟件”,計算機會自動安裝好新增的設備。單片機程序燒錄的操作步驟如下。①下載程序前,首先關閉系統電源,將仿真頭取下;然后將AT89S52的引腳插在主機模塊的卡座上并卡緊,注意單片機芯片上的弧形標識對準卡座的上方,方向不能插反。②用排線連接雙龍ISP下載器與主機模塊后,再接通雙龍ISP下載器的USB線。③啟動雙龍ISP下載器軟件后,出現如圖2-22所示界面。圖2-22雙龍ISP下載器軟件界面④如圖2-22所示,首先在界面上部各選項中,正確選擇“下載端口”、“下載速度”、“芯片型號”等,然后點擊“FLASH存貯器”選項右邊的“Flash”按鈕、添加要燒錄的機器碼文件(一般為HEX文件),如圖2-23所示。⑤添加HEX文件后,點擊圖2-22中的“編程”按鈕,軟件會自動燒錄機器時科序到AT89S52單片機中。但燒錄有時會失敗,可能是由于在設計的目標系統電路中、Pl.5.Pl.6.Pl.7的電平被鉗制住(例如:作為輸入端口,而從外界輸入電平為OV等)、ISP下載器無法通過這3個引腳下載程序,這時,可以將主機模塊上P1.5.P1.6.P1.7端子上的導線拔除,再下載程序。下載失敗,有時是因為目標系統自身電源未供應,這時可以通過ISP下載器給目標系統供電,然后再完成下載,相關設置操作如圖2-24所示。圖2-23添加機器碼文件圖2-24給目標系統供電⑥本任務中,正確燒錄“LED0閃爍”的程序代碼后,先斷開雙龍ISP下載器的USB線,再斷開雙龍ISP下載器與主機模塊的排線,打開系統電源后,即可看到LED0不停閃爍。2.1.5任務2-1-3實現流水燈一、任務要求單片機控制8個發光二極管從LED0到LED7間隔1s依次點亮(亮1s后熄滅,下一個LED點亮),當ED7亮1s后,又從LED0開始點亮,如此循環不止,視覺效果上像一個亮的燈從右到左流動。二、任務2-1-3的實施1.硬件電路的設計硬件電路的設計與任務2-1-1相同。2.程序的設計(1)流水燈形成原理。LED形成流水燈的效果實質是按順序依次點亮發光二極管,其發光過程見表2-2。表2-2流水燈發光過程表步驟引腳P0.7(LED7)P0.6(LED6)P0.5(LED5)P0.4(LED4)P0.3(LED3)P0.2(LED2)P0.1(LED1)P0.0(LED0)說明111111110LED

0亮211111101LED

1亮311111011LED

2亮411110111LED

3亮511101111LED

4亮611011111LED

5亮710111111LED

6亮801111111LED

7亮注:表中數據0或1,表示該引腳輸入低或高電平,以使相應LED亮或滅。(2)本教材提供兩種方法實現單片機控制LED流水燈的程序清單,方法二的流程圖如圖2-25所示。圖2-25單片機控制LED流水燈的程序流程圖任務2-1-3的程序清單:#include<at89x52.h>#define

uint

unsigned

int∥定義uint=unsigned

int(無符號整型)#define

uchar

unsigned

char∥定義uchar=unsigned

char(無符號字符型)sbit

LED0=P0^0;∥/定義符號LED0為單片機的PO.0引腳sbit

LED1=P0^1;∥定義符號LED1為單片機的P0.1引腳sbit

LED2=P0^2;∥定義符號LED2為單片機的P0.2引腳sbit

LED3=P0^3;∥定義符號LED3為單片機的P0.3引腳sbit

LED4=P0^4;∥定義符號LED4為單片機的P0.4引腳sbit

LED5=P0^5;∥定義符號LED5為單片機的P0.5引腳sbit

LED6=P0^6;∥定義符號LED6為單片機的P0.6引腳sbit

LED7=P0^7;∥定義符號LED7為單片機的P0.7引腳void

delayms(uint

x)∥函數省略,請參考任務2-1-2void

main()∥方法一{while(1)∥方法一比較容易想到{P0=0xff;∥熄滅所有的LEDLED0=0;∥點亮LED0delayms(922);∥實際晶振為11.0592MHz,延時1sP0=0xff;LED1=0;∥點亮LED1delayms(922);P0=0xff;LED2=0;∥點亮LED2delayms(922);P0=0xff;LED3=0;∥點亮LED3delayms(922);P0=0xff;LED4=0;∥點亮LED4delayms(922);P0=0xff;LED5=0;∥點亮LED5delayms(922);P0=0xff;LE06=0;∥點亮LE6delayms(922);P0=0xff;LED7=0;∥點亮LED7delayms(922);}}void

main()∥方法二{uchar

num,i;∥定義2個變量while(1){num=0xfe;∥準備點亮第一個燈(LED0)for(i=0;i<8;i++)∥8個LED,共循環8遍{P0=num;∥點亮某個LEDdelayms(922);∥延時1snum=num<<1|0x01;∥準備下一個LED}}}//0xfe:點亮LED0,Oxfd:點亮LED1,0xfb:點亮LED2,Oxf7:點亮LED3,0xef:點亮LED4,Oxdf:點亮LED5,Oxbf:點亮LED6,Ox7f:點亮LED7。正確連接好仿真器,在MedWin3.0中建立名為led2的項目,輸入上面的源程序(main函數在方法一與方法二中選一個),編譯、連接正確后,全速運行,可以看到一個亮的燈從右至左流動。關閉系統電源后,正確燒錄“流水燈”的程序代碼到單片機中,取下雙龍ISP下載器,打開系統電源后,即可看到同樣的結果。在本書后面各任務中,請參考任務2-1-1~2-1-2中介紹的方法正確使用仿真器和雙龍ISP下載器調試和下載程序,只有程序下載到單片機中并運行正確后,方為任務完成。【知識鏈接三】C51的數據結構一、常量與變量C語言的基本數據類型,按其取值是否可改變分為常量和變量兩種。在程序執行過程中,其值不發生改變的量稱為常量,取值可變的量稱為變量。1.數值常量數值常量也稱為常數,例如12.-5.3.’c’、“abc”等。其中12為整型常量,-5.3為浮點型常量,’c’為字符型常量,“abc”為字符串常量。2.符號常量在C語言中,可以用一個標識符(標識符的定義見下文)來表示一個常量,稱之為符號常量。符號常量在使用之前必須先定義,其一般形式為:“#define標識符常量”。其中,#define也是一條預處理命令,稱為宏定義命令,其功能是把該標識符定義為其后的常量值。一經定義,以后在程序中所有出現該標識符的地方均代之以該常量值。二、變量值可以改變的量稱為變量。一個變量應該有一個名字,在內存中占據一定的存儲單元,在該存儲單元中存放變量的值。請注意:變量名與變量值的區別如知識鏈接圖2-2所示。在C語言中,要求對所有用到的變量做強制定義,也就是“先定義,后使用”。在C語言中用來標識變量名、符號常量名、函數名、數組名、類型名等的有效字符序列稱為標識符。簡單地說,標識符就是一個名字。知識鏈接圖2-2C語言規定標識符只能由字母、數字和下劃線三種字符組成,且第一個字符必須為字母或下劃線。要注意的是,C語言中大寫字母與小寫字母被認為是兩個不同的字符,即Sum與sum是兩個不同的標識符。1.整型變量整型變量的基本類型符為int,在int之前可以根據需要分別加上修飾符。在KeilC中規定,基本整型數據在存儲器中占用2個字節(即16bit)、長整型占用4個字節的存儲空間。知識鏈接表2-1列出了各種整型數據的有關數據。知識鏈接表2-1整數類型的有關數據類型關鍵字位數數值范圍基本類型[signed]int16-32768~32767即-215~(215-1)unsignedint160~65535即0~(216-1)長整型[signed]long[int]32-2147483648~2147483647即-231~(231-1)unsignedlong[int]320~4294967295即0~(232-1)2.字符型變量字符型變量的基本類型符為char,其表達的范圍是-128~+127;字符型變量只有一個修飾符unsigned,即無符號數,而加上了unsigned后,其表達的范圍變為0~255。3.浮點型變量在8位單片機中,盡量不要用浮點型數據,這里不做介紹。4.KeilC51特有的變量類型(1)位型變量位型變量是使用一個二進制位來存放數據,其值只有“0”和“1”兩種。位型變量的定義和其他數據類型一樣,關鍵字為bit。例如:bita=0;//定義一個位變量,并賦初值為0(2)sfr型變量80C51內部有一些特殊功能寄存器(sfr)。為定義、存取這些特殊功能寄存器,C51增加了sfr型數據,相應也增加了sfr、sfrl6和sbit這3個關鍵字。例如:sfrP0=0x80;//定義8位特殊功能寄存器P0sfr16

DPTR=0x82;//定義16位特殊功能寄存器DPTR三、變量的存儲類型在變量前加一個修飾符可以指定變量的存儲器類型。①data:片內RAM低128B,直接尋址訪問,存儲類型默認為data。②bata;片內RAM中20H~2FH,可以位尋址。③idata;片內RAM中256B,間接尋址訪問。④xata:片外RAM中或片外I/O口擴展。⑤code;ROM中一般為固定數據表格,用MOVC指令查表訪問。例如:unsigned

char

bdata

flag;sbit

FO=flag^0;sbit

Fl=flag^1;項目2.2電子鐘2.2.1項目描述本項目需要使用字符型液晶顯示模塊RTC1602完成下列任務。任務2-3-1:用字符型液晶顯示模塊RTC1602顯示“Welcome!”。任務2-3-2:利用C51單片機的定時器中斷功能,結合RTC1602編寫程序,制作一個簡易電子鐘。2.2.2項目分析通過上面的項目描述,實現本項目需要完成兩方面的工作。①硬件電路設計:單片機的IV0口與RTC1602連接,構成模擬操作時序的接口電路。②程序的設計:編寫字符型液晶顯示模塊RTC1602的接口驅動程序和顯示數字、英文等字符的程序,以及中斷初始化和服務函數程序。2.2.3任務2-2-1用字符型液晶顯示模塊RTC1602顯示“Wel-come!”一、字符型液晶顯示模塊RTC1602概述字符型液晶顯示模塊RTC1602是專門用于顯示字母、數字、符號等的點陣型液晶顯示模塊。RTC1602能夠顯示兩行,每行可以顯示16個字符。MCU04顯示模塊中的RIC1602模塊的照片如圖2-32所示,其電路原理圖參考附錄。二、字符型液晶顯示模塊RTC1602主要硬件構成說明字符型液晶顯示模塊RIC1602內部主要由LCD顯示屏、控制器、驅動器和偏壓產生電路構成。如圖2-33所示為RTC1602的結構框圖。圖2-32MCU04顯示模塊中的RTC1602模塊圖2-33RTC1602結構圖字符型液晶顯示模塊RTC1602的接口定義見表2-5。表2-5RTC1602模塊的接口定義管腳號管腳名稱方向管腳功能描述1VSS--電源地(0V)2VDD--模塊電源正極(+5V)3V0--對比度調節端4RSI數據/指令寄存器選擇端RS=0:選擇指令RS=1:選擇數據5R/WI讀寫選擇端R/W=0:寫操作;R/W=1:讀操作。6EI使能端7DB0I/O數據線8DB1I/O數據線9DB2I/O數據線10DB3I/O數據線11DB4I/O數據線12DB5I/O數據線13DB6I/O數據線14DB7I/O數據線15LEDA--LED背光源正極(+5V)16LEDK--LED背光源負極(0V)三、RTC1602的控制寄存器1.指令寄存器(IR)指令寄存器存儲單片機要發送給LCD的指令碼。2.數據寄存器(DR)數據寄存器存儲寫入到DDRAM或CGRAM的數據,或者要從DDRAM或CGRAM讀出的數據。3.忙標志(BF)忙標志BF=1時,表明模塊正在進行內部操作,此時不接受任何外部指令和數據。每次操作之前最好先進行狀態字檢測,只有確認BF=0之后,單片機才能訪問模塊。4.地址計數器(AC)地址計數器是DDRAM或者CGRAM的地址指針。隨著R中指令碼的寫人,指令碼中攜帶的地址信息自動送入AC中,并做出AC作為DDRAM的地址指針還是CGRAM的地址指針的選擇。AC具有自動加1或者減1的功能。當DR與DDRAM或者CGRAM之間完成一次數據傳送后,AC會自動加1或減1。5.顯示數據寄存器(DDRAM)顯示數據寄存器存儲顯示字符的字符碼,能存儲80個字符。6.字符產生器ROM(CGROM)字符產生器存儲了192個5×7點陣字符和32種5×10點陣字符,每個字符分別與8位字符編碼對應,對應關系(內置字符集)如圖2-34所示。例如,查表可知大寫的英文字母“P”對應的8位字符編碼為01010000B(0x50),顯示時將地址為0x50單元中的點陣字符圖形顯示出來,這樣就形成了“P”的圖形。7.字符產生器RAM(CGRAM)根據實際的需要,用戶可以存儲特殊的字符碼。四、RTC1602的指令系統單片機是通過控制HD44780來控制RTC1602進行顯示的。控制指令有9種,各種指令的格式及功能說明見表2-6。圖2-34CGROM字符編碼與字符關系對照圖指令說明:清屏命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能描述:清除顯示屏所有的內容,光標回到原點。歸位命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能描述:清地址計數器AC=0;將光標及光標所在位的字符回原點;但DDRAM中的內容并不改變(3)設置輸入模式命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能描述:設置光標、顯示畫面移動方向。IVD:地址指針AC變化方向標志。·I/D=1時,讀寫一個字符后,地址計數器AC自動加1;·I/D=0時,讀寫一個字符后,地址計數器AC自動減1。S:顯示移位標志。·S=1時,寫人一個字符后全部顯示往左(VD=1)移動或者往右(/D=0)移動;·S=0時,寫一個字符顯示不發生位移。(4)顯示開關控制命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能描述:設置光標、顯示畫面移動方向。D:顯示開/關控制標志。D=1,開顯示;D=0,關顯示。關顯示后,顯示數據仍保持在DDRAM中,立即開顯示可以再現。C:光標顯示控制標志。C=1,顯示光標;C=0,不顯示光標。不顯示光標并不影響模塊其他顯示功能。B:閃爍顯示控制標志。B=1,光標閃爍;B=0,光標不閃爍。設置顯示模式命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001功能描述:設置模塊的顯示方式。在本教材后面的項目中固定顯示模式為16×2.5×7的點陣,8位數據總線。(6)設置數據指針命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0設置數據指針80H+地址碼(第一行:0~27H;第二行:40~67H)功能描述:設置DDRAM地址指針。它將DDRAM存儲顯示字符的字符碼的首地址送入地址計數器AC中,于是顯示字符的字符碼就可以寫入DDRAM中或者從DDRAM中讀出。RTCl602有兩行,每行有40個地址,我們只取前16個就行了。要想在正確的位置顯示字符,必須在地址前加上80H。例如我們要在DDRAM的01日地址處顯示字符“A”,那么地址數據為80H+0lH,即81H。往8lH中寫人數據0x41H(A的代碼),這樣就能在DDRAM的01H處顯示字符“A”。(7)讀忙標志BF命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0設置數據指針80H+地址碼(第一行:0~27H;第二行:40~67H)功能描述:當RS=0和R/W=1時,在E信號高電平的作用下,BF和AC6~AC0被讀到數據總線DB7~DB0的相應位,通過BF的值來判斷模塊的工作狀態。BF:內部操作忙標志。

溫馨提示

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

評論

0/150

提交評論