學習引腳的功能

9引腳
- 復位管腳,當給2個機器周期(24個時鍾振盪周期)的高電平時會復位,單片機正常工作時會給0.5v的低電平
- VPD備用電源的輸入端,當主電源VCC發生故障降低到某一規定的低電平時,將+5V電源自動接入RST端,為內部RAM提供備用電源,以保證片內RAM信息不丟失,從而保證單片機在復位后能繼續正常運行(第二功能暫時不用)
RXD:串行輸入口
TXD:串行輸出口
單片機通過電腦下載程序就是通過這兩個IO口,單片機內部有固件程序,上電后先和計算機通信一次,確定計算機是否有發送下載命令,如果沒有,就執行內部程序,如果有,就進行交互,把要下載的程序下載進去。所以需要冷啟動,單片機只有啟動的時候才會檢測是否下載。
INT0、INT1:外部中斷0、外部中斷1
T0、T1:定時器0外部計數輸入,定時器1外部計數輸入(有定時器和計數器功能),定時時內部自動定時間,與管腳無關。外部計數器的輸入端:給端口加一個方波(高低電平變化的波形)設置內部寄存器設置為計數器后,它就可以數數,數你輸入了多少方波,即一共有多少次高低電平變化。做頻率計,測一個信號源頻率為多少,若為正弦波,通過比較器變為方波,然后輸入到這個端口,寫程序控制單片機進行計數,就可以做出計數器。三角波通過積分也可以變成方波。方波就可以直接讀取頻率了。
WR、RD:外部數據存儲器的寫選通、外部數據存儲器的讀選通(暫時不用,用的是片內存儲器,等對單片機了解加深后,自己就會明白)
P3.0~P3.7每一個都有相應的寄存器設置,並不是一個寄存器設置了7個。
XTAL1、2:晶振輸入端,外部加晶振時用
復位電路

開關按下后,VCC將於1K電阻這里接通,電容隔直通交,根據分壓(1/(10+1) *5),RST這里電壓接近5V,按下去的時候肯定大於24個時鍾周期(24個時鍾周期很短)將復位。上電時也是自動復位,上電時電容充電,兩個極板就會有電壓,然后會復位,充完點后會慢慢放電,通過10K電阻流到地。放電時間:τ(tao)=根號下(RC)
晶振電路

兩個電容的作用是上電時幫助晶振Y1起振,晶振正常工作時是輸出正弦波,有時不加電容可能起不來,上電后給電容充電,電容放電幫助起振。一般12MHz左右用30P電容,6MHz一般用20P。
29引腳(PSEN):一般不用,空着就可以
29-31,9一般都是用於編程的,at公司的的89c51必須要專門的編程器編程,編程時VPP要加12V電壓才能把程序寫進去,PROG(program),ALE:單片機正常工作時,可以輸出1/6個時鍾周期的脈沖(方波),若想檢測單片機是否正常工作,這里放一個示波器,檢測是否是晶振的1/6頻率輸出方波。
EA:內部程序存儲器選擇控制端,高電平時訪問內部存儲器,但在程序計數器值超過0xff時,即51單片機4KB,記值范圍0~0xfffh,將自動轉為執行外部程序,即超過內部程序時會自動轉為執行外部存儲器的程序。低電平時只訪問外部存儲器的程序,不論是否有內部程序存儲器,對於8031來說,因為沒有內部存儲器,該腳必須接地,只能選擇外部存儲器。現在很少用外接的程序存儲器,科技發展快,單片機內的存儲空間越來越大。所以一般EA接高即可。

單片機這里EA直接高電平,內部執行程序。
P0是雙向8位三態(高電平,低電平,高阻態)IO口,與P1~P3不同,他們是8位准雙向。P1~3線內均有固定的上拉電阻,P0沒有,當P1~3做輸入使用時,要向該口先寫1,准雙向,即要准備一下才能成為雙向口,輸出時可以直接用,准雙向IO口沒有高阻的浮空狀態,即無高阻狀態,P0線內無固定上拉電阻,由兩個MOS管串接,既可開路輸出,又可以處於高阻的浮空狀態,故稱之為雙向三態IO口。
至此管腳介紹完畢,29PSEN不用記,30ALE正常工作時1/6晶振頻率的方波,31EA程序從哪里執行的標志,30、31的第二功能VPP、PROG編程用的,10~17第二功能邊學邊記,沒必要一次記住。學單片機就是通過學程序把這32個IO隨意控制,設計電路要不斷的積累經驗(網上查資料,找書看),調試。
特殊功能寄存器有P0~P3,PSW、IP、IE,實際上對單片機本身來說開放的IO口,P0~P3就是4個寄存器,對他們操作能直接體現出高低電平變化,每個寄存器都占有一個地址。 (之前已經分散的說過)

點陣型發光二極管,其中一個管有的是能發三種顏色(三原色)可以控制其中的一個兩個或者三個發出不同的顏色。這種不同的顏色變化是一個點一個點構成的,會形成真彩,所有顏色都出現了,電視信號接收到后經過信號分析,送到屏幕就成了電視。所有的電子設備都可以做,空調也可用單片機做出,內部有變頻器,單片機控制它的頻率變化,然后運行空氣壓縮器,空氣壓縮器運行壓縮空氣產生空氣變化,這是制冷,加熱,內部有溫度傳感器,有加熱管,溫度到某一個溫度自動把它停掉,用繼電器切換加熱管是否加熱。功能強的單片機也可以直接控制CRT顯示器,也是三原色的三根線控制,不過是輸出的模擬信號,模擬量不同,輸出的亮度不同,還有兩根數據線X場、Y場,控制在屏幕顯示的位置,再三根線控制顏色,不停地掃描就出現圖形。(..基本廢話,就當了解吧)
數碼管是使用7段或者8段LED發光二極管顯示的,七段就是不帶“點”(dp)

共陰極就是發光二極管陰極接在一起,共陽極就是發光二極管陽極接在一起。接在一起的地方叫做公共端,公共端是接地還是接電源就是高低電平,是由單片機IO口決定的。
舉例,若顯示1,就是數碼管bc兩個led亮
- 共陰極:bc兩個為1,其它為0
- 共陽極:bc兩個為0,其它為1
然后高低位從高位dp到單位a,共陰極就是0x06,共陽極為0xf9


什么是段選,什么是位選?
- 位選:構成一個數字+一個點的8個led燈是一位,即一個數碼管,當許多位連在一起,就需要選擇亮哪一位,而起選擇作用的就是位選,就是那個公共端。
- 段選:構成一個數字+一個點的8個led燈的每一個是一段,控制哪一段亮的就是段選,即a~dp。

總線形式畫出來的,P20~P23位選,P00~P07段選,段選加上拉電阻,單片機IO口輸出的電流很小,可能不到1mA,發光二極管點亮需要5~10mA電流,所以需要上拉電阻。當P00位高,P20位低時,電流會從IO口和VCC一起流經a然后到P20,這種是最簡單的接法,我們電路板不同,但原理類似。疑問:如果P00位低,P20位低,那么電壓不就直接從VCC進入IO口和LED了嗎?


郭天祥教學實驗板,圖中有錯誤,紅線划掉了,每個管腳控制一個段,WE是公共端陰極,所有段選全部連在一起,圖中看到每個數碼管的e都是1,位選獨立的。

此處位選寄存器的12是AD芯片的片選chip select,低電平有效,模數轉換時才用,這里一直給高電平

段選和位分別由鎖存器控制。第一個控制段選,第二個位選,鎖存器的輸入都接在了D0~D7,即接在了P0,都有10K上拉電阻,P0位三態狀態,無上拉電阻,所以無法給高低電平操作,加上拉電阻后,一上電就是高電平,此為原因,記得以后設計電路時單片機P0要加上拉電阻,大小10K,接法如此。看到這里為什么兩個鎖存器都接在了P0?原因鎖存器可以利用11引腳來控制是否使用,高電平,輸入輸出直通,低電平,輸入輸出斷開,輸出保持原來的值(其實就是高電平變低電平的這個下降沿使其鎖存的)。忘接了就回去看。例如,先讓第二個鎖存器11為高,控制位選選擇控制某一個數碼管,然后11位低,保持輸出不變,然后打開段選的鎖存器即可,最后再鎖住。
這就是用一組IO口控制6個數碼管,最多可以八個,位選(12、13還沒放數碼管)那里可以放8個,而之前那種是用了12個IO口控制4個數碼管,浪費IO口,占用資源。
編程開始
如何讓第一個數碼管亮1,其它不亮?思考下
首先其它不數碼管不亮,單片機上電后IO口為高電平,那么所有的位選和段選都是高電平,所以所有的LED都是不亮的,不亮的原因當然就是數碼管的LED陽極和陰極都是高電平嘍。接下來我們要讓第一個數碼管亮,那么首先要打開位選鎖存器來選擇某一個數碼管,先讓位選鎖存器11引腳為1(P2^7=1,當然肯定不能這樣用,畢竟要先定義),這樣就能控制位選鎖存器了,然后是讓第一個亮,其他的不用管,那么第一個數碼管的位選為0(位選是數碼管LED的陰極嘛,忘了就會取看看),其它的位選為1,那么就是0xfe,這樣數碼管就選擇完了,那么就要關閉這個鎖存器,11陰極為低。接下來是控制段選了,來讓數碼管亮1,首先要打開段選鎖存器,讓他的11引腳為1(P2^6=1),這樣就打開了,亮1,那么就是bc為1,其它為0,那么就是0x06,控制完段選后就關掉鎖存器,11位低,這樣就全都操作完了。
這里我是用我單片機的電路圖



1 #include<reg51.h> 2 3 sbit DUAN=P2^6; 4 sbit WEI=P2^7; 5 6 void main() 7 { 8 while(1) 9 { 10 //控制位選 11 WEI=1; 12 P0=0xfe; 13 WEI=0; 14 15 //控制段選 16 DUAN=1; 17 P0=0x06; 18 DUAN=0; 19 } 20 }


1 #include<reg51.h> 2 3 sbit DUAN=P2^6; 4 sbit WEI=P2^7; 5 6 void main() 7 { 8 while(1) 9 { 10 //控制位選 11 WEI=1; 12 P0=0xf0; 13 WEI=0; 14 15 //控制段選 16 DUAN=1; 17 P0=0x06; 18 DUAN=0; 19 while(1); 20 } 21 }

這樣呢就顯示了4個1,先看下我代碼里最后多了一個while(1),如果沒有這條語句,在最外面的while(1)循環中,執行到WEI=0后,P0一開始是有值的,那么在DUAN=1時,P0此時還是0xfe,然后才會變成0x06,同樣的在DUAN=0結束后P0=0x06,然后再一次循環開始,WEI=1,這時候P0也是有值的,是0x06,也就是出了第二三兩個數碼管都亮。這樣在這種一直閃爍的情況下,由於執行的很快,會有一些錯誤,如下:

因此要加上while(1),不知道實體單片機會不會這樣。
接下來讓8個數碼管從0計數到F
1 #include<reg51.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 5 sbit WEI=P2^7; 6 sbit DUAN=P2^6; 7 8 void Delay1ms(); 9 void delay(int n); 10 11 uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; 12 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 無顯示 13 //[]括號內可以不寫,編譯時會自動數元素數然后分配內存 14 15 uchar num; 16 void main() 17 { 18 while(1) 19 { 20 WEI=1; 21 P0=0x00; 22 WEI=0; 23 24 // DUAN=1; 25 for(num=0;num<15;num++) 26 { 27 DUAN=1; 28 P0=Table[num]; 29 delay(1000); 30 DUAN=0; 31 } 32 // DUAN=0; 33 } 34 } 35 36 void delay(int n) 37 { 38 while(n--) 39 { 40 Delay1ms(); 41 } 42 } 43 void Delay1ms() //@12.000MHz 44 { 45 unsigned char i, j; 46 47 i = 2; 48 j = 239; 49 do 50 { 51 while (--j); 52 } while (--i); 53 }
code表示編碼表,寫它編譯完會放在程序存儲器中,如果不寫就放在了隨機存儲器,隨機存儲器是有限的,也就是數據存儲器,51單片機是128字節,每定義一個char變量,例如char num;,這將占用一個字節,如果沒用code那么這個char數組里面有多少個數就占用多少字節,而若是int數組,那么就占用2*元素數的字節。如果程序大了,變量多了,就不夠用了,數據存儲器很寶貴,要省着用,所以用多大的數據量就用多大的變量,例如能用char就不用int。
中斷系統
所有微處理器最有用的就是中斷,而且經常用到


51單片機有5個中斷源,可以嵌套,就是A發生中,B事件來了,那么去執行B,結果執行B的時候,C事件發生了,那么就去執行C,當C執行完,接着執行B,執行完B,再去執行A。這里不講嵌套,之后慢慢就會了,當然51單片機只有兩級嵌套,嵌入式系統可以嵌套4、5級。


匯編中RETI是中斷的返回條件,c語言沒有,c語言執行完中斷函數就自己回去了。

計算機的鍵盤、鼠標等都是有中斷的,鍵盤通過發送一段掃描碼,按一下發送一段,掃描碼是有兩個8位的數據過去,單片機檢測到掃描碼再分析判斷出按得哪個鍵。單片機可以驅動鍵盤,也可以驅動顯示器,可以用單片機做一個電腦,當然要求單片機性能高點。


可以看到1(中斷號)是鍵盤,3是紅外.....共23個

串行輸入和串行輸出是一個中斷源ES,所以是5個中斷源(EX0,ET0,EX1,ET1,ES)。串口暫時不用,這一位先不考慮。
下面第二個和第三張圖片先不用看。



EA總中斷,要想要有中斷就要打開EA,EA=0關閉,CPU屏蔽所有中斷請求,也稱為CPU關中斷,所以如果EA=0,那么P3口只能作為普通IO口,EA=1打開總中斷,啟用了第二功能。
要想啟動外部中斷0,那么要開啟總中斷(EA=1)和外部中斷源(EX0=1),並且選擇電平觸發方式(IT0=0,IT0=1為從高到低負跳變沿觸發),當P3^2有低電平輸入,就去執行中斷程序。

下面第一張圖是串口的,先不用看


下面這個也看不懂,可以先不看

嵌套時,高優先級的可以在低優先級中斷中繼續中斷

下面這個必須記住,記住優先級順序就好,程序入口是匯編用的。

例如當這五個中斷同時發生,那么先發生外部中斷0,然后定時計數器0,外部中斷1,以此類推。
他們的序號分別為0~4,等會寫程序會用。


中斷允許控制寄存器,字節地址A8H,所有能被8整除的寄存器都可以進行位尋址,就是可以直接操作某一位,例如在操縱P2時,我們就不能P2^3=0,而這里就可以EA(IE寄存器的最高位)=1。
打開頭文件REG51.H或者52,可以看到定義了IE,然后又定義了IE的各個位


所有寄存器上電后,默認為0,所有默認為電平觸發。(IT0=0)
下面是當P3^2變為低電平時會觸發中斷函數的代碼。
1 #include<reg51.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 5 sbit WEI=P2^7; 6 sbit DUAN=P2^6; 7 sbit LED0=P1^0; 8 9 void Delay1ms(); 10 void delay(int n); 11 12 uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; 13 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 無顯示 14 //[]括號內可以不寫,編譯時會自動數元素數然后分配內存 15 16 uchar num; 17 void main() 18 { 19 EA=1; 20 EX0=1; 21 while(1) 22 { 23 WEI=1; 24 P0=0x00; 25 WEI=0; 26 27 // DUAN=1; 28 for(num=0;num<15;num++) 29 { 30 DUAN=1; 31 P0=Table[num]; 32 delay(1000); 33 DUAN=0; 34 } 35 // DUAN=0; 36 } 37 } 38 39 void exter0() interrupt 0 40 { 41 LED0=~LED0; 42 } 43 44 void delay(int n) 45 { 46 while(n--) 47 { 48 Delay1ms(); 49 } 50 } 51 void Delay1ms() //@12.000MHz 52 { 53 unsigned char i, j; 54 55 i = 2; 56 j = 239; 57 do 58 { 59 while (--j); 60 } while (--i); 61 }
可以看到,中斷函數不需要聲明,中斷函數返回值為空(void),中斷函數后面有一個interrupt,表示是中斷服務程序,還要有一個標號,這里我們用的是外部中斷0,所以為interrupt0,上面提到過。上面代碼,如果P3^2一直為低電平,將會一直在中斷函數中,總程序將不執行了。
若為電平觸發方式(就是上面這種),在中斷服務返回之前,外部中斷請求輸入必須無效,即變為高電平,否則CPU返回主程序后就會再次返回中斷,就會發生上面總程序不執行的現象。所以電平觸發方式適合於外部中斷以低電平輸入,而且中斷服務程序能清除外部中斷請求源,即外部中斷請求輸入變為高電平。
所以我們這里我們該用跳邊沿觸發方式,也就是在代碼EX0=1;后面加上一句IT0=1;或者TCON=0x01;這樣中斷程序只有在我們將電平從1變為0才會觸發(負跳變沿)
接下來講定時計數器
兩個功能:定時,計數(就是P3^4,P3^5兩個IO口,接了東西會自動計數),我們現在只講定時。

我們用的delay函數就是軟件定時,而定時器是單片機內另一個硬件,和單片機主CPU是隔離開的,設置好自動運行,時間一到只是告訴CPU我觸發中斷。

TMOD的高四位控制T1定時器的工作方式,第四位控制T2定時器的工作方式。

作為計數器時,是由T0或T1引腳輸入的外部脈沖源,作為定時器,是由時鍾周期的輸出脈沖經12分頻,即12個振盪周期,每12個振盪周期,計數器加1,12個振盪周期就是一個機器周期。



我們一般讓GATE=0即可,工作方式我們主要講解方式1,會了這個其它也就會了。GATE=1一般用於方波檢測。

TCON的低四位是用於控制外部中斷的,忘了就回去看看,TF1一般由硬件自動置1清0,所以不需要控制。
下面兩張圖是方式0的,方式0是13位計數,所以不看了。


下面講方式1

一共16位,滿的話就是全1,也就是2的16次方,初值可由自己設定,比如全0或其它,設為N,每一個機器周期則+1,那么計數個數就如上所示。
如果我們定時50ms,那么就需要加50000次,那么就不能從0加到65536,初值就需要為15536(65536-50000),但是要把它分給TH0和TL0(高八位和低八位),那么TH0=(65536-50000)/256,TL0=(65536-50000)%256,2的8次方是256,/256,說明有多少個256,那么進位到高位多少,%256就是不能進位的了。
由此可以看出最多定時65ms,要定時1s怎么辦?那么可以進入20次中斷,每次中斷50ms,就達到了1s。每進一次中斷就在中斷中對一個變量+1,加到20,主程序中判斷什么時候到20,到了20就是1s。
方式2用於串口通信,現在不用

方式3也不用


- TMOD(設置工作方式):現在用T0定時器,所以只對第四位賦值,TMOD是89H內存地址,不能進行位操作(例如GATE=0),所以要整體賦值,方式1則M1M0=01,C/T=0,GATE=0,所以TMOD=0x01,意思為設置定時器0為工作方式1。
- 計算初值:一次中斷50ms,所以TH0=(65536-50000)/256,TL0=(65536-50000)%256,不用算出來,計算機會算的。
- 中斷:所以總中斷打開,EA=1,然后打開定時器0的中斷,ET0=1。
- 啟動定時器0:TR0=1.
這樣就開始定時了,滿后就進入定時中斷函數(后面是interrupt 1),這時要重新賦值,不然就從0開始定時了,就是65ms了。
下面是用定時器完成的數碼管計數。
1 #include<reg51.h> 2 #define uchar unsigned char 3 #define uint unsigned int 4 5 void Delay1ms(); 6 void delay(int n); 7 8 sbit WEI=P2^7; 9 sbit DUAN=P2^6; 10 sbit LED0=P1^0; 11 12 void Delay1ms(); 13 void delay(int n); 14 15 uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; 16 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 無顯示 17 //[]括號內可以不寫,編譯時會自動數元素數然后分配內存 18 19 uchar num,tt; 20 void main() 21 { 22 tt=0, 23 num=0; 24 TMOD=0x01;//設置定時器0為工作方式1 25 TH0=(65536-50000)/256; 26 TL0=(65536-50000)%256; 27 EA=1;//開總中斷 28 ET0=1;//開啟定時器中斷 29 TR0=1;//開啟定時器 30 WEI=1; 31 P0=0x00; 32 WEI=0; 33 34 // DUAN=1; 35 // P0=Table[num]; 36 // DUAN=0; 37 while(1) 38 { 39 if(tt==20) 40 { 41 tt=0; 42 num++; 43 if(num==16) 44 { 45 num=0; 46 } 47 DUAN=1; 48 P0=Table[num]; 49 // delay(1000); 50 DUAN=0; 51 } 52 } 53 } 54 55 void exter0() interrupt 1 56 { 57 TH0=(65536-50000)/256; 58 TL0=(65536-50000)%256; 59 tt++; 60 } 61 62 void delay(int n) 63 { 64 while(n--) 65 { 66 Delay1ms(); 67 } 68 } 69 void Delay1ms() //@12.000MHz 70 { 71 unsigned char i, j; 72 73 i = 2; 74 j = 239; 75 do 76 { 77 while (--j); 78 } while (--i); 79 }
會看到數碼管沒有從0開始或者第一秒會不是0是一個亂碼,因為一開始段選的P0沒給0的值,只有到了1s后才會給段選的P0顯示1的值,所以需要把注釋的給段選P0賦值的語句加上。還有記住絕對不能再加上那句delay,因為當程序進入if開始執行delay后,delay延時執行時,會被中斷去執行定時中斷程序,因此若加上delay,那么延時的時間會非常長。
最后再總結一下中斷這里

從圖中可以看到有這幾個寄存器,TCON、IE、IP、SCON還有一個圖中沒有的IPH,這里我在把圖放出來,其中SCON是串口的,這里還不學,所以先不放了。




看出來IP、IPH是管理優先級的,你只需要知道默認的優先級順序是:外部中斷0、定時/計數器0、外部中斷1、定時/計數器1、串行口、定時/計數器2 其他的就不用管了。
接下來就是梳理中斷了:
- 外部中斷0(以0為例,1的話就是把0換成1)
使用外部中斷的步驟,首先你得寫了中斷函數(后面加上interrupt 0,若為外中斷1就改為2,是按照優先級順序來的),接下來就是打開中斷源,所有的中斷源都是由IE寄存器控制的(第三個圖可以看到),在第一個圖,從右往左看,上面IP不需要看了,接下來就是IE,可以看到要想實現外部中斷,要開啟的有兩個中斷源,分別是總中斷EA,外部中斷中斷源EX0,然后就是控制它的觸發方式,這樣就可以使用外部中斷了,這里要用到TCON寄存器,外部中斷源的觸發方式選擇在第二張圖看到用TCON的IT0控制,這樣就結束了。可以看到還一個和外部中斷有關的是TCON的IE0,這個是請求標志位,計算機管的,你不需要管(當然另一個控制外部中斷的方式可以用到,但你現在不需要學,那個很少用)。
最后我們再說一遍:中斷函數 -> 總中斷EA -> 外部中斷源EX0 -> 觸發方式IT0 (注意,這兩個寄存器都是可位尋址的,所以直接EA=1就可以,不需要IE^7這樣操作) - 定時器 0 (計數器先不講,定時器1同0)

使用定時器的步驟,首先你得寫了中斷函數(后面加上interrupt1,若為定時器1就改為3),接下來就是打開中斷源,總中斷源EA,定時器中斷源ET0,控制定時器的工作模式和工作方式,它和外部中斷不同,外部中斷用TCON,這個用的是TMOD,GATE是怎么開啟定時器,C/T是工作模式選擇,M1M0是工作方式選擇,TMOD的高四位是定時器1的,第四位是定時器0的,我們一般是GATE=0,定時器模式C/T=0,工作方式1 M1M0=01,所以TMOD=0x01(注意TMOD是不可位尋址,所以不能在代碼里寫M1=0這樣,必須是TMOD=什么。),設置定時初值,TH0=,TL0=,全部開啟后接下來就是讓定時器開始定時了,所以用到了TCON的TR0=1。
最后我們再說一遍:中斷函數 -> 總中斷源EA -> 定時器中斷源ET0 ->工作模式TMOD(常為TMOD=1) -> 定時初值TH0=,TL0= -> 開啟定時器TR0
下一課開始是這節課的作業!!!
動態掃描這里說一下,下節課講
讓分別顯示1234(動態掃描)
就要用人眼的視覺暫留效應和數碼管的余輝,先讓第一個數碼管亮,顯示1,其它不亮,然后快速的讓第二個顯示2,其他的不亮,以此類推,這就是動態掃描。(人眼只能分別20ms以內的變化,那么讓他20ms以內變化就可以了,這樣人就看不出來了,就相當於四個數碼管一直亮着1234)
