??作者簡介:大家好,我是澤奀。全棧領(lǐng)域新星創(chuàng)作者???
??個(gè)人主頁:weixin_52632755的博客_澤奀_CSDN博客
??點(diǎn)贊?評論?收藏 == 養(yǎng)成習(xí)慣??
??本系列嗶哩嗶哩江科大51單片機(jī)的視頻為主以及自己的總結(jié)梳理???
https://blog.csdn.net/weixin_52632755/category_11316267.html
- 介紹兩個(gè)比較好用的軟件 1、網(wǎng)易有道詞典? ? ? ? ?2、福昕閱讀器(PDF)
- 網(wǎng)易有道詞典對我這種英語渣渣來說就是福星了
- 福昕閱讀器我個(gè)人認(rèn)為也是我比較喜歡去用的一款閱讀器了。?
目錄
??LED介紹?
??LED原理圖
??如何控制IO口輸出高低電平?
??進(jìn)制轉(zhuǎn)換
??點(diǎn)亮一個(gè)LED代碼
??程序下載
??LED燈閃爍?
??LED流水燈
??LED流水燈高階操作
??LED介紹?
- 中文名:發(fā)光二極管。
- 英文名:Light Emitting Diode。
- 簡稱:LED。
- 應(yīng)用:LED顯示屏、交通信號燈、廣告燈、液晶屏背光源等。
- 特點(diǎn):節(jié)能是LED燈最突出的特點(diǎn)、環(huán)保、跟其它的燈光源相比之下,LED燈會更加"干凈"(干凈不是指的是表面,而是這個(gè)LED燈它其實(shí)是屬于一種冷光源)、響應(yīng)速度快等。
?二極管燈在電路圖當(dāng)中所表示的一個(gè)符號,在電路圖當(dāng)中左邊是正極、右邊是負(fù)極。
- 在LED當(dāng)中只有正極接入正極,負(fù)極接入負(fù)極它才會有電流流通進(jìn)去。
?這個(gè)是二極管實(shí)物里面的一些知識點(diǎn)
- 51開發(fā)板用的是普通的貼片發(fā)光的二極管,這種二極管通常是正向?qū)妷?strong>1.8~2.2V。
- 工作電流一般在1~20mA。其中,當(dāng)電流在1~5mA變化的時(shí)候,隨著通過LED的電流越大,人們的肉眼會明顯的感覺到這個(gè)燈越來越亮,而當(dāng)電流處于5~20mA變化時(shí)候,看到的發(fā)光二極管的亮度變化就不太明顯了。當(dāng)電流超過20mA時(shí)候,LED燈就會有燒壞的危險(xiǎn)了。
- 電流越大,燒壞的速度也就會變快。所以,在使用過程當(dāng)中應(yīng)該要特別區(qū)注意它的電流參數(shù)上面的設(shè)計(jì)要求,這很重要。
??LED原理圖
- 這里的VCC就是電源的正極,左邊紅色的字其實(shí)就是一個(gè)網(wǎng)絡(luò)的一個(gè)標(biāo)號也被稱之為網(wǎng)絡(luò)編號,這里的引腳低電平這個(gè)LED燈才是亮的。
- 那我們可以看下正極出來之后,通過一個(gè)電阻(這個(gè)電阻其實(shí)是④個(gè)一體的),那么這上面說電阻是1kΩ的是怎么樣看出來的,其實(shí)就是我們仔細(xì)看單片機(jī)開發(fā)板上的RP9和RP10上面都有個(gè)數(shù)字是102。那么其實(shí)原理圖上寫的102就是1000Ω,前面兩位數(shù)是一個(gè)有效數(shù)字10,第三位數(shù)字就是倍率00。其實(shí)102拆開來 = 10*10^2,那么473呢?也是一樣473 = 47*10^3 = 47 000 = 47k,1001 = 1000 = 1k。這就是電阻的一個(gè)讀數(shù)的方式包括電容啊以及其它的一些元器件其實(shí)一個(gè)這樣的一個(gè)方式來的。
- 那我們繼續(xù)看到這個(gè)圖紙經(jīng)過這個(gè)電阻,這個(gè)電阻在這里的作用是起到一個(gè)限流的作用,從而這個(gè)電阻也被稱作是:限流電阻。就比如說假設(shè)VCC = 5V,LED 直接 5V 的話,由于電流過大會把這個(gè)LED燈給燒毀。所以在這里的串聯(lián)電阻就很好的起到了一個(gè)限流的作用。而到達(dá)LED已經(jīng)接入到正極了,那么LED負(fù)極在接入的話。此時(shí)LED燈就將會點(diǎn)亮了,高低電平的一個(gè)應(yīng)用。高電平就是5V,低電平就是0V,單片機(jī)把這種電平叫做TTL電平。P2口決定了你的高低電平,也就是CPU通過配置這些控制的寄存器來控制我們的硬件電路來執(zhí)行我們想要去完成的一個(gè)功能!
??如何控制IO口輸出高低電平?
首先要有一個(gè)單片機(jī)是MCU那么單片機(jī)里面就有一個(gè)CPU(代碼都是在這里面執(zhí)行的),我們外部都是有引腳都是P2口的引腳。那么CPU是怎么樣控制引腳的呢?那么就要說說寄存器里面其實(shí)就是存儲器以八個(gè)為一組的,就比如說是單片機(jī)里面就有一個(gè)寄存器它是P2口的寄存器,那么它就有八位每一位背后都有一根導(dǎo)線在通過驅(qū)動(dòng)器增大它的電流,然后在連到我們這個(gè)IO口的端口上后面其實(shí)也都是一樣的。這種東西就叫做是驅(qū)動(dòng)器。那么我們的CPU可以通過我們的這個(gè)軟件直接訪問我們的這個(gè)寄存器:假設(shè)我們給它寫①那么我們這個(gè)就可以通驅(qū)動(dòng)器就可以給我們的IO口置高電平,那么如果是寫零的話那么我們的IO口就是低電平0,同理。給高低電平是不是就是給P2口當(dāng)中轉(zhuǎn)換的寄存器,我們的硬件電路都是這個(gè)樣子的。
- 一句話就是說:CPU通過配置這些控制的寄存器來控制我們的硬件電路,硬件電路來執(zhí)行我們想要去完成的功能
??進(jìn)制轉(zhuǎn)換
那么如果我們要讓第一個(gè)LED燈點(diǎn)亮,其余的全是滅的話該怎么辦。很簡單給第一個(gè)LED燈低電平0,其余的LED都給上一個(gè)高電平1。這樣你的LED燈就可以實(shí)現(xiàn)點(diǎn)亮第一個(gè)了。
P2 = 1111 1110 這種寫法是?(因?yàn)樗鼤J(rèn)你是十進(jìn)制) ,? ? ? ? ? ?P2 = 0xFE 這樣才是?。
所以這里就會遇到一個(gè)問題進(jìn)制的轉(zhuǎn)換,只是需要把二進(jìn)制轉(zhuǎn)換成十六進(jìn)制就可以了? ? ? 。?
如果還不了解的話,可以看看原碼,補(bǔ)碼和反碼 - wqbin - 博客園?這篇博客???
??點(diǎn)亮一個(gè)LED代碼
#include <REGX52.H>
int main(void)
{
P2=0xFE; //1111 1110
while(1)
{
}
}
- 雙斜杠:其實(shí)就是把后面的內(nèi)容給注釋掉,編譯器是不會看的是留給我們編程序的人來看的,這個(gè)就是單行注釋。/* 注釋內(nèi)容 */這個(gè)是多行注釋。
- P2 = 0xFE,P2當(dāng)中的0x:是一個(gè)前綴,代表后面的是十六進(jìn)制數(shù)。
- FE就是十六進(jìn)制我們把 1111 1110 轉(zhuǎn)換成十六進(jìn)制。
- #include <REGX52.H>這個(gè)是我們單片機(jī)的頭文件,在上面代碼中如果沒有這個(gè)頭文件的話,我們的程序就無法去識別P2口了。
- while循環(huán)在這里的作用是:其實(shí)就是一直繞著這個(gè)圈跑來跑去,這樣就不用一直從main主函數(shù)那里走來走去了。表達(dá)式的值為真(1)它就會一直去執(zhí)行里面是一個(gè)邏輯表達(dá)式的值也就是判斷條件和表達(dá)式的值為真還是為假,非0即使真。
- 那么就是程序下載到STC系列的單片機(jī)下載軟件上去就可以了。
那么如果我們想要控制LED燈 亮滅亮滅 亮滅亮滅 怎么辦呢?其實(shí)很容易。
P2 = 0x55;// 0101 0101? ? ? ? 其它保持不變這樣就可以了???
??程序下載
- 選擇單片機(jī)的型號,現(xiàn)在用的單片機(jī)的型號是 STC89C52RC,注意:不要選錯(cuò)了。
- 單擊"打開程序文件",打開建立工程的那個(gè)文件夾,找到xxx.hex文件,單擊打開。
- 選擇剛才查到的COM入口,波特率使用默認(rèn)就可以了。
- 這里的所有選項(xiàng)都選擇默認(rèn)設(shè)置,不要隨意更改,有的選項(xiàng)錯(cuò)誤可能會導(dǎo)致麻煩。
- 因?yàn)?strong>STC單片機(jī)要冷啟動(dòng)下載的,就是我們先點(diǎn)擊下載,然后你再給你的單片機(jī)上電,所以先要關(guān)閉板子的電源開關(guān),然后再單擊Download按鈕,等待軟件提示你上點(diǎn)后,再按下板子的電源開關(guān),就可以下載到單片機(jī)里了。
??LED燈閃爍?
介紹:點(diǎn)亮LED小燈的程序就是讓LED = 0(低電平)。熄滅小燈的程序也是非常容易的,就是LED = 1(高電平)。這樣點(diǎn)亮和熄滅都會了,那么如果在亮和滅之間加個(gè)延遲呢,反復(fù)不停的點(diǎn)亮和熄滅小燈,那么就可以實(shí)現(xiàn)這個(gè)LED燈閃爍了。
這里解答大家可能會有的疑問:
- LED燈為什么是低電平亮:LED具有單向?qū)щ娦?/strong>,當(dāng) LED 的正端接了高電位,負(fù)端連接了低電位,且正負(fù)端電位差超過1.8V以上時(shí),LED就會亮起來。
- 為什么LED燈閃爍要加延遲:因?yàn)樵趩纹瑱C(jī)當(dāng)中每次都是以MHZ(也就是運(yùn)行上百萬次),所以它們就會執(zhí)行的特別快。那么就會閃爍的特別快,以我們?nèi)祟惖娜庋凼歉究床怀鰜淼?,所以需要延遲函數(shù)。
- 怎么樣才能反復(fù)不停的亮和滅:這個(gè)很容易加上while循環(huán),循環(huán)的表達(dá)式的值為真"1"
- 延遲函數(shù)的程序:點(diǎn)擊軟件生成延時(shí)器(在STC-ISP中)它可以生成代碼來幫助我們,延時(shí)函數(shù)當(dāng)中的系統(tǒng)頻率也就是晶振要注意一下,我的是12MHZ的。還有8051的指令集也要改一下:SCY-Y1。這個(gè)時(shí)候我們只需要復(fù)制代碼、生成代碼、即可生成函數(shù)。然后在主函數(shù)前面右鍵點(diǎn)擊Paste(ctrl+v)粘貼就可以了。
這里說下我們提到的晶振:晶振又被稱之為晶體震蕩器,從這個(gè)名字就可以看出來,它注定一聲都要不停的振蕩它起到的作用是:單片機(jī)當(dāng)中的系統(tǒng)提供的一個(gè)基準(zhǔn)信號,類似于部隊(duì)的訓(xùn)練時(shí)候喊口號的人,單片機(jī)的內(nèi)部所有的系統(tǒng)都是以這個(gè)時(shí)鐘型號為基準(zhǔn)的來進(jìn)行著工作。實(shí)際作用:利用一種能將電能和機(jī)械能相互轉(zhuǎn)換的晶體,在公振的狀態(tài)下工作可以提供一個(gè)穩(wěn)定精確的單頻震蕩。
#include <REGX52.H>
#include <INTRINS.H> //_nop_();需要的頭文件
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
while(1)
{
P2=0xFE; //1111 1110
Delay500ms(); //調(diào)用函數(shù)
P2=0xFF; //1111 1111
Delay500ms(); //調(diào)用函數(shù)
}
}
??LED流水燈
前面學(xué)習(xí)了點(diǎn)亮一個(gè)LED燈又學(xué)了LED小燈閃爍,現(xiàn)在我們就可以進(jìn)一步的去學(xué)習(xí)讓LED燈依次一個(gè)接上一個(gè)的開始亮起來,也就是我們常常說的流水燈的實(shí)現(xiàn)了。?
通過下面的這個(gè)程序我們不難看出來,可以通過P2來控制所有的8個(gè)LED燈的亮滅狀態(tài)。從下面的程序當(dāng)中我們可以看出依次給P2賦值的是:0xFE、0xFD、0xFB、0xF7、0xEF、0xDF、0xBF、0x7F
#include <REGX52.H>
#include <INTRINS.H>
void Delay500ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 4;
j = 205;
k = 187;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
int main(void)
{
while(1)
{
P2=0xFE;//1111 1110
Delay500ms();
P2=0xFD;//1111 1101
Delay500ms();
P2=0xFB;//1111 1011
Delay500ms();
P2=0xF7;//1111 0111
Delay500ms();
P2=0xEF;//1110 1111
Delay500ms();
P2=0xDF;//1101 1111
Delay500ms();
P2=0xBF;//1011 1111
Delay500ms();
P2=0x7F;//0111 1111
Delay500ms();
}
}
??LED流水燈高階操作
為什么說這個(gè)是高階操作呢?是因?yàn)檫@個(gè)程序我們想讓流水燈延遲多少行秒就可以延遲多少行秒,注意這個(gè)延遲毫秒并不只是改變之前延遲500ms,它是可以在每個(gè)延遲函數(shù)階段,分別延遲出不同的速度,上面的這樣一開仿佛就單一,而這個(gè)是進(jìn)行變化的。文章來源:http://www.zghlxwxcb.cn/news/detail-412121.html
#include <REGX52.H>
void Delay1ms(unsigned int xms); //@12.000MHz
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
int main(void)
{
while(1)
{
P2=0xFE;//1111 1110
Delay1ms(1000);
P2=0xFD;//1111 1101
Delay1ms(900);
P2=0xFB;//1111 1011
Delay1ms(800);
P2=0xF7;//1111 0111
Delay1ms(700);
P2=0xEF;//1110 1111
Delay1ms(600);
P2=0xDF;//1101 1111
Delay1ms(500);
P2=0xBF;//1011 1111
Delay1ms(300);
P2=0x7F;//0111 1111
Delay1ms(100);
}
}
????文章來源地址http://www.zghlxwxcb.cn/news/detail-412121.html
到了這里,關(guān)于【51單片機(jī)】點(diǎn)亮LED燈(四種形式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!