關於單片機的led燈的二三事,初學者的開端

2022-05-17     大方老師單片機

原標題:關於單片機的led燈的二三事,初學者的開端

關於單片機led燈的二三事,初學者的開端

///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比///

一、點亮

工作原理:

如圖,二極體陽極連接電阻,二極體陰極連接單片機引腳D0P20D1P21,,,,,,,都通P2孔進行控制。

二極:

電源正極連接到二極體陽極,負極連接到陰極,二極體正常工作。所以,原理圖中,引腳為低電平,連接的是二極體的陰極,陽極通過與電阻連接,電阻連接的是高電平,所以二極體正常工作。電阻的作用為保護二極體。

程序編寫

#include"reg52.h"

sbit LED=P2^0 /*sbit用於定義變量LED為自定義變量。P2.0(注意不要寫P2.0,應寫P^0)孔賦給變LED*/

void main()

{

while(1)

{

LED=0;/*由二極體的工作原理可得,二極體P2.0孔,所以該孔為低電平,0*/

}

}

二、閃爍

工作原理

在點LED燈的基礎之上。

原理上基本與點LED燈工作原理相同。

自定義一個延時函數。

主函數先點亮燈,在調用延時函數,在熄滅燈,然後在調用延時函數,將這些放入循環一直執行。完成

代碼

#include "reg52.h"

typedef unsigned char u8; //重定義字符型變量

typedef unsigned int u16; //重定義整型變量

/*自定義延時函*/

void dealy(u16 i)

{

while(i--);

}

sbit led=P2^0;

void main()

{

while(1)

{

led=0; //點亮,陰極接低電平

dealy(50000);

led=1; //熄滅,陰極接高電平

dealy(50000);

}

}

三、流水燈

·工作原理

1.LED點亮LED閃爍實驗的基礎之上。

2.移位函數

crol(a,b):循環左移函數a為左移的值b為左移的位數。

cror(a,b):循環右移函數a為右移的值b為右移的位數。

移位函數包含instrins.h庫函數裡面。

3.c語言中十六進位的表示

·Ox代表的是十六進位的前綴,不用讀。例OXaaOxbb,aabb就行。

·十六進位到二進位轉換

十六進位表示:每一位有不同的數0~9A(10),B(11),C(12),D(13),E(14),F(15)

十六進位轉二進位:將十六進位的每一位轉化為二進位即可。例8FA=>1000 1111 1010

·運作過程

·先看原理圖

LED原理圖(陽極解高電平),陰極通過電阻接接引腳

引腳默認接高電平,所以,初始時燈為熄滅狀態。

·流水實現

利用十六進位位位移函數實現左移和右移

_crol_0xfe,1:0xfe轉化為二進位1111 11101代表位數

f代表原理圖中4個高位引腳e4個低位引腳。

1111 1110 =>p0=0(低電平,燈)

1111 1101 =>左移p1=0,第二個燈亮

1111 1011 =>p2

…………

_cror_(oxfe,1):與左移原理相同(0111 1111開始向右移)

·代碼實現

#include

#include

typedef unsigned char u8; //重定義全局字符型變量

typedef unsigned int u16; //重定義全局整型變量

#define led P2//宏定LEDp2

/*延時函*/

void dealy(u16 i)

{

while(i--);

}

void main()

{

u16 i; //定義變i

P2=0xfe; //點亮第一LED燈,1111 1110.

dealy(50000); //450ms

while(1)

{

for(i=0;i8LED燈,利for循環一直執行

{

led=_crol_(led,1); // 1111~1110~0111 1111,左移

dealy(50000);

}

for(i=0;i8LED燈,利for循環一直執行

{ led=_cror_(led,1); //0111 1111變小,呼吸燈效果就出來了。單片機用來控制頻率,得計RC的振蕩頻率

文章來源: https://twgreatdaily.com/zh-sg/817abc67e5cdc806b954bf5f9de183d7.html