Ⅰ 單片機跑馬燈代碼
//假設晶振12MHZ,P1控制8個LED低電平亮
#include "reg51.h"
unsigned int YSJS=0;
signed char LED=0XFF;
void main(void)
{
TMOD |= 0X10; //定時器1工作於方式1,16位定時器
TH1 = 0XFE; //定時器1定時時間=500uS
TL1 = 0X0C;
ET1 = 1; //使能定時器1中斷
TR1 =1;
EA =1; //開總中斷
while(1)
{
}
}
void TIMER1(void) interrupt 3 //定時器1中斷函數使用默認寄存器組
{
TH1 = 0XFE; //定時器1定時時間=500us
TL1 = 0X0C;
YSJS++;
if(YSJS==1000) //500uS*1000=500000us=0.5s,可調整
{
P1 = LED;
LED=LED<<1
if(LED==0X00)LED=0XFF;
YSJS = 0
}
}
Ⅱ 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();
}
}
}
(2)單片機數碼跑馬燈擴展閱讀:
Proteus 自從有了單片機也就有了開發系統,隨著單片機的發展開發系統也在不斷發展。 keil是一種先進的單片機集成開發系統。它代表著匯編語言單片機開發系統的最新發展,首創多項便利技術,將開發的編程/模擬/調試/寫入/加密等所有過程一氣呵成,中間不須任何編譯或匯編。
Ⅲ 單片機匯編語言跑馬燈
1)將你想要的LED顯示樣式進行編組,這里P1埠中,輸出低電平LED亮,高電平LED不亮;
2)然後按你排的順序輸出編組數據,加上延時顯示;
3)通過定時器中斷(0.5S)來設置准備顯示的編組號;
Ⅳ 單片機 數碼管跑馬燈實驗
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
delay(uint a)
while(a--)
void main()
P0=0xfe;
uchar i;
for(i=0;i<8;i++)
{
P0=0xfe<<1;
P0=P0|0x01;
delay(400);
}
時間你改下,流水燈基本上都這樣的,很多時候要自己思考,如果真的想學好的話
Ⅳ 單片機實現跑馬燈
硬體做好了嗎
我做單片機設計的
Ⅵ 單片機 跑馬燈 代碼詳解
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
Ⅶ 單片機跑馬燈程序 匯編語言編寫,很簡單
程序1:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#5FH
LOOP:
MOVA,P2
MOVB,A
MOVP0,A
MOVP1,#0FFH
LOOP1:
LCALLDELAY
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
MOVA,P2
CJNEA,B,LOOP
SJMPLOOP1
DELAY:
MOVR2,#60
DELAY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DELAY1
RET
END
程序2:
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#5FH
JNBP2.0,LOOP1;
JNBP2.1,LOOP2;
SJMPMAIN
LOOP1:
MOVP0,#0FEH
MOVP1,#0FFH
LOOP11:
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
JNBP2.1,LOOP2
SJMPLOOP11
LOOP2:
MOVP0,#0FCH
MOVP1,#0FFH
LOOP21:
MOVC,P1.7
MOVA,P0
RLCA
MOVP0,A
MOVA,P1
RLCA
MOVP1,A
JNBP2.0,LOOP1
SJMPLOOP21
DELAY:
MOVR2,#60
DELAY1:
MOVR3,#250
DJNZR3,$
DJNZR2,DELAY1
RET
END
Ⅷ 單片機跑馬燈匯編程序詳細解釋
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
這個是我寫的跑馬燈程序,沒有左右振盪,自己參考參考加上去吧
Ⅸ 51單片機 跑馬燈程序
org0000h
jmpstart
org0030h
start:
movp0,#11111110b;此時第一個燈亮
callt10s
movp0,#11111101b;此時第二個燈亮
callt10s
movp0,#11111011b
callt10s
movp0,#11110111b
callt10s
movp0,#11101111b
callt10s
movp0,#11011111b
callt10s
jmpstart;此處跳到開始即循環
;延時子程序10秒=250usX2X200X100
t10s:movr5,#100
lpr5:movr6,#200
lpr6:movr7,#250
djnzr7,$
djnzr6,lpr6
djnzr5,lpr5
ret
end
把燈的正極接電源正極即vcc負極分別接p0.0-p0.5
此時給p0送0燈就亮1燈就不亮
程序已經過調試可用
模擬如下:
Ⅹ 關於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;
}
}