⑴ 51單片機中如何用匯編語言編寫流水燈
流水燈就是51單片機控制led燈依次點亮的控制方式。具體程序如下:
ORG 0000H;復位啟動
AJMP START;
ORG 001BH;T1中斷
AJMP T1INT;
;定義變數========================
YSJSEQU 30H;延時計數器
LEDEQU 31H;LED控制緩沖器
;主程序==========================
START:MOV LED,#0FEH;初始化數據
MOV YSJS,#0;
MOV TMOD,#10H;定時器1工作於方式1,16位定時器
MOV TL1,#0B0H;設置定時初值
MOV TH1,#3CH;定時時間=50mS
SETB ET1;使能定時器1中斷
SETB TR1;啟動定時器1
SETB EA;開總中斷
MOV P1,LED;初始化流水燈
LOOP:JMP LOOP;循環等待中斷
T1INT:PUSH PSW;定時器1中斷程序
PUSH ACC;保護現場
MOV TH1,#3CH;定時時間=50mS
MOV TL1,#0B0H;
INC YSJS;
PUSH ACC;保護ACC
MOV A,YSJI;
CJNE A,#2,QT1;50mS*2=100mS
MOV P1,LED;
MOV A,LED;
RL A;累加器A的值循環左移1位
MOV LED,A;
MOV YSJS,#0;
QT1:POP ACC;恢復現場
POP PSW;
RETI;返回主程序
END;匯編程序結束
(1)51單片機led燈擴展閱讀:
實現流水燈的三個方法:
第一種,匯流排方法實現流水燈。這是一種比較笨但又最易理解的方法,採用順序程序結構,用位指令控制P1口的每一個位輸出高低電平,加上延時函數,即可控制每個LED燈的亮滅。
第二種,移位方法實現流水燈採用循環程序結構編程。首先在程序開始給P1.0口送一個低電平,其它位為高。然後延時一段時間再讓低電平往高位移動,這樣就實現「流水」的效果了。
第三種,庫函數實現流水燈。利用左移函數進行。
⑵ 51單片機都有哪個口能接LED燈
89C51或89C52單片機P0P1P3P4四組共32個IO口都可以驅動LED燈。這種單片機的高電平驅動能力很弱,通常IO輸出低電平驅動LED,LED的另一端接限流電阻然後再接電源正。限流電阻的選擇上,個人經驗電流控制在2-7mA之間,根據對亮度和功耗的要求調整選擇
⑶ led燈能直接連接51單片機嗎
不能
准確的說是不允許。單片機應只考慮開和關兩種邏輯狀態。這種LED燈是不是能接單片機的問題屬於驅動能力問題。如果每次設計都要去考慮單片機管腳可以承受或者輸出的電流,或者計算單片機可以帶多大的負載,那你的設計工作的復雜性就會成倍的放大同時可靠性也會降低很多。
也許你使用的LED需要極小的電流就可以驅動而你的單片機帶負載的能力很強。從電路的角度考慮是可以直接連。但是這種情況下依然不允許將LED直接連接單片機管腳直接進行驅動。因為這種設計思路根本就是錯的,出發點都錯了,分析的結論再正確也不行。
不一定非要使用三極體來驅動,雖然我們通常的做法是用三極體。可以用一些集成電路作為驅動。不過你的設計非常簡單的話,用一個三極體也就可以了。不過注意加限流電阻,別把LED燒了。
⑷ 51單片機控制led燈點亮與熄滅
// 51單片機控制八個發光二極體 左右循環。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char TAB[]= {0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff}; // 改變這里 LED 各種花樣
uchar t,i;
void main()
{
TMOD=0x10;
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
EA=1;
ET1=1;//開定時器1中斷
TR1=1;//啟動定時器1
t=0;
i=0;
while(1)
{
}
}
void timer1() interrupt 3
{
TH1=(65535-50000)/256; // 50ms一次
TL1=(65535-50000)%256;
t++;
if(t==20)
{
t=0;
P2=TAB[i];
i++;
if(i==18) { i=0;}
}
}
⑸ 51單片機怎麼只控制一顆LED燈閃爍
1、新建項目,如圖所示。
注意事項:
很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。需要注意的是51系列的單片機一般不具備自編程能力。
⑹ 51單片機led燈怎麼亮
要式連接51單片機的LED燈被點亮,攏共需要三步:
搭建好51單片機運行的最小系統,並連接好下載線。
LED燈的正極經過470Ω電阻連接在電源正極上,LED燈的負極連接在單片機的某個介面上,例如連接I/O口P1.0上。
編程使P1.0輸出低電平,將編譯好的程序下載到單片機里,在單片機再次上電後就可以看到LED燈發光亮起了。
⑺ 51單片機的LED燈不能點亮,請指教。謝謝
你的問題應該是LS138沒有正確使能;
E1、E2的邏輯使能要求電平是相反的,不能連接在一起;
修改如下:ENLED 連接 E1,ADDR3 連接 E2、E3(即E2、E3連接在一起);
⑻ 51單片機3個LED燈同時來亮滅閃爍
如果只是人眼睛開到的同時亮滅,是沒問題的,用3條連續賦值語句。
如果要做到絕對的同時控制,是不可能的,因為有一個在另一組埠,IO寄存器不同,至少要2條賦值語句。就會有時間差,也就是賦值語句之間的時間差。
⑼ 51單片機數碼管和led燈
程序如下
#include<REG51.H>
sbit k1=P1^0;
void delay()
{
unsigned int j;
for(j=40000;j>0;j--);
}
void main()
{
while(1)
{
P0=0xff;
if(k1==0)
{
P0=0x55;
delay();
P0=0xAA;
delay();
}
}
}
模擬結果