點亮led燈的個數 51微控制器實現LED流水燈

2021-10-14 14:20:43 字數 2059 閱讀 2256

用51微控制器實現點亮1個2個3個……8個流水燈。我們選擇p1口作為控制埠,輸出0時led燈點亮。流水燈實現步驟如下:

點亮第乙個led燈,對p1口賦值為「 1111 1110「;

點亮第二個led燈,對p1口賦值為「 1111 1100「;

3.點亮第八個led燈,對p1口賦值為「 0000 0000 「;

4.只點亮第八個led燈,對p1口賦值為 「 0111 1111 「;

5.點亮第七個led燈, 對p1口賦值為 「 0011 1111 「;

6.點亮第乙個led燈,對p1口賦值為 「 0000 0000「;

7.只點亮第乙個led燈,對p1口賦值為 「 1111 1110「;

重複上面流程實現led流水燈。

組合語言實現:

因為51微控制器為8位數處理器,所以從「 1111 1110「到「 1111 1100「是左移1位補充數為0 ,我們可以根據左移指令或乘法指令實現。本程式使用乘法指令實現,每次*2都會溢位一次,相應的右邊會多出1個0。同理左移根據除法實現每/2右移一位左邊補充0。

org 0000h

ajmp main

//主函式

main: mov a, #11111111b //初始化累加器

loop:

lcall left //左移程式

cpl a //取反累加器,關閉led燈

lcall right //右移程式

cpl a //取反累加器,關閉led燈

ajmp loop //跳轉到loop,迴圈

//左移程式

left: mov b, #02h //賦值暫存器b位2

mul ab //使用乘法*2,實現左移2位

mov p1, a //把累加器a的值賦值給p1口,點亮led

lcall delay //呼叫延時函式

jnz left //累加器不為0,跳轉到left左移一位

ret //累加器為0,結束

//右移程式

right: mov b, #02h //賦值暫存器b位2

div ab //使用除法/2,實現右移2位

mov p1, a //把累加器a的值賦值給p1口,點亮led

lcall delay //呼叫延時函式

jnz right //累加器不為0,跳轉到right右移一位

ret //累加器為0,結束

//延時函式

delay: mov r0, #20 //延時0.5秒,使用引數r0、r7、r6。

del0: mov r7, #100

del1: mov r6, #250

djnz r6, $

djnz r7, del1

djnz r0, del0

retend

c語言實現:

本程式使用移位指令實現,每次左移一位,右邊補0。同理左移一位左邊補充0。

#include "reg52.h"

#include

typedef unsigned int u16; //對資料型別進行宣告定義

typedef unsigned char u8;

#define led p2 //將p2口定義為led 後面就可以使用led代替p2口

/* 延時函式,i=1時,大約延時10us*/

void delay(u16 i)

while(i--);

/*主函式*/

void main()

u16 i;

led=0xff; //初始化led

delay(50000); //大約延時450ms

while(1)

for(i=0;i<=7;i++) //左移迴圈

led<<=1; //將led左移一位

delay(50000); //大約延時450ms

led=~led; //關閉led

for(i=0;i<=7;i++) //右移迴圈

led>>=1; //將led右移一位

delay(50000); //大約延時450ms

led=~led; //關閉led

51微控制器點亮乙個led燈

51微控制器是很多小白入門嵌入式的一款微控制器,雖然51實際工作中用得不多,但是作為入門學習的一款微控制器卻是非常值得推薦的。畢竟一開始學的時候,作為我們這種普普通通的學習能力而言的小白,最好是簡單易學,可以快速的看到學習的成果,那是最可以激勵我們學習下去的動力和興趣。簡單學習51微控制器後,可以參...

1 1 51微控制器基礎 入門 點亮LED燈

一 led相關知識 1.led全稱發光二極體。2.led工作原理 led具有正嚮導通性,led正極接陽極,負極接陰極時,才能正常發光。二.led原理 析 如圖 在led陽極串聯乙個電阻,然後連線到電源vcc,led陰極連線到p1口,點亮led只需把微控制器相對應的io口賦為低電平即可。三 相關 同時...

微控制器LED燈

include void delay unsigned char i 使用迴圈語句,實現延時 void delay unsigned int i 延時函式,i最大取值65535 最大延時0.65535s void fun1 void 全部亮 void fun2 void 全部滅掉 void fun3...