用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...