51單片機(jī)實(shí)戰(zhàn)指南-定時(shí)器與數(shù)碼管顯示_第1頁(yè)
51單片機(jī)實(shí)戰(zhàn)指南-定時(shí)器與數(shù)碼管顯示_第2頁(yè)
51單片機(jī)實(shí)戰(zhàn)指南-定時(shí)器與數(shù)碼管顯示_第3頁(yè)
51單片機(jī)實(shí)戰(zhàn)指南-定時(shí)器與數(shù)碼管顯示_第4頁(yè)
51單片機(jī)實(shí)戰(zhàn)指南-定時(shí)器與數(shù)碼管顯示_第5頁(yè)
已閱讀5頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

定時(shí)器與數(shù)碼管顯示51單片機(jī)實(shí)戰(zhàn)指南本章內(nèi)容:51單片機(jī)的定時(shí)器/計(jì)數(shù)器基本知識(shí)1定時(shí)器/計(jì)數(shù)器工作方式2定時(shí)器/計(jì)數(shù)器的應(yīng)用3數(shù)碼管的顯示原理及實(shí)現(xiàn)46.151單片機(jī)的定時(shí)器/計(jì)數(shù)器基本知識(shí)定時(shí)器是對(duì)單片機(jī)的內(nèi)部時(shí)鐘計(jì)數(shù)。計(jì)數(shù)器則是對(duì)外部輸入事件進(jìn)行計(jì)數(shù)。本質(zhì)上都是計(jì)數(shù),只是計(jì)數(shù)的對(duì)象不同。51基本型有2個(gè)16位加1計(jì)數(shù)器,T0和T1。6.1.1定時(shí)/計(jì)數(shù)器結(jié)構(gòu)圖6-1定時(shí)/計(jì)數(shù)器基本結(jié)構(gòu)作為定時(shí)器使用時(shí),是對(duì)單片機(jī)內(nèi)部機(jī)器周期計(jì)數(shù),因其內(nèi)部頻率為晶振頻率的1/12,如果晶振頻率為12MHz,則定時(shí)器每接收一個(gè)輸入脈沖的時(shí)間為1μs。當(dāng)用作對(duì)外部事件進(jìn)行計(jì)數(shù)時(shí),接相應(yīng)的外部輸入引腳T0(P3.4)或T1(P3.5),當(dāng)檢測(cè)到輸入引腳上的電平由高跳變到低時(shí),計(jì)數(shù)器加1。6.1.1定時(shí)/計(jì)數(shù)器結(jié)構(gòu)1.工作方式寄存器TMOD(89H)工作方式寄存器TMOD用于設(shè)置定時(shí)/計(jì)數(shù)器的工作方式,低四位用于T0,高四位用于T1。6.1.2特殊功能寄存器2.控制寄存器TCONTCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐng)。6.1.2特殊功能寄存器6.2.2方式16.2定時(shí)器/計(jì)數(shù)器工作方式(方式1和2)6.2.3方式26.2定時(shí)器/計(jì)數(shù)器工作方式(方式1和2)6.3.1定時(shí)器/計(jì)數(shù)器的初始化1.初始化步驟在使用定時(shí)器的時(shí)候,應(yīng)對(duì)它進(jìn)行初始化編程。通常需要完成以下幾個(gè)步驟:1)設(shè)置特殊功能寄存器TMOD,配置好工作方式。2)設(shè)置計(jì)數(shù)寄存器TH和TL的初值。3)定時(shí)/計(jì)數(shù)器在中斷方式工作時(shí),需編程IE寄存器,開(kāi)CPU中斷和源中斷。4)設(shè)置TCON,通過(guò)TR0或TR1置1來(lái)讓定時(shí)器啟動(dòng)計(jì)數(shù)。另外,如定時(shí)/計(jì)數(shù)器工作在查詢方式時(shí),則在程序執(zhí)行過(guò)程中還需判斷TCON寄存器的TF0位,監(jiān)測(cè)定時(shí)器的溢出情況。6.3定時(shí)器/計(jì)數(shù)器的應(yīng)用6.3.1定時(shí)器/計(jì)數(shù)器的初始化2.計(jì)數(shù)初值的計(jì)算如果設(shè)定定時(shí)器計(jì)數(shù)初值為X,機(jī)器周期為T(mén)c,定時(shí)器定時(shí)時(shí)間為T(mén)d,則Td=(2n-X)Tc,那么定時(shí)器的初值為X=2n-Td/Tc得到X初值后,則可根據(jù)定時(shí)器的工作方式來(lái)裝載TH與TL。TH=(65536-N)/256;TL=(65536-N)%256;或TH=-N/256;TL=-N%256;TH=TL=256-N;或TH=TL=-N;6.3定時(shí)器/計(jì)數(shù)器的應(yīng)用【例6-1】如圖6-6所示,P0.1口輸出頻率為0.5Hz的方波,為了便于觀察,可以通過(guò)P0.1口接的LED燈的亮滅來(lái)觀察現(xiàn)象,即LED亮滅各1s。6.3.2應(yīng)用舉例1.查詢方式#include<reg52.h>/******端口定義*****************/sbitWave=P0^1;//位定義,Wave即代表P0.1sbitLSC=P1^7;//特殊功能寄存器的位定義,sbitLSB=P1^6;//3-8譯碼器的輸入端,sbitLSA=P1^5;//控制三極管Q2~Q6的導(dǎo)通voidmain() //主函數(shù){ unsignedcharcnt=0;//記錄T0溢出次數(shù) LSA=0; LSB=0; LSC=0;6.3.2應(yīng)用舉例 Wave=0; //初始化P1.0=0 TMOD=0x01; //設(shè)置定時(shí)器T0工作方式1 TL0=-18432/256; //計(jì)數(shù)器初值 TH0=-18432%256; TR0=1; while(1) //主循環(huán) { if(TF0==1)//判斷T0是否溢出 { TF0=0;//清零中斷標(biāo)志 TL0=-18432/256; //計(jì)數(shù)器初值 TH0=-18432%256;

6.3.2應(yīng)用舉例 cnt++; //計(jì)數(shù)值自加1 if(cnt>=50)//1s到? { cnt=0;//計(jì)數(shù)值清零 Wave=~Wave;//Wave取反 } } }}6.3.2應(yīng)用舉例2.中斷方式#include<reg52.h>//端口定義sbitWave=P0^1; sbitLSC=P1^7; sbitLSB=P1^6; sbitLSA=P1^5; unsignedcharcnt=0; 6.3.2應(yīng)用舉例voidmain() { LSA=0; LSB=0; LSC=0; Wave=0; TMOD=0x01; TL0=-18432/256; TH0=-18432%256; TR0=1; ET0=1; EA=1;//開(kāi)中斷 while(1);//模擬主程序其它工作} 6.3.2應(yīng)用舉例/*T0中斷服務(wù)程序*/voidTimer0(void)interrupt1 //定時(shí)器T0中斷響應(yīng){ TL0=-18432/256; TH0=-18432%256;

cnt++; if(cnt>=50) { cnt=0; Wave=~Wave; }} 6.3.2應(yīng)用舉例【例6-2】定時(shí)器T0外接按鍵KEY2用于模擬計(jì)數(shù)輸入,工作于計(jì)數(shù)模式,當(dāng)5個(gè)計(jì)數(shù)值滿,P0.1口發(fā)光二極管取反。#include<reg52.h>sbit LED=P0^1; //位定義,LED即代表P0.1sbit LSA=P1^5; sbit LSB=P1^6; sbit LSC=P1^7; 6.3.2應(yīng)用舉例voidmain() { LSA=0; LSB=0; LSC=0; TMOD=0x06; //定時(shí)器T0工作方式2計(jì)數(shù) TL0=-5; //計(jì)數(shù)器初值 TH0=-5; TR0=1; //啟動(dòng)定時(shí)器 ET0=1; //開(kāi)中斷 EA=1; while(1); //主循環(huán)} 6.3.2應(yīng)用舉例/*T0中斷服務(wù)程序*/voidTimer0(void)interrupt1 //T0中斷響應(yīng){ LED=~LED; //反向} 6.3.2應(yīng)用舉例脈沖寬度調(diào)制PWM(PulseWidthModulation)是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種技術(shù)手段。就是調(diào)節(jié)一個(gè)周期中高電平所占的百分比,也就是調(diào)節(jié)占空比。比如可以通過(guò)調(diào)節(jié)占空比來(lái)控制直流電機(jī)的通電時(shí)間,以達(dá)到調(diào)速的目的,或通過(guò)調(diào)節(jié)占空比控制加熱時(shí)間,進(jìn)行溫度控制等。 6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制【例6-3】利用定時(shí)器T0產(chǎn)生PWM來(lái)控制P0口LED燈的亮度,原理圖見(jiàn)圖6-6所示。#include<reg52.h>sbit LSA=P1^5; sbit LSB=P1^6; sbit LSC=P1^7;unsignedcharHighRH=0; //高電平重載值的高字節(jié)unsignedcharHighRL=0;//高電平重載值的低字節(jié)unsignedcharLowRH=0; //低電平重載值的高字節(jié)unsignedcharLowRL=0; //低電平重載值的低字節(jié)voidConfigPWM(unsignedintfr,unsignedchardc);voidClosePWM();

6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制voidmain(){ unsignedinti; EA=1;//開(kāi)總中斷 LSA=0; LSB=0; LSC=0; while(1) { ConfigPWM(100,10);//頻率100Hz,占空比10% for(i=0;i<40000;i++); ClosePWM(); ConfigPWM(100,40);//頻率100Hz,占空比40%

6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制

for(i=0;i<40000;i++); ClosePWM(); ConfigPWM(100,90);//頻率100Hz,占空比90% for(i=0;i<40000;i++); ClosePWM();//關(guān)閉PWM,相當(dāng)于占空比100% for(i=0;i<40000;i++); }}/*配置并啟動(dòng)PWM,fr:頻率,dc:占空比*/voidConfigPWM(unsignedintfr,unsignedchardc){ unsignedinthigh,low; unsignedlongtmp;

tmp=(11059200/12)/fr;//計(jì)算一個(gè)周期所需的計(jì)數(shù)值 high=(tmp*dc)/100;//計(jì)算高電平所需的計(jì)數(shù)值6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制

low=tmp-high;//計(jì)算低電平所需的計(jì)數(shù)值 high=65536-high+12;//高電平的重載值并補(bǔ)償 low=65536-low+12;//低電平的重載值并補(bǔ)償 HighRH=(unsignedchar)(high>>8); //高電平拆分 HighRL=(unsignedchar)high; LowRH=(unsignedchar)(low>>8);//低電平拆分 LowRL=(unsignedchar)low; TMOD&=0xF0; //清零T0的控制位 TMOD|=0x01; //配置T0為模式1 TH0=HighRH; //加載T0重載值 TL0=HighRL; ET0=1; //使能T0中斷 TR0=1; //啟動(dòng)T0 P0=0xff; //輸出高電平}6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制/*關(guān)閉PWM*/voidClosePWM(){ TR0=0; //停止定時(shí)器 ET0=0; //禁止中斷 P0=0xff; //輸出高電平}6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制/*T0中斷服務(wù)函數(shù),產(chǎn)生PWM輸出*/voidTimer0()interrupt1{ if(P0==0xff)//當(dāng)前輸出為高,裝載并輸出低電平 { TH0=LowRH; TL0=LowRL; P0=0x00; } else //當(dāng)前輸出為低時(shí),裝載并輸出高電平 { TH0=HighRH; TL0=HighRL; P0=0xff; }}6.3.3用定時(shí)器實(shí)現(xiàn)PWM控制6.4.1數(shù)碼管顯示原理6.4數(shù)碼管的顯示原理及實(shí)現(xiàn)圖6-8數(shù)碼管的結(jié)構(gòu)和原理6.4.1數(shù)碼管顯示原理6.4數(shù)碼管的顯示原理及實(shí)現(xiàn)表6-2數(shù)碼管顯示代碼表【例6-4】利用圖6-9所示電路,在數(shù)碼管最低位顯示字型“0”。6.4.2數(shù)碼管靜態(tài)顯示靜態(tài)顯示原理#include<reg52.h>//端口定義sbitLSC=P1^7;//特殊功能寄存器的位定義,sbitLSB=P1^6;//3-8譯碼器的輸入端,sbitLSA=P1^5;//控制三極管Q2~Q6的導(dǎo)通unsignedcharcodesmgduan[]=//共陽(yáng)極的顯示代碼表0~9{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voidmain(){LSC=0;LSB=0;LSA=1;P0=smgduan[0];//顯示代碼經(jīng)P0口輸出while(1);}6.4.2數(shù)碼管靜態(tài)顯示【例6-5】在上例基礎(chǔ)上,在數(shù)碼管最低位間隔一秒循環(huán)顯示字型“0”~“9”。和例題4.1比較可以看出,只需在程序中采用循環(huán)查表的方式,將表格中的顯示代碼依次經(jīng)P0口輸出,并延時(shí)1秒即可實(shí)現(xiàn)功能要求,具體程序可自行在上例基礎(chǔ)上修改。但在本例中采用不同的編程方式,采用結(jié)構(gòu)化的編程方法,主程序的代碼并不會(huì)因?yàn)楣δ艿脑黾佣^(guò)于復(fù)雜,也便于程序的修改和移植。led.h文件led.c文件主程序main.c(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論