嵌入式系統(tǒng)原理與設(shè)計 課件 于紅旗 第8-14講 計數(shù)器 -RTOS_第1頁
嵌入式系統(tǒng)原理與設(shè)計 課件 于紅旗 第8-14講 計數(shù)器 -RTOS_第2頁
嵌入式系統(tǒng)原理與設(shè)計 課件 于紅旗 第8-14講 計數(shù)器 -RTOS_第3頁
嵌入式系統(tǒng)原理與設(shè)計 課件 于紅旗 第8-14講 計數(shù)器 -RTOS_第4頁
嵌入式系統(tǒng)原理與設(shè)計 課件 于紅旗 第8-14講 計數(shù)器 -RTOS_第5頁
已閱讀5頁,還剩839頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1單片機(jī)與嵌入式系統(tǒng)第八講本次課主要內(nèi)容第二章單片機(jī)原理(六)2單片機(jī)定時/計數(shù)器及其應(yīng)用!單片機(jī)原理(六)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)31.本次課的目標(biāo)熟悉單片機(jī)定時/計數(shù)器的基本概念、基本結(jié)構(gòu)、四種工作模式;熟練掌握其應(yīng)用;4單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)52.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)數(shù)字電路中的計數(shù)器6時鐘來自哪里?溢出之后怎么辦?單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)7核心是16位的加1計數(shù)器。T0由TH0和TL0構(gòu)成。T1由TH1和TL1構(gòu)成。定時器由特殊功能寄存器TMOD和TCON所控制!定時器可產(chǎn)生中斷!計數(shù)器可對外部輸入脈沖計數(shù)!定時器/計數(shù)器結(jié)構(gòu)的核心是一個16位的加1計數(shù)器。定時器/計數(shù)器T0(Timer0)由TH0(TimerHigh0)和TL0(TimerLow0)構(gòu)成。定時器/計數(shù)器T1由TH1和TL1構(gòu)成。89問題:假設(shè)TL0為8位,T0與TH0和TL0有什么樣的關(guān)系?10T0=TH0×256+TL0TH0=T0/256TL0=T0%256問題:假設(shè)TL0為5位,T0與TH0和TL0有什么樣的關(guān)系?11T0=TH0×32+TL0TH0=T0/32TL0=T0%32單片機(jī)的定時器/計數(shù)器具有兩種功能:定時:計算機(jī)器周期的個數(shù),對初始值進(jìn)行累加,溢出時產(chǎn)生中斷。計數(shù):計算外部輸入脈沖的個數(shù),對初始值進(jìn)行累加,溢出時產(chǎn)生中斷。12由特殊功能寄存器TMOD(TimerMode)和TCON(TimerControl)所控制。定時器工作不占用CPU時間,除非定時器/計數(shù)器溢出,才能中斷CPU的當(dāng)前操作。1314TF1TR1TF0TR0IE1IT1IE0IT0

TCON(88H)8FH8EH8DH8CH8BH8AH89H88H高四位對定時器控制低四位涉及外部中斷定時工作方式定時器計數(shù)89C51片內(nèi)振蕩器輸出經(jīng)12分頻后的脈沖,即在初始值基礎(chǔ)上每個機(jī)器周期使定時器(T0或T1)的數(shù)值加1直至計滿溢出。15問題:當(dāng)89C51采用12MHz晶振時,計數(shù)頻率為多少?16答案:一個機(jī)器周期為1μs,計數(shù)頻率為1MHz。計數(shù)工作方式通過引腳T0(P3.4)和T1(P3.5)對外部脈沖信號計數(shù)。當(dāng)輸入脈沖信號產(chǎn)生由1至0的下降沿時計數(shù)器的值加1。為了確保某個電平在變化之前被采樣一次,要求電平保持時間至少是一個完整的機(jī)器周期。17問題:計數(shù)器對外部脈沖計數(shù)時,最高計數(shù)頻率與振蕩頻率有什么關(guān)系?18答案:CPU檢測一個1至0的跳變需要兩個機(jī)器周期,故最高計數(shù)頻率為振蕩頻率的1/24。問題:當(dāng)89C51采用12MHz晶振時,所能計數(shù)的外部管腳輸入頻率最大為多少?19答案:最高計數(shù)頻率為振蕩頻率的1/24,因此所能計數(shù)的最大外部管腳輸入頻率為500KHz?;貞洠和庵袛嘣吹臄U(kuò)展方法利用定時器/計數(shù)器擴(kuò)充外中斷源用中斷和查詢結(jié)合法擴(kuò)充外中斷源20思考:如何利用計數(shù)器進(jìn)行外部中斷擴(kuò)展?由于計數(shù)器溢出時會產(chǎn)生中斷,因此,可以讓計數(shù)器初始值為“溢出值-1”,當(dāng)外部來一個脈沖時,就可以觸發(fā)中斷,進(jìn)而將2個計數(shù)器中斷擴(kuò)展為2個外部中斷。21單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)223.定時器的控制3.1工作模式寄存器TMOD(TimerMode)3.2控制器寄存器TCON(TimerControl)2324定時器T1定時器T0TMOD(89H)GATEC/TM1M0GATEC/TM1M03.1工作模式寄存器TMODTMOD用于控制T0和T1的工作模式。特別注意:TMOD不能位尋址,只能用字節(jié)設(shè)置定時器的工作模式,低半字節(jié)設(shè)置T0,高半字節(jié)設(shè)置T1。89C51系統(tǒng)復(fù)位時,TMOD所有位被清0。2526定時器T1定時器T0TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M027M1和M0—操作模式控制位。兩位可形成四種編碼,對應(yīng)于四種模式。28TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0C/T(Counter/Timer)—計數(shù)器/定時器方式選擇位。C/T=0,設(shè)置為定時方式。定時器計數(shù)89C51片內(nèi)脈沖,即對機(jī)器周期計數(shù)。C/T=1,設(shè)置為計數(shù)方式。計數(shù)器的輸入來自引腳T0(P3.4)或T1(P3.5)端的外部脈沖。29TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M030GATE(ORgateenablebitwhichcontrolRUN/STOPoftimer)—門控位。GATE=0,只要用軟件使TR0(或TR1)置1就可以啟動定時器,而不管INT0(或INT1)的電平是高還是低。GATE=1,只有INT0(或INT1)引腳為高電平且由軟件使TR0(或TR1)置1時,才能啟動定時器工作。31TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M032問題:TMOD=0x01;是什么含義?33答案:T1工作于定時器、不受INT1控制,工作在模式0。T0工作于定時器、不受INT0控制,工作在模式1。3.2控制器寄存器TCONTCON除可字節(jié)尋址外,還可位尋址。89C51系統(tǒng)復(fù)位時,TCON的所有位被清0。34TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H35TF1(Timer1Overflowflag)—T1溢出標(biāo)志位。當(dāng)T1溢出時,由硬件自動使中斷觸發(fā)器TF1置1,并向CPU申請中斷。當(dāng)CPU響應(yīng)中斷進(jìn)入中斷服務(wù)程序后,TF1被硬件自動清0。TF1也可以用軟件清0。36TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H37TF0(Timer0Overflowflag)—T0溢出標(biāo)志位。其功能和操作情況同TF1。38TR1(Timer1runcontrolbit)—T1運(yùn)行控制位可通過軟件置1(TR1=1)或清0(TR1=0)來啟動或關(guān)閉T1工作。在程序中用指令“TR1=1”使TR1位置1,定時器T1便開始計數(shù)。用“TR1=0”使TR1清0,定時器停止工作。TR0(Timer0Overflowflag)—T0運(yùn)行控制位。其功能和操作情況同TR1。39TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H40問題:當(dāng)計數(shù)器0溢出時,哪個寄存器狀態(tài)將會發(fā)生變化?41答案:當(dāng)T0溢出時,由硬件自動使中斷觸發(fā)器TF0置1TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H問題:下述語句什么含義?TMOD=0x01;TR0=1;42答案:T1工作于定時器、不受INT1控制,工作在模式0。T0工作于定時器、不受INT0控制,工作在模式1。啟動定時器0。單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)434.定時器的四種模式及應(yīng)用4.1模式0及其應(yīng)用4.2模式1及其應(yīng)用4.3模式2及其應(yīng)用4.4模式3簡介444.1模式0及其應(yīng)用在這種模式下,16位寄存器(TH0和TL0)只用了13位。其中TL0的高3位未用,其余5位為整個13位的低5位,TH0占高8位。當(dāng)TL0的低5位溢出時,向TH0進(jìn)位;TH0溢出時,向中斷標(biāo)志TF0進(jìn)位(硬件置位TF0),并申請中斷。45×××TH0TL08位5位問題:模式0所能計數(shù)的最大值是多少?213=8192問題:模式0計數(shù)到多少時產(chǎn)生溢出中斷?213=81924647問題:在具有初值的情況下,計數(shù)器模式0在多長時間后溢出?這個問題非常重要!??!T=(8192-初值)×?xí)r鐘周期×12T=(8192-初值)×機(jī)器周期問題:單片機(jī)外部接12MHz晶振,定時器采用模式0,則定時器最大定時時間為多少?48答案:

模式0用13位計時,機(jī)器周期為1us,213×機(jī)器周期=8.192ms。問題:單片機(jī)外部接12MHz晶振,定時器采用模式0,如何產(chǎn)生1s的定時?49答案:模式0用13位計時,12MHz時鐘時,定時器最大定時時間為8.192ms。直接計時,達(dá)不到1s的要求??僧a(chǎn)生5ms的定時,再由5ms累計200次產(chǎn)生1s的定時。這個問題非常重要!?。《〞r器工作于模式0,若要產(chǎn)生5ms的定時,計數(shù)初值如何選擇?50答案:使用公式:(213–初值)×機(jī)器周期=5ms,可以計算出初值為:213-5000/1。這個問題非常重要?。。《〞r器工作于模式0,定時器初值為:213-5000/1,應(yīng)如何設(shè)置TH0和TL0?51答案: TH0=(8192-5000)/32; TH1=(8192-5000)%32;這個問題非常重要!??!問題:如果使用中斷處理T0溢出,應(yīng)如何初始化中斷?52答案:EA=1;ET0=1;或 IE=0x82;EA

ESET1EX1ET0EX0問題:如果使用中斷處理T0溢出,應(yīng)如何定義中斷處理函數(shù)?53INT0:0T0:1INT1:2T1:3串口:4答案:voidTimer_Interrupt()interrupt1{……}例:用單片機(jī)驅(qū)動一個發(fā)光二極管,閃爍周期為1s,振蕩頻率為12MHz。54演示:Project1例:用單片機(jī)驅(qū)動一個發(fā)光二極管,閃爍周期為1s,振蕩頻率為12MHz。分析:發(fā)光二極管亮的時間為500ms,然后熄滅500ms,之后周期循環(huán)。由于模式0最大定時時間為:213×機(jī)器周期=8.192ms,達(dá)不到500ms的要求。可以定時產(chǎn)生5ms的中斷,再根據(jù)此中斷累加100次達(dá)到500ms。55問題:定時器應(yīng)工作于什么模式?(TimerorCounter?)Timer問題:定時器是否需要INT0來控制?不需要56Step1:若要產(chǎn)生5ms的定時,計數(shù)初值如何選擇?使用公式:(213–初值)×機(jī)器周期=5ms,可以計算出初值為:213-5000/1.57程序設(shè)計#include<AT89X51.h>sbitLED=P0^0;unsignedcharT_Count=0;voidmain(){//設(shè)置定時器工作在模式0,且不受INT0控制,工作于Timer狀態(tài)

TMOD=0x00;//TH0和TL0應(yīng)如何設(shè)置?

TH0=(8192-5000)/32; TL0=(8192-5000)%32;//如何初始化中斷?

IE=0x82;//如何啟動定時器0?

TR0=1;//接下來干什么?

while(1);}58//如何定義T0中斷處理函數(shù)?voidTimer_Interrupt()interrupt1{//中斷處理函數(shù)中應(yīng)做哪些事情?//定時器初值初始化;5ms累加產(chǎn)生500ms;500msLED狀態(tài)翻轉(zhuǎn)//定時器初值初始化;

TH0=(8192-5000)/32; TL0=(8192-5000)%32;//5ms累加產(chǎn)生500ms;500msLED狀態(tài)翻轉(zhuǎn) if(++T_Count==100) { LED=!LED;

T_Count=0; }}59演示:Project1例:如何使用單片機(jī)對外部脈沖計數(shù)?6061演示:Project7數(shù)碼管顯示按鍵按下的次數(shù)分析:使用T0,工作于模式0,使用外部計數(shù)模式;一個數(shù)碼管僅顯示0~9;62voidmain(){ unsignedchari=0;//初始化定時器0,工作于計數(shù)模式、模式0,不受INT0控制 TMOD=0x04;//開始計數(shù)

TR0=1; P0=0x00; while(1) { P0=~Disp[i]; //TL0內(nèi)保存了按鍵次數(shù),只有一個數(shù)碼管,需處理一下

i=(TL0)%10; }}63TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0演示:Project7思考:在剛剛的例子基礎(chǔ)上,如何利用T0和T1進(jìn)行外部中斷擴(kuò)展?6465主任務(wù)(讓D5一直閃爍)INT0中斷(讓D1閃爍5次)INT1中斷(讓D2閃爍5次)T0中斷(讓D3閃爍5次)T1中斷(讓D4閃爍5次)INT0中斷INT1中斷T0擴(kuò)展中斷T1擴(kuò)展中斷演示:Project9問題:要實現(xiàn)T0一次外部脈沖就觸發(fā)中斷(產(chǎn)生定時器溢出中斷)初始值應(yīng)為多少? TH0=(8192-1)/32; TL0=(8192-1)%32;66問題:要實現(xiàn)T0、T1外部中斷觸發(fā),T0、T1應(yīng)工作于哪種模式?應(yīng)工作于計數(shù)模式。如何用C語言設(shè)置。TMOD=0x4467T0對應(yīng)的中斷處理函數(shù)如何定義?voidExternal_Interrupt_t0()interrupt1T0溢出中斷處理函數(shù)中應(yīng)執(zhí)行哪些工作?定時器初始化、LED閃爍控制68INT0:0T0:1INT1:2T1:3串口:4程序應(yīng)包含幾個函數(shù)?主函數(shù)、4個中斷處理函數(shù)主程序完成什么功能?中斷初始化、定時器初始化、定時器開始、while(1)循環(huán)69voidmain(){ //LED初始狀態(tài)

LED0=1;LED1=1;LED2=1;LED3=1; //T0T1初始化

TMOD=0x44;TH0=(8192-1)/32;TL0=(8192-1)%32; TH1=(8192-1)/32; TL1=(8192-1)%32; //INT0INT1初始化

IT0=1; IT1=1; //初始化中斷

EA=1; //打開總中斷開關(guān)

EX0=1;//打開INT0中斷

EX1=1;//打開INT1中斷

ET1=1;//打開T1中斷

ET0=1;//打開T0中斷70//初始化中斷優(yōu)先級

PX0=1; //T0T1開始工作

TR0=1;TR1=1; //主任務(wù)

while(1) { LED4=!LED4; DelayX1ms(100); }}71//INT0中斷處理函數(shù)voidExternal_Interrupt_0()interrupt0{ unsignedint

i; for(i=0;i<10;i++) {

LED0=!LED0; DelayX1ms(200); }}72//INT1中斷處理函數(shù)voidExternal_Interrupt_1()interrupt2{ unsignedint

i; for(i=0;i<10;i++) {

LED1=!LED1; DelayX1ms(400); }}73//T0中斷處理函數(shù)voidExternal_Interrupt_t0()interrupt1 //T0{ unsignedint

i;

TH0=(8192-1)/32; TL0=(8192-1)%32; for(i=0;i<10;i++) {

LED2=!LED2; DelayX1ms(300); }}74//T1中斷處理函數(shù)voidExternal_Interrupt_t1()interrupt3 //T1{ unsignedint

i;

TH1=(8192-1)/32; TL1=(8192-1)%32; for(i=0;i<10;i++) {

LED3=!LED3; DelayX1ms(500); }}754.2模式1及其應(yīng)用76TH0TL08位8位77問題:在具有初值的情況下,計數(shù)器模式1在多長時間后溢出?T=(65536-初值)×?xí)r鐘周期×12T=(65536-初值)×機(jī)器周期問題:單片機(jī)外部接12MHz晶振,定時器采用模式1,則定時器最大定時時間為多少?78答案:

模式1用16位計時,機(jī)器周期為1us,216×機(jī)器周期=65.536ms。例子:流水燈,每隔200ms滾動一次。79演示:Project2分析:模式1最大定時為216×機(jī)器周期=65.536ms,無法滿足200ms的定時要求,因此同模式0的例子一樣,通過另外一個計數(shù)器來進(jìn)行累加。這里我們首先產(chǎn)生40ms的定時,根據(jù)公式:(216-初值)×機(jī)器周期=40ms可得:初值=216-40000.80#include<AT89X51.h>#include<intrins.h>voidmain(){ unsignedcharT_Count=0; P0=0xFE; P2=0xFE;

TMOD=0x01;

TH0=(65536-40000)/256; TL0=(65536-40000)%256;

TR0=1;

81while(1) { if(TF0==1) { TF0=0; TH0=(65536-40000)/256; TL0=(65536-40000)%256; if(++T_Count==5) { P0=_crol_(P0,1); P2=_crol_(P2,1);

T_Count=0; } } }}82演示:Project2剛剛的代碼中,沒有使用到中斷處理函數(shù),是根據(jù)TF0==1來判斷T0是否發(fā)生了溢出。如何使用中斷的方法?83中斷模式如下:#include<AT89X51.h>#include<intrins.h>unsignedcharT_Count=0;voidmain(){ P0=0xFE; P2=0xFE; TMOD=0x01; IE=0x82; TH0=(65536-40000)/256; TL0=(65536-40000)%256; TR0=1; while(1); }84voidInterrput_handle()interrupt1{ TH0=(65536-40000)/256; TL0=(65536-40000)%256; if(++T_Count==5) { P0=_crol_(P0,1); P2=_crol_(P2,1);

T_Count=0; }}85演示:Project34.3模式2及其應(yīng)用TL0計數(shù)溢出時,不僅使溢出中斷標(biāo)志位TF0置1,而且還自動把TH0中的內(nèi)容重新裝載到TL0中。TL0用作8位計數(shù)器,TH0用以保存初值。86該模式可省去軟件中重裝常數(shù)的語句,并可產(chǎn)生相當(dāng)精確的定時時間,適合于作串行口波特率發(fā)生器。8788問題:單片機(jī)外部接12MHz晶振,定時器采用模式2,則定時器最大定時時間為多少?89答案:

模式2用8位計時,機(jī)器周期為1us,28×機(jī)器周期=256us。例子:流水燈,每隔200ms滾動一次。(模式2來實現(xiàn))90演示:Project4分析:由于只能8位計數(shù),最大定時時間為28×機(jī)器周期=256×1us=256us,可以先用模式3產(chǎn)生200us的中斷,再累加1000次達(dá)到200ms。91#include<AT89X51.h>#include<intrins.h>unsignedint

T_Count=0;voidmain(){ P0=0xFE; P2=0xFE;

TMOD=0x02;

IE=0x82; TH0=(256-200); TL0=(256-200); TR0=1; while(1); }92voidInterrput_handle()interrupt1{ if(++T_Count==1000) { P0=_crol_(P0,1); P2=_crol_(P2,1);

T_Count=0; }}93演示:Project44.4模式3簡介T0設(shè)置為模式3,TL0和TH0被分成兩個相互獨(dú)立的8位計數(shù)器。TL0:用原T0的各控制位、引腳和中斷源,即C/T,GATE,TR0,TF0,T0(P3.4)引腳,INT0(P3.2)引腳。TL0可工作在定時器方式和計數(shù)器方式。其功能和操作與模式0、模式1相同(只是8位)。TH0:只可用作簡單的內(nèi)部定時功能。TH0占用了定時器T1的控制位TR1和T1的中斷標(biāo)志TF1,其啟動和關(guān)閉僅受TR1的控制。9495那么,定時器1怎么辦?定時器1將不能產(chǎn)生溢出中斷,但可用于其它不需產(chǎn)生中斷的場合。如作為波特率發(fā)生器或作為定時計數(shù)器被軟件查詢。由于此時T1的TR1歸TH0所用,因此T1將自動工作。如果需要停止T1工作,可以將T1設(shè)置為模式3。注意:當(dāng)定時器1設(shè)置為工作方式3時,將停止工作。96當(dāng)系統(tǒng)需要用定時器1來產(chǎn)生波特率而又同時需要兩個定時/計數(shù)器時,這種工作方式十分有用。97判斷下述說法是否正確:在方式3模式下,定時/計數(shù)器0可以構(gòu)成二個定時器正確在方式3模式下,定時/計數(shù)器0可以構(gòu)成一個定時器和一個計數(shù)器。正確在方式3模式下,定時/計數(shù)器0可以構(gòu)成二個計數(shù)器錯誤98當(dāng)T0工作于模式3時,TH0不能用作計數(shù)器。正確當(dāng)T0工作于模式3時,T1工作于模式0~2時,可以使用TR1時T1開始工作。錯誤當(dāng)T0工作于模式3時,要使T1停止工作只有將其置于模式3。正確99單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)1005.定時器初始化過程(1)、確定并設(shè)定定時器工作模式

TMOD(2)、設(shè)置定時/計數(shù)器初值

TH0、TL0或TH1、TL1(3)、開啟定時器中斷

IE:ET0(ET1)和EA101(4)、啟動定時器

TCON:TR0(TR1)注:如果采用查詢方式控制定時器還需要判斷TF0(TF1)102定時器0使用步驟Step1:設(shè)置Timer0工作模式103Step2:啟動Timer0Step3:Timer0不斷累加,直至溢出,TF0置1。然后重新開始累加,依次類推。直至TR0=0停止累加。104單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)105實驗一:用定時器0方式1在P1.0上產(chǎn)生周期為2S的方波。晶振頻率為12MHz。1、最大定時時間:65536×1

s=65.536ms2、選定定時T=50ms3、

4、TH0=(65536-50000)/256;TL0=(65536-50000)%256;6.綜合實驗演示:Proteus仿真(Project5)#include<reg51.h>sbitP1_0=P1^0;main(){ unsignedchari=20;//T0工作模式為1

TMOD=0x01;//根據(jù)計算設(shè)定計數(shù)器初值 TH0=(65536-50000)/256; TL0=(65536-50000)%256;//啟動定時器 TR0=1;程序(查詢方式) while(1) {

if(TF0==1)//判斷定時溢出標(biāo)志 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; TF0=0;//清除標(biāo)志位

i=i-1;if(i==0)//判斷是否計滿20次,即定時1秒{

i=20; P1_0=!P1_0;//將P1.0電平翻轉(zhuǎn)} } }}演示:KeilC仿真(Project5)演示:Proteus仿真(Project5)將上述程序改為中斷模式:109#include<reg51.h>sbitP1_0=P1^0;unsignedchari=20;main(){ //初始化中斷

IE=0x82; //設(shè)定T0工作模式為1 TMOD=0x01; TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

//啟動定時器 TR0=1; //接下來干什么? while(1){}}110//T0溢出中斷處理函數(shù)如何定義?voidInterrput_handle()interrupt1{ //T0初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

i=i-1; if(i==0)//判斷是否計滿20次,即定時1秒

{ i=20; P1_0=!P1_0;//將P1.0電平翻轉(zhuǎn)

}}111演示:KeilC仿真(Project6)實驗二:設(shè)計制作一個頻率計。112演示:Proteus仿真(Project10)基本思路計算1s內(nèi)脈沖的個數(shù),即為頻率按鍵按下,啟動定時器;定時器T1工作于計數(shù)模式定時器T0工作于定時模式當(dāng)計時達(dá)到1s時,停止定時器,將T1值顯示出來。由50ms擴(kuò)展得到1s定時113核心代碼:初始化部分(中斷、定時器初始化)//打開T1、T0中斷

IE=0x8A;// T1模式1,計數(shù);T0模式1,定時

TMOD=0x51; TH0=(65536-50000)/256; TL0=(65536-50000)%256;114EAESET1EX1ET0EX0

IE(A8H)AFHAEHADHACHABHAAHA9HA8HTMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0主程序:按鍵按下,開始計時

while(1) { if(P1_0==0) { DdelayX1ms(2); if(P1_0==0) { TR1=1; TR0=1; } } else {for(i=0;i<5;i++) { P2=DSY_BIT[i]; P0=~DSY_CODE[Disp_Buffer[i]]; DdelayX1ms(2); } } }115中斷服務(wù)程序voidTimer_Interrupt()interrupt1{ unsignedint

Tmp; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(++Count==20) { TR1=TR0=0; Count=0;

Tmp=TH1*256+TL1;

Disp_Buffer[4]=Tmp/10000;

Disp_Buffer[3]=Tmp/1000%10;

Disp_Buffer[2]=Tmp/100%10;

Disp_Buffer[1]=Tmp%100/10;

Disp_Buffer[0]=Tmp%10;

TH1=TL1=0; }}116本實驗中,并未寫出T1中斷處理函數(shù),因此,頻率的范圍有一定限制。同學(xué)們可以自行考慮如何改進(jìn)?思路:定義一全局變量,每次T1中斷加一,按鍵按下復(fù)位。在顯示的時候考慮到T1中斷次數(shù)。117單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)3.定時器的控制4.定時器的四種模式及應(yīng)用5.定時器初始化過程6.綜合實驗7.小結(jié)1187小結(jié)51單片機(jī)的定時/計數(shù)器四種計數(shù)器工作模式1198.思考題1.對于MCS-51系列單片機(jī),其有兩個定時器/計數(shù)器,即定時器/計數(shù)器0和1,簡稱為T0和T1。2.T0和T1都具有

定時

計數(shù)

的功能,可以通過特殊功能寄存器來選擇。3.寄存器TMOD的C/T位又稱為

工作方式選擇位

,可以選擇定時功能或者計數(shù)功能。4.定時器/計數(shù)器的工作模式2,其是一個8位自動重新裝入的計數(shù)器

的計數(shù)器。1205.T1不可以工作如下那個模式(D)。A.工作模式0 B.工作模式1C.工作模式2 D.工作模式36.以下哪個寄存器可以位尋址(B)。A.TMOD B.TCONC.TH0 D.TL07.以下哪個工作模式為16位計數(shù)器方式(B)。A.工作模式0 B.工作模式1C.工作模式2 D.工作模式31218.如果定時器/計數(shù)器T0產(chǎn)生溢出,將標(biāo)志位TF0(TCON.5)

置位,請求中斷,中斷系統(tǒng)將進(jìn)入中斷處理。9.當(dāng)置ES=0時,禁止串行口中斷;當(dāng)置ES=1時,允許串行口中斷。10.PX1是外部中斷1優(yōu)先級設(shè)置位。當(dāng)置PX1=0時,該中斷源被定義為低優(yōu)先級;當(dāng)置PX1=1時,該中斷源被定義為高優(yōu)先級。12211.單片機(jī)的外部中斷源

由(C)來實現(xiàn)。A.P3.0 B.P3.1C.P3.2 D.P3.312.以下哪個中斷標(biāo)志不會自動清零(A)。A.RI B.TF0C.TF1 D.IE013.51系列單片機(jī)對中斷的查詢次序為(C)。A.外部中斷1→T0→外部中斷0→T1→串行中斷B.外部中斷0→T1→外部中斷1→T0→串行中斷C.外部中斷0→T0→外部中斷1→T1→串行中斷D.外部中斷1→T1→外部中斷0→T0→串行中斷1239.下次課準(zhǔn)備常見單片機(jī)外設(shè)及其應(yīng)用。預(yù)習(xí)一下:數(shù)碼管、按鍵相關(guān)知識。12412521世紀(jì)將是嵌入式系統(tǒng)泛濫的世紀(jì)機(jī)會無處不在,同志仍須努力謝謝大家!126單片機(jī)與嵌入式系統(tǒng)第九講本次課主要內(nèi)容第二章單片機(jī)原理(七)127常見單片機(jī)外設(shè)應(yīng)用初步!單片機(jī)原理(七)1.本次課的目標(biāo)2.七段數(shù)碼管及其應(yīng)用3.按鍵及其應(yīng)用4.實驗配套開發(fā)板的基本使用5.小結(jié)1281.本次課的目標(biāo)熟悉常見的單片機(jī)外設(shè),能熟練對數(shù)碼管、矩陣鍵盤進(jìn)行編程應(yīng)用。熟悉實驗板,完成基本應(yīng)用程序開發(fā)。1292.七段數(shù)碼管及其應(yīng)用2.1七段數(shù)碼管2.2七段數(shù)碼管靜態(tài)顯示方式2.3七段數(shù)碼管靜態(tài)顯示硬件連接圖2.4七段數(shù)碼管動態(tài)顯示方式2.5七段數(shù)碼管動態(tài)顯示硬件連接圖1302.1七段數(shù)碼管簡介有共陰極和共陽極兩種131按照:dp,g,f,e,d,c,b,a的順序,對于共陰極,某位等于1時候亮,例如:顯示1,值為:00000110B(06H)問題:對于共陰極七段數(shù)碼管,如果要顯示A,

dp,g,f,e,d,c,b,a的值應(yīng)為多少?答案:77H問題:對于共陽極七段數(shù)碼管,如果要顯示A,

dp,g,f,e,d,c,b,a的值應(yīng)為多少?答案:88H132按照:dp,g,f,e,d,c,b,a的順序問題:共陰極和共陽極顯示同一字符的編碼,有什么聯(lián)系?答案:互為逐位取反的關(guān)系。133按照:dp,g,f,e,d,c,b,a的順序134顯示字符012345678共陰極段選碼3F065B4F666D7D077F共陽極段選碼C0F9A4B0999282F880顯示字符9ABCDEF-熄滅共陰極段選碼6F777C395E79714000共陽極段選碼908883C6A1868EBFFF在此表基礎(chǔ)上,定義數(shù)組unsignedcharDisp1[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表在此表基礎(chǔ)上,定義數(shù)組unsignedcharDisp2[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽極譯碼表Disp1和Disp2有什么關(guān)系?互為逐位取反如何將要顯示的字符轉(zhuǎn)換為控制數(shù)碼管的編碼?(譯碼方式)

(1)軟件譯碼:利用查表法,將段碼作成一個表,以字符值為索引,可查出不同字符的相應(yīng)段碼。

(2)硬件譯碼:用專用譯碼器電路,將待顯示的字符轉(zhuǎn)換為段碼。135(1)軟件譯碼:利用查表法,將段碼作成一個表,以字符值為索引,可查出不同字符的相應(yīng)段碼。unsignedcharDisp1[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共陽極譯碼表unsignedcharDisp2[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表136使用軟件譯碼的方式,由單片機(jī)直接驅(qū)動數(shù)碼管,對于共陰極數(shù)碼管,應(yīng)如何連接?數(shù)碼管公共端如何處理?共陰極公共端應(yīng)接地。碼段控制如何連接?直接連接到單片機(jī)并行口,為提高驅(qū)動能力,可添加上拉電阻。137硬件連接圖:138實驗:要使數(shù)碼管輪流顯示0~F,如何設(shè)計程序?139演示:Project1根據(jù)下表,定義數(shù)組變量140顯示字符012345678共陰極段選碼3F065B4F666D7D077F顯示字符9ABCDEF-熄滅共陰極段選碼6F777C395E79714000unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表問題:

若P0=Disp[7];(

按dp,g,f,e,d,c,b,a順序

)則共陰極數(shù)碼管會顯示什么內(nèi)容

?141unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表顯示數(shù)字“7”輪流顯示0~F,主程序如何編寫?unsignedchari=0;while(1) { P0=Disp[i]; DdelayX1ms(500);

i=(i+1)%16; }142#include<AT89X51.H>unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表voidDdelayX1ms(unsignedintx);voidmain(){ unsignedchari=0;

P0=0x00;//初始熄滅所有段位 while(1) { P0=Disp[i]; DdelayX1ms(500);

i=(i+1)%16; }}143演示:Project1voidDdelayX1ms(unsignedintcount)//延時多少ms{unsignedint

i,j;for(i=0;i<count;i++) for(j=0;j<120;j++) ;}144在剛剛實驗基礎(chǔ)上添加一個共陽極的數(shù)碼管,兩只數(shù)碼管同步循環(huán)顯示0~F。應(yīng)如何處理?共陽極數(shù)碼管公共端如何處理?接VCC使用同一譯碼表,如何處理?逐位取反145電路圖146演示:Project2voidmain(){ unsignedchari=0;

while(1) { P0=Disp[i];

P3=~Disp[i]; DdelayX1ms(500);

i=(i+1)%16; }}147演示:Project2思考:使用軟件譯碼的方式驅(qū)動數(shù)碼管的特點控制稍復(fù)雜占用較多的管腳資源148(2)硬件譯碼:Binary-CodedDecimal?(BCD碼)BCD譯碼器件驅(qū)動數(shù)碼管451174LS47149150LT(Lamptest)顯示測試:所有段均亮BI(blanking)顯示空白4511芯片簡介LE(latchenable)鎖存使能使用4511芯片驅(qū)動哪種類型的數(shù)碼管?為什么?從真值表可以看出,為1時點亮對應(yīng)的碼段共陰極數(shù)碼管151使用4511芯片驅(qū)動數(shù)碼管,硬件如何連接LT(Lamptest)顯示測試如何連接?接VCCBI(blanking)顯示空白如何連接?接VCCLE(latchenable)鎖存使能如何連接?接GND152使用4511芯片驅(qū)動數(shù)碼管,硬件如何連接ABCD如何連接?連接產(chǎn)生十進(jìn)制BCD編碼的并行口a~g如何連接?直接連接七段數(shù)碼管共陰極數(shù)碼管公共端如何連接?共陰極數(shù)碼管公共端接地153154要使數(shù)碼管輪流顯示0~9,如何設(shè)計程序?155演示:Project10#include<AT89X51.H>voidDdelayX1ms(unsignedintx);voidmain(){ unsignedchari=0; while(1) { P0=i; DdelayX1ms(500);

i=(i+1)%10; }}voidDdelayX1ms(unsignedintcount){ unsignedint

i,j; for(i=0;i<count;i++) for(j=0;j<120;j++);}15615774LS47芯片簡介LT(Lamptest)顯示測試BI(blanking)顯示空白RBI(RippleBlankinput)RBO(RippleBlankoutput)使用74LS47芯片驅(qū)動哪種類型的數(shù)碼管?為什么?從真值表可以看出,為0時點亮對應(yīng)的碼段共陽極數(shù)碼管158159演示:Project11#include<AT89X51.H>voidDdelayX1ms(unsignedintx);voidmain(){ unsignedchari=0; while(1) { P0=i; DdelayX1ms(500);

i=(i+1)%10; }}voidDdelayX1ms(unsignedintcount){ unsignedint

i,j; for(i=0;i<count;i++) for(j=0;j<120;j++) ;}160程序與4511譯碼一樣!思考:使用4511和74LS47對數(shù)碼管譯碼驅(qū)動時,有什么區(qū)別和聯(lián)系?161區(qū)別:所驅(qū)動的數(shù)碼管類型不同。74LS47具有RippleOutput功能。

聯(lián)系:軟件編程相似。思考:使用BCD譯碼器的方式驅(qū)動數(shù)碼管的特點控制簡單節(jié)省管腳資源1622.2七段數(shù)碼管靜態(tài)顯示方式顯示某個字符時,七段數(shù)碼管相應(yīng)的段恒定地導(dǎo)通或截止。若為共陰極,各位的公共端接地;若為共陽極,則公共端接+5V電源。1632.3七段數(shù)碼管靜態(tài)顯示硬件連接圖164數(shù)碼管靜態(tài)顯示電路中,一個數(shù)碼管需要多少IO?占用4個或8個IO按此方式,如果需要兩個數(shù)碼管顯示怎么辦?占用8個或16個IO按此方式,如果需要八個數(shù)碼管顯示怎么辦?單片機(jī)IO不夠用???165解決之道:數(shù)碼管的動態(tài)顯示(所有數(shù)碼管共用信號線,但控制線獨(dú)立)2.4七段數(shù)碼管動態(tài)顯示方式在多位LED顯示時將所有位的段選線并聯(lián)在一起,由一個8位I/O口控制。每個數(shù)碼管共陰(或共陽)極公共端分別由相應(yīng)的獨(dú)立的I/O線控制,實現(xiàn)各位的分時選通。1662.5七段數(shù)碼管動態(tài)顯示硬件連接圖167I/O口1和I/O口2輪流送入段選碼、位選碼。unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表思考:如果上述數(shù)碼管均為共陰極,IO1輸出0x6D,IO2輸出0xFC,則上述數(shù)碼管會顯示什么?最后兩個數(shù)碼管會顯示字符‘5’,其他數(shù)碼管不亮。168思考:如果上述數(shù)碼管均為共陰極,如果要最后一個數(shù)碼管顯示‘0’,應(yīng)怎么辦?IO1輸出0x3F,IO2輸出0xFE。169unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表思考:如果上述數(shù)碼管均為共陰極,如果要倒數(shù)第二個數(shù)碼管顯示‘1’,怎么辦?IO1輸出0x06,IO2輸出0xFD。170unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表unsignedcharDisp[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//共陰極譯碼表思考:如果上述數(shù)碼管均為共陰極,如果需要最后一個顯示‘0’,倒數(shù)第二個顯示‘1’,應(yīng)怎么處理?IO1先輸出0x3F,此時IO2輸出0xFE,然后IO1輸出0x06,IO2輸出0xFD,再依次循環(huán),利用LED閃爍的余輝效應(yīng)進(jìn)行顯示。171172如何利用三極管提高驅(qū)動能力?173實驗:八只共陽極數(shù)碼管滾動顯示單個遞增字符。174175演示:Project3主程序voidmain(){ unsignedchari=0,k=0x80;//k用于控制選擇哪一個LED亮 while(1) { for(i=0;i<8;i++) { k=_crol_(k,1);//循環(huán)移位

P0=Disp[i];

P2=k; DdelayX1ms(500); } }}

176

演示:Project3非常重要!i=0時:k=00000001P0=Disp[0]哪個數(shù)碼管亮?顯示什么內(nèi)容?i=1時:k=00000010P0=Disp[1]哪個數(shù)碼管亮?顯示什么內(nèi)容?最左邊一個數(shù)碼管顯示‘0’左邊第二個數(shù)碼管顯示‘1’i=3~7時,對應(yīng)情況如何?_crol_(k,1);//循環(huán)左移如何實現(xiàn)8個數(shù)碼管同時顯示?人眼的視覺暫留時間為100ms段選碼、位選碼每送入一次后延時以保持延時一段時間,造成視覺暫留效果。實際中也可以通過調(diào)試選擇合適的延時時間。這稱為軟件掃描顯示。177實驗:八只共陽極數(shù)碼管同時顯示在上一實驗硬件基礎(chǔ)上,如何使各位數(shù)碼管同時顯示不同的數(shù)據(jù)?按照上述討論的軟件掃描方式修改程序。178演示:Project5主程序voidmain(){ unsignedchari=0,k=0x80; while(1) { for(i=0;i<8;i++) { k=_crol_(k,1); P0=Disp[i]; P2=k;

DdelayX1ms(5); } }}179演示:Project5如果DelayX1ms(5)改為DelayX1ms(100)將會出現(xiàn)什么情況?數(shù)碼管將會出現(xiàn)輪流顯示改為DelayX1ms(20)將會出現(xiàn)什么情況?數(shù)碼管將會出現(xiàn)閃爍改為DelayX1ms(10)將會出現(xiàn)什么情況?數(shù)碼管繼續(xù)閃爍改為DelayX1ms(5)將會出現(xiàn)什么情況?數(shù)碼管穩(wěn)定顯示180為什么會出現(xiàn)這種情況?刷新速度太慢,不足以彌補(bǔ)人眼的暫留效應(yīng)實驗:在上一實驗硬件基礎(chǔ)上,如何使各位數(shù)碼管同時顯示遞增的計數(shù)值?181在上一實驗硬件基礎(chǔ)上,每次給P0賦值是關(guān)鍵!分析:8位最大顯示99999999,計數(shù)值應(yīng)該選什么類型的?Unsignedchar多少位?顯示范圍?8位,0~255Unsignedint多少位?顯示范圍?16位,0~65535unsignedlong多少位?顯示范圍?32位,0~4294967295182演示:Project6只需要將顯示值遞增即可,但需要把各位拆分給對應(yīng)的數(shù)碼管。如何拆分???183非常重要!如何拆分?

Main_Count=(Main_Count+1)%(100000000);

Seg[7]=Main_Count%10;

Seg[6]=(Main_Count%100)/10;

Seg[5]=(Main_Count%1000)/100;

Seg[4]=(Main_Count%10000)/1000;

Seg[3]=(Main_Count%100000)/10000;

Seg[2]=(Main_Count%1000000)/100000;

Seg[1]=(Main_Count%10000000)/1000000;

Seg[0]=(Main_Count%100000000)/10000000; 184若Main_Counter=12345,則經(jīng)過這個程序后,Seg各位值為多少?Seg[7]=5;Seg[6]=4;Seg[5]=3;Seg[4]=2;Seg[3]=1;其他為0。非常重要!回憶計數(shù)器的功能,這里我們用計數(shù)器產(chǎn)生累加的時間間隔。

TMOD=0x00;//計數(shù)器工作模式0,多少位?

13位計數(shù) TH0=(8192-5000)/32;TL0=(8192-5000)%32;//對于12MHz晶振,多長時間產(chǎn)生一次中斷

5ms

IE=0x82; //什么含義

打開總中斷,計數(shù)器0中斷 TR0=1;//什么含義

開始計數(shù)

185EAESET1EX1ET0EX0

IE(A8H)AFHAEHADHACHABHAAHA9HA8H主函數(shù)voidmain(){ unsignedchari=0,k=0x80;

TMOD=0x00; TH0=(8192-5000)/32; TL0=(8192-5000)%32; IE=0x82; TR0=1; while(1) {

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

k=_crol_(k,1); P0=Disp[Seg[i]]; P2=k; DdelayX1ms(2); } } }186這段完成什么功能?數(shù)碼管動態(tài)刷新中斷函數(shù)voidTimer_Interrupt()interrupt1{

TH0=(8192-5000)/32; TL0=(8192-5000)%32;

Main_Count=(Main_Count+1)%(100000000);

Seg[7]=Main_Count%10;

Seg[6]=(Main_Count%100)/10;

Seg[5]=(Main_Count%1000)/100;

Seg[4]=(Main_Count%10000)/1000;

Seg[3]=(Main_Count%100000)/10000;

Seg[2]=(Main_Count%1000000)/100000;

Seg[1]=(Main_Count%10000000)/1000000;

Seg[0]=(Main_Count%100000000)/10000000; }187演示:Project6該中斷完成什么功能?定時器初始化、計數(shù)累加、數(shù)碼管顯示內(nèi)容分割實驗:在上一實驗硬件基礎(chǔ)上,如何使各位數(shù)碼管同時小時、分鐘、秒以及上下午?分析:在上一實驗基礎(chǔ)上要注意以下修改的地方:計數(shù)間隔,改為1s計數(shù)方式更改,按秒、分、小時進(jìn)行188A、P的顯示:unsignedcharDisp[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xff};189按照:dp,g,f,e,d,c,b,a的順利,對于共陽極,某位等于0時候亮,顯示P,值為:10001100B(8CH)時間計數(shù)方式

if(++Sec_Count==200) { Second=Second+1; if(Second>=60) { Second=0; Minute=Minute+1; if(Minute>=60) { Minute=0; Hour=Hour+1; if(Hour>=12) { Hour=0; AM=!AM; } } }190什么含義?產(chǎn)生1s定時什么含義?計滿一分鐘什么含義?計滿一小時什么含義?計滿12小時時間顯示計數(shù)方式

Seg[7]=Second%10;

Seg[6]=(Second%100)/10;

Seg[5]=(Minute%10);

Seg[4]=(Minute%100)/10;

Seg[3]=(Hour%10);

Seg[2]=(Hour%100)/10;

Seg[1]=17;//什么含義? if(AM==1)

Seg[0]=10;//什么含義? else

Seg[0]=16;//什么含義?191什么含義?顯示內(nèi)容分割什么含義?第二個數(shù)碼管顯示空白第一個數(shù)碼管顯示A第一個數(shù)碼管顯示PDisp[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xff};主函數(shù)voidmain(){ unsignedchari=0,k=0x80; TMOD=0x00; TH0=(8192-5000)/32; TL0=(8192-5000)%32; IE=0x82; TR0=1; P2=0x00;

Seg[1]=17; if(AM==1)

Seg[0]=10; else

Seg[0]=16; while(1) { for(i=0;i<8;i++) { P2=0x00; k=_crol_(k,1); P0=Disp[Seg[i]]; P2=k; DdelayX1ms(3); } } }192演示:Project7實驗:使用4511譯碼器實現(xiàn)四個數(shù)碼管的同時顯示193演示:Project16分析:4511具有鎖存功能,可以通過控制LE管腳為不同的數(shù)碼管寫入不同的數(shù)據(jù)。194硬件連接圖195下述語句有什么作用?P2=0xF7; P0=1;DdelayX1ms(50);最后一個數(shù)碼管顯示1。延時50msvoidmain(){ while(1) { P2=0xF7; P0=1; DdelayX1ms(50); P2=0xFB; P0=2; DdelayX1ms(50); P2=0xFD;P0=3;DdelayX1ms(50); P2=0xFE;P0=4;DdelayX1ms(50); }}196參照單片機(jī)掃描程序,可編寫:如果去掉While(1)循環(huán),將會有什么現(xiàn)象?voidmain(){ { P2=0xF7; P0=1; DdelayX1ms(50); P2=0xFB; P0=2; DdelayX1ms(50); P2=0xFD;P0=3;DdelayX1ms(50); P2=0xFE;P0=4;DdelayX1ms(50); } while(1);}197程序如下:會出現(xiàn)什么現(xiàn)象?和剛剛程序結(jié)果一樣!voidmain(){ { P2=0xF7; P0=1; P2=0xFB; P0=2; P2=0xFD;P0=3; P2=0xFE;P0=4; } while(1);}198去掉DdelayX1ms(50);會出現(xiàn)什么現(xiàn)象?和剛剛程序結(jié)果一樣!采用硬件譯碼,將會簡化程序設(shè)計!3.鍵盤接口及其應(yīng)用3.1概述3.2按鍵的消抖3.3獨(dú)立式非編碼鍵盤3.4矩陣鍵盤接口及工作原理1993.1概述鍵盤分編碼鍵盤和非編碼鍵盤。鍵盤上閉合鍵的識別由專用的硬件譯碼器實現(xiàn),并產(chǎn)生鍵編號或鍵值的稱為編碼鍵盤,如BCD碼鍵盤、ASCII碼鍵盤等;靠軟件識別的稱為非編碼鍵盤。200鍵盤中的按鍵:都是一個常開開關(guān)電路。當(dāng)按鍵K未被按下時,P1.0輸入為高電平;當(dāng)按鍵K閉合時,P1.0輸入為低電平。2013.2按鍵的消抖通常按鍵在閉合及斷開的瞬間均伴有一連串的抖動。抖動時間一般為5~10ms。202鍵抖動會引起一次按鍵被誤讀多次,必須去除鍵抖動??捎糜布蜍浖煞N方法

溫馨提示

  • 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

提交評論