<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 光電顯示 > 設(shè)計(jì)應(yīng)用 > 如何用單片機(jī)點(diǎn)亮LED

          如何用單片機(jī)點(diǎn)亮LED

          作者: 時(shí)間:2018-08-08 來(lái)源:網(wǎng)絡(luò) 收藏

          每個(gè)入門的朋友,我想第一個(gè)程序幾乎都是點(diǎn)亮一顆燈了,這同軟件工程的“hello world”一樣經(jīng)典,是很簡(jiǎn)單,但卻有著很多回憶,依然記得學(xué)習(xí)的那段經(jīng)歷,那時(shí)經(jīng)典的8051比如AT89C52要大約8個(gè)大洋,電阻電容等等都得自己去買(學(xué)校那時(shí)沒(méi)開(kāi)發(fā)實(shí)驗(yàn)室),有時(shí)為了幾顆電阻,幾顆燈,還得花4元的公交車費(fèi)跑去電子市場(chǎng),還論顆買,電阻1毛錢2顆,燈M5粗的那種1毛錢1顆,然后興高采烈的各種焊接,各種跳線,還各種燒毀……回想起來(lái)都說(shuō)淚啊!

          本文引用地址:http://www.ex-cimer.com/article/201808/385828.htm

          言歸正傳,我認(rèn)為單片機(jī)第一個(gè)程序是點(diǎn)亮LED的理由有幾點(diǎn):

          1、學(xué)會(huì)用Keil軟件建立單片機(jī)工程,建立程序文件,軟件配置和程序編譯。

          2、學(xué)會(huì)分析電路并分析驗(yàn)證。

          3、學(xué)會(huì)用proteus繪制電路原理圖,并調(diào)試仿真。

          4、了解一個(gè)小實(shí)驗(yàn)的基本流程。

          綜合以上幾點(diǎn),認(rèn)真的做好這個(gè)實(shí)驗(yàn),對(duì)提高學(xué)習(xí)興趣,很有必要。

          什么是LED?

          LED中文名稱叫發(fā)光二極管,它會(huì)發(fā)出可見(jiàn)光,常見(jiàn)及常用的有可發(fā)紅、黃、綠色光的LED燈,在產(chǎn)品中,紅色常用來(lái)指示系統(tǒng)錯(cuò)誤,綠色常用來(lái)指示系統(tǒng)正常,黃色常用來(lái)警告,根據(jù)應(yīng)用需求的不同,LED燈也各有千秋,如圖。

          圖中有方形,圓形,貼片等LED,顏色也不一樣,一般地,發(fā)光顏色與燈的外形顏色相同,使用的時(shí)候,必須注意幾點(diǎn):

          1、引腳判斷:本例使用2腳的LED燈,新的LED長(zhǎng)的引腳為正極,短的引腳為負(fù)極。

          2、工作電壓:通常為1.2~2.2V

          3、工作電流:2mA~20mA

          如何點(diǎn)亮?

          知道LED的基本參數(shù)后,就可以根據(jù)需求設(shè)計(jì)電路了,噢!電路?什么是電路?

          電路:指的是由電源,導(dǎo)線,用電器,開(kāi)關(guān)組成的回路。(大概這樣吧)

          那么,點(diǎn)亮LED燈的電路必須包含定義中的部分:

          1、電源:本例用5V直流電源供電。

          2、導(dǎo)線:本例用proteus仿真,連線即為導(dǎo)線。

          3、用電器:LED燈,當(dāng)然,還得加電阻。

          4、開(kāi)關(guān):仿真中“運(yùn)行”相當(dāng)于開(kāi)關(guān)。

          好了,下面見(jiàn)證LED的成長(zhǎng):

          1、計(jì)算:參考LED的參數(shù),本例使用M3大的圓形紅色LED來(lái)演示,它的工作電流取3mA就足夠亮,LED的亮度與電流有關(guān);工作電壓取2V(實(shí)測(cè)得的數(shù)據(jù)), 那么,怎樣滿足該條件? 電源用5V供電,而LED只需要2V,還剩3V,怎么辦?這時(shí),該電阻出場(chǎng)了,電阻是一種能“吃電能”的家伙,剩余的3V電壓就加在它上面,這樣就清楚了, Vled = 2V Vr = 3V ,I = 3mA , 電阻和LED燈應(yīng)該串聯(lián),不解釋,這里還差一個(gè)參數(shù)——電阻值,這時(shí),歐姆定律出場(chǎng), R = U / I = 3V / 3mA = 1K 。

          2、繪制仿真電路圖: 過(guò)程就不說(shuō)了,看圖

          運(yùn)行仿真后。

          加入電流表和電壓表,測(cè)測(cè)數(shù)據(jù)和計(jì)算的是否有偏差。

          OK,正確。

          單片機(jī)如何控制LED?

          上圖中是給LED燈直接加電壓,使之點(diǎn)亮,這種控制方式是靠控制開(kāi)關(guān)的通斷使之亮滅,同家庭里的燈是一樣一樣的,單片機(jī)的出現(xiàn)開(kāi)啟了電子設(shè)備智能時(shí)代,換一種方式,用單片機(jī)去控制LED燈的亮滅,而單片機(jī)靠執(zhí)行程序去輸出想要的結(jié)果,真真正正地把人的思想實(shí)現(xiàn)出來(lái)。

          單片機(jī)是數(shù)字電路,輸出/輸入只有高電平1和低電平0之分,通常0~0.4V的電壓范圍定義為低電平,大于2V定義為高電平,如圖是單片機(jī)控制LED燈的電路圖。

          PS:由于是仿真,這里偷懶了,圖中省略了時(shí)鐘電路,電源電路和復(fù)位電路

          將LED燈的負(fù)極連接到單片機(jī)P1.0口,正極串口電阻R1到+5V,這樣原理相同的,單片機(jī)輸出低電平0,使得LED和電阻通路的兩端產(chǎn)生電勢(shì)差,相當(dāng)于上面圖中的“5V電源”,從而滿足LED燈的參數(shù),點(diǎn)亮LED燈;而當(dāng)單片機(jī)P1.0口輸出高電平時(shí),電勢(shì)差約為0,不滿足LED燈亮的要求,此時(shí)LED燈熄滅,要達(dá)到這樣的效果,必須將“想法”裝給單片機(jī),這時(shí)程序閃亮登場(chǎng)。

          程序編寫(xiě):用keil新建一個(gè)C語(yǔ)言程序工程,代碼如下:

          運(yùn)行仿真,可以看到LED燈亮了,具體步驟不多說(shuō),網(wǎng)上一大堆

          可是,這樣好嗎?嗯,實(shí)驗(yàn)到這步,流程基本走通了,然而這樣的程序并沒(méi)多大意義,當(dāng)我們需要點(diǎn)亮多顆燈時(shí),需要shit LED1 = 。.. sbit LED2 = 。.. 然后再賦值,也許你會(huì)說(shuō):“簡(jiǎn)單,同時(shí)端口賦值嘛, 如 P1 = 0x6D 完事兒” ,但是,這幾顆燈要是都不在一個(gè)端口呢?這時(shí)還是得一個(gè)個(gè)端口去定義,去賦值?這樣好嗎?可能不好,下面的程序案例,將點(diǎn)亮LED燈封裝在一個(gè)函數(shù)里,這個(gè)函數(shù)僅實(shí)現(xiàn)點(diǎn)亮LED燈的邏輯功能,使用時(shí)根據(jù)硬件連接設(shè)置函數(shù)參數(shù)即可,希望起到拋磚引玉的效果。

          運(yùn)行結(jié)果為P1^2和P1^7輸出低電平,LED燈點(diǎn)亮。



          關(guān)鍵詞: LED 單片機(jī)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();