一、LED控制介紹
發(fā)光二極管是半導體二極管的一種,可以把電能轉(zhuǎn)化成光能,常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娞匦?。當給發(fā)光二極管加上正向電壓時就會發(fā)光,光的強弱與工作電流成正比。一般情況下,LED的正向工作電流在10mA左右,如果電流過大就會燒壞LED,因此使用時必須串聯(lián)限流電阻以控制通過二極管的電流。
普通發(fā)光二極管的正向飽和壓降為1.6V~2.1V。發(fā)光二極管的特點是:工作電壓很低(有的僅一點幾伏);工作電流很小(有的僅零點幾毫安即可發(fā)光);抗沖擊和抗震性能好,可靠性高,壽命長;通過調(diào)制通過的電流強弱可以方便地調(diào)制發(fā)光的強弱。由于有這些特點,發(fā)光二極管在一些光電控制設備中用作光源,并廣泛應用于各種電子電路、家電、儀表等設備中。
本文使用的開發(fā)板上設計了8個發(fā)光二極管,其中有2個紅色、2個黃色、2個綠色和2個藍色。發(fā)光二極管部分的原理圖如下圖所示。R21是470歐姆的8位阻排,LED1~LED8是8個發(fā)光二極管,阻排的公共端與5V電源VCC相連,發(fā)光二極管的正極與阻排相連,負極與插針J21相連,J21經(jīng)過杜邦線可以連接到需要使用的I/O口。連接好后,單片機輸出低電平時對應的LED燈點亮,高電平時對應的LED燈熄滅。
我們來了解下I/O口的工作原理。I/O口即輸入和輸出口,單片機的I/O口既可以作為輸入信號端、也可以作為輸出信號端。圖中,J21可以接5V、懸空、也可以接地。以LED1為例,我們將LED1的等效電路單獨畫出來,如下圖所示。
圖中VCC是5V的電源,當電路的右側(cè)接5V或者懸空時,電路沒有電流通過,LED燈的狀態(tài)是熄滅的;當電路的右側(cè)接地時,兩端壓差是5V,所以LED燈被點亮。在數(shù)字電路中,接+5V為電平“1”,接地為“0”。
所以在設計中,將LED連接到單片機的I/O口,此時我們只需要控制單片機的I/O口為“1”或者為“0”就可以控制LED燈的亮滅了。
二、例程測試
在這個實驗中我們用兩種不同的方法對一個LED燈進行控制,在測試之前需要將上邊J21的1引腳與單片機的P00用杜邦線連接起來。
方法1:
實現(xiàn)的代碼如下所示
#include sbit LED=P0^0; void main (void) { LED=0; //將P00口賦值0,對外輸出低電平 for(;;); //死循環(huán),原地等待 } 將這個代碼編譯之后將Hex文件燒寫到單片機中,可以看到LED1點亮。 1、在上面的代碼中,#include #ifndef __REG52_H__ #define __REG52_H__ /* BYTE Registers */ sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0; sfr PSW = 0xD0; sfr ACC = 0xE0; sfr B = 0xF0; sfr SP = 0x81; sfr DPL = 0x82; sfr DPH = 0x83; sfr PCON = 0x87; sfr TCON = 0x88; sfr TMOD = 0x89; sfr TL0 = 0x8A; sfr TL1 = 0x8B; sfr TH0 = 0x8C; sfr TH1 = 0x8D; sfr IE = 0xA8; sfr IP = 0xB8; sfr SCON = 0x98; sfr SBUF = 0x99; /* 8052 Extensions */ sfr T2CON = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2 = 0xCC; sfr TH2 = 0xCD; /* BIT Registers */ /* PSW */ sbit CY = PSW^7; sbit AC = PSW^6; sbit F0 = PSW^5; sbit RS1 = PSW^4; sbit RS0 = PSW^3; sbit OV = PSW^2; sbit P = PSW^0; //8052 only /* TCON */ sbit TF1 = TCON^7; sbit TR1 = TCON^6; sbit TF0 = TCON^5; sbit TR0 = TCON^4; sbit IE1 = TCON^3; sbit IT1 = TCON^2; sbit IE0 = TCON^1; sbit IT0 = TCON^0; /* IE */ sbit EA = IE^7; sbit ET2 = IE^5; //8052 only sbit ES = IE^4; sbit ET1 = IE^3; sbit EX1 = IE^2; sbit ET0 = IE^1; sbit EX0 = IE^0; /* IP */ sbit PT2 = IP^5; sbit PS = IP^4; sbit PT1 = IP^3; sbit PX1 = IP^2; sbit PT0 = IP^1; sbit PX0 = IP^0; /* P3 */ sbit RD = P3^7; sbit WR = P3^6; sbit T1 = P3^5; sbit T0 = P3^4; sbit INT1 = P3^3; sbit INT0 = P3^2; sbit TXD = P3^1; sbit RXD = P3^0; /* SCON */ sbit SM0 = SCON^7; sbit SM1 = SCON^6; sbit SM2 = SCON^5; sbit REN = SCON^4; sbit TB8 = SCON^3; sbit RB8 = SCON^2; sbit TI = SCON^1; sbit RI = SCON^0; /* P1 */ sbit T2EX = P1^1; // 8052 only sbit T2 = P1^0; // 8052 only /* T2CON */ sbit TF2 = T2CON^7; sbit EXF2 = T2CON^6; sbit RCLK = T2CON^5; sbit TCLK = T2CON^4; sbit EXEN2 = T2CON^3; sbit TR2 = T2CON^2; sbit C_T2 = T2CON^1; sbit CP_RL2 = T2CON^0; #endif 從這個文件的定義可以看出,這個文件主要定義了單片機的端口和特殊功能寄存器。程序中包含了頭文件之后,就可以直接使用定義過的標志符。例如:P0口的寄存器地址是0x80,其中0x表示它后邊的數(shù)值是16進制的。如果對P0口進行操作,我們直接使用P0這個標志符就行了,而不需要了解P0口寄存器的物理地址和內(nèi)部結(jié)構(gòu)。 2、sfr和sbit,reg52.h中可以看到這兩個關(guān)鍵字?!皊fr P0= 0x80;”這一句的含義是將單片機內(nèi)部地址為0x80的寄存器重新起名為P0,以后我們在程序中就可以直接操作P0,就相當于對單片機內(nèi)部的0x80地址處的寄存器進行操作。實際上,通過sfr關(guān)鍵字的定義,讓Keil編譯器在單片機和用戶之間搭建了一條可以進行溝通的橋梁,我們操作P0口,而單片機并不知道什么是P0口,但它知道知道它內(nèi)部的地址0x80是什么。 “sbit CY= PSW^7;”這一句的意思是將PSW這個寄存器的第7位重新命名為CY,所以在需要單獨操作PSW寄存器第7位時,可以直接操作CY。 在程序中有一句“sbit LED=P0^0;” 這一句的意思是將P0口寄存器的第0位,也就是最低位定義為LED,因此程序中操作LED時相當于操作P0口寄存器的第0位。例如:LED=0; 相當將0賦值給P0口寄存器的第0位。 3、main()函數(shù),主函數(shù)就是main函數(shù),是程序的入口,程序一旦執(zhí)行的時候就會從這個入口開始,任何一個程序中有且只有一個主函數(shù)。 4、for(;;)。for()循環(huán)是C語言中一種基本的循環(huán)方式,當條件為真時,進入循環(huán)體,條件不滿足時,跳出。 for()循環(huán)的標準格式為 for(表達式1;表達式2;表達式3) {語句(內(nèi)部可以為空)} 我們來看一下下邊這段程序。 unsigned char i; for(i=2;i>0;i++) { } 這段程序首先定義了一個無符號字符型變量i,然后指向for語句。i=2;i>0;i++這三個表達式中,表達式1是給i賦一個初值2,表達式2判斷i>0是真還是假,表達式3是i每個周期減1。我們來分析一下這個for循環(huán)的執(zhí)行過程。 第一步:給i賦初值2,此時i=2。 第二步:因為2>0,條件成立,所以其值為真,那么執(zhí)行for循環(huán)下邊大括號中的內(nèi)容。由于大括號中為空,所以什么也不執(zhí)行。 第三步:i自減1,即i=i-1=2-1=1。 第四步:跳回到第二步,因為1>0,條件成立,所以其值為真,那么執(zhí)行for循環(huán)下邊大括號中的內(nèi)容。由于大括號中為空,所以什么也不執(zhí)行。 第五步:i自減1,即i=i-1=1-1=0。 第六步:跳回到第二步,因為0>0,條件不成立,所以其值為假,那么結(jié)束for循環(huán),程序從for循環(huán)中跳出。 “for(;;);”這個語句中for的三個表達式都為空,這個for語句是無限循環(huán)。 本例中,進入main函數(shù)對LED燈進行操作,之后進入for循環(huán),并一直在循環(huán)中等待,不進行任何操作,因此LED燈的狀態(tài)也不會發(fā)生變化。 該程序雖然簡單,但是包含C語言最基礎的知識,后面的程序會在此基礎上增加新的內(nèi)容。 5、程序的注釋,//和/* */這兩種符號表示注釋。注釋語句雖然不對程序的運行產(chǎn)生任何影響,但必要的注釋是程序的重要組成部分。對于一個程序員來說,及時加注釋是一個好的習慣。上述兩個注釋的區(qū)別在于://是行注釋,換行無效;/* */中間的內(nèi)容都是注釋,換行有效。注釋可以根據(jù)大家的習慣,沒有具體要求。 方法二: 實現(xiàn)代碼如下所示 #include #define LED P0 //宏定義關(guān)鍵字,定義LED到單片機的P0口 void main (void) { LED=0xfe; //將P0口賦值0xfe, //0xfe轉(zhuǎn)換為二進制為 1111 1110,即P0口的最低位輸出低電平,其它位輸出高電平。 for(;;); //死循環(huán),原地等待 } 在這個實驗中,對LED控制的命令與方法一是不同的,主要知識點如下: 1、宏定義,宏定義又稱為宏代換、宏替換,簡稱“宏”。 宏定義的格式: #define 標識符 字符串 其中的標識符就是所謂的符號常量,也稱為“宏名”。預處理(預編譯)工作也叫做宏展開,將宏名替換為字符串。掌握“宏”概念的關(guān)鍵是“換”。一切以換為前提、做任何事情之前先要換,準確理解之前就要“換”。即在對相關(guān)命令或語句的含義和功能作具體分析之前就要換。 例如程序中#define LED P0 表示LED燈定義在P0口上。因此對P0口進行操作,我們可以直接用LED來代替,LED=0xfe;就相當于P0=0xfe; 2、進制轉(zhuǎn)換,這個實驗與第一個實驗不同,直接對P0口整體進行操作。P0口的寬度是8位,用二進制表示是xxxx xxxx。單片機常用的進制是:二進制、八進制、十進制和十六進制,0x前綴表示十六進制,如:0xFF。0xFF與0xff相同,C語言中數(shù)值不區(qū)分大小寫。這幾種進制形式不同,但是可以相互轉(zhuǎn)換。 本實驗中同樣是點亮了LED1。但是對P0口進行整體賦值的方法,將0xfe賦給了P0,0xfe轉(zhuǎn)換成2進制就是11111110,也就是將P0口的高7位拉高,最低位拉低,這樣LED1就可以點亮了,其余的燈熄滅。
上一篇:51單片機(六)—— GPIO控制多路LED
下一篇:51單片機(四)—— 51單片機仿真芯片的使用
推薦閱讀
史海拾趣
隨著LED技術(shù)的不斷發(fā)展和市場需求的不斷變化,Exclara看到了新的市場機遇。公司憑借在LED領域的技術(shù)積累和市場經(jīng)驗,成功進軍了智能家居、智能照明等新興市場。在這些新興市場中,公司憑借其獨特的技術(shù)優(yōu)勢和創(chuàng)新能力,迅速獲得了市場份額和客戶的認可。面對新的市場挑戰(zhàn)和機遇,Exclara將繼續(xù)保持創(chuàng)新精神和技術(shù)實力,為電子行業(yè)的發(fā)展貢獻更多的力量。
請注意,以上故事框架僅供參考,具體內(nèi)容和細節(jié)需要根據(jù)實際情況進行補充和完善。
在電子行業(yè)這個競爭激烈的領域里,技術(shù)的更新?lián)Q代速度非??臁榱吮3诸I先地位,Exclara高度重視研發(fā)投入,不斷引進高端人才和先進設備,加強研發(fā)團隊建設。通過持續(xù)的研發(fā)投入,公司不僅保持了技術(shù)的領先地位,還成功開發(fā)出了一系列具有自主知識產(chǎn)權(quán)的核心技術(shù)。
為了保持市場競爭力,杰力不斷投入研發(fā)資源,致力于技術(shù)創(chuàng)新和產(chǎn)品升級。公司成功研發(fā)出多款高性能、低功耗的功率組件和集成電路產(chǎn)品,并獲得了多項專利。這些產(chǎn)品不僅滿足了客戶對高品質(zhì)電子元件的需求,還推動了整個電子行業(yè)的發(fā)展。同時,杰力還密切關(guān)注市場動態(tài)和技術(shù)趨勢,不斷調(diào)整產(chǎn)品策略,以適應市場的變化。
隨著航空業(yè)的逐漸發(fā)展,福特汽車公司意識到航空通信技術(shù)的重要性。在20世紀30年代,福特開始投資研發(fā)航空無線電通信系統(tǒng),旨在提高飛行中的通信效率和安全性。這一舉措不僅促進了福特在航空技術(shù)領域的進一步拓展,也為后來的航空通信標準制定提供了參考。
作為一家有著高度社會責任感的企業(yè),EOS始終關(guān)注環(huán)保和可持續(xù)發(fā)展問題。他們采用環(huán)保材料和綠色生產(chǎn)工藝,降低產(chǎn)品對環(huán)境的污染。同時,EOS還積極參與社會公益事業(yè),捐資助學、扶貧濟困等活動不斷。這些舉措不僅提升了企業(yè)的社會形象,也為公司的可持續(xù)發(fā)展奠定了堅實基礎。
FCT Electronics的創(chuàng)立可以追溯到二十年前,當時電子行業(yè)正處于飛速發(fā)展的階段。幾位富有遠見和創(chuàng)業(yè)精神的工程師看到了電子測試設備市場的巨大潛力,于是聯(lián)手創(chuàng)立了FCT Electronics。公司最初的產(chǎn)品是一款簡易的電路板測試儀,因其精準度高、操作簡便而迅速在市場上占有一席之地。隨著業(yè)務的不斷拓展,F(xiàn)CT Electronics逐漸成為電子行業(yè)測試設備領域的佼佼者。
本帖最后由 paulhyde 于 2014-9-15 09:25 編輯 e芯電子技術(shù)交流4群開始啟用35871678!謝謝支持 … 查看全部問答∨ |
開機的時候那個消磁按鈕上的紅色指示燈不停的閃,按一下會進行消磁動作,但好像不能完成消磁,數(shù)碼管顯示364一閃一閃的。 有時候開機一段時間后能消磁成功,有時候開機幾個小時也不行。用過的DD指導一下,是有故障還是我使用問題?… 查看全部問答∨ |
如題,這個恐怕是大家經(jīng)常遇到的問題吧? 一種方法是: 在任何時候都把“程序規(guī)模”限制在你所能夠掌控的范圍內(nèi)。 那如果超過范圍咋辦?模塊化——合理劃分和封裝細節(jié)。其實如果是自上而下的設計(通常如此),模塊化設計是非常自然的事(因為 ...… 查看全部問答∨ |
|
最近看了一個電路,就是在觸摸屏的四根線上,分別接了4個屏蔽電阻下拉接地。 想請教一下: 1。為什么觸摸屏那四根線要下拉?我看很多觸摸屏的電路,沒有下拉使用也很正常??! 2。為什么要用屏蔽電阻?普通電阻不行嗎?會造成什么樣的影響? 麻 ...… 查看全部問答∨ |
|
#include \"msp430x54x.h\" void main(void){ WDTCTL = WDTPW + WDTHOLD; // Stop WDT P5SEL |=BIT6+BIT7; &nbs ...… 查看全部問答∨ |