




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目一 熟悉微機控制系統(tǒng)項目二 七色發(fā)光手電項目三 LED點陣屏項目四 無字庫LCD液晶顯示器12864項目五 基于DS18B20的數(shù)字溫度計項目六 環(huán)境測試項目七 溫控直流電機控制系統(tǒng)目錄項目任務(wù)與目標1.1
微機控制技術(shù)1.2
模擬手電用按鍵和發(fā)光二極管模擬手電的工作。發(fā)光二極管的起始狀態(tài)是熄滅,第一次按下按鍵時,發(fā)光二極管點亮;第二次按下按鍵時,發(fā)光二極管熄滅……不斷重復此過程。知識目標·熟悉微機控制系統(tǒng)與微機控制技術(shù)。·了解并掌握微機控制系統(tǒng)的組成?!な煜ぽ斎?輸出通道及接口的作用?!な煜と藱C交互設(shè)備及接口的作用?!な煜纹瑱C的基本應(yīng)用?!な煜のC控制實驗箱的使用。能力目標·能夠畫出微機控制系統(tǒng)的組成框圖?!つ軌蛘_描述微機控制系統(tǒng)框圖中各部分的作用?!じ鶕?jù)要求畫出框圖?!じ鶕?jù)要求畫出硬件電路圖?!じ鶕?jù)要求編寫程序?!ふ_使用微機控制實驗箱。
1.1
微機控制技術(shù)
1.1.1微機控制技術(shù)概述1.概述微機控制系統(tǒng)是微型計算機控制系統(tǒng)的簡稱,是以微型計算機為控制核心的自動控制系統(tǒng)或過程控制系統(tǒng),可以使受控對象的動態(tài)過程按規(guī)定方式和技術(shù)要求運行,以完成各種過程控制、操作管理等任務(wù)。微機控制技術(shù)的全稱是微型計算機控制技術(shù),是與微機控制系統(tǒng)有關(guān)的技術(shù),是微機、控制技術(shù)、受控對象等多學科知識的綜合應(yīng)用技術(shù)。2.微機控制系統(tǒng)組成微機控制系統(tǒng)由硬件和軟件兩部分組成,其硬件構(gòu)成如圖1-1所示。1)硬件硬件由計算機及外圍設(shè)備組成。計算機可以是專用的工業(yè)機,也可以是微機;外圍設(shè)備包括輸入/輸出通道及接口、人機交互設(shè)備及接口、外存等。計算機是微機控制系統(tǒng)的核心,而它的核心部件是CPU。CPU通過人機交互接口接收用戶的指令和受控對象的參數(shù),并向系統(tǒng)各部分發(fā)送所需的各種數(shù)據(jù),完成檢測、數(shù)據(jù)處理、控制計算、邏輯判斷等工作。輸入/輸出通道及接口分為模擬量輸入/輸出通道和數(shù)字量輸入/輸出通道兩種。數(shù)字量是指斷續(xù)變化的量,用D表示;模擬量是指連續(xù)變化的量,用A表示。輸入通道及接口把受控對象經(jīng)傳感器轉(zhuǎn)換后的電信號,轉(zhuǎn)換為數(shù)字量送入控制器。傳感器是輸入通道及接口中重要的檢測裝置,能感受到受控對象的信息,并能將感受到的信息按一定規(guī)律變換成為電信號,以滿足信息的傳輸、處理、存儲、顯示、記錄和控制等要求。它是實現(xiàn)自動檢測和自動控制的首要環(huán)節(jié)。傳感器包括熱敏元件、光敏元件、濕敏元件、聲敏元件等。除了傳感器以外,輸入通道及接口還包括A/D轉(zhuǎn)換器、多路開關(guān)、放大器、光耦等。輸出通道及接口把控制器處理結(jié)果再轉(zhuǎn)換成執(zhí)行機構(gòu)所需信號,去控制受控對象。執(zhí)行機構(gòu)是輸出通道及接口重要的組成部分,它可以將控制器發(fā)出的控制信號轉(zhuǎn)換成調(diào)整機構(gòu)的動作,使受控對象按規(guī)定的要求工作,是前面各環(huán)節(jié)作用最終的體現(xiàn)者。常用的執(zhí)行機構(gòu)如繼電器、直流電機、步進電機、電磁閥、變頻器等。除了執(zhí)行機構(gòu)外,輸出通道及接口還包括鎖存器、驅(qū)動電路、D/A轉(zhuǎn)換器、多路開關(guān)等。人機交互設(shè)備及接口也分為輸入設(shè)備及輸出設(shè)備兩種。輸入設(shè)備將用戶的要求或控制參數(shù)傳達給計算機,如鍵盤和鼠標等;輸出設(shè)備將計算機的要求或結(jié)果傳達給用戶,如各種顯示器。它們是用戶和計算機進行信息交換的工具。外存指光盤、U盤或隨機存取存儲芯片等。外存是控制器內(nèi)部存儲器的補充,用于存儲控制系統(tǒng)大量的程序或數(shù)據(jù)。需根據(jù)控制系統(tǒng)的實際需要選用合適的外存。2)軟件軟件由系統(tǒng)軟件和應(yīng)用軟件組成。系統(tǒng)軟件用于管理計算機,多為通用軟件;應(yīng)用軟件是為實現(xiàn)特定控制目的而編寫的程序,如數(shù)據(jù)采集、控制、數(shù)據(jù)處理、數(shù)據(jù)顯示和報警等程序,它們與受控對象緊密相關(guān),由專業(yè)人員自行編寫。1.1.251單片機概述
微機是指微型計算機,而作為微機其中一個重要發(fā)展分支的單芯片微型計算機(即單片機),由于外形小巧、功能多、價格低廉、易學等優(yōu)點,在微機控制領(lǐng)域取得了普遍的應(yīng)用。從第一代51系列單片機出現(xiàn)到現(xiàn)在,仍是單片機中的主流機型。多年來的事實證明,單片機的性能穩(wěn)定可靠,最關(guān)鍵的是用單片機作為控制器,相較其它控制器,易于學習。
1.微機分類
單板機單片機系統(tǒng)機(多板機)系統(tǒng)機(桌面應(yīng)用)屬于通用計算機,主要應(yīng)用于數(shù)據(jù)處理、辦公自動化及輔助設(shè)計。
單片機(嵌入式應(yīng)用)屬于專用計算機,主要應(yīng)用于智能儀表、智能傳感器、智能家電、智能辦公設(shè)備、汽車及軍事電子設(shè)備等應(yīng)用系統(tǒng)。
2.單片機概念
單片機是指單芯片微型計算機,即將CPU、存儲器、I/O接口,集成在一個芯片上形成的微型計算機,簡稱單片機。
3.單片機資源
本教程中采用AT89S52單片機作為控制核心,AT89S52是atmel公司生產(chǎn)的通用型單片機,具有如下特點:8K字節(jié)在系統(tǒng)可編程Flash存儲器;256B的RAM;8位數(shù)據(jù)總線及16位的地址總線;32個可編程I/O口線;三個16位定時/計數(shù)器;6個中斷源;全雙工UART串行通道;看門狗定時器。1.1.3采用C程序開發(fā)單片機程序的優(yōu)點
1)語言簡潔,使用靈活。2)進行程序開發(fā)時基本不需要了解單片機的指令集和存儲器的結(jié)構(gòu),寄存器分配和尋址方式由編譯器進行管理。3)可移植性好,C語言是通過編譯來得到可執(zhí)行代碼,C語言的編譯程序便于移植,在某種單片機上使用的C語言程序,可以稍加修改就可以方便地移植到另一種結(jié)構(gòu)類型的單片機上,使用程序開發(fā)和調(diào)試時間大大縮短。4)各種C語言編譯器會提供一個函數(shù)庫,其中包含多標準的函數(shù),如格式輸出、數(shù)據(jù)類型轉(zhuǎn)換等。5)可使用與人的思維更相近的關(guān)鍵字和操作函數(shù),提高了程序的可讀性。6)可以直接訪問單片機的硬件,還可以進行各種位操作?!倦S堂練習1-1】畫出恒溫箱控制系統(tǒng)的組成框圖。
1.2模擬手電
1.2.1硬件設(shè)計如圖1-2所示為用單片機模擬手電工作的硬件電路圖。開關(guān)用KEY表示,與端口P1.2相連,用于控制LED的亮滅;P2口連接8個LED。圖1-2中,左側(cè)的元件與單片機芯片一起構(gòu)成了單片機的最小系統(tǒng),是單片機工作必不可少的。發(fā)光二極管的限流電阻
R?=?(5?V?-?2?V)/10?mA?=?300Ω。
AT89S52引腳圖1.2.2軟件設(shè)計軟件主要解決以下問題:(1)按鍵的檢測。在第一次檢測到開始鍵閉合時,延時10?ms去除抖動,再進行第二次檢測。(2)手電狀態(tài)的變換。按鍵每次閉合時,手電處于與之前相反的狀態(tài)。用P2?=?~?P2實現(xiàn)。1.2.2軟件設(shè)計源程序如下:/*預處理*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint
/*全局變量定義*/sbitKEY=P1^2;/*延時函數(shù)*/voiddelay(uinta){uinti,j;
for(i=0;i<a;i++)for(j=0;j<1827;j++);}/*主函數(shù)*/main(){while(1)//死循環(huán){if(KEY==0)//第一次檢測健 { delay(1); if(KEY==0)//第2次檢測健是否閉合?{
P2=~P2;
while(!KEY); }}}}【隨堂練習1-2】(1)將上述源程序編輯、編譯后,下載至AT89S52。然后用并行線將單片機的并行口P2與發(fā)光二極管的控制口相連,按下按鍵,觀看結(jié)果是否正確。(2)畫出手電的框圖與流程圖。項目一 熟悉微機控制系統(tǒng)項目二 七色發(fā)光手電項目三 LED點陣屏項目四 無字庫LCD液晶顯示器12864項目五 基于DS18B20的數(shù)字溫度計目錄項目六 環(huán)境測試項目七 溫控直流電機控制系統(tǒng)項目任務(wù)與目標2.1 七色發(fā)光手電框圖2.2 三色發(fā)光二極管2.3 七色發(fā)光手電硬件設(shè)計2.4
七色發(fā)光手電軟件設(shè)計編程實現(xiàn)七色發(fā)光手電。該手電在開始鍵的控制下發(fā)光;且在發(fā)光后,每按一次開始鍵,變換一種顏色;在開始鍵的控制下,共可以發(fā)出七種顏色的光。知識目標·了解三基色原理?!ふ莆杖l(fā)光二極管的原理與使用?!な煜ざ鄠€三色發(fā)光二極管的驅(qū)動方法?!ふ莆蘸瘮?shù)聲明的作用及形式?!な煜ぴ闯绦蛐碌臅鴮懶问??!な炀氝\用多分支語句。能力目標·認識三色發(fā)光二極管?!つ軌虍嫵隹驁D及硬件電路圖?!つ軌蛘_寫出函數(shù)聲明語句。·正確使用多分支語句?!じ鶕?jù)要求編寫程序。
2.1七色發(fā)光手電框圖
如圖2-1所示為七色發(fā)光手電的框圖。為了增強手電的亮度,七色發(fā)光手電模型由多個發(fā)光器件并聯(lián)而成,引出紅、綠、藍3個控制線,由于AT89S52單片機并行I/O口的帶負載能力有限,故驅(qū)動電路是必不可少的。
2.2三色發(fā)光二極管
2.2.1三基色原理光學三基色是指紅、綠、藍三色,人眼對紅、綠、藍最為敏感。三基色原理是指自然界中的絕大部分彩色都可以由三種基色按一定比例混合得到;反之,任意一種彩色均可被分解為三種基色。作為基色的三種彩色,要相互獨立,即其中任何一種基色都不能由另外兩種基色混合來產(chǎn)生。由三基色混合而得到的彩色光的亮度等于參與混合的各基色的亮度之和。三基色的比例決定了混合色的色調(diào)和色飽和度。白色、青色、黃色、紫色可以由三種基色相加混合而成。白色?=?紅色?+?綠色?+?藍色青色?=?綠色?+?藍色黃色?=?紅色?+?綠色紫色?=?紅色?+?藍色2.2.2三色發(fā)光二極管將紅、綠、藍3種不同顏色的管芯封裝在一起就形成了三色發(fā)光二極管。三色發(fā)光二極管有共陰型和共陽型兩種類型,如圖2-2所示。三色發(fā)光二極管中的三種顏色是相互獨立的,可以根據(jù)需要點亮不同的管芯,在使用時,必須串接限流電阻,使流過管芯的電流在安全范圍之內(nèi)。例如,共陽極3腳接高電平,紅色管芯的負極4腳接低電平,點亮的就是紅色管芯。不同顏色發(fā)光二極管的導通管壓降略有區(qū)別,一般紅色的為1.8~2.0?V,綠色和藍色的為3.2~3.4?V。
用數(shù)字萬用表,測試三色發(fā)光二極管時,將擋位開關(guān)置于“”。測試方法如下:
假設(shè)一個腳為第3腳,將紅表筆接假設(shè)的第3腳,黑表筆分別接其他3個引腳,如果發(fā)光,可確定為共陽型,并根據(jù)顏色確定其余3個引腳;如果不發(fā)光,換黑表筆接假設(shè)的3腳,發(fā)光的話,則為共陰型。如果用紅、黑表筆分別連接至假設(shè)的3腳,都不發(fā)光時,則重新假設(shè)3腳。
【隨堂練習2-1】
用數(shù)字萬用表測試三色發(fā)光二極管。2.2.3七色發(fā)光手電測試仔細觀察七色發(fā)光手電,首先連接5V電源線(對顏色連接,5?V用紅色線,GND用黑色線),然后將紅、綠、藍三色控制口分別接至P2.0、P2.1、P2.2,硬件連接好后,下載示例手電?.hex文件至AT89S52芯片中,多次按下開始鍵(key0),觀察七色發(fā)光手電發(fā)出的七種顏色。紅、綠、藍三個控制引腳共有8種組合,按表2-1進行手工測試,觀察并記錄每種組合對應(yīng)的顏色。例如,測試第二種組合時,紅色為0、綠色為0、藍色為1,那么就將紅色、綠色控制線接GND、藍色控制線接5?V。【隨堂練習2-2】(1)上網(wǎng)了解雙色發(fā)光二極管等其他可發(fā)光器件。(2)用規(guī)范的方法,列出4位二進制數(shù)的十六種組合。(3)分析表2-1中的測試結(jié)果,說明七色發(fā)光手電中使用的三色發(fā)光二極管是共陰型還是共陽型。
2.3七色發(fā)光手電硬件設(shè)計
圖2-3所示為七色發(fā)光手電的硬件電路圖。七色發(fā)光手電模型由七個共陽型三色發(fā)光二極管組成,將七個管子的紅色、綠色、藍色引腳分別并聯(lián)后,引出紅、綠、藍3個控制線。芯片4953多用于LED點陣顯示屏驅(qū)動,當每一顯示行需要的電流比較大時,要使用行驅(qū)動管。每片4953內(nèi)部有兩個PMOS管,1、3腳為源極,2、4腳為柵極,5、6、7、8腳為漏極,可以驅(qū)動2個顯示行。圖2-3中,如果一個紅色LED導通電流為Ired,那么最終7個紅色LED并聯(lián)后,控制線上的電流會達到7*Ired,超出了單片機并行I/O口的帶負載能力。為了解決這個問題,將4953內(nèi)部的2個PMOS管并聯(lián)使用,在源級與漏極之間形成一個受柵極控制的電子開關(guān)。當柵極為“0”時,源極與漏極之間會導通,7個紅色LED并聯(lián)后的電流經(jīng)過PMOS流通,而不是直接灌入P2.0口;當柵極為“1”時,源極與漏極之間為高阻狀態(tài)(漏極開路),所有紅色LED不能工作。開始鍵是七色發(fā)光手電的開關(guān),用以控制手電的亮、滅及顏色的切換。編程控制七色發(fā)光手電時,字節(jié)尋址和位尋址均可采用,以位尋址為例,定義如下:sbitkaishi=P1^0;sbitRED=P2^0;sbitGRE=P2^1;sbitBLU=P2^2;【隨堂練習2-3】計算圖2-3中,紅色、綠色、藍色發(fā)光二極管的電流。
2.4七色發(fā)光手電軟件設(shè)計
2.4.1七色彩燈編程使七色發(fā)光手電在通電后,循環(huán)發(fā)出七種顏色。每一種顏色持續(xù)的時間約為600ms。源程序如下:/*預處理*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint/*全局變量定義*/sbitRED=P2^0;sbitGRE=P2^1;sbitBLU=P2^2;voiddelay(uinta){uinti,j;for(i=0;i<a;i++)for(j=0;j<1827;j++);}main(){ while(1) { RED=0;GRE=0;BLU=0;delay(60); RED=0;GRE=0;BLU=1;delay(60); RED=0;GRE=1;BLU=0;delay(60); RED=0;GRE=1;BLU=1;delay(60); RED=1;GRE=0;BLU=0;delay(60); RED=1;GRE=0;BLU=1;delay(60); RED=1;GRE=1;BLU=0;delay(60); }}在上面的源程序中,delay函數(shù)定義寫在main函數(shù)之前,在main函數(shù)中調(diào)用就是合法的。如果將delay函數(shù)定義剪切至main函數(shù)之后,重新編譯,提示出現(xiàn)錯誤,如圖2-4所示。這是由于將被調(diào)用的函數(shù)寫在主調(diào)函數(shù)之后,編譯器在main函數(shù)中,見到delay(60)時,不清楚這是一個什么類型的函數(shù)。2.4.2函數(shù)編程時,如果程序的功能較多,規(guī)模較大,把所有的程序代碼都寫在main函數(shù)中,就會使main函數(shù)變得混亂,使閱讀和維護變得困難。或在程序中要多次實現(xiàn)某一功能(如延時函數(shù)),就需要多次重復編寫這些代碼。解決的方法是編寫多個函數(shù)用于實現(xiàn)不同的功能,然后將這些函數(shù)有序地組裝在一起。采用函數(shù)結(jié)構(gòu),不僅可以解決問題,也易于實現(xiàn)結(jié)構(gòu)化程序設(shè)計,使程序的層次結(jié)構(gòu)更為清晰,便于程序的編寫、閱讀、調(diào)試。因此,函數(shù)就是功能,每個函數(shù)用于實現(xiàn)一個特定的、不太復雜的功能,函數(shù)的名字就代表了它的功能,起名字時一定要做到見名知義。函數(shù)調(diào)用就是使用該函數(shù),實現(xiàn)函數(shù)的功能。一個C源程序是由一個main函數(shù)和若干其他函數(shù)組成的。在main函數(shù)中調(diào)用其他函數(shù),其他函數(shù)也可互相調(diào)用。如圖2-5所示,同一個函數(shù)可以被一個或多個函數(shù)調(diào)用任意多次。1.函數(shù)分類C的函數(shù)可以分為庫函數(shù)和用戶自定義函數(shù)兩種。庫函數(shù)是指放在一個文件內(nèi)的,實現(xiàn)通用功能的函數(shù),可以供不同的人調(diào)用。調(diào)用的時候必須用#include包含相關(guān)的頭文件。用戶根據(jù)需要編寫的函數(shù)稱為用戶自定義函數(shù)。我們編寫的函數(shù)均為用戶自定義函數(shù)。不管是庫函數(shù)還是用戶自定義函數(shù),根據(jù)有無返回值和有無形參,可以分為四類:(1)無返回值無形參函數(shù),簡稱為無返無參函數(shù);(2)無返回值有形參函數(shù),簡稱為無返有參函數(shù);(3)有返回值無形參函數(shù),簡稱為有返無參函數(shù);(4)有返回值有形參函數(shù),簡稱為有返有參函數(shù)。返回值是指函數(shù)被調(diào)用,執(zhí)行完之后返回給調(diào)用者的執(zhí)行結(jié)果,在函數(shù)說明時也稱為出口參數(shù)。函數(shù)不需要返回值時,用void表示,例如,延時函數(shù)為無返回值函數(shù);函數(shù)需要返回值時由用戶定義返回值的類型,例如,數(shù)學函數(shù)多為有返回值函數(shù)。有返回值的函數(shù),用return語句返回,一般形式為return(表達式);return語句只能返回一個結(jié)果,有多個結(jié)果時,可定義全局變量進行數(shù)據(jù)的傳遞。形參的全稱是形式參數(shù),在被調(diào)函數(shù)執(zhí)行之前,用于接收或存放由調(diào)用者傳遞給被調(diào)函數(shù)的參數(shù),在函數(shù)說明時也稱為入口參數(shù)。形參可以是函數(shù)所處理的數(shù)據(jù)、影響函數(shù)功能的因素等。形參可以有1個或多個,各形參之間用逗號間隔,當然也可以沒有,無形參時用void表示。2.函數(shù)操作除了main函數(shù)之外,與其他函數(shù)相關(guān)的操作有3個,分別是函數(shù)聲明、函數(shù)定義和函數(shù)調(diào)用。1)函數(shù)定義函數(shù)定義限定了函數(shù)的具體功能。函數(shù)定義包含函數(shù)頭和函數(shù)體。在函數(shù)頭中說明該函數(shù)有無返回值、函數(shù)名及有無形參;函數(shù)體中為完成其功能的語句。一般形式為返回值類型 函數(shù)名(形參列表){
函數(shù)體語句;}在C51中,所有的函數(shù)都只能定義一次,而且包括主函數(shù)main在內(nèi),都是平行的,也就是說,在一個函數(shù)的函數(shù)體內(nèi),不能再定義另一個函數(shù),即不能嵌套定義。2)函數(shù)調(diào)用函數(shù)的調(diào)用就是函數(shù)的執(zhí)行過程,或者說函數(shù)只有通過調(diào)用才得以執(zhí)行。調(diào)用的一般形式為函數(shù)名(實參列表);main函數(shù)可以調(diào)用其他函數(shù)(不包括中斷函數(shù)),而不允許被其他函數(shù)調(diào)用;其他函數(shù)可以互相調(diào)用,且可以被調(diào)用多次。因此,C51程序的執(zhí)行總是從main函數(shù)開始,完成對其他函數(shù)的調(diào)用后再返回到main函數(shù),最后在main函數(shù)中結(jié)束整個程序執(zhí)行;一個C51源程序必須有且只能有一個主函數(shù)main。形參在函數(shù)定義中出現(xiàn),只有類型與名字,稱之為形式參數(shù);實際參數(shù)在函數(shù)被調(diào)用時由調(diào)用者給出實際的數(shù)值,所以稱為實參。形參與實參之間的聯(lián)系是傳遞數(shù)據(jù),發(fā)生函數(shù)調(diào)用時,調(diào)用者將實參的值傳送給被調(diào)函數(shù)的形參,從而實現(xiàn)主調(diào)函數(shù)向被調(diào)函數(shù)的數(shù)據(jù)傳送。形參與實參都為局部變量,形參在函數(shù)定義的函數(shù)體內(nèi)使用,離開該函數(shù)則不能使用;實參在主調(diào)函數(shù)中使用,進入被調(diào)函數(shù)后,實參變量也不能使用。函數(shù)的形參和實參還具有以下特點:(1)形參變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。(2)實參可以是常量、變量、表達式、函數(shù)等,無論實參是何種類型的量,在發(fā)生函數(shù)調(diào)用時,它們都必須具有確定的值,以便把這些值傳送給形參。(3)實參和形參在數(shù)量上,類型上,順序上應(yīng)嚴格一致,否則會發(fā)生“類型不匹配”的錯誤。(4)函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。即只能把實參的值傳送給形參,而不能把形參的值反向地傳送給實參。因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實參中的值不會變化。3)函數(shù)聲明C程序書寫靈活,沒有嚴格的要求,但是當被調(diào)函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之后時,必須要在調(diào)用之前進行函數(shù)聲明,告訴編譯器有這樣一個函數(shù)存在,才能夠根據(jù)它的特點為其分配必要的內(nèi)存單元。函數(shù)聲明的一般形式為返回值類型 函數(shù)名(形參列表);函數(shù)聲明實際就是函數(shù)定義時的函數(shù)頭,一個函數(shù)可以聲明多次,也可以在所有函數(shù)之前只聲明一次。3.舉例【例2-1】延時200?ms~2?s。寫出函數(shù)定義、函數(shù)聲明及函數(shù)調(diào)用。延時函數(shù)無需返回值;延時時間在200~2000?ms之間是可以變化的,可定義一個形參來控制延時時間的變化;總之滿足該要求的延時函數(shù)最好為無返有參函數(shù)。/*函數(shù)聲明*/voiddelay(uinta);/*函數(shù)調(diào)用*/delay(600); //延時600ms,600為實參delay(2000); //延時2s,2000為實參/*函數(shù)定義*/voiddelay(uinta){
uinti,j; for(i=0;i<a;i++)for(j=0;j<130;j++);}【例2-2】說明下面給出的函數(shù)的特點。voidlcdkaixianshi(void){P0=0x3f;RW=0;RS=0;E=1;E=0;}上述為函數(shù)定義,函數(shù)名為lcdkaixianshi,無返回值,無形參。改正圖2-4中的錯誤,重新下載,觀看結(jié)果。源程序如下:/*預處理*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint/*全局變量定義*/sbitRED=P2^0;sbitGRE=P2^1;sbitBLU=P2^2;/*函數(shù)聲明*/voiddelay(uinta);
//delay()函數(shù)聲明main(){ while(1) { RED=0;GRE=0;BLU=0;delay(60);
//delay()函數(shù)調(diào)用 RED=0;GRE=0;BLU=1;delay(60); RED=0;GRE=1;BLU=0;delay(60); RED=0;GRE=1;BLU=1;delay(60); RED=1;GRE=0;BLU=0;delay(60); RED=1;GRE=0;BLU=1;delay(60); RED=1;GRE=1;BLU=0;delay(60); }}/*函數(shù)定義,main()除外*/voiddelay(uinta)//delay()函數(shù)定義{uinti,j;for(i=0;i<a;i++)for(j=0;j<1827;j++);}當控制系統(tǒng)的功能較為復雜,源程序較長時,在main函數(shù)之前對編寫的所有函數(shù)先進行聲明,在main函數(shù)之后再寫函數(shù)定義,可使源程序便于查看?!倦S堂練習2-4】(1)延時1?ms。寫出函數(shù)定義、函數(shù)調(diào)用及函數(shù)聲明。(2)聲明一個函數(shù)disp。要求:無返回值;有一形參,形參類型為無符號字符型,形參名自定。并寫出該函數(shù)的調(diào)用語句。2.4.3七色發(fā)光手電為了實現(xiàn)七色發(fā)光手電的功能,編程時,主要解決以下幾個問題:(1)開始鍵的檢測。在第一次檢測到開始鍵閉合時,延時10ms去除抖動,再進行第二次檢測。(2)手電顏色變換規(guī)律。第1次按下:發(fā)出白色光,RED=0,GRE=0,BLU=0;第2次按下:發(fā)出黃色光,RED=0,GRE=0,BLU=1;第3次按下:發(fā)出紫色光,RED=0,GRE=1,BLU=0;第4次按下:發(fā)出紅色光,RED=0,GRE=1,BLU=1;第5次按下:發(fā)出青色光,RED=1,GRE=0,BLU=0;第6次按下:發(fā)出綠色光,RED=1,GRE=0,BLU=1;第7次按下:發(fā)出藍色光,RED=1,GRE=1,BLU=0;第8次按下:熄滅,RED=1,GRE=1,BLU=1。(3)統(tǒng)計開始鍵閉合的次數(shù)。定義變量cishu,初值為0,最大值為8。開始鍵每閉合一次,cishu加1。(4)根據(jù)變量cishu進行8分支。用switch語句根據(jù)上述顏色的變換規(guī)律實現(xiàn)8分支。源程序如下:/*預處理*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint/*全局變量定義*/sbitRED=P2^0;sbitGRE=P2^1;sbitBLU=P2^2;sbitkaishi=P1^0;ucharcishu=0;/*函數(shù)聲明*/voiddelay(uinta);main(){ while(1) {
if(kaishi==0) {
delay(1); if(kaishi==0)
{ cishu++; if(cishu==9) cishu=1;
switch(cishu){case1:RED=0;GRE=0;BLU=0;break;case2:RED=0;GRE=0;BLU=1;break;case3:RED=0;GRE=1;BLU=0;break;case4:RED=0;GRE=1;BLU=1;break;case5:RED=1;GRE=0;BLU=0;break;case6:RED=1;GRE=0;BLU=1;break;case7:RED=1;GRE=1;BLU=0;break;case8:RED=1;GRE=1;BLU=1;break;}while(!kaishi);
} }
}}/*函數(shù)定義,main()除外*/voiddelay(uinta){
uinti,j;
for(i=0;i<a;i++)
for(j=0;j<1827;j++);}【隨堂練習2-5】(1)畫出七色發(fā)光手電的流程圖。(2)編輯、編譯七色發(fā)光手電的源程序,編譯并下載后,觀看顯示效果。項目一 熟悉微機控制系統(tǒng)項目二 七色發(fā)光手電項目三 LED點陣屏項目四 無字庫LCD液晶顯示器12864項目五 基于DS18B20的數(shù)字溫度計目錄項目六 環(huán)境測試項目七 溫控直流電機控制系統(tǒng)項目任務(wù)與目標3.1LED點陣概述3.28×8點陣硬件設(shè)計
3.3顯示8×8圖片軟件設(shè)計3.432×64點陣硬件設(shè)計
3.5
32×64點陣軟件設(shè)計在32?×?64的LED點陣屏上顯示16?×?16的漢字,效果如圖3-1所示。知識目標
·了解LED點陣屏。
·熟悉LED點陣屏的構(gòu)成及顯示原理。
·熟悉LED點陣屏的驅(qū)動方法。
·掌握74HC573的引腳、功能、使用方法。
·掌握74LS154的引腳、功能、使用方法。
·掌握74LS595的引腳、功能、使用方法。
·掌握譯碼器的擴展。
·掌握移位寄存器的擴展。
·掌握LED點陣屏上顯示信息的方法。
·掌握取模軟件的使用。
·熟悉利用并行口模擬數(shù)據(jù)的串行傳送的方法。能力目標
·認識并描述LED點陣屏。
·能夠畫出LED點陣屏的驅(qū)動電路。
·根據(jù)需要取出信息的字模。
·正確使用數(shù)字集成電路。
·正確編寫函數(shù)顯示不同大小的點陣信息。
·正確編程實現(xiàn)數(shù)據(jù)串行傳送。
·根據(jù)顯示要求編程。
3.1LED點陣概述
3.1.1LED點陣LED是半導體發(fā)光二極管的縮寫。LED點陣屏指的是由LED組成,通過LED亮滅來顯示文字、圖片、動畫、視頻等的顯示器件。LED點陣屏的各部分組件都已模塊化,通常由顯示模塊、控制系統(tǒng)及電源系統(tǒng)組成。LED點陣屏制作簡單,安裝方便,被廣泛應(yīng)用于各種公共場合,如汽車報站器、廣告屏以及公告牌等。大屏幕顯示系統(tǒng)一般是將多個LED點陣組成的小模塊以搭積木的方式組合而成的,每一個小模塊都有自己的獨立的控制系統(tǒng),組合在一起后只要引入一個總控制器控制各模塊的命令和數(shù)據(jù)即可,這種方法既簡單而且具有易裝、易維修的特點。
3.1.1LED點陣
LED點陣像素的顏色有單色、雙色和全彩色三類;LED點陣像素的個數(shù)有8?×?8、16?×?16、24?×?24、40?×?40等多種;LED點陣像素的直徑有Φ3、Φ3.75、Φ8等;LED點陣屏在室內(nèi)和室外場地均可使用。根據(jù)像素的數(shù)目不同,像素顏色分為雙原色、三原色等。根據(jù)像素顏色的不同,所顯示的文字、圖像等內(nèi)容的顏色也不同,單原色點陣只能顯示固定色彩;雙原色和三原色點陣顯示內(nèi)容的顏色,由像素內(nèi)不同顏色發(fā)光二極管點亮的組合方式?jīng)Q定。假如按照脈沖方式控制二極管的點亮時間,則可實現(xiàn)256或更高級灰度顯示,即可實現(xiàn)真彩色顯示。
LED點陣顯示系統(tǒng)中各模塊的顯示方式有靜態(tài)和動態(tài)兩種。
靜態(tài)顯示原理簡單、控制方便,但所需控制端口太多,在實際應(yīng)用中一般采用動態(tài)顯示方式;
動態(tài)顯示采用掃描的方式工作,由峰值較大的窄脈沖驅(qū)動,像素輪流工作,就可顯示各種圖形或文字信息。3.1.2LED8×8點陣內(nèi)部結(jié)構(gòu)1088BS是較為常用的單色8?×?8點陣,它由8行8列共64個LED構(gòu)成。在圖3-2(a)所示的外形圖上,其中一個側(cè)面印有1088BS的型號,型號朝著自己并且正面朝上,俯視點陣屏時,最上面為第1行,最左側(cè)為第1列,約定好行列位置,在顯示信息時方便描述,當然也可以自行定義行列序號。1088BS共有16個引腳,如圖3-2(b)所示,X0~X7為行號,Y0~Y7為列號;行號與列號在外形圖上是按順序排列的,但是在引腳圖上是亂序的,在制作硬件時一定要注意;型號朝著自己、正面朝上,下面一排引腳最左側(cè)的為第1腳。外形外形圖3-3所示為1088BS的內(nèi)部結(jié)構(gòu)如下圖所示,圖中給出了64個LED的連接方法,每行8個LED的陽極連接在一起為行線,每列8個LED的陰極連接在一起為列線,即“行陽列陰”。點亮任何一個LED時,需要給LED所在行線發(fā)送高電平,列線發(fā)送低電平。內(nèi)部結(jié)構(gòu)3.1.3LED點陣框圖用單片機控制LED點陣時,為所有的行線與列線分配I/O口,由于同行或同列中連接的LED比較多,超過了單片機I/O口的帶負載能力,必須通過驅(qū)動電路來提高單片機I/O口的帶負載能力,如圖3-4所示。
3.28×8點陣硬件設(shè)計
3.2.18路鎖存器74HC573鎖存器在電路中的最主要作用是緩存,其次是解決高速的控制器與慢速的外設(shè)不同步問題,再其次是解決驅(qū)動的問題,最后是提高單片機I/O口的帶負載能力。它包括不帶鎖存使能端的鎖存器和帶鎖存使能端的鎖存器。74HC573是帶鎖存使能端的鎖存器。1.特點74HC573為74高速CMOS系列集成電路,電源為3~18?V,后綴573表示集成電路的功能。74HC573輸出級為三態(tài)總線驅(qū)動輸出,俗稱三態(tài)門。三態(tài)門是指能夠輸出三種狀態(tài)(高電平、低電平、高阻狀態(tài))的門電路,三態(tài)門常用于構(gòu)成總線傳送數(shù)據(jù)。一般的門電路只有高電平、低電平兩種狀態(tài)。74HC573輸出引腳最大可承受35?mA的拉電流或灌電流,常用做點陣的驅(qū)動電路。2.引腳圖74HC573的引腳圖如圖3-5(a)所示。VCC—電源輸入端,3~18?V。GND—接地端。D0~D7—并行數(shù)據(jù)輸入端。Q0~Q7—并行數(shù)據(jù)輸出端。鎖存器、寄存器等數(shù)字集成電路,既可以采用并行方式(同時傳送)傳送數(shù)據(jù),也可以采用串行方式(分時傳送)傳送數(shù)據(jù),再結(jié)合輸入、輸出引腳,綜合來看,共有4種數(shù)據(jù)傳送方式:(1)并行輸入—并行輸出方式,簡稱為并入—并出;(2)并行輸入—串行輸出方式,簡稱為并入—串出;(3)串行輸入—并行輸出方式,簡稱為串入—并出;(4)串行輸入—串行輸出方式,簡稱為串入—串出。這4種方式中,并入—并出的數(shù)據(jù)傳送方式速度最快;串入—串出的數(shù)據(jù)傳送方式速度最慢;并入—串出的數(shù)據(jù)傳送方式可以將輸入的并行數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)輸出,而串入—并出的數(shù)據(jù)傳送方式是將輸入的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)輸出。因此,并入—串出、串入—并出兩種方式主要用于實現(xiàn)數(shù)據(jù)格式的轉(zhuǎn)換。74HC573輸入為并行方式,輸出也為并行方式,因此為并入—并出方式,8位數(shù)據(jù)通過8個數(shù)據(jù)通路同時傳送,傳送速度最快?!敵鍪鼓芏?,低電平有效。是三態(tài)門的專屬使能端,當=?0時,三態(tài)門工作于傳送數(shù)據(jù)的狀態(tài)(使能),可以輸出高電平或低電平;當=?1時,三態(tài)門不能工作(禁止),此時三態(tài)門輸出為高阻狀態(tài)。LE—鎖存使能端,高電平有效。鎖存功能是指將數(shù)據(jù)保存在鎖存器的輸出端,與輸入信號沒有關(guān)系,且不會丟失。暫存數(shù)據(jù)之前,一定要先把正確的數(shù)據(jù)送入鎖存器。
★當LE?=?1時,鎖存器為傳送狀態(tài),將輸入端D7~D0的數(shù)據(jù)傳送至輸出端Q7~Q0,即采用并入—并出方式傳送8位二進制數(shù)據(jù)?!锂?LE?=?0時,鎖存器為鎖存狀態(tài)。工作于鎖存狀態(tài)時,將之前傳送至輸出端Q7~Q0的數(shù)據(jù)鎖存。此時Q7~Q0與輸入端D7~D0的狀態(tài)無關(guān),不會隨著輸入端的變化而變化,即使輸入端沒有數(shù)據(jù),輸出端仍有數(shù)據(jù)。3.功能表表3-1所示為74HC573的功能表,由表可知74HC573可以實現(xiàn)以下3種功能:(1)高阻狀態(tài)。當=?1時,鎖存使能端LE和輸入端D7~D0不起作用,輸出端Q7~Q0為高阻狀態(tài)。(2)傳送狀態(tài)。當=?0時,三態(tài)門打開;當LE?=?1時,鎖存器為傳送狀態(tài);Q7~Q0?=?D7~D0。(3)鎖存功能。當=?0并且LE?=?0時,鎖存器為鎖存狀態(tài);輸出端Q7~Q0鎖存的是最后一次傳送至輸出端的數(shù)據(jù)。4.邏輯符號74HC573的邏輯符號如圖3-5(b)所示,圖上只需體現(xiàn)信號的傳遞關(guān)系,即集成電路的邏輯功能。畫電路原理圖時,最好用邏輯符號圖,直觀明了。引腳圖與實物一一對應(yīng),一般在制作電路時使用。3.2.2
8×8點陣硬件設(shè)計圖3-6所示為
8?×?8LED點陣硬件電路圖。如圖中所示,用74HC573(1)作為行驅(qū)動,74HC573(2)作為列驅(qū)動。74HC573在傳送數(shù)據(jù)時,需要一直打開三態(tài)門,即=0。由于74HC573的鎖存功能,兩片74HC573的并行數(shù)據(jù)口D7~D0可共用一個8位的I/O端口,為其分配單片機的P0口,其中數(shù)據(jù)口的最高位P0.7接X0、Y0,寫代碼時要注意這一點。芯片74HC573(1)的鎖存使能端LE與P2.0相連,74HC573(2)的鎖存使能端LE與P2.2相連,在兩個鎖存使能端的作用下,兩片74HC573輪流傳送代碼并鎖存至行線與列線,從而點亮相關(guān)LED。編程時,數(shù)據(jù)口P0采用字節(jié)尋址,鎖存使能端采用位尋址,定義如下:sbit XLE=P2^0;sbit YLE=P2^2;
3.3
顯示8×8圖片軟件設(shè)計
3.3.1掃描8×8點陣1.點亮一個像素動態(tài)掃描點陣可以采用行掃描或列掃描方式,根據(jù)編程的簡易程度選擇其中的一種。如圖3-6所示電路,用74HC573作為行驅(qū)動與列驅(qū)動時,行掃描與列掃描的編程難度是一樣的,我們本項目后面所有顯示效果均采用行掃描。行掃描是指每次只能選中一行,所有的行輪流點亮。行代碼的作用是在點陣中選中一行,稱其為掃描碼;再由列代碼決定選中行像素的亮滅,稱其為顯示碼(字模)。掃描碼是由硬件決定的,不管顯示任何內(nèi)容都是一樣的;而顯示碼是由顯示的圖片決定的,是隨顯示內(nèi)容變化的。當掃描的速度足夠快時,在視覺上,所有行是同時顯示的,這時即可觀察到顯示內(nèi)容?!纠?-1】點亮圖3-6中行X2與列Y3交點處的LED。(1)寫出行掃描碼與列顯示碼。根據(jù)LED的工作原理,只有當LED正偏(陽極接高電位、陰極接低電位)時才能夠被點亮。在圖3-6中,每個LED的陽極連接的是行線,陰極連接的是列線,簡單地說,就是“行陽列陰”,這4個字才是點亮LED的依據(jù)。在點亮X2與Y3交點處的LED時,行X0~X7中,只有X2為1,其余的行均為0;列Y0~Y7中,只有Y3為0,其余的列均為1;代碼為行掃描碼:P0?=?P0.7~P0.0?=?X0~X7?=?00100000?=?0X20列顯示碼:P0?=?P0.7~P0.0?=?Y0~Y7?=?11101111?=?0xEF(2)通過74HC573的鎖存使能端傳送并鎖存代碼。74HC573首先傳送所需的數(shù)據(jù),在LE?=?1時,將數(shù)據(jù)送至P0口傳送;然后使LE?=?0,鎖存之前傳送的數(shù)據(jù)。先傳送并鎖存行:XLE?=?1;P0?=?0X20;XLE?=?0;后傳送并鎖存列:YLE?=?1;P0?=?0XEF;YLE?=?0;(3)根據(jù)上述要點編寫源程序。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;main(){XLE=1;P0=0x20;XLE=0;YLE=1;P0=0xEF;YLE=0; while(1);}【隨堂練習3-2】(1)自己定義位置,點亮一個像素。(2)寫出所有行的掃描碼。2.點亮一行中若干像素【例3-2】點亮圖3-6中X2Y1、X2Y6交點處的LED。需要點亮的兩個LED都處于X2行,故X2行為高電平,其余行為低電平;兩個LED一個與Y1相連、一個與Y6相連,故列代碼中Y1、Y6為低電平,其余列為高電平。代碼為行掃描碼:P0?=?P0.7~P0.0?=?X0~X7?=?00100000?=?0X20列顯示碼:P0?=?P0.7~P0.0?=?Y0~Y7?=?10111101?=?0XBD源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;main(){
XLE=1;P0=0x20;XLE=0; YLE=1;P0=0xBD;YLE=0; while(1);}【隨堂練習3-3】(1)編程點亮行X3中左右側(cè)3個像素。(2)編程點亮行X7中所有像素。3.掃描8?×?8點陣【例3-3】編程先點亮X0行中所有像素,延時500ms;再點亮X1行中所有像素,延時500ms;……依此類推,點亮至X7行后,再從X0行重新開始。每行的像素都是全亮,因此每一行像素的列代碼都是00000000,即0;編程時,只需改變行代碼就可以了。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;voiddelay(uinta);main(){
while(1)
{
XLE=1;P0=0x80;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x40;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x20;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x10;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x08;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x04;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x02;XLE=0; YLE=1;P0=0;YLE=0;delay(50); XLE=1;P0=0x01;XLE=0; YLE=1;P0=0;YLE=0;delay(50);
}}voiddelay(uinta){uinti,j;for(i=0;i<a;i++)
for(j=0;j<1827;j++);}上述程序運行后,可觀察到點陣的每一行輪流點亮,這種效果稱之為行掃描。通過行掃描可以檢查點陣中每個像素的好壞??辞宄袙呙璧男Ч?,將每一行像素點亮的時間縮短為1ms,編譯下載之后,可觀察到所有行是一起亮的,這是由于掃描的速度太快,人的眼睛根本分辨不清楚,這也是動態(tài)掃描的本質(zhì)?!倦S堂練習3-4】在行掃描源程序中,每一行的顯示碼相同,據(jù)此優(yōu)化行掃描源程序。3.3.2顯示8×8圖片【例3-4】在8×8點陣上顯示“X”。(1)畫出“X”。在省略LED的8行8列上畫出要顯示的圖形,把需要顯示像素的交點處涂黑,如圖3-7所示。(2)寫出行掃描時所需的顯示碼。X0行顯示碼:P0?=?Y0~Y7?=?01111110?=?0X7EX1行顯示碼:P0?=?Y0~Y7?=?10111101?=?0XBDX2行顯示碼:P0?=?Y0~Y7?=?11011011?=?0XDB…X7行顯示碼,P0?=?Y0~Y7?=?01111110?=?0X7E(3)根據(jù)上述代碼編程。當掃描點陣的速度足夠快時,顯示的畫面才不會有閃爍感。源程序如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;voiddelay(uinta);main(){while(1){ XLE=1;P0=0x80;XLE=0;YLE=1;P0=0x7E;YLE=0;delay(1); XLE=1;P0=0x40;XLE=0;YLE=1;P0=0xBD;YLE=0;delay(1); XLE=1;P0=0x20;XLE=0;YLE=1;P0=0xDB;YLE=0;delay(1); XLE=1;P0=0x10;XLE=0;YLE=1;P0=0xE7;YLE=0;delay(1); XLE=1;P0=0x08;XLE=0;YLE=1;P0=0xE7;YLE=0;delay(1); XLE=1;P0=0x04;XLE=0;YLE=1;P0=0xDB;YLE=0;delay(1); XLE=1;P0=0x02;XLE=0;YLE=1;P0=0xBD;YLE=0;delay(1); XLE=1;P0=0x01;XLE=0;YLE=1;P0=0x7E;YLE=0;delay(1);}}voiddelay(uinta){uintj;for(i=0;i<a;i++) for(j=0;j<130;j++);}【隨堂練習3-5】在點陣上,顯示自已學號的后2位,圖片的大小為8×8。3.3.3取模軟件1.字模的計算及存放任意大小的點陣信息在顯示時,可由該信息的行數(shù)與列數(shù)計算出字模包含的字節(jié)數(shù),它們之間的關(guān)系是:由行數(shù)×列數(shù)/8算出。字模包含的所有字節(jié)可通過定義一維數(shù)組進行存放,且字模一般存放在ROM中。例如,ucharcodea[8]; //存放8?×?8點陣信息的字模,8行?×?8列?/?8?=?8BucharcodeB[64]; //存放16?×?32點陣信息的字模,16行?×?32列?/?8?=?64BucharcodeC[128]; //存放32?×?32點陣信息的字模,32行?×?32列?/?8?=?128B2.循環(huán)結(jié)構(gòu)將點陣的掃描碼與顯示碼(字模)用一維數(shù)組存放時,可將例3-4中顯示“X”的程序改為循環(huán)結(jié)構(gòu)。程序的結(jié)構(gòu)改動之后,字模可以通過取模軟件獲取。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitXLE=P2^0;sbitYLE=P2^2;ucharcodexsaomiao[8]; //掃描碼數(shù)組聲明ucharcodeyzimo[8]; //字模數(shù)組聲明voiddelay(void);main(){
uchari; while(1) {
for(i=0;i<8;i++)
{XLE=1;P0=xsaomiao[i];XLE=0;YLE=1;P0=yzimo[i];YLE=0;delay();} }}voiddelay(void){uintj;for(j=0;j<130;j++);}ucharcodexsaomiao[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //掃描碼ucharcodeyzimo[8]={0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xBD,0x7E};//字模由取模軟件獲取3.取模軟件PCtoLCD2002PCtoLCD2002軟件用于生成顯示信息的字模。在生成中英文數(shù)字混合的字符串的字模數(shù)據(jù)時,還可以選擇字體、大小,并且可單獨調(diào)整每一個文字的長和寬,生成任意形狀的字符;還可以繪制圖片,并生成相應(yīng)的字模數(shù)據(jù)。1)打開PCtoLCD2002軟件從開始菜單或桌面上啟動PCtoLCD2002軟件。雙擊PCtoLCD2002的圖標,啟動后主窗口界面如圖3-8所示。2)畫圖(1)新建文件。單擊“文件/新建”,出現(xiàn)如圖3-9(b)所示窗口,輸入圖片的寬度與高度“8”,單擊“確定”按鈕,顯示出8?×?8點陣。(2)畫圖。單擊鼠標左鍵,一次畫一個像素;按住左鍵后拖動鼠標,可連續(xù)作畫。當畫錯需要修改時,方法類似,換為操作鼠標右鍵即可。(3)保存。3)設(shè)置選項(1)單擊圖3-10(a)中的選項或快捷圖標“”,打開字模選項窗口,如圖3-10(a)所示。(2)點陣格式,可選擇陰碼或陽碼兩種格式。陰碼:亮點為1,滅的點為0;陽碼:亮點為0,滅的點為1。(3)選擇取模方式。取模方式有逐列式、逐行式、列行式、行列式四種。取模時,每8個連續(xù)的像素為一個字節(jié),但究竟是一行中的8個連續(xù)的點,還是一列中8個連續(xù)的點,就是所謂的取模方式,取模方式與點陣的硬件電路有密切關(guān)系。逐列式從圖片或漢字的左上角開始,從上至下,每8位二進制數(shù)轉(zhuǎn)化為十六進制保存,不夠8位的補足8位,第0列取完之后;接著從上至下取第1列,取完之后;取第2列,…,以此類推,直到圖片或漢字的最后一列取完,如圖3-11(a)所示。逐行式從圖片或漢字的左上角開始,從左至右,每8位二進制數(shù)轉(zhuǎn)化為16進制保存,不夠8位的補足8位,第0行取完之后;接著從左至右取第1行,取完之后;取第2行,…,以此類推,直到圖片或漢字的最后一行取完,如圖3-11(b)所示。(4)取模走向,可選擇逆向或順向。取模走向是指生成字模時一個字節(jié)的8位二進制數(shù)是先高位還是先低位,逆向是從低位至高位;順向則是從高位至低位。取模方式為逐行式時,逆向是指從左至右的8位二進制數(shù)分別是從低位至高位,順向則是指從左至右的8位二進制數(shù)分別是從高位至低位,如圖3-12所示。容易混淆的是圖3-12中的取字模示意圖都是從低位開始的,與逆向的原則先低位一致,每個字節(jié)是從左開始的;與順向的原則先高位恰好相反,每個字節(jié)是從右開始的。(5)輸出數(shù)制,一般選取十六進制。(6)每行顯示數(shù)據(jù),有點陣和索引兩個數(shù)據(jù)。點陣后面的數(shù)據(jù)是指生成字模后,每行顯示的字節(jié)數(shù),字模越多,占的行數(shù)也就越多;當點陣較大時,可以增加每行的字節(jié)數(shù),從而減少字模所占的行數(shù)。索引后的數(shù)據(jù)與點陣的數(shù)據(jù)作用類似。(7)自定義格式,可選擇A51或C51。選擇C51時,適用于C語言編程。圖3-10(a)所示為自定義格式的初始狀態(tài),為了適應(yīng)C編程的格式要求,可刪除行前綴的“{”;行后綴刪除“}”,但保留“,”,如圖3-10(b)所示。(8)上述選項設(shè)置好后,其他選項默認,然后單擊確定。4.8?×?8點陣字模選項(1)點陣格式。8?×?8點陣編程時采用行掃描,列線的顯示碼就是要生成的字模,而列線為陰極,所以字模為0的時候點亮,最終選取陽碼。(2)取模方式。編程時,采用行掃描,因此選逐行式。(3)取模走向。圖3-6所示8?×?8點陣電路圖中,列線Y0~Y7與P0.7~P0.0相連,在取模時,一個字節(jié)從左至右是先高位后低位,取模走向應(yīng)選順向。(4)生成字模。字模選項設(shè)置好后,單擊“生成字?!薄H鐖D3-13所示。將生成的字模選中,粘貼到循環(huán)結(jié)構(gòu)的源程序中定義數(shù)組存放,就可以編譯、下載,觀看顯示效果了。ucharcodeyzimo[8]={0xFF,0x99,0x66,0x7E,0x7E,0xBD,0xDB,0xE6};/*"C:\Users\Administrator\Desktop\xin.BMP",0*//*(8X8)*/【隨堂練習3-6】(1)用PCtoLCD2002畫出一幅8×8點陣的圖片,并生成字模,然后編程顯示。(2)點陣格式選擇陰碼,觀看顯示效果。(3)取模方式選擇逐列式,觀看顯示效果。(4)取模走向選擇逆向,觀看顯示效果。
3.4
32×64點陣硬件設(shè)計
3.4.132×64點陣概述32?×?64表示點陣的大小為32行,每行有64列,由8塊16?×?16的點陣構(gòu)成,行線接陽極、列線接陰極,編程時仍采用行掃描方式。這些特點均與上述8?×?8相同,只是點陣的面積增大了,一屏內(nèi)可以顯示的最大點陣信息為32?×?64,當然也可以顯示小于32?×?64的任何點陣信息,如16?×?16、32?×?32、16?×?8等,當信息量大時,也可以分多屏顯示?,F(xiàn)在的大面積點陣都已實現(xiàn)模塊化生產(chǎn),如圖3-14所示。隨著點陣面積的增大,在控制時會出現(xiàn)一些新的問題。32?×?64點陣如果仍采用74HC573鎖存器作為行驅(qū)動與列驅(qū)動,就需要32條行線、64條列線,共96條控制線,而51單片機的并行I/O口P0、P1、P2、P3總共只有32條線,遠遠不能滿足要求。32?×?64點陣硬件電路設(shè)計的基本原則是:減少控制線并提高帶負載能力。采用行掃描編程時,行驅(qū)動的作用是在所有行中選中一行。為了減少控制線,需要找到一種數(shù)字集成電路,該電路的輸入端與單片機相連,輸出端通過驅(qū)動芯片與點陣相連;對于輸入的任何一種組合,32個輸出中,每次只能有1個輸出為高電平,其余的31個輸出均為低電平,即在32條行線中只選中一行,能實現(xiàn)這個功能的電路就是譯碼器。列驅(qū)動的作用是為選中行發(fā)送點陣信息的字模,采用串行器件傳送字模,可有效地減少控制線。3.4.24線-16線譯碼器74LS1541.概述二進制譯碼器是指輸入為n位二進制代碼,輸出為2n個信號的電路。輸入的一個代碼只能用一個輸出端表示,因此輸入又稱為地址線。二進制譯碼器常見的有2線-4線譯碼器、3線-8線譯碼器、4線-16線譯碼器,第一個數(shù)字表示輸入二進制代碼的位數(shù),第二個數(shù)字表示輸出線的個數(shù)。這些二進制譯碼器不同的廠家都有生產(chǎn),更復雜的5線-32線譯碼器,6線-64線譯碼器一般不直接生產(chǎn),而是由比較簡單的譯碼器擴展連接而成。例如,2塊4線-16線譯碼器可以構(gòu)成5線-32線譯碼器,由3線-8線構(gòu)成5線-32線譯碼器,則需要4塊,由2線-4線構(gòu)成5線-32線譯碼器則需要8塊。如何進行譯碼器的擴展,是學習的重點也是難點。2.特點74LS154是TTL的74系列數(shù)字集成電路,它可以實現(xiàn)4線-16線譯碼功能,輸入為4位二進制代碼,16個輸出端為低電平有效。3.引腳74LS154引腳圖和邏輯符號圖如圖3-15所示?!CC—電源輸入端,5V?!ND—接地端。·ABCD—輸入端,或地址線?!ぁ敵龆?,低電平有效?!ぁⅰ鼓芏?,低電平有效。當、有任何一個處于無效狀態(tài)時,74LS154不工作(禁止狀態(tài));只有當、全部有效時,74LS154才實現(xiàn)譯碼功能(使能狀態(tài))。4.功能表表3-2所示為74LS154的功能表。(1)禁止。當=?1或=?1時,輸入ABCD不起作用,74LS154不能譯碼,~16個輸出端均為無效電平1。(2)譯碼。當==?0時,74LS154實現(xiàn)譯碼功能。這時輸出取決于輸入ABCD。對于每一個輸入代碼,~16個輸出端只有一個為有效電平0,其余15個都為無效電平1。5.應(yīng)用【例3-5】分析圖3-17所示74LS154的應(yīng)用電路。寫出圖(a)的輸出信號,圖(b)的輸入信號。【隨堂練習3-7】(1)畫出邏輯符號,功能為3線-8線譯碼器,輸出高電平有效;有2使能端,一個高電平有效,一個低電平有效。(2)在(1)畫出的邏輯符號上,標出選中輸出端Y5時,所有引腳的狀態(tài)。圖3-17 74LS154應(yīng)用【例3-5】分析圖3-17所示74LS154的應(yīng)用電路。寫出圖(a)的輸出信號,圖(b)的輸入信號。3.4.3行驅(qū)動硬件設(shè)計1.行驅(qū)動硬件設(shè)計32?×?64點陣有32條行線,并且行線連接的是LED的陽極,所以行驅(qū)動硬件主要是設(shè)計一個5線-32線、輸出高電平有效的譯碼器。(1)確定芯片的個數(shù)及32線輸出端。74LS154有16個輸出端,擴展為32線譯碼器時需要2片154。32線輸出由兩片154的輸出端組合而成,其中,154(1)的輸出端重新定義為~,154(2)的輸出端重新定義為~。由于74LS154的輸出為低電平有效,因此需要通過32個非門將154的輸出轉(zhuǎn)換為高電平有效,再與32條行線X0~X31相連,如圖3-17(a)所示。(2)確定5線輸入端ABCDE。①列出5線-32線譯碼器功能表。列出5線-32線譯碼的功能表,功能表輸入端的32種組合全部列出,但32個輸出端并不需要單獨列出,而是根據(jù)構(gòu)成它的154芯片的個數(shù),將32個輸出分為2列,154(1)的~和154(2)的~,如表3-3所示。②確定低4位輸入BCDE。5線-32線譯碼器由2個74LS154芯片構(gòu)成,將表3-3所示32種輸入組合分為2組,也就是找到兩片154輸入的16個代碼(0000~1111),共有2組。觀察表3-3,可以看出兩組0000~1111都出現(xiàn)在5線輸入的低4位BCDE處,它的前16行為第一組0000~1111,后16行為第2組0000~1111,同時送給2片154的輸入ABCD。也就是說,將2個154芯片的輸入端A并聯(lián)后,作為5線輸入的B;將2個154芯片的輸入端B并聯(lián)后,作為5線輸入的C;…,即5線的低4位BCDE?=?154的ABCD,如圖3-17(b)所示。譯碼器的擴展電路圖較為復雜,畫圖時最好結(jié)合原理一步一步畫,每一條線盡可能保證不出錯,節(jié)點也是必不可少的。③確定最高位A。首先,5線-32線譯碼器任何時刻都只能有一個輸出端處于有效狀態(tài),因此2片154絕對不能同時譯碼,一個譯碼的同時另一個只能禁止。表3-3中,前16種組合00000~01111分別選中~中的一個輸出端,~均為無效狀態(tài);而后16種組合10000~11111分別選中~中的一個輸出端,~均為無效狀態(tài)。據(jù)此可知,前16行A?=?0時,154(1)譯碼、154(2)禁止;后16行A?=?1時,154(2)譯碼、154(1)禁止。其次,5線-32線譯碼器低4位輸入BCDE,由2個154的ABCD并聯(lián)而成,那么最高位輸入端A只能與154的使能端相連。最后,在154譯碼時,確定A的連接方式。154(1)在A?=?0時譯碼,所以A應(yīng)連接至154(1)的低電平有效的使能端154(2)在A?=?1時譯碼,所以A應(yīng)接154(2)的高電平有效的使能端,但是154沒有高電平有效的使能端,只能通過非門取反后,再連接至154(2)的,如圖3-18(a)所示。④處理多余的使能端。2片154芯片上未使用的使能端一般不能懸空,應(yīng)接使其有效的固定狀態(tài)0。這樣154才能夠在需要時實現(xiàn)譯碼功能。到這里,5線-32線譯碼器就全部連接完成了,如圖3-18(b)所示。(3)分配端口。將P3.6~P3.2分別分配給5線輸入ABCDE,編程時采用位尋址,定義為sbitXA=P3^6;sbitXB=P3^5;sbitXC=P3^4;sbitXD=P3^3;sbitXE=P3^2;2.行掃描函數(shù)行掃描時,根據(jù)行號從32條行線中每次只選中一行,編程時,需將行號轉(zhuǎn)換為5位二進制數(shù),通過P3.6~P3.2端口送至5線-32線譯碼器的輸入端ABCDE,由5線-32線譯碼器譯碼后選中其中一行。由32分支程序?qū)崿F(xiàn)將行號轉(zhuǎn)換為譯碼器的5位輸入。源代碼如下:/*函數(shù)名:xsaomiao()作用:選中行x。將行號x轉(zhuǎn)換為5位二進制數(shù),送至5線-32線譯碼器的輸入端ABCDE。入口參數(shù):形參x:存放待選中行的行號,范圍從0~31。出口參數(shù):無。*/voidxsaomiao(ucharx){ switch(x) { case0: XA=0; XB=0; XC=0; XD=0; XE=0; break; case1: XA=0; XB=0; XC=0; XD=0; XE=1; break;
case2: XA=0; XB=0; XC=0; XD=1; XE=0; break; case3: XA=0; XB=0; XC=0; XD=1; XE=1; break;
case3: XA=0; XB=0; XC=0; XD=1; XE=1; break; case4: XA=0; XB=0; XC=1; XD=0; XE=0; break; case5: XA=0; XB=0; XC=1; XD=0; XE=1; break; case6: XA=0; XB=0; XC=1; XD=1; XE=0; break; case7: XA=0; XB=0; XC=1; XD=1; XE=1; break; case8: XA=0; XB=1; XC=0; XD=0; XE=0; break; case9: XA=0; XB=1; XC=0; XD=0; XE=1; break; case10: XA=0; XB=1; XC=0; XD=1; XE=0; break; case11: XA=0; XB=1; XC=0; XD=1; XE=1; break; case12: XA=0; XB=1; XC=1; XD=0; XE=0; break; case13: XA=0; XB=1; XC=1; XD=0; XE=1; break; case14: XA=0; XB=1; XC=1; XD=1; XE=0; break; case15: XA=0; XB=1; XC=1; XD=1; XE=1; break;case16: XA=1; XB=0; XC=0; XD=0; XE=0; break;
case17: XA=1; XB=0; XC=0; XD=0; XE=1; break; case18: XA=1; XB=0; XC=0; XD=1; XE=0; break; case19: XA=1; XB=0; XC=0; XD=1; XE=1; break; case20: XA=1; XB=0; XC=1; XD=0; XE=0; break; case21: XA=1; XB=0; XC=1; XD=0; XE=1; break; case22: XA=1; XB=0; XC=1; XD=1; XE=0; break; case23: XA=1; XB=0; XC=1; XD=1; XE=1; break; case24: XA=1; XB=1; XC=0; XD=0; XE=0; break; case25: XA=1; XB=1; XC=0; XD=0; XE=1; break; case26: XA=1; XB=1; XC=0; XD=1; XE=0; break; case27: XA=1; XB=1; XC=0; XD=1; XE=1; break; case28: XA=1; XB=1; XC=1; XD=0; XE=0; break; case29: XA=1; XB=1; XC=1; XD=0; XE=1; break; case30: XA=1; XB=1; XC=1; XD=1; XE=0; break; case31: XA=1; XB=1; XC=1; XD=1; XE=1; break; }} 3.4.48位移位寄存器74LS59532?×?64點陣的列線上傳送的是選中行點陣信息的字模。為了減少控制線,需采用串行方式發(fā)送這些字模,74LS595移位寄存器可以實現(xiàn)數(shù)據(jù)的串行傳送。1.特點74LS595是8位移位寄存器/存儲器,可以實現(xiàn)數(shù)據(jù)的串行輸入,輸出可以是串行輸出或并行輸出,輸出為三態(tài)結(jié)構(gòu),驅(qū)動電流可達35mA,其優(yōu)點是具有數(shù)據(jù)存儲功能,在數(shù)據(jù)移位的過程中,輸出端的數(shù)據(jù)可以保持不變,主要應(yīng)用于點陣屏。2.內(nèi)部結(jié)構(gòu)74LS595的內(nèi)部結(jié)構(gòu)如圖
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五股東協(xié)議補充協(xié)議-股東對公司可持續(xù)發(fā)展戰(zhàn)略的承諾
- 二零二五年度跨境拖車服務(wù)及關(guān)稅代理合同
- 二零二五年度商業(yè)廣場購物中心房屋租賃與商業(yè)數(shù)據(jù)分析服務(wù)合同
- 2025年度閑置校舍租賃合同及校園內(nèi)環(huán)保能源利用合作協(xié)議
- 2025年度美容美發(fā)加盟合同解除書
- Unit 4 Did You Have a Nice Trip?單元基礎(chǔ)知識復習(含答案)
- 2025年度高校學生實習就業(yè)雙選協(xié)議書
- 二零二五年度企業(yè)員工社保權(quán)益自愿放棄協(xié)議范本
- 二零二五年度海洋地質(zhì)調(diào)查海域使用權(quán)租賃與研究開發(fā)協(xié)議
- 二零二五年度交通事故私了賠償處理協(xié)議
- 七年級數(shù)學蘇科版下冊 101 二元一次方程 課件
- 《財務(wù)風險的識別與評估管理國內(nèi)外文獻綜述》
- ??谑写媪糠抠I賣合同模板(范本)
- ZL50裝載機工作裝置設(shè)計
- 經(jīng)典文學作品中的女性形象研究外文文獻翻譯2016年
- 高爐煤氣安全知識的培訓
- 2008 年全國高校俄語專業(yè)四級水平測試試卷
- 需求供給與均衡價格PPT課件
- 金融工程鄭振龍課后習題答案
- 時間單位換算表
- DTSD342-9N說明書(精編版)
評論
0/150
提交評論