1. 單片機 跑馬燈 代碼詳解
ORG
0000H
;開機上電主程序入口
AJMP
START
;系統一進來就轉到主程序
ORG
0030H
;主程序地址
START:
MOV
A,
#0FFH
;主程序開始,A中初始化成全1
CLR
C
;c清零
MOV
R2,
#08H
;R2左轉循環計數器
LOOP:
RLC
A
<<C+A+C<<帶進位循環左移,A中的內容在8此循環中從0位到7位依次變0
MOV
P2,
A
;送到P2,使P2從0位到7位依次點亮LED
CALL
DELAY
;單片機運行很快,為了能看到燈的變化,必須延遲,把速度降下來
DJNZ
R2,
LOOP
;R2每次減1後判斷是否=0,8次後=0程序才會下行,否則會跳回LOOP
MOV
R2,#07H
;R2右轉循環計數器
LOOP1:
RRC
A
>>C+A+C>>帶進位循環右移,A中的內容在8此循環中從7位到0位依次變0
MOV
P2,
A
;送到P2,使P2從7位到0位依次點亮LED
CALL
DELAY
;和上個循環一樣,延時
DJNZ
R2,
LOOP1
;R2每次減1後判斷是否=0,7次後=0程序才會下行,否則會跳回LOOP1
JMP
START
;跳回程序起始位置重復下一個循環
DELAY:
MOV
R3,
#20;延時子程序,這個應該不用解釋了吧
D1:
MOV
R4,
#200
D2:
MOV
R5,
#248
DJNZ
R5,
$
DJNZ
R4,
D2
RET
END
2. <單片機跑馬燈>在延時程序中如要進一步增加延時時間,有哪些方法如何修改程序
咨詢記錄 · 回答於2021-10-19
3. 怎麼用單片機按鍵控制循環跑馬燈
/*單片機,用定時中斷實現每隔0.2秒讓接在P1口的8個小燈從左往右循環點亮。*/
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
uchar a,b;
uchar b=1;
uchar a=0xfe;
void main()
{
EA=1;IT1=1;ET0=1;
TH0=-5000/256;
TL0=-5000%256;
TMOD=0x01;
TR0=1;
while(1)
{;}
}
void timer0(void) interrupt 1 using 1
{
TH0=-5000/256;
TL0=-5000%256;
b=b+1;
if(b==40)
{
b=0;
P1=a;
a=_crol_(a,1);
P1=a;
}
}
4. 51單片機匯編語言編寫一個跑馬燈的程序,初學者做實驗用,具體要求如下,好了可以加分
程序1:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
LOOP:
MOV A,P2
MOV B,A
MOV P0,A
MOV P1,#0FFH
LOOP1:
LCALL DELAY
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
MOV A,P2
CJNE A,B,LOOP
SJMP LOOP1
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
程序2:
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV SP,#5FH
JNB P2.0,LOOP1 ;
JNB P2.1,LOOP2 ;
SJMP MAIN
LOOP1:
MOV P0,#0FEH
MOV P1,#0FFH
LOOP11:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.1,LOOP2
SJMP LOOP11
LOOP2:
MOV P0,#0FCH
MOV P1,#0FFH
LOOP21:
MOV C,P1.7
MOV A,P0
RLC A
MOV P0,A
MOV A,P1
RLC A
MOV P1,A
JNB P2.0,LOOP1
SJMP LOOP21
DELAY:
MOV R2,#60
DELAY1:
MOV R3,#250
DJNZ R3,$
DJNZ R2,DELAY1
RET
END
5. 51單片機設計跑馬燈的程序用(c語言)編寫
|P1口接8個發光二極體共陽
#include <AT89X51.H>
unsigned char i;
unsigned char temp;
unsigned char a,b;
void delay(void)
{
unsigned char m,n,s;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(s=248;s>0;s--);
}
void main(void)
{
while(1)
{
temp=0xfe;
P1=temp;
delay();
for(i=1;i<8;i++)
{
a=temp<<i;
b=temp>>(8-i);
P1=a|b;
delay();
}
for(i=1;i<8;i++)
{
a=temp>>i;
b=temp<<(8-i);
P1=a|b;
delay();
}
}
}
(5)單片機跑馬燈的使用方法擴展閱讀:
Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。
6. 單片機跑馬燈匯編程序詳細解釋
ORG
0000H
SJMP
START
ORG
0030H
START:
MOV
A,
#0FEH
;
先讓第一個發光二極體點亮
LOOP:
MOV
P1,
A
;
從P1口輸出到發光二極體
MOV
R1,
#100
;
延時0.5秒
DEL1:
MOV
R2,
#200
DEL2:
MOV
R3,
#7
DEL3:
DJNZ
R3,
DEL3
DJNZ
R2,
DEL2
DJNZ
R1,
DEL1
RL
A
;
左移一位,點亮下一個發光二極體
LJMP
LOOP
END
這個是我寫的跑馬燈程序,沒有左右振盪,自己參考參考加上去吧
7. 單片機跑馬燈
汗-----那麼簡單的問題也拿出來問!
不知道對你有什麼用?
若想學,建議繼續去看點基礎吧!
#include "reg51.h"
#include"intrins.h"
#define uint unsigned int
void DelayMs(uint t)
{
uint i;
while(t--)
{
for(i=0;i<124;i++)
{;}
}
}
void main()
{
uint ax,bx;
while(1)
{
bx=0x01;
for(ax=0;ax<8;ax++)
{
P1=bx<<ax;
Delay(10000);
}
}
}
臨時給你寫了一個,還沒有備注和調試哦;
8個燈一頭接P1口的8個腳,另一頭接地;
希望對你有用!
8. 怎樣用單片機定時器控制跑馬燈
首先是什麼類型的單片機,是51還是avr或者是PIC,每種單片機都有不同的控制方法,但思路基本一樣,即配置相關定時器工作方式,設置初值,開中斷,啟動定時器等,定時器工作時不佔用cpu資源,當產生中斷時cpu才需要處理,一般控制跑馬燈時在中斷函數中使IO口左移或右移,如51的P1=0x01<<i等
9. 關於51單片機的跑馬燈設置問題
自己看程序修改一下:
#include<reg51.h>
#include <intrins.h>
/*****************************************************************************
* 延時子程序 *
* *
******************************************************************************/
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
/*****************************************************************************
* 主程序 *
* *
******************************************************************************/
main()
{
unsigned char LED;
LED = 0xfe;
P2 = LED;
while(1)
{
delayms(250);
LED = _crol_(LED,1); //循環右移1位,點亮下一個LED 此函數位庫函數
P2 = LED;
}
}
10. 單片機跑馬燈如何編程!
如果是一個位元組型的數據控制LED燈的話,且是1控制LED燈滅,0控制燈亮。
從滅到亮,先是0xFF,然後開始左移,最終移到0x00,就是全亮了。
從亮到滅,先是0x00,然後左移並且加1,重復此工作就是0xFF了
按照上面的思想,你自己應該可以搞定的。