ATS單片機(jī)的定時(shí)器計(jì)數(shù)器PPT課件_第1頁(yè)
ATS單片機(jī)的定時(shí)器計(jì)數(shù)器PPT課件_第2頁(yè)
ATS單片機(jī)的定時(shí)器計(jì)數(shù)器PPT課件_第3頁(yè)
ATS單片機(jī)的定時(shí)器計(jì)數(shù)器PPT課件_第4頁(yè)
ATS單片機(jī)的定時(shí)器計(jì)數(shù)器PPT課件_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第第7章章 AT89S51單片機(jī)的單片機(jī)的 定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1第1頁(yè)/共61頁(yè)7.1 定時(shí)器定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器的結(jié)構(gòu) AT89S51定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)見圖 7-1,定時(shí)器/計(jì)數(shù)器T0由特殊功能寄存器TH0、TL0構(gòu)成,T1由特殊功能寄存器TH1、TL1構(gòu)成。2圖7-1 定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖第2頁(yè)/共61頁(yè)TMOD用于選擇定時(shí)器/計(jì)數(shù)器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的啟動(dòng)和停止,同時(shí)包含T0、T1狀態(tài)。計(jì)數(shù)器起始計(jì)數(shù)從初值開始。單片機(jī)復(fù)位時(shí)計(jì)數(shù)器初值為0。7.1.1 工作方式控制寄存器TMOD 圖7-2 寄存器TMOD格式第3頁(yè)/共61頁(yè)(1)G

2、ATE門控位門控位GATE=0,是否計(jì)數(shù),由控制位TRx(x = 0,1)來控制。 GATE=1,是否計(jì)數(shù),由外中斷引腳INTx* 上的電平與運(yùn)行控制位TRx共同控制。4第4頁(yè)/共61頁(yè) (2)M1、M0工作方式選擇位工作方式選擇位 M1、M04種編碼,對(duì)應(yīng)于4種工作方式的選擇,見表7-1。表7-1M1、M0工作方式選擇5第5頁(yè)/共61頁(yè) (3)C/T* 計(jì)數(shù)器模式和定時(shí)器模式選擇位C/T*=0,定時(shí)器模式,對(duì)系統(tǒng)時(shí)鐘12分頻的脈沖進(jìn)行計(jì)數(shù)。C/T*=1,計(jì)數(shù)器模式,計(jì)數(shù)器對(duì)外部輸入引腳T0()或T1()的外部脈沖(負(fù)跳變)計(jì)數(shù)。7.1.2 定時(shí)器定時(shí)器/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCO

3、N TCON控制T0、T1的啟動(dòng)和停止,同時(shí)包含T0、T1狀態(tài)。 6圖7-3 TCON格式第6頁(yè)/共61頁(yè)這里僅介紹高4位功能。(1)TF1、TF0計(jì)數(shù)溢出標(biāo)志位 當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置“1”。使用查詢方式時(shí),此位可供CPU查詢,但應(yīng)注意查詢后,用軟件及時(shí)將該位清“0”。使用中斷方式時(shí),作為中斷請(qǐng)求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。(2)TR1、TR0計(jì)數(shù)運(yùn)行控制位 TR1位(或TR0)=1,啟動(dòng)計(jì)數(shù)器計(jì)數(shù)的必要條件。 TR1位(或TR0)=0,停止計(jì)數(shù)器計(jì)數(shù)。該位可由軟件置“1”或清“0”。7.2 定時(shí)器定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)器的4種工作方式種工作方式 4種工作方式,分別介紹如

4、下。7第7頁(yè)/共61頁(yè)8圖7-5 方式1的邏輯結(jié)構(gòu)框圖方式1和方式0差別僅僅在于計(jì)數(shù)器的位數(shù)不同7.2.2 方式1當(dāng)M1、M0=01時(shí),工作于方式1,等效電路邏輯結(jié)構(gòu)見圖7-5。7.2.1 方式0第8頁(yè)/共61頁(yè)7.2.3 方式方式2 方式0和方式1最大特點(diǎn)是計(jì)數(shù)溢出后,計(jì)數(shù)器為全0。因此在循環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在用指令反復(fù)裝入計(jì)數(shù)初值的問題,這會(huì)影響定時(shí)精度,方式2就是為解決此問題而設(shè)置的。 當(dāng)M1、M0=10時(shí),工作方式2,等效邏輯結(jié)構(gòu)見圖7-6(以T1為例,x=1)。 工作方式2為自動(dòng)恢復(fù)初值(初值自動(dòng)裝入)的8位定時(shí)器/計(jì)數(shù)器,TLx(x=0,1)作為常數(shù)緩沖器,當(dāng)TLx計(jì)數(shù)溢出

5、時(shí),在溢出標(biāo)志TFx置“1”的同時(shí),還自動(dòng)將THx中的初值送至TLx,使TLx從初值開始重新計(jì)數(shù)。定時(shí)器/計(jì)數(shù)器方式2工作過程見圖7-7。9第9頁(yè)/共61頁(yè)10圖7-6 方式2邏輯結(jié)構(gòu)框圖第10頁(yè)/共61頁(yè)11圖7-7 方式2工作過程方式2可省去用戶軟件中重裝初值的指令執(zhí)行時(shí)間,簡(jiǎn)化定時(shí)初值的計(jì)算方法,可相當(dāng)精確地定時(shí)。第11頁(yè)/共61頁(yè)7.2.4 方式方式3 方式3是為增加一個(gè)附加的8位定時(shí)器/計(jì)數(shù)器而設(shè)置的,從而使AT89S51具有3個(gè)定時(shí)器/計(jì)數(shù)器。方式3只適用于T0,T1不能工作在方式3。T1方式3時(shí)相當(dāng)于TR1 = 0,停止計(jì)數(shù)(此時(shí)T1可作為串口波特率產(chǎn)生器)。1工作方式工作方式3

6、下的下的T0 當(dāng)TMOD的低2位為11時(shí),T0被選為方式3,各引腳與T0的邏輯關(guān)系見圖7-8。 T0分為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/T* 、GATE、TR0 ,而TH0被固定為一個(gè)8位定時(shí)器(不能作為外部計(jì)數(shù)模式),并使用定時(shí)器T1的狀態(tài)控制位TR1,同時(shí)占用定時(shí)器T1的中斷請(qǐng)求源TF1。12第12頁(yè)/共61頁(yè) 圖7-8 T0方式3的邏輯結(jié)構(gòu)框圖第13頁(yè)/共61頁(yè)2T0工作在方式工作在方式3時(shí)時(shí)T1的各種工作方式的各種工作方式 一般情況下,當(dāng)T1用作串口波特率發(fā)生器時(shí),T0才工作在方式3。T0方式3時(shí),T1可為方式0、1、2,作為串口波特率發(fā)生器,或不需要

7、中斷的場(chǎng)合。(1)T1工作在方式工作在方式0 (2)T1工作在方式工作在方式1 當(dāng)T1的控制字中M1、M0 = 01時(shí),T1工作在方式1,工作示意見圖7-10。14第14頁(yè)/共61頁(yè)(3)T1工作在方式工作在方式2 當(dāng)當(dāng)T1控制字中控制字中M1、M0 = 10時(shí),時(shí),T1為方式為方式2,工作示意,工作示意如如圖圖7-11所示。所示。15圖7-10 T0方式3時(shí)T1為方式1工作示意圖 圖7-11 T0方式3時(shí)T1為方式2工作示意圖第15頁(yè)/共61頁(yè)(4)T1設(shè)置在方式3 T0方式3時(shí),再把T1也設(shè)置成方式3,此時(shí)T1停止計(jì)數(shù)。7.3 對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求 計(jì)數(shù)器模

8、式時(shí),計(jì)數(shù)脈沖來自外部輸入引腳T0或T1。當(dāng)輸入信號(hào)產(chǎn)生負(fù)跳變時(shí),計(jì)數(shù)值增1。每個(gè)機(jī)器周期S5P2期間,都對(duì)外部輸入引腳T0或T1進(jìn)行采樣。如在第1個(gè)機(jī)器周期中采得值為1,而在下一個(gè)機(jī)器周期中采得的值為0,則在緊跟著的再下一個(gè)機(jī)器周期S3P1期間,計(jì)數(shù)器加1。由于確認(rèn)一次負(fù)跳變要花2個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率1/24。 16第16頁(yè)/共61頁(yè) 如選用6MHz晶體,允許輸入脈沖頻率最高為250kHz。如選用12MHz頻率晶體,則可輸入最高頻率500kHz外部脈沖。對(duì)外輸入信號(hào)占空比沒有限制,但為確保某一給定電平在變化前能被采樣1次,則該電平至少

9、保持1個(gè)機(jī)器周期。故對(duì)外部輸入信號(hào)要求見圖7-12,圖中Tcy為機(jī)器周期。圖7-12 對(duì)外部計(jì)數(shù)輸入信號(hào)的要求第17頁(yè)/共61頁(yè)187.4 定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用 4種工作方式中,方式0與方式1基本相同,只是計(jì)數(shù)位數(shù)不同。方式0為13位,方式1為16位。由于方式0是為兼容MCS-48而設(shè),計(jì)數(shù)初值計(jì)算復(fù)雜,所以在實(shí)際應(yīng)用中,一般不用方式0,常采用方式1。7.4.1 P1口控制8只LED每閃亮一次 【例7-1】在AT89S51的P1口上接有8只LED,原理電路見圖7-13。采用T0方式1的定時(shí)中斷方式,使P1口外接的8只LED每閃亮一次。第18頁(yè)/共61頁(yè)19圖7-13 方式1定時(shí)中斷控制L

10、ED閃亮第19頁(yè)/共61頁(yè)(1)設(shè)置)設(shè)置TMOD寄存器寄存器(2)計(jì)算定時(shí)器)計(jì)算定時(shí)器T0的計(jì)數(shù)初值的計(jì)數(shù)初值(3)設(shè)置)設(shè)置IE寄存器寄存器(4)啟動(dòng)和停止定時(shí)器)啟動(dòng)和停止定時(shí)器T0 20第20頁(yè)/共61頁(yè)#includechar i=100;void main ()TMOD=0 x01;/定時(shí)器T0為方式1TH0=0 xee;/設(shè)置定時(shí)器初值TL0=0 x00; P1=0 x00; /P1口8個(gè)LED點(diǎn)亮EA=1;/開總中斷ET0=1;/開定時(shí)器T0中斷TR0=1;/啟動(dòng)定時(shí)器T0while(1);/循環(huán)等待;21第21頁(yè)/共61頁(yè)void timer0() interrupt 1/

11、T0中斷程序TH0=0 xee;/重新賦初值TL0=0 x00; i-;/循環(huán)次數(shù)減一if(i=0)P1=P1;/P1口按位取反i=100;/重置循環(huán)次數(shù)第22頁(yè)/共61頁(yè)7.4.2 計(jì)數(shù)器的應(yīng)用計(jì)數(shù)器的應(yīng)用【例7-2】如圖7-14,T1的采用計(jì)數(shù)模式,方式1中斷,計(jì)數(shù)輸入引腳T1()上外接按鈕開關(guān),作為計(jì)數(shù)信號(hào)輸入。按4次按鈕開關(guān)后,P1口的8只LED閃爍不停。(1)設(shè)置TMOD寄存器(2)計(jì)算定時(shí)器T1的計(jì)數(shù)初值(3)設(shè)置IE寄存器(4)啟動(dòng)和停止定時(shí)器T1。23第23頁(yè)/共61頁(yè)圖7-14 由外部計(jì)數(shù)輸入信號(hào)控制LED的閃爍第24頁(yè)/共61頁(yè)#include void Delay(uns

12、igned int i)/定義延時(shí)函數(shù)Delay( ),i是形式參數(shù),不能賦初值unsigned int j;for(;i0;i-)/變量i由實(shí)際參數(shù)傳入一個(gè)值/因此i不能賦初值for( j=0;j125;j+);/空函數(shù) 第25頁(yè)/共61頁(yè)void main( )/主函數(shù) TMOD=0 x50;/設(shè)置定時(shí)器T1為方式1計(jì)數(shù)TH1=0 xff;/向TH1寫入初值的高8位TL1=0 xfc;/向TL1寫入初值的低8位EA=1; /總中斷允許 ET1=1; /定時(shí)器T1中斷允許 TR1=1; /啟動(dòng)定時(shí)器T1 while(1) ; /無窮循環(huán),等待計(jì)數(shù)中斷 26第26頁(yè)/共61頁(yè)27void T1

13、_int(void) interrupt 3 /T1中斷函數(shù)for(;)/無限循環(huán) P1=0 xff;/8位LED全滅 Delay(500) ;/延時(shí)500ms P1=0;/8位LED全亮 Delay(500); /延時(shí)500ms 第27頁(yè)/共61頁(yè)287.4.3 控制產(chǎn)生周期為2ms的方波 【例7-3】假設(shè)系統(tǒng)時(shí)鐘為12MHz,設(shè)計(jì)電路并編寫程序?qū)崿F(xiàn)從引腳上輸出一個(gè)周期為2ms的方波,見圖7-15。 要在上產(chǎn)生周期為2ms的方波,定時(shí)器應(yīng)產(chǎn)生1ms的定時(shí)中斷,定時(shí)時(shí)間到則在中斷服務(wù)程序中對(duì)求反。使用定時(shí)器T0,方式1定時(shí)中斷,GATE不起作用。 第28頁(yè)/共61頁(yè)圖7-15 定時(shí)器控制輸出一

14、個(gè)周期2ms方波第29頁(yè)/共61頁(yè)30圖7-16 定時(shí)器控制輸出周期2ms的方波的原理電路第30頁(yè)/共61頁(yè)31#include /頭文件sbit P1_0=P10;/定義特殊功能寄存器P1的位變量P1_0void main(void)/主程序TMOD=0 x01;/設(shè)置T0為方式1TR0=1;/接通T0while(1)/無限循環(huán) TH0=0 xfc;/置T0高8位初值TL0=0 x18;/置T0低8位初值do while(!TF0); /判TF0是否為1,為1則T0溢出,往下/執(zhí)行,否則原地循環(huán)狀態(tài)求反TF0=0;/TF0標(biāo)志清零第31頁(yè)/共61頁(yè)32仿真時(shí),右鍵單擊虛擬數(shù)字示波器,出現(xiàn)下拉

15、菜單,點(diǎn)擊“Digital oscilloscope”選項(xiàng),就會(huì)在數(shù)字示波器上顯示引腳輸出周期為2ms方波,如圖7-17所示。第32頁(yè)/共61頁(yè)33圖7-17 虛擬數(shù)字示波器顯示的2ms的方波波形第33頁(yè)/共61頁(yè)7.4.4 利用利用T1控制發(fā)出控制發(fā)出1kHz的音頻信號(hào)的音頻信號(hào) 【例7-4】利用T1的中斷控制引腳輸出頻率為1kHz方波音頻信號(hào),驅(qū)動(dòng)蜂鳴器發(fā)聲。系統(tǒng)時(shí)鐘為12MHz。方波音頻信號(hào)周期1ms,因此T1的定時(shí)中斷時(shí)間為0.5 ms,進(jìn)入中斷服務(wù)程序后,對(duì)求反。電路見圖7-18。 先計(jì)算T1初值,系統(tǒng)時(shí)鐘為12MHz,則方波周期為1s。1kHz音頻信號(hào)周期為1ms,要定時(shí)計(jì)數(shù)的脈沖

16、數(shù)為a。則T1初值: TH1=(65 536 a) /256;TL1=(65 536 a) %25634第34頁(yè)/共61頁(yè)35圖7-18 控制蜂鳴器發(fā)出1kHz的音頻信號(hào)第35頁(yè)/共61頁(yè)參考程序如下:#include /包含頭文件sbit sound=P17; /將sound位定義為腳#define f1(a) (65536-a)/256/定義裝入定時(shí)器高8位時(shí)間常數(shù)#define f2(a) (65536-a)%256 /定義裝入定時(shí)器低8位時(shí)間常數(shù)unsigned int i = 500; unsigned int j = 0; void main(void)EA=1; /開總中斷. E

17、T1=1; /允許定時(shí)器T1中斷 . TMOD=0 x10; /TMOD=0001 000B,使用T1的方式1定時(shí) TH1=f1(i); /給定時(shí)器T1高8位賦初值. TL1=f2(i); /給定時(shí)器T1低8位賦初值. TR1=1; /啟動(dòng)定時(shí)器T1 while(1) 第36頁(yè)/共61頁(yè)37 /循環(huán)等待 i=460; while(j2000); j=0; i=360; while(j 2000); j=0; void T1(void) interrupt 3 using 0 /定時(shí)器T1中斷函數(shù) TR1= 0; /關(guān)閉定時(shí)器T1輸出求反 TH1=f1(i); /定時(shí)器T1的高8位重新賦初值.

18、TL1=f2(i); /定時(shí)器T1的低8位重新賦初值.第37頁(yè)/共61頁(yè)38 j+; TR1=1; /啟動(dòng)定時(shí)器T17.4.5 LED數(shù)碼管秒表的制作 【例7-5】用2位數(shù)碼管顯示計(jì)時(shí)時(shí)間,最小計(jì)時(shí)單位為“百毫秒”,計(jì)時(shí)范圍。當(dāng)?shù)?次按一下計(jì)時(shí)功能鍵時(shí),秒表開始計(jì)時(shí)并顯示;第2次按一下計(jì)時(shí)功能鍵時(shí),停止計(jì)時(shí),將計(jì)時(shí)的時(shí)間值送到數(shù)碼管顯示;如果計(jì)時(shí)到,將重新開始從0計(jì)時(shí);第3次按一下計(jì)時(shí)功能鍵,秒表清0。再次按一下計(jì)時(shí)功能鍵,則重復(fù)上述計(jì)時(shí)過程。 本秒表應(yīng)用定時(shí)器模式,計(jì)時(shí)范圍。此外還涉及如何編寫控制LED數(shù)碼管顯示的程序。 本例原理電路見圖7-19。第38頁(yè)/共61頁(yè)39圖7-19 LED數(shù)碼

19、管顯示的秒表原理電路及仿真第39頁(yè)/共61頁(yè)40參考程序如下:#include /包含51單片機(jī)寄存器定義的頭文件unsigned char code discode1=0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;/數(shù)碼管顯示09的段碼表, 帶小數(shù)點(diǎn)unsigned char code discode2=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/數(shù)碼管顯示09的段碼表,不帶小數(shù)點(diǎn)unsigned char timer=0;/記錄中斷次數(shù)un

20、signed char second; /儲(chǔ)存秒unsigned char key=0;/記錄按鍵次數(shù)main()/主函數(shù) TMOD=0 x01;/定時(shí)器T0方式1定時(shí) ET0=1; /允許定時(shí)器T0中斷第40頁(yè)/共61頁(yè)41EA=1; /總中斷允許second=0; /設(shè)初始值P0=discode1second/10; /顯示秒位0P2=discode2second%10; /顯示位0while(1) /循環(huán)if(P3&0 x80)=0 x00)/當(dāng)按鍵被按下時(shí) key+;/按鍵次數(shù)加1switch(key)/根據(jù)按鍵次數(shù)分三種情況case 1:/第一次按下為啟動(dòng)秒表計(jì)時(shí)TH0=0

21、xee; /向TH0寫入初值的 /高8位第41頁(yè)/共61頁(yè)42TL0=0 x00; /向TL0寫入初值的低8位,定時(shí)5msTR0=1; /啟動(dòng)定時(shí)器T0break;case 2: /按下兩次暫定秒表TR0=0; /關(guān)閉定時(shí)器T0break;case 3: /按下3次秒表清0key=0; /按鍵次數(shù)清second=0; /秒表清0P0=discode1second/10; /顯示秒位0 P2=discode2second%10; /顯示位0break;while(P3&0 x80)=0 x00); /如果按鍵時(shí)間過長(zhǎng)在此循環(huán)第42頁(yè)/共61頁(yè)void int_T0() interrupt

22、 1 using 0 /定時(shí)器T0中斷函數(shù)TR0=0; /停止計(jì)時(shí),執(zhí)行以下操作(會(huì)帶來計(jì)時(shí)誤差)TH0=0 xee; /向TH0寫入初值的高8位TL0=0 x00; /向TL0寫入初值的低8位,定時(shí)5mstimer+; /記錄中斷次數(shù)if (timer=20) /中斷20次,共計(jì)時(shí) timer=0; /中斷次數(shù)清0second+; /加P0=discode1second/10; /根據(jù)計(jì)時(shí),即時(shí)顯示秒位P2=discode2second%10; /根據(jù)計(jì)時(shí),即時(shí)顯示位 43第43頁(yè)/共61頁(yè)44if(second=99) /當(dāng)計(jì)時(shí)到時(shí)TR0=0;/停止計(jì)時(shí)second=0;/秒數(shù)清0key=

23、2; /按鍵數(shù)置2,當(dāng)再次按下按鍵時(shí),/key+,即key=3,秒表清0復(fù)原 else/計(jì)時(shí)不到時(shí)TR0=1;/啟動(dòng)定時(shí)器繼續(xù)計(jì)時(shí)第44頁(yè)/共61頁(yè)7.4.6 測(cè)量脈沖寬度測(cè)量脈沖寬度門控位門控位GATEx的應(yīng)用的應(yīng)用 介紹門控位GATE應(yīng)用。利用GATE測(cè)量INT1*腳上正脈沖寬度。 【例7-6】門控位GATE1可使T1啟動(dòng)計(jì)數(shù)受INT1*控制,當(dāng)GATE1=1,TR1=1時(shí),只有INT1*引腳輸入高電平時(shí),T1才被允許計(jì)數(shù)。利用該功能,可測(cè)量INT1*腳正脈沖寬度,方法見圖7-20。 原理電路見圖7-21,圖中省略復(fù)位電路和時(shí)鐘電路。利用門控位GATE1來測(cè)量INT1*腳上正脈沖寬度,并在

24、6位數(shù)碼管上以機(jī)器周期數(shù)顯示。對(duì)被測(cè)量脈沖信號(hào)寬度,要求能通過旋轉(zhuǎn)信號(hào)源旋鈕可調(diào)。45第45頁(yè)/共61頁(yè)圖7-20 利用GATE位測(cè)量正脈沖的寬度第46頁(yè)/共61頁(yè)47圖7-21 利用GATE位測(cè)量 引腳上正脈沖的寬度的原理電路第47頁(yè)/共61頁(yè)參考程序如下:#include#define uint unsigned int#define uchar unsigned charsbit P3_3=P33;/位變量定義uchar count_high; /定義計(jì)數(shù)變量,用來讀取TH0uchar count_low;/定義計(jì)數(shù)變量,用來讀取TL0uint num;uchar shiwan, wan

25、, qian, bai, shi, ge;uchar flag;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /共陰極數(shù)碼管段碼表void delay(uint z)/延時(shí)函數(shù)48第48頁(yè)/共61頁(yè)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display(uint a,uint b,uint c,uint d,uint e,uint f) /數(shù)碼管顯示函數(shù)P2=0 xfe; P0=tablef;delay(2);P2=0 xfd;P0=t

26、ablee;delay(2);P2=0 xfb;P0=tabled;49第49頁(yè)/共61頁(yè)delay(2);P2=0 xf7;P0=tablec;delay(2);P2=0 xef;P0=tableb;delay(2);P2=0 xdf;P0=tablea;delay(2);void read_count() /讀取計(jì)數(shù)寄存器的內(nèi)容50第50頁(yè)/共61頁(yè)51do count_high=TH1; /讀高字節(jié) count_low=TL1;/讀低字節(jié) while(count_high!=TH1);num=count_high*256+count_low; /*可將兩字節(jié)的機(jī)器周期數(shù)進(jìn)行 顯示處理*/

27、void main( )while(1)flag=0; TMOD=0 x90;/設(shè)置定時(shí)器T1為方式1定時(shí)第51頁(yè)/共61頁(yè)TH1=0;/向定時(shí)器T1寫入計(jì)數(shù)初值 TL1=0;while(P3_3=1); /等待INT1*變低TR1=1;/如果INT1*為低,啟動(dòng)T1(未真正開始計(jì)數(shù))while(P3_3=0); /等待INT1* 變高,變高后T1真正開始計(jì)數(shù)while(P3_3=1); /等待INT1*變低,變低后T1停止計(jì)數(shù)TR1=0;read_count(); /讀計(jì)數(shù)寄存器內(nèi)容的函數(shù)shiwan=num/100000;wan=num%100000/10000;qian=num%1000

28、0/1000;bai=num%1000/100;shi=num%100/10;52第52頁(yè)/共61頁(yè)ge=num%10;while(flag!=100) /減小刷新頻率flag+;display(ge,shi,bai,qian,wan,shiwan); 執(zhí)行上述程序仿真,把INT1*引腳上出現(xiàn)的正脈沖寬度顯示在LED數(shù)碼管顯示器上。晶振頻率為12MHz,如果默認(rèn)信號(hào)源輸出頻率為1kHz的方波,則數(shù)碼管顯示為500。 注意:在仿真時(shí),偶爾顯示501是因?yàn)樾盘?hào)源的問題,若將信號(hào)源換成頻率固定的激勵(lì)源則不會(huì)出現(xiàn)此問題。53第53頁(yè)/共61頁(yè)547.4.7 LCD時(shí)鐘的設(shè)計(jì) 【例7-7】使用定時(shí)器實(shí)現(xiàn)

29、一個(gè)LCD顯示時(shí)鐘。采用LCD 1602,具體見第5章的紹。LCD時(shí)鐘的原理電路見圖7-22。 最小計(jì)時(shí)單位是秒,如何獲得1s的定時(shí)?可將T0定時(shí)時(shí)間定為50ms,采用中斷方式進(jìn)行溢出次數(shù)累計(jì),滿20次,則秒計(jì)數(shù)變量second加1;若秒計(jì)滿60,則分計(jì)數(shù)變量minute加1,同時(shí)將秒計(jì)數(shù)變量second清0;若分鐘計(jì)滿60,則小時(shí)計(jì)數(shù)變量hour加1;若小時(shí)計(jì)數(shù)變量滿24,則將小時(shí)計(jì)數(shù)變量hour清0。第54頁(yè)/共61頁(yè)圖7-22 LCD時(shí)鐘的原理電路第55頁(yè)/共61頁(yè)先將定時(shí)器以及各計(jì)數(shù)變量設(shè)定完畢,然后調(diào)用時(shí)間顯示子程序。秒計(jì)時(shí)由T0中斷服務(wù)子程序來實(shí)現(xiàn)。參考程序如下:#include#include#define uchar unsigned c

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論