微處理器程序設(shè)計-以51單片機(jī)為例 課件 項目2 智慧交通顯示系統(tǒng)智能控制_第1頁
微處理器程序設(shè)計-以51單片機(jī)為例 課件 項目2 智慧交通顯示系統(tǒng)智能控制_第2頁
微處理器程序設(shè)計-以51單片機(jī)為例 課件 項目2 智慧交通顯示系統(tǒng)智能控制_第3頁
微處理器程序設(shè)計-以51單片機(jī)為例 課件 項目2 智慧交通顯示系統(tǒng)智能控制_第4頁
微處理器程序設(shè)計-以51單片機(jī)為例 課件 項目2 智慧交通顯示系統(tǒng)智能控制_第5頁
已閱讀5頁,還剩112頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

項目二智慧交通顯示系統(tǒng)智能控制

《微處理器程序設(shè)計》教學(xué)目標(biāo)和技能要求知識目標(biāo)1、掌握微處理器數(shù)據(jù)傳送控制方式;2、理解中斷的基本概念;3、熟悉與中斷控制有關(guān)的寄存器;4、理解中斷優(yōu)先級和中斷響應(yīng)過程;5、掌握由外部中斷控制方法。6、理解微處理器控制系統(tǒng)中的幾種定時方法;7、掌握定時/計數(shù)器的控制;8、熟練掌握定時器/計數(shù)器的工作方式設(shè)置和控制;9、理解LED點(diǎn)陣屏顯示原理以及LCD液晶屏顯示原理。教學(xué)目標(biāo)和技能要求能力目標(biāo)1、能靈活運(yùn)用微處理器中斷請求;2、能正確設(shè)置微處理器中斷相關(guān)的寄存器;3、能利用微處理器的外部中斷控制LED燈顯示;4、能利用微處理器的定時器中斷控制數(shù)碼管和信號燈的顯示;5、能進(jìn)行LED點(diǎn)陣屏的簡單控制;6、能進(jìn)行LCD液晶屏的簡單控制;7、能綜合應(yīng)用微處理器的中斷實(shí)現(xiàn)對智慧校園顯示系統(tǒng)的智能控制并進(jìn)行能力拓展。知識導(dǎo)圖任務(wù)2.1時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)目標(biāo)

通過本任務(wù)的設(shè)計和制作,以51單片機(jī)為例介紹微處理器中斷技術(shù),能利用外部中斷和定時器中斷實(shí)現(xiàn)智能顯示。培養(yǎng)學(xué)生利用微處理器的中斷功能分別控制LED和數(shù)碼管的智能顯示,并能簡單控制LED點(diǎn)陣屏和LCD液晶屏的顯示。知識準(zhǔn)備一、中斷的概念

在計算機(jī)中,由于計算機(jī)內(nèi)外部的原因或軟硬件的原因,使CPU暫停當(dāng)前的工作,轉(zhuǎn)到需要處理的中斷源的服務(wù)程序入口,在入口處執(zhí)行一個跳轉(zhuǎn)指令去處理中斷事件,執(zhí)行完中斷服務(wù)后,再回到原來程序被中斷的地方繼續(xù)處理執(zhí)行程序,這個過程稱為中斷。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備

實(shí)現(xiàn)中斷功能的軟硬件統(tǒng)稱為“中斷系統(tǒng)”。能向CPU發(fā)出請求的事件稱為“中斷源”?!爸袛嘣础毕駽PU提出的處理請求稱為“中斷請求”。CPU暫停自身事務(wù)轉(zhuǎn)去處理中斷請求的過程,稱為“中斷響應(yīng)”。對事件的整個處理過程稱為“中斷服務(wù)”或“中斷處理”。處理完畢后回到原來被中斷的地方,稱為“中斷返回”。若有多個中斷源同時提出請求,或CPU正在處理某個中斷請求時,又有另一事件發(fā)出中斷請求了,CPU將根據(jù)中斷源的優(yōu)先級對其進(jìn)行排序,然后按優(yōu)先順序處理中斷源的請求。中斷服務(wù)子程序主程序斷點(diǎn)主程序中斷請求中斷響應(yīng)中斷返回圖2-1中斷過程示意圖任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備二、與中斷控制有關(guān)的寄存器中斷控制主要解決三類問題:(1)中斷的屏蔽控制,即何時允許CPU響應(yīng)中斷;(2)中斷優(yōu)先級控制,即多個中斷同時提出請求時,先響應(yīng)哪個中斷請求;(3)中斷的嵌套,即CPU正在響應(yīng)一個中斷時,是否允許響應(yīng)另一個中斷請求。

中斷控制是指微處理器所提供的中斷控制手段,通過對控制寄存器的操作來有效的管理中斷系統(tǒng)。以MCS51為代表的微處理器設(shè)置了四個與中斷控制相關(guān)的控制寄存器:定時/計數(shù)器控制寄存器TCON,串行口控制寄存器SCON,中斷允許寄存器IE,中斷優(yōu)先級控制寄存器IP。其中定時/計數(shù)器控制寄存器TCON和串行口控制寄存器SCON將在后面的任務(wù)中進(jìn)行詳細(xì)介紹。本任務(wù)重點(diǎn)介紹中斷允許寄存器IE和中斷優(yōu)先級控制寄存器IP。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備(i)中斷允許寄存器IE51單片機(jī)的5個中斷源都是可以屏蔽中斷的。中斷系統(tǒng)內(nèi)部設(shè)有一個專用寄存器IE,用于控制CPU對各中斷源的開放或屏蔽。IE格式如表2-1,每一位的含義如表2-2所示。位序號D7D6D5D4D3D2D1D0位符號EAXXESET1EX1ET0EX0表2-1中斷允許寄存器IE的格式表2-2中斷允許寄存器IE各位的含義中斷允許位說明EA總中斷允許控制位EA=1,開放所有中斷,各中斷源的允許和禁止可通過相應(yīng)的中斷允許位單獨(dú)加以控制;EA=0,禁止所有中斷。ES串行口中斷允許位ES=1,允許串行口中斷;ES=0禁止串行口中斷。ET1T1中斷允許位ET1=1,允許T1中斷;ET1=0,禁止T1中斷。EX1外部中斷1允許位EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。ET0T0中斷允許位ET0=1,允許T0中斷;ET0=0,禁止T0中斷。EX0外部中斷0允許位EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。任務(wù)一時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備(ii)中斷優(yōu)先級控制寄存器IP51單片機(jī)有兩個中斷優(yōu)先級:高優(yōu)先級和低優(yōu)先級。同一優(yōu)先級別的中斷源采用自然優(yōu)先級。

中斷優(yōu)先級寄存器IP,用于鎖定各中斷源優(yōu)先級控制位。IP中的每一位均可由軟件置位或清零。1表示高優(yōu)先級,0表示低優(yōu)先級。其格式和各位的含義如表2-3和表2-4所示。表2-3中斷優(yōu)先級寄存器IP的格式位序號D7D6D5D4D3D2D1D0位符號XXXPSPT1PX1PT0PX0任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備表2-4中斷優(yōu)先級寄存器IP各位的含義中斷優(yōu)先級控制位說明PS串行口中斷優(yōu)先級控制位PS=1,設(shè)定串行口為高優(yōu)先級中斷;PS=0,設(shè)定串行口為低優(yōu)先級中斷。PT1T1中斷優(yōu)先級控制位PT1=1,設(shè)定定時器T1為高優(yōu)先級中斷;PT1=0,設(shè)定定時器T1為低優(yōu)先級中斷。PX1外部中斷1優(yōu)先級控制位PX1=1,設(shè)定外部中斷1為高優(yōu)先級中斷;PX1=0,設(shè)定外部中斷1為低優(yōu)先級中斷。PT0T0中斷優(yōu)先級控制位PT0=1,設(shè)定定時器T0為高優(yōu)先級中斷;PT0=0,設(shè)定定時器T0為低優(yōu)先級中斷。PX0外部中斷0優(yōu)先級控制位PX0=1,設(shè)定外部中斷0為高優(yōu)先級中斷;PX0=0,設(shè)定外部中斷0為低優(yōu)先級中斷。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備以89C51為代表的微處理器有5個中斷源。外部中斷0(INT0)、外部中斷1(INT1)、定時/計數(shù)器0(T0)、定時/計數(shù)器1(T1)、串行中斷(RI/TI)。中斷的自然優(yōu)先級從高到低依次為:外部中斷0、定時器0中斷、外部中斷1、定時器1中斷、串行口中斷。三、中斷響應(yīng)(1)中斷響應(yīng)條件中斷響應(yīng)條件如下:(i)有中斷源發(fā)出中斷請求;(ii)中斷總允許位EA=1,即CPU開放所有中斷;且申請中斷的中斷源對應(yīng)的中斷允許位為1,即沒被屏蔽;(iii)沒有更高級或同級的中斷正在處理中;(iv)執(zhí)行完當(dāng)前指令。若當(dāng)前指令為返回指令或訪問IP、IE指令,CPU必須在執(zhí)行完當(dāng)前指令后再繼續(xù)執(zhí)行一條指令,然后才響應(yīng)中斷。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備(2)中斷響應(yīng)的過程中斷響應(yīng)過程就是自動調(diào)用并執(zhí)行中斷服務(wù)程序即中斷函數(shù)的過程。(3)中斷響應(yīng)時間中斷響應(yīng)時間是指從中斷請求標(biāo)志位置位到CPU開始執(zhí)行中斷服務(wù)程序的第一條語句所需的時間。四、中斷服務(wù)程序函數(shù)頭的書寫方法C51編譯器支持在C源程序中直接以函數(shù)形式編寫中斷服務(wù)程序。中斷函數(shù)定義形式如下:void函數(shù)名()interruptn其中n為中斷類型號,C51編譯器允許0~31個中斷,n的取值范圍為0~31。

這五個中斷源的中斷標(biāo)志位、優(yōu)先級及中斷類型號、入口地址如表2-5所示。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)知識準(zhǔn)備表2-551系列單片機(jī)中斷源的標(biāo)志位中斷源中斷請求標(biāo)志位中斷類型號n取值入口地址自然優(yōu)先級外部中斷0IE000003H最高級

最低級定時/計數(shù)器T0中斷TF01000BH外部中斷1IE120013H定時/計數(shù)器T1中斷TF13001BH串行口接收/發(fā)送中斷RI、TI40023H任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施子任務(wù)一隨時停止“行云流水”

本任務(wù)要求完成的工作是在流水燈的基礎(chǔ)上加上中斷控制功能。LED流水燈正常工作時循環(huán)點(diǎn)亮,按下中斷按鈕時,8個LED燈同時閃爍8次。本任務(wù)旨在使學(xué)生熟悉單片機(jī)中斷系統(tǒng)及中斷控制功能的實(shí)現(xiàn)方法。中斷源采用的是外部中斷0,接在P3.2上的按鈕實(shí)現(xiàn)中斷觸發(fā)。當(dāng)P3.2為低電平時發(fā)出中斷請求,單片機(jī)接到中斷請求后,根據(jù)中斷控制方式找到相應(yīng)的中斷服務(wù)程序執(zhí)行,當(dāng)中斷服務(wù)程序執(zhí)行完畢后,CPU回到主程序原來斷點(diǎn)接著繼續(xù)執(zhí)行。本任務(wù)在實(shí)施過程中,學(xué)生重點(diǎn)掌握中斷的初始化方法,掌握中斷服務(wù)程序的編程方法,熟悉中斷的執(zhí)行過程。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施1、硬件電路設(shè)計

根據(jù)任務(wù)分析,本電路除了單片機(jī)工作的最小系統(tǒng)外,在P1口接8個發(fā)光二極管,每個LED分別串接一個300歐姆電阻后連接5V電源。連接方式如圖2-2。P3.2即外部中斷0外接一上拉電阻后與電源相連,同時與按鈕相連,按鈕的另一端接地。電路如圖2-2。

圖2-2隨時停止“行云流水”電路的電路圖任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施2、軟件編程主程序設(shè)計

在主程序中首先初始化一些參數(shù),比如,總中斷允許,外部中斷0允許,流水燈初始化時第一個被點(diǎn)亮,在主程序的while循環(huán)中,通過P1端口0的位置左移的方法來輪流點(diǎn)亮LED燈,每次點(diǎn)亮后調(diào)用delay(intnum)函數(shù)延時一段時間。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施voidmain(){EA=1;//總中斷允許EX0=1;//允許外部中斷0中斷IT0=0;//外部中斷0觸發(fā)方式為低電平觸發(fā)P1=0xfe;//點(diǎn)亮第一個燈while(1){delay(100);//延時 P1=P1<<1;//左移一位 P1=P1+1;//點(diǎn)亮左移后的燈 if(P1==0xff){//處理第一個燈的狀態(tài)

P1=0xfe; }}}任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施外部中斷程序設(shè)計

一旦連在外部中斷0上的按鈕被按下,P3.2為低電平,則觸發(fā)外部中斷0產(chǎn)生中斷請求,CPU一旦響應(yīng)后,進(jìn)入外部中斷程序。利用for循環(huán)控制LED燈閃爍8次。

程序如下:voidmyint0()interrupt0{

for(n=0;n<8;n++){//循環(huán)8次

P1=0xff;//燈全滅

delay(100);//延時

P1=0x00;//燈全亮

delay(100);//延時

}}任務(wù)2.1時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施3、仿真調(diào)試

編譯調(diào)試程序下載到仿真電路,運(yùn)行hex,按下外部中斷0連接的按鍵,觀察流水燈運(yùn)行效果。4、開發(fā)板運(yùn)行

將8個led發(fā)光二極管和外部中斷0的控制按鍵如下圖連接,將hex文件下載到開發(fā)板后,按下k1,觀察八個led燈的流水狀態(tài)。圖2-3開發(fā)板連線圖任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施子任務(wù)二

招手即來的“8”

本任務(wù)要求完成的工作是在上一個任務(wù)的基礎(chǔ)上完成對數(shù)碼管顯示的控制。正常情況下,數(shù)碼管的a段led到g段led輪流點(diǎn)亮,按手寫“8”的順序依次點(diǎn)亮數(shù)碼管。當(dāng)按下中斷按鈕開關(guān)后,數(shù)碼管顯示“8”閃爍8次,然后又回到正常狀態(tài)。任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施1、硬件電路設(shè)計

我們按照共陽極數(shù)碼管常規(guī)的連接方法,將P1.0連接a段,P1.1連接b段,依次類推。不帶小數(shù)點(diǎn)的數(shù)碼管為7段led,連接方式如圖2-4。圖2-4共陽極數(shù)碼管與單片機(jī)正常連接圖任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施2、軟件編程

本項目任務(wù)要求顯示順序是按“8”的書寫順序來顯示,即a-f-g-c-d-e-g-b-a,我們可以通過設(shè)置點(diǎn)亮各個led的變量值來方便的控制數(shù)碼管按要求顯示。比如,定義點(diǎn)亮a段led的變量值為unsignedcharledA=0xfe;b段led的變量值為unsignedcharledB=0xfd;依次類推。點(diǎn)亮a段,只需要給P1賦值為ledA即可。這樣按照8的書寫順序點(diǎn)亮a-f-g-c-d-e-g-b的led就是:P1=ledA;P1=ledF;P1=ledG;P1=ledC;P1=ledD;P1=ledE;P1=ledG;P1=ledB;因此在主程序的while(1)循環(huán)中可以這樣編寫代碼:任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施while(1){//a-f-g-c-d-e-g-b-a順序點(diǎn)亮ledP1=ledA;delay(100);//延時P1=ledF;delay(100);//延時P1=ledG;delay(100);//延時P1=ledC;delay(100);//延時P1=ledD;delay(100);//延時P1=ledE;delay(100);//延時P1=ledG;delay(100);//延時

P1=ledB;delay(100);//延時

}任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施

當(dāng)然,我們可以將ledA,ledB,…..ledG的值存在一個數(shù)組disp[]中,然后用for循環(huán)來實(shí)現(xiàn)上面的功能,如此可簡化上面的代碼。unsignedchardisp[]={0xfe,0xdf,0xbf,0xfb,0xf7,0xef,0xbf,0xfd};//分別點(diǎn)亮a-f-g-c-d-e-g-b段led的碼值while(1){

for(k=0;k<8;k++){

P1=disp[k];//分別點(diǎn)亮a-f-g-c-d-e-g-b段led

Delay(100);}}任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施主函數(shù)中與外部中斷相關(guān)的寄存器設(shè)置如下:EA=1;//總中斷允許EX1=1;//允許外部中斷1中斷IT1=0;//外部中斷1觸發(fā)方式為低電平觸發(fā)中斷函數(shù)頭書寫方法為:voidmyint1()interrupt2外部中斷1的中斷類型號n為2。外部中斷1的中斷函數(shù)代碼如下:voidmyint1()interrupt2{for(n=0;n<8;n++){//循環(huán)8次

P1=0xff;//燈全滅

delay(100);//延時

P1=0x00;//燈全亮

delay(100);//延時

}}任務(wù)2.1

時刻準(zhǔn)備著,一呼即應(yīng)任務(wù)實(shí)施3、仿真調(diào)試

把“由中斷控制數(shù)碼管顯示方式”的程序在Proteus仿真軟件中進(jìn)行調(diào)試與仿真,當(dāng)調(diào)試成功后,將其下載到開發(fā)板上運(yùn)行。4、開發(fā)板運(yùn)行

仿真圖中是共陽極數(shù)碼管,在開發(fā)板上按照仿真圖連接數(shù)碼管和外部中斷1按鍵開關(guān),連接方式如圖2-5(a),將hex文件下載到開發(fā)板后,按下k1,觀察數(shù)碼管的運(yùn)行效果2-5(b)。圖2-5開發(fā)板連線圖與運(yùn)行效果項目二智慧交通顯示系統(tǒng)智能控制

馮蓉珍

《微處理器程序設(shè)計》任務(wù)2.2精準(zhǔn)的時間顯示任務(wù)目標(biāo)

隨著科技飛速發(fā)展,微處理器不斷深入我們的生活。本學(xué)習(xí)任務(wù)模擬交通信號燈系統(tǒng)利用典型的AT89S51為核心元件,實(shí)現(xiàn)智能控制路面上的交通信號燈。本任務(wù),根據(jù)實(shí)際情況設(shè)計一套交通信號燈控制系統(tǒng),假設(shè)在十字路口,分為南北向和東西向,在任一時刻,只有一個方向通行,另一方向禁行,持續(xù)一段時間后,經(jīng)過短暫過渡,將通行方向和禁行方向?qū)Q。知識準(zhǔn)備

定時/計數(shù)器是嵌入式計算機(jī)中重要的功能模塊之一,也可用于對外部事件計數(shù)。以51系列為代表的嵌入式計算機(jī)內(nèi)部有兩個16位可編程定時/計數(shù)器,即定時器T0和定時器T1。它們都具有定時和計數(shù)的功能,并由4種工作方式可以選擇。任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備一、定時/計數(shù)器工作原理圖2-7定時器/計數(shù)器工作原理圖

定時/計數(shù)器T0和T1實(shí)質(zhì)上是加1計數(shù)器,即每輸入一個脈沖,計數(shù)器加1,當(dāng)加到計數(shù)器全為1時,再輸入一個脈沖,就使得計數(shù)器歸零,且計數(shù)器溢出使TCON中的標(biāo)志位TF1或TF0置1,向CPU發(fā)出中斷請求。根據(jù)輸入的計數(shù)脈沖來源不同,把它們分成定時與計數(shù)兩種功能。作定時器時,脈沖來自于內(nèi)部時鐘振蕩器;作計數(shù)器時,脈沖來自于外部引腳。任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備(1)定時器模式

在作定時器使用時,輸入脈沖由內(nèi)部振蕩器的輸出經(jīng)過12分頻后送來,因此定時器也可看作是對機(jī)器周期的計數(shù)器。若晶振為12MHz,則機(jī)器周期為1us,定時器每接收一個輸入脈沖的時間為1us;若晶振頻率為6MHz,則一個機(jī)器周期為2us,定時器每接收一個輸入脈沖的時間為2us。因此,確定定時時間,其實(shí)只需要對脈沖進(jìn)行計數(shù)即可。(2)計數(shù)模式在作計數(shù)器使用時,輸入脈沖是由外部引腳P3.4(T0)或P3.5(T1)輸入到計數(shù)器。在每個機(jī)器周期的S5P2期間采樣T0,T1引腳電平。當(dāng)某周期采樣到一高電平輸入,而下一個周期又采樣到一低電平時,則計數(shù)器加1。任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備(3)計數(shù)器位數(shù)計數(shù)器位數(shù)確定了計數(shù)器的最大計數(shù)值M和計數(shù)范圍。n位計數(shù)器的最大計數(shù)值M=2n,計數(shù)范圍為0~2n-1。比如8位計數(shù)器的最大計數(shù)值為M=256,計數(shù)范圍為0~255。二、定時/計數(shù)器的組成以51系列為代表的單片機(jī)內(nèi)部有兩個16位的可編程定時/計數(shù)器T0和T1。其邏輯結(jié)構(gòu)如圖2-8所示。任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備T0、T1是16位加法計數(shù)器,分別由兩個8位專用寄存器組成,T0由TH0和TL0組成,T1由TH1和TL1組成。每個寄存器均可被單獨(dú)訪問,因此可以被設(shè)置為8位、13位或16位計數(shù)器使用。定時/計數(shù)器允許用戶編程設(shè)定開始計數(shù)的數(shù)值,稱為賦初值。初值不同,則計數(shù)器產(chǎn)生溢出時,計數(shù)個數(shù)也不同。例如:對于8位計數(shù)器,計數(shù)最大值為256。當(dāng)初值設(shè)為100時,再加1計數(shù)156個,計數(shù)器就產(chǎn)生溢出;當(dāng)初值設(shè)為200時,再加1計數(shù)56個,計數(shù)器產(chǎn)生溢出。初值計算方法:假設(shè)晶振頻率為12MHz,那么計數(shù)頻率f計數(shù)=12MHZ/12=1MHz;計數(shù)周期為T計數(shù)=1/f計數(shù)=1us;如果需要定時1ms,那么計數(shù)個數(shù)count=1ms/1us=1000,任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備假設(shè)使用16位計數(shù)器,則初值=216-1000=65536-1000=64536。假設(shè)由定時/計數(shù)器T0進(jìn)行定時/計數(shù),則兩個寄存器的初值分別為:TH0=64536/256;TL0=64536%256。三、定時/計數(shù)器工作方式寄存器TMODTMOD為定時/計數(shù)器工作方式寄存器,其格式為表2-8表2-8定時/計數(shù)器工作方式寄存器TMOD的格式位序號D7D6D5D4D3D2D1D0位符號GATEC/TM1M0GATEC/TM1

M0T1T0任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備假設(shè)使用16位計數(shù)器,則初值=216-1000=65536-1000=64536。假設(shè)由定時/計數(shù)器T0進(jìn)行定時/計數(shù),則兩個寄存器的初值分別為:TH0=64536/256;TL0=64536%256。三、定時/計數(shù)器工作方式寄存器TMODTMOD為定時/計數(shù)器工作方式寄存器,其格式為表2-8表2-8定時/計數(shù)器工作方式寄存器TMOD的格式TMOD的低4位為T0的工作方式字段,高4位為T1的工作方式字段,它們的含義如表2-9所示。位序號D7D6D5D4D3D2D1D0位符號GATEC/TM1M0GATEC/TM1

M0T1T0任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備表2-9工作方式選擇位含義M1M0工作方式功能說明00方式013位計數(shù)器01方式116位計數(shù)器10方式2初值自動重載8位計數(shù)器11方式3T0:分成兩個獨(dú)立的8位計數(shù)器T1:停止計數(shù)工作方式0為由THx的高8位和TLx的低5位組成13位計數(shù)器。(x取值為0或1);工作方式1為由THx的高8位和TLx的低8位組成16位計數(shù)器。(x取值為0或1);工作方式2為8位定時/計數(shù)器,初值由TLx決定,THx的值和TLx一致。每次中斷結(jié)束后都會將THx的值自動沖載到TLx寄存器中。(x取值為0或1);任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備

當(dāng)工作在方式3時,定時/計數(shù)器T0被拆成兩個獨(dú)立的8位定時/計數(shù)器使用,T1停止計數(shù)。TL0所對應(yīng)的定時/計數(shù)器使用T0原來的資源,即使用TR0控制啟動,TF0作為溢出標(biāo)志。TH0對應(yīng)的定時/計數(shù)器借用T1的資源TR1和TF1。只有T0可以設(shè)置為工作方式3,T1設(shè)置為工作方式3時不工作。

說明:當(dāng)T0在工作方式3時,T1仍然可以設(shè)置為方式0,方式1和方式2.但由于TR1,TF1和T1的中斷源已被T0占用,因此,定時器T1僅由控制位C/T切換其定時或計數(shù)功能。當(dāng)計數(shù)器計滿溢出時,只能將輸出送往串行口。在這種情況下,T1一般用作串行口波特率發(fā)生器或不需要中斷的場合。因T1的TR1被占用,當(dāng)設(shè)置好工作方式后,T1自動開始計數(shù),當(dāng)送入一個設(shè)置T1為工作方式3的方式字后,T1停止計數(shù)。每種工作方式的邏輯電路如圖2-8和圖2-9所示任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備表2-10其他各位含義控制位功

明C/T功能選擇位C/T=0時,設(shè)定為定時器工作方式;C/T=1時,設(shè)定為計數(shù)器工作方式。GATE門控位GATE=0時,軟件啟動方式,將TCON寄存器中的TR0或TR1置1即可啟動相應(yīng)定時器;當(dāng)GATE=1時,軟硬件共同啟動方式,軟件控制TR0或TR1置1的同時,還需要INT0(P3.2)或INT1(P3.3)為高電平才可啟動相應(yīng)定時器,即允許外部中斷0或外部中斷1啟動定時器。任務(wù)二精準(zhǔn)的時間顯示知識準(zhǔn)備四、定時/計數(shù)器控制寄存器TCON

該寄存器既有定時/計數(shù)器的控制功能又有中斷控制功能。TCON可以位尋址,即對寄存器的每一位可進(jìn)行單獨(dú)操作。復(fù)位時TCON全部被清0。表2-11為TCON的格式;表2-12為TCON各位的定義。

表2-11定時/計數(shù)器控制寄存器TCON的格式位序號D7D6D5D4D3D2D1D0位符號TF1TR1TF0TR0IE1IT1IE0IT0任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備表2-12定時/計數(shù)器控制寄存器TCON各位的意義位符號說明功

能TF1T1溢出標(biāo)志位T1被啟動計數(shù)后,從初值開始加1計數(shù),計數(shù)滿溢出后由硬件置位TF1,同時向CPU發(fā)出中斷請求,此標(biāo)志一直保持到CPU響應(yīng)中斷后才由硬件自動清零。也可由軟件查詢該標(biāo)志,并由軟件清零。TR1T1運(yùn)行控制位由軟件清零關(guān)閉定時器1。即TR1=0,關(guān)閉定時器1。當(dāng)GATE=0時,TR1軟件置1即啟動定時器1。當(dāng)GATE=1時,且INT1為高電平時,TR1置1啟動定時器1TF0T0溢出標(biāo)志位T0被啟動計數(shù)后,從初值開始加1計數(shù),計數(shù)滿溢出后由硬件置位TF0,同時向CPU發(fā)出中斷請求,此標(biāo)志一直保持到CPU響應(yīng)中斷后才由硬件自動清零。也可由軟件查詢該標(biāo)志,并由軟件清零。TR0T0運(yùn)行控制位由軟件清零關(guān)閉定時器0。即TR0=0,關(guān)閉定時器0。當(dāng)GATE=0時,TR0軟件置1即啟動定時器0。當(dāng)GATE=1時,且INT0為高電平時,TR0置1啟動定時器0IE1外部中斷1請求標(biāo)志位IE1=1,外部中斷1向CPU申請中斷(硬件置1),當(dāng)CPU響應(yīng)中斷后,由硬件自動清零。IT1外部中斷1觸發(fā)方式選擇位IT1=1,下降沿觸發(fā)方式;IT1=0,低電平觸發(fā)方式,該位由軟件置位或清除。IE0外部中斷0請求標(biāo)志位IE0=1,外部中斷0向CPU申請中斷(硬件置1),當(dāng)CPU響應(yīng)中斷后,由硬件自動清零。IT0外部中斷0觸發(fā)方式選擇位IT0=1,下降沿觸發(fā)方式;IT0=0;低電平觸發(fā)方式,該位由軟件置位或清除。任務(wù)2.2

精準(zhǔn)的時間顯示知識準(zhǔn)備五、定時/計數(shù)器的工作過程(1)設(shè)置定時/計數(shù)器工作方式。通過設(shè)置TMOD,確定相應(yīng)的定時/計數(shù)器是定時功能還是計數(shù)功能,確定工作方式及啟動方式。(2)設(shè)置計數(shù)初值。定時時間=(2n-X)*12/fosc;其中n為計數(shù)位數(shù);X為初始值,fosc為晶振頻率。THM=X/256;TLM=X%256,M為0或1(3)啟動定時/計數(shù)器。根據(jù)第(1)步中設(shè)置的啟動方式啟動定時/計數(shù)器。(4)計數(shù)溢出。一旦計數(shù)溢出,溢出標(biāo)志位TF1或TF0會置1,通知用戶定時/計數(shù)器已經(jīng)計滿,用戶可以通過查詢溢出標(biāo)志位的狀態(tài)或者中斷方式進(jìn)行操作。任務(wù)2.2精準(zhǔn)的時間顯示任務(wù)實(shí)施子任務(wù)一分秒不差的秒表設(shè)計

現(xiàn)在計時搶答類娛樂節(jié)目中,通常會用到由兩位數(shù)碼管顯示計時時間,或者是由一分鐘倒計時,哪位選手用時最短,剩余時間最多者獲勝。主持人通過按下計時按鈕開始倒計時,選手按下停止按鈕,停止計時,數(shù)碼管顯示的時間即為剩余時間。一旦倒計時到0秒,沒有選手按下停止按鈕,則會點(diǎn)亮某個LED燈以示報警。本項目要求完成的工作是分解出60秒倒計時的工作過程及控制方法,完成硬件電路設(shè)計和軟件編程。通過單片機(jī)的兩個外部中斷和定時器中斷實(shí)現(xiàn)60S倒計時控制,以模擬仿真生活中真實(shí)的倒計時顯示效果。本項目主要采用中斷方式進(jìn)行外部中斷和定時器中斷控制,由此使學(xué)生加深對中斷的理解,為后面的綜合應(yīng)用打下夯實(shí)的基礎(chǔ)。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施1、硬件電路設(shè)計

根據(jù)任務(wù)說明及工作內(nèi)容及要求,通過具體分析,設(shè)計如下圖2-10所示電路。圖2-1160s倒計時秒表電路圖

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施2、60S倒計時秒表程序設(shè)計1)主程序設(shè)計在主程序中需要對TMOD、TCON、TH0、TL0等寄存器進(jìn)行初始化。首先確定選用定時/計數(shù)器0作為定時器,工作方式設(shè)定為方式1,16位計數(shù)器,使用12MHz晶振,每次定時器定時時間為10毫秒。(1)定時器T0工作方式設(shè)置:TMOD=00000001B;即TMOD=0X01;T0工作方式1;(2)初始值計算:10ms=(216-X)*12/12MHz;其中X為初始值X=65536-10*10-3/(1*10-6)=55536;因此,TH0=55536/256;TL0=55536%256;任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施(3)優(yōu)先級設(shè)定考慮到實(shí)際應(yīng)用情況,當(dāng)按下連接在外部中斷1上K3按下后,應(yīng)立即停止計時,因此外部中斷1的優(yōu)先最高;外部中斷0和定時/計數(shù)器0按自然優(yōu)先級排序即可。因此,PX1=1;PX0=0;PT0=0;(4)打開中斷總開關(guān),同時允許外部中斷0和外部中斷1,定時器T0中斷,因此EA=1;EX1=1;EX0=1;ET0=1;(5)P1和P2端口輸出全0,使得數(shù)碼管SMG1、SMG2分別顯示8。因此,P1=0X00;P2=0X00;(6)設(shè)定時間顯示的初始值為60;因此定義seconds=60。(7)循環(huán)體設(shè)計主程序除了進(jìn)行一些寄存器的初始化設(shè)置和一些變量初始化外,就進(jìn)入while(1)的死循環(huán)中,循環(huán)顯示當(dāng)前的時間秒數(shù),并等待外部中斷0、外部中斷1和定時器中斷的產(chǎn)生。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施2)外部中斷0程序設(shè)計當(dāng)按下K2觸發(fā)外部中斷0提出請求,啟動T0開始計時,即TR0=1;每次按下K2都是從60S開始倒計時,因此seconds=60;3)外部中斷1程序設(shè)計當(dāng)按下K3觸發(fā)外部中斷1提出請求,停止T0計時,及TR0=0;4)定時器T0中斷程序設(shè)計T0的定時時間為10毫秒,就是說每10ms,定時器會觸發(fā)一次定時中斷,如果需要定時1秒,就需要觸發(fā)100次,因此用變量n來統(tǒng)計觸發(fā)的次數(shù),當(dāng)n>=100,表示1秒時間到,此時需要將顯示秒數(shù)減1,并獲取顯示的十位和各位數(shù)字。若定義shi表示十位數(shù),ge表示個位數(shù),則shi=seconds/10;ge=seconds%10;任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施5)數(shù)碼管顯示數(shù)字的程序設(shè)計

考慮到用共陽極7段數(shù)碼管,將數(shù)碼管顯示0-9的碼值存放到數(shù)組table中,數(shù)字0的碼值為0xc0;則table[0]=0xc0;那么如果希望SMG1顯示0的話,只需要設(shè)置P1=table[0]即可,以此類推。3、程序調(diào)試與仿真4、開發(fā)板運(yùn)行圖2-1360s倒計時秒表開發(fā)板連線及運(yùn)行效果任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施子任務(wù)二奇妙的信號燈顯示

本項目要完成的工作是分解出交通信號燈工作順序和控制狀態(tài)方式,完成交通信號燈的硬件設(shè)計和軟件設(shè)計。通過單片機(jī)控制外圍電路點(diǎn)亮發(fā)光二極管,模擬仿真生活中真實(shí)的交通信號燈顯示效果。本項目對交通信號燈控制過程中,主要采用位操作,通過對某一位的置位或清零來完成基本信號燈的亮滅控制,由此加深學(xué)生對位操作的理解,為以后的應(yīng)用打下夯實(shí)的基礎(chǔ)。由于接在端口的各個信號燈狀態(tài)不同,采用位操作優(yōu)勢明顯。因此,本項目注重對位操作的使用,同時提高對項目任務(wù)的分析能力,抓住解決問題的關(guān)鍵點(diǎn)。任務(wù)2.2精準(zhǔn)的時間顯示任務(wù)實(shí)施1、硬件電路設(shè)計思路

根據(jù)任務(wù)說明及工作內(nèi)容及要求,通過具體分析,設(shè)計如下圖2-14所示電路。

根據(jù)分析,東西南北每個方向有3個燈,一共有12個燈,可以分別連接到單片機(jī)的P0的8個端口和P3的4個端口。但是在實(shí)際應(yīng)用中考慮到單片機(jī)帶負(fù)載能力,通常需要在端口和led燈之間連接反相器或其他驅(qū)動電路。圖2-14利用可編程通用并行接口8255實(shí)現(xiàn)單片機(jī)對信號燈的控制圖

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施2、交通信號燈硬件設(shè)計

本項目使用單片機(jī)的端口直接連接LED燈來模擬仿真交通信號燈控制。如圖2-15所示。和數(shù)碼管連接的電阻參數(shù)設(shè)置為470歐姆,和led串聯(lián)的電阻參數(shù)設(shè)置為300歐姆。P0端口接300歐姆的排阻后連接+5V電源。圖2-15交通信號燈控制系統(tǒng)硬件電路圖任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施3、交通信號燈控制程序設(shè)計(1)交通信號燈控制程序由表2-14可知,交通信號燈控制狀態(tài)有6中方式,即東西方向和南北方向兩組信號燈有6中工作形式,表中“0”對應(yīng)燈點(diǎn)亮,“1”對應(yīng)燈熄滅。由于單片機(jī)的并行端口都可以進(jìn)行位操作,因此采用sbitledR_N=P0^2;來定義北面的紅燈連接的是P0的2號端口。表2-16列出了12個燈連接的每個端口的位定義。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施表2-16信號燈與端口連接的位定義路口信號燈位變量名對應(yīng)端口東面綠燈ledG_EP3.1東面黃燈ledY_EP3.4東面紅燈ledR_EP3.5西面綠燈ledG_WP0.6西面黃燈ledY_WP0.7西面紅燈ledR_WP3.0南面綠燈ledG_SP3.3南面綠燈ledY_SP3.4南面紅燈ledR_SP3.5北面綠燈ledG_NP0.0北面黃燈ledY_NP0.1北面紅燈ledR_NP0.2任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施各狀態(tài)程序:狀態(tài)1:東西向綠燈亮,南北向紅燈亮,其他燈都不亮;ledR_N=0;ledR_S=0;ledG_E=0;ledG_W=0;其他位變量均為1;狀態(tài)2:東西向綠燈閃爍;南北向紅燈亮,其他燈都不亮狀態(tài)3:東西向黃燈亮,南北向紅燈亮,其他燈都不亮:ledY_E=0;ledY_W=0;ledR_N=0;ledR_S=0;其他位變量為1;狀態(tài)4:東西向紅燈亮,南北向綠燈亮,其他燈都不亮;ledR_E=0;ledR_W=0;ledG_N=0;ledG_S=0;其他位變量為1;狀態(tài)5:南北向綠燈閃爍;東西向紅燈亮,其他燈都不亮狀態(tài)6:東西向紅燈亮,南北向黃燈亮,其他燈都不亮;ledR_E=0;ledR_W=0;ledY_N=0;ledY_S=0;其他位變量為1;任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施設(shè)計思路:狀態(tài)5的情況和狀態(tài)2類似,下面分析狀態(tài)2的設(shè)計思路。利用定時器計時0.5S燈亮0.5S燈滅來實(shí)現(xiàn)綠燈閃爍利用12MHz晶振,定時/計數(shù)器T0工作方式1(16位計數(shù)器),定時時間為50ms;A)TMOD=00000001b,設(shè)置定時器工作方式1;B)定時初值設(shè)置X:50ms=(216-X)*12/12MHz得到X=65536-50000=15536;因此TH0=15536/256;TL0=15536%256;C)0.5S為10個50ms,因此10次定時器T0中斷即為0.5S,所以10次中斷后控制燈亮,再10次中斷后控制燈滅,上面的循環(huán)3次為3s定時器T0中斷程序?yàn)椋喝蝿?wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施voidmyto()interrupt1using0{TH0=15536/256;//對于12MHz晶振,定時50ms的初始值TL0=15536%256;//50000=65536-Xn1++;//統(tǒng)計中斷次數(shù),n1為0.5S的計數(shù)次數(shù),n2++;//n2為1s的計數(shù)次數(shù)if(n1>=10){//0.5S計時到,控制黃燈狀態(tài)的標(biāo)志位翻轉(zhuǎn)label=!label;n1=0;}if(n2>=20){//1S計時到,時間變量減1n2=0;seconds--;//時間秒數(shù)減1 if(seconds==5){step++;//進(jìn)入第2個或第5個狀態(tài)

}任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施if(seconds==2){step++;//進(jìn)入第3個或第6個狀態(tài)}if(seconds<=0){//進(jìn)入第4個或第1個狀態(tài)step++;if(step>=7){ step=1;}seconds=30;}}}定時器T0中斷程序負(fù)責(zé)狀態(tài)的切換。6個狀態(tài)下的燈的亮滅在主程序的while()循環(huán)中完成,根據(jù)注釋,不難理解程序的含義。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施while(1){switch(step){//step標(biāo)志交通信號燈所處在的狀態(tài) case1://狀態(tài)1 //東西向綠燈亮,南北向紅燈亮 ledR_N=0;ledR_S=0; ledG_E=0;ledG_W=0;

//東西南北向黃燈熄滅

ledY_E=1;ledY_W=1;ledY_N=1; ledY_S=1;

//東西向紅燈滅,南北向綠燈滅

ledG_N=1;ledG_S=1;ledR_W=1;ledR_E=1; break; case2://東西綠燈閃爍,南北紅燈亮

ledR_N=0;ledR_S=0;

if(label){

ledG_E=0;ledG_W=0;

}else{

ledG_E=1;ledG_W=1;

}

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施//東西南北黃燈熄滅

ledY_E=1; ledY_W=1; ledY_N=1; ledY_S=1;//南北綠燈和東西紅燈熄滅

ledG_N=1; ledG_S=1; ledR_W=1; ledR_E=1;

break;

case3://東西黃燈亮,南北紅燈亮,其他熄滅

ledY_E=0;ledY_W=0;ledR_N=0;ledR_S=0;//東南西北綠燈熄滅

ledG_E=1;ledG_W=1;ledG_N=1;ledG_S=1;//東西紅燈滅,南北黃燈滅;

ledR_E=1;ledR_W=1;ledY_N=1;ledY_S=1;

break; case4://南北向綠燈亮,東西向紅燈亮

ledR_E=0; ledR_W=0;ledG_N=0; ledG_S=0;

//東西南北向黃燈熄滅

ledY_E=1; ledY_W=1;ledY_E=1; ledY_W=1;

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施//南北向紅燈滅,東西向綠燈滅

ledG_W=1; ledG_E=1;ledR_N=1; ledR_S=1; break;case5://南北綠燈閃爍,東西紅燈亮ledR_E=0;ledR_W=0;

if(label){ledG_N=0;ledG_S=0;}else{ledG_N=1;ledG_S=1;}

ledY_N=1;ledY_S=1;ledY_E=1;ledY_W=1;

ledR_N=1;ledR_S=1;ledG_E=1;ledG_W=1; break;

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施

case6://南北黃燈亮,東西紅燈亮,其他熄滅ledY_N=0;ledY_S=0;ledR_E=0;ledR_W=0;//東南西北綠燈熄滅ledG_E=1;ledG_W=1;ledG_N=1;ledG_S=1;//南北紅燈滅,東西黃燈滅;ledR_N=1;ledR_S=1;ledY_E=1;ledY_W=1; break;default:break;

}}4、仿真調(diào)試

根據(jù)交通信號燈控制系統(tǒng)的任務(wù)說明及本任務(wù)的工作內(nèi)容和要求,把交通信號燈控制系統(tǒng)設(shè)計分解成以下幾個部分:(1)根據(jù)前面的任務(wù),將信號燈的工作狀態(tài)和顯示電路連接起來,構(gòu)成一個完整的交通信號燈控制系統(tǒng)的硬件電路;硬件電路圖如圖2-16任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施圖2-16交通信號燈控制系統(tǒng)仿真運(yùn)行效果圖任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施4、開發(fā)板運(yùn)行

把本程序在Proteus仿真軟件中進(jìn)行調(diào)試與仿真,當(dāng)調(diào)試成功后,因?yàn)殚_發(fā)板上數(shù)碼管的連接方式和圖2-16不一樣。所以需要根據(jù)開發(fā)板的硬件連接對程序進(jìn)行修改后下載到開發(fā)板上運(yùn)行才能得到想要的結(jié)果。我們來看下開發(fā)板的硬件電路圖,圖2-17所示。圖2-17開發(fā)板的硬件電路圖任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施

顯示時間的十位和個位數(shù)字的兩個數(shù)碼管的7段LED同時連接在P0端口上,十位數(shù)字的數(shù)碼管的電源連接在三極管Q1(PN4249)的集電極上,個位數(shù)字的數(shù)碼管的電源連接在三極管Q2(PN4249)的集電極上。Q1的基極連接在三八譯碼器的Y0端口,Q2的基極連接在在三八譯碼器的Y1端口。三八譯碼器的ABC端分別連接P2.0,P2.1,P2.2,當(dāng)P2.2,P2.1,P20端口輸出電平為000時,Y0輸出低電平,Q1導(dǎo)通,Q1的集電極為高電平,顯示時間的十位數(shù)字?jǐn)?shù)碼管接通電源,顯示的數(shù)字由P0端口的狀態(tài)決定。同理,當(dāng)P2.2,P2.1,P20端口輸出電平為001時,Y1輸出低電平,Q2導(dǎo)通,,顯示時間的個位數(shù)字的數(shù)碼管電源接通,由P0端口的狀態(tài)決定個位數(shù)字的顯示。我們只要通過控制P2.0、P2.1和P2.2電平,這樣,十位和個位數(shù)字的數(shù)碼管就輪流被接通電源,可以輪流顯示數(shù)字??刂戚喠黠@示的頻率大于50Hz,由于人眼的視覺暫留,會感覺到兩個數(shù)碼管是同時顯示數(shù)字的。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施將主程序的while循環(huán)中添加對數(shù)碼管倒計時顯示的控制代碼修改后如下:while(1){//數(shù)碼管顯示 c=0;b=0;a=0; //P0=table[shi];//適用共陽極數(shù)碼管

P0=~table[shi];//開發(fā)板上用共陰極數(shù)碼管, //對共陽極數(shù)碼管的碼值取反即可用于共陰極數(shù)碼管顯示 delay(5); c=0;b=0;a=1; //P0=table[ge]; P0=~table[ge]; delay(5);//以下同仿真控制的代碼,只是在開發(fā)板上南北向用三個不同色的led表示,東西向用三個不同色的led表示。任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施//信號燈狀態(tài)switch(step){ //1-20s-10s南北向綠燈亮,東西向紅燈亮

case1: ledG_N=0; ledY_N=1; ledR_N=1; ledG_W=1; ledY_W=1; ledR_W=0; break;case2:……….}在程序開始根據(jù)二組紅綠黃led所連接的硬件,進(jìn)行位定義,如下:sbitledG_N=P1^2;//綠sbitledY_N=P1^3;//黃sbitledR_N=P1^4;//紅

任務(wù)2.2

精準(zhǔn)的時間顯示任務(wù)實(shí)施sbitledG_W=P1^5;//綠sbitledY_W=P1^6;//黃sbitledR_W=P1^7;//紅位定義控制三八譯碼器的三個端口,如下:sbita=P2^0;sbitb=P2^1;sbitc=P2^2;外部中斷0啟動定時器,外部中斷1停止定時器0。將修改后的程序進(jìn)行編譯,生成的hex文件下載到開發(fā)板中運(yùn)行。圖2-18開發(fā)板連線圖和運(yùn)行效果圖

項目二智慧交通顯示系統(tǒng)智能控制

馮蓉珍

《微處理器程序設(shè)計》任務(wù)2.3更高級的顯示任務(wù)目標(biāo)

日常生活中,由液晶屏和點(diǎn)陣屏顯示各種信息無所不在。本學(xué)習(xí)任務(wù)模擬校園點(diǎn)陣屏和液晶屏顯示學(xué)校校名和校訓(xùn)。

通過幾個子任務(wù)的操作訓(xùn)練和相關(guān)知識的學(xué)習(xí),使學(xué)生熟悉微處理器端口控制的工作原理,掌握對點(diǎn)陣屏和液晶屏的控制方法,鞏固GPIO的控制與使用。熟悉微處理器開發(fā)的基本過程。知識準(zhǔn)備1、LED點(diǎn)陣屏的基本知識LED點(diǎn)陣是由發(fā)光二極管排列組成的顯示器件,在我們?nèi)粘I畹碾娖髦须S處可見,被廣泛應(yīng)用于汽車報站器,廣告屏等圖2-19LED點(diǎn)陣屏顯示圖任務(wù)三更高級的顯示知識準(zhǔn)備

通常應(yīng)用較多的是8*8點(diǎn)陣,然后使用多個8*8點(diǎn)陣可組成不同分辨率的LED點(diǎn)陣顯示屏,比如16*16點(diǎn)陣可以使用4個8*8點(diǎn)陣構(gòu)成。因此理解了8*8LED點(diǎn)陣的工作原理,其他分辨率的LED點(diǎn)陣顯示屏都是一樣的。這里以8*8LED點(diǎn)陣來做介紹。其內(nèi)部結(jié)構(gòu)圖如下所示:圖2-20點(diǎn)陣連接方式圖任務(wù)2.3

更高級的顯示知識準(zhǔn)備8*8點(diǎn)陣共由64個發(fā)光二極管組成,且每個發(fā)光二極管是放置在行線和列線的交叉點(diǎn)上,當(dāng)對應(yīng)的某一行置1電平,某一列置0電平,則相應(yīng)的二極管就亮;如要將第一個點(diǎn)點(diǎn)亮,則1腳接高電平a腳接低電平,則第一個點(diǎn)就亮了;如果要將第一行點(diǎn)亮,則第1腳要接高電平,而(a、b、c、d、e、f、g、h)這些引腳接低電平,那么第一行就會點(diǎn)亮;如要將第一列點(diǎn)亮,則第a腳接低電平,而(1、2、3、4、5、6、7、8)接高電平,那么第一列就會點(diǎn)亮。由此可見,LED點(diǎn)陣的使用也是非常簡單的。任務(wù)2.3

更高級的顯示知識準(zhǔn)備2、LCD1602液晶屏基本知識(1)LCD1602簡介1602液晶也叫1602字符型液晶,它能顯示2行字符信息,每行又能顯示16個字符。它是一種專門用來顯示字母、數(shù)字、符號的點(diǎn)陣型液晶模塊。它是由若干個5x7或者5x10的點(diǎn)陣字符位組成,每個點(diǎn)陣字符位都可以用顯示一個字符,每位之間有一個點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱耍运荒芎芎玫娘@示圖片。其實(shí)物圖如下所示:圖2-21LCD1602實(shí)物圖任務(wù)2.3

更高級的顯示知識準(zhǔn)備表2-17LCD1602引腳定義任務(wù)2.3

更高級的顯示知識準(zhǔn)備3腳:VL,液晶顯示偏壓信號,用于調(diào)整LCD1602的顯示對比度,一般會外接電位器用以調(diào)整偏壓信號,注意此腳電壓為0時可以得到最強(qiáng)的對比度。4腳:RS,數(shù)據(jù)/命令選擇端,當(dāng)此腳為高電平時,可以對1602進(jìn)行數(shù)據(jù)字節(jié)的傳輸操作,而為電平時,則是進(jìn)行命令字節(jié)的傳輸操作。命令字節(jié),即是用來對LCD1602的一些工作方式作設(shè)置的字節(jié);數(shù)據(jù)字節(jié),即使用以在1602上顯示的字節(jié)。值得一提的是,LCD1602的數(shù)據(jù)是8位的。5腳:R/W,讀寫選擇端。當(dāng)此腳為高電平可對LCD1602進(jìn)行讀數(shù)據(jù)操作,反之進(jìn)行寫數(shù)據(jù)操作。6腳:E,使能信號,其實(shí)是LCD1602的數(shù)據(jù)控制時鐘信號,利用該信號的上升沿實(shí)現(xiàn)對LCD1602的數(shù)據(jù)傳輸。7~14腳:8位并行數(shù)據(jù)口,而51單片機(jī)一組IO也是8位,使得對LCD1602的數(shù)據(jù)讀寫大為方便。任務(wù)2.3

更高級的顯示知識準(zhǔn)備在LCD1602內(nèi)部含有80個字節(jié)的DDRAM,它是用來寄存顯示字符的。其地址和屏幕的對應(yīng)關(guān)系如下表:圖2-22LCD1602內(nèi)部DDRAM地址和屏幕對應(yīng)關(guān)系圖

任務(wù)2.3

更高級的顯示知識準(zhǔn)備(2)LCD1602常用指令在使用LCD1602時,我們需要掌握一些常用的指令,這些指令對于LCD1602初始化是必須的。(a)清屏指令功能:<1>清除液晶顯示器,即將DDRAM的內(nèi)容全部填入"空白"的ASCII碼20H;<2>光標(biāo)歸位,即將光標(biāo)撤回液晶顯示屏的左上方;<3>將地址計數(shù)器(AC)的值設(shè)為0。任務(wù)2.3

更高級的顯示知識準(zhǔn)備(b)模式設(shè)置指令功能:設(shè)定每次寫入1位數(shù)據(jù)后光標(biāo)的移位方向,并且設(shè)定每次寫入的一個字符是否移動。I/D:0=寫入新數(shù)據(jù)后光標(biāo)左移;1=寫入新數(shù)據(jù)后光標(biāo)右移S:0=寫入新數(shù)據(jù)后顯示屏不移動;1=寫入新數(shù)據(jù)后顯示屏整體右移1個字符任務(wù)2.3

更高級的顯示知識準(zhǔn)備(c)顯示開關(guān)控制指令功能:控制顯示器開/關(guān)、光標(biāo)顯示/關(guān)閉以及光標(biāo)是否閃爍。D:0=顯示功能關(guān);1=顯示功能開C:0=無光標(biāo);1=有光標(biāo)B:0=光標(biāo)閃爍;1=光標(biāo)不閃爍任務(wù)2.3

更高級的顯示知識準(zhǔn)備(d)功能設(shè)定指令功能:設(shè)定數(shù)據(jù)總線位數(shù)、顯示的行數(shù)及字型。DL:0=數(shù)據(jù)總線為4位;1=數(shù)據(jù)總線為8位N:0=顯示1行;1=顯示2行F:0=5×7點(diǎn)陣/每字符;1=5×10點(diǎn)陣/每字符任務(wù)2.3

更高級的顯示知識準(zhǔn)備3)LCD1602使用使用LCD1602,首先需要對其初始化,即通過寫入一些特定的指令實(shí)現(xiàn)。然后選擇要在LCD1602的哪個位置顯示并將所要顯示的數(shù)據(jù)發(fā)送到LCD的DDRAM。使用LCD1602通常都是用于寫數(shù)據(jù)進(jìn)去,很少使用讀功能。LCD1602操作步驟如下所示:(1)初始化(2)寫命令(RS=L),設(shè)置顯示坐標(biāo)(3)寫數(shù)據(jù)(RS=H)在此,不需要讀出它的數(shù)據(jù)的狀態(tài)或者數(shù)據(jù)本身。所以只需要看兩個寫時序:任務(wù)2.3

更高級的顯示任務(wù)實(shí)施子任務(wù)一滾動的“愛心”顯示-LED點(diǎn)陣屏顯示在智慧校園的LED點(diǎn)陣屏上顯示一個圖形或字符,并且可以上下滾動顯示。

本任務(wù)要求完成的工作是分解出點(diǎn)陣顯示的原理,利用仿真軟件實(shí)現(xiàn)在一個8×8的LED點(diǎn)陣屏上顯示圖形或字符。學(xué)生逐步加深對LED點(diǎn)陣屏顯示的理解,并能顯示自己想要顯示的內(nèi)容,為后面的綜合應(yīng)用打下夯實(shí)的基礎(chǔ)。

利用8×8點(diǎn)陣,8列信號連接微處理器的P0端口,8行信號連接74LS245驅(qū)動芯片后連接微處理器的P1端口。若P1端口輸出低電平,P0端口輸出高電平,則對應(yīng)的LED燈被點(diǎn)亮,畫出“愛心”圖。

在此基礎(chǔ)上,讓“愛心”圖上下滾動顯示,使顯示具有動感。

任務(wù)2.3

更高級的顯示任務(wù)實(shí)施1、硬件電路設(shè)計圖2-24電路圖

任務(wù)2.3

更高級的顯示任務(wù)實(shí)施2、軟件編程P1端口控制行,連接LED燈的陰極,P0端口控制列,連接LED燈的陽極。畫出“愛心”圖在點(diǎn)陣屏中的排列,LED點(diǎn)陣屏顯示“愛心”圖如圖2-25所示.

unsignedcharcol[8]={0x00,0xee,0xbb,0x83,0xc6,0x7c,0x38,0x00};unsignedcharrow[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};voidmain(){while(1){for(k=0;k<8;k++){

P1=row[k];

P0=col[k];

delay(1);

}}}圖2-25LED點(diǎn)陣屏顯示

“愛心”圖

任務(wù)2.3

更高級的顯示任務(wù)實(shí)施3、仿真調(diào)試圖2-26仿真運(yùn)行效果圖任務(wù)2.3

更高級的顯示任務(wù)實(shí)施4、“愛心”滾動顯示軟件編程

“愛心”滾動顯示,其實(shí)就是分多屏顯示。第一屏上面7行l(wèi)ed都不亮,第8行顯示“愛心”的第一行的內(nèi)容0x00。心形的8行顯示的內(nèi)容,在數(shù)組中為unsignedcharcol[8]={0x00,0xee,0xbb,0x83,0xc6,0x7c,0x38,0x00};

因此需要在col數(shù)組中增加7個0x00,表示第一屏的7行,

第一屏8行的內(nèi)容分別為{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};數(shù)組中第一個元素表示第一行8列的狀態(tài),第二個元素表示第二行8列的狀態(tài),依次類推。

第二屏8行的顯示內(nèi)容為第一屏的第一行移出去,第一屏的第二行為第二屏的第一行,即第1到第6行為黑屏,第7行為心形的第一行,第8行為心形的第二行,在數(shù)組中具體值為{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee}。

第三屏的內(nèi)容為第二屏的第一行移出去,第二屏的第二行為第三屏的第一行,依次類推,具體值為{0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xbb}。

心形從下往上移動一共會出現(xiàn)15屏。任務(wù)2.3

更高級的顯示任務(wù)實(shí)施4、“愛心”滾動顯示軟件編程

當(dāng)心形的最后一行出現(xiàn)在點(diǎn)陣屏的第一行時,第2到第8行為全黑,第1行為心形的最后一行的值,因此需要在col數(shù)組中添加7個元素0x00,表示每行都不顯示,因此col數(shù)組元素為22個。unsignedcharcol[22]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xee,0xbb,0x83,0xc6,0x7c,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};在心形數(shù)組的前面和后面分別加7個0x00,增加14行0x00。row[8]數(shù)組中元素不變,依次給每一行提供低電平,每一行上對應(yīng)的列為高電平時,對應(yīng)的點(diǎn)就被點(diǎn)亮。利用雙重循環(huán)來實(shí)現(xiàn)“愛心”的從下往上滾動顯示。for(m=0;m<15;m++){//第幾屏

for(k=0;k<8;k++){ P1=row[k]; P0=col[k+m]; delay(1); }

}任務(wù)2.3

更高級的顯示任務(wù)實(shí)施4、“愛心”滾動顯示軟件編程外循環(huán)變量m表示第m屏,m為0時,表示第一屏,內(nèi)循環(huán)k取值0-7八個數(shù),m=0,k=0時,顯示第一屏的內(nèi)容;m=1時,P0=col[k+1];從col數(shù)組的第二個元素開始連續(xù)取8個元素,八行的內(nèi)容為第二屏的內(nèi)容。當(dāng)這個雙重循環(huán)執(zhí)行一遍,就完成了心形從下往上滾動顯示一次。如在外面再加一層循環(huán),控制“愛心”完整滾動的次數(shù)。for(p=0;p<10;p++){for(m=0;m<15;m++){//第幾屏

for(k=0;k<8;k++){ P1=row[k];

P0=col[k+m];

delay(1);

}

}

}任務(wù)2.3

更高級的顯示任務(wù)實(shí)施4、“愛心”滾動顯示軟件編程如果要求從上往下滾動顯示,則//從上往下滾動for(p=0;p<10;p++){

for(m=14;m>=0;m--){//第幾屏

for(k=0;k<8;k++){ P1=row[k];

P0=col[k+m];

delay(1);

}

}}任務(wù)2.3

更高級的顯示任務(wù)實(shí)施5、滿屏顯示二句話——LCD液晶屏顯示

在智慧校園的LCD1602液晶顯示屏上顯示兩行信息,第一行為“IloveC51”,第二行顯示:“SZJMWELCOMEU!”的字樣以及自定義字符“℃”

。

本任務(wù)要求完成的工作是分解出LCD1602液晶屏的原理,首先利用仿真軟件,實(shí)現(xiàn)在LCD1602液晶屏上顯示字符,然后利用開發(fā)板上滾動顯示上述歡迎詞。學(xué)生逐步加深對液晶屏顯示的理解,并能顯示自己想要顯示的內(nèi)容,為后面的綜合應(yīng)用打下夯實(shí)的基礎(chǔ)。

利用LCD1602液晶屏的D0到D7連接微處理器的P0端口,RS、RW、E端連接P2口,連上電源。硬件設(shè)計完成后,進(jìn)行軟件編寫,實(shí)現(xiàn)上述歡迎詞。任務(wù)2.3

更高級的顯示任務(wù)實(shí)施(1)硬件電路設(shè)計

根據(jù)LCD1602工作原理,連接液晶屏和微處理器,如圖2-27所示。圖2-27電路圖任務(wù)2.3

更高級的顯示任務(wù)實(shí)施(1)硬件電路設(shè)計LCD1602的八位

溫馨提示

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

評論

0/150

提交評論