新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)實(shí)驗(yàn)--跑馬燈

單片機(jī)實(shí)驗(yàn)--跑馬燈

作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
1.匯編語(yǔ)言的源代碼如下:

ORG0000H;這個(gè)匯編程序?qū)崿F(xiàn)的是跑馬燈實(shí)驗(yàn)

本文引用地址:http://butianyuan.cn/article/201611/319586.htm

JMPSTART

ORG0200H

DELAY:MOVR1,#50;延時(shí)程序,延時(shí)0.5秒

DELAY0:MOVR2,#99

DELAY1:MOVR3,#49

DJNZR3,$

DJNZR2,DELAY1

DJNZR1,DELAY0

RET

ZX:MOVA,#0FEH;正序點(diǎn)亮流水燈

L1:MOVP0,A

RLA

CALLDELAY

MOVP2,#0FFH;把P2口寫(xiě)1,

SETBC;置C為1

MOVC,P2.1;如果P2.1按下,則C的值為0,

JNCJ2;C的值為0的時(shí)候跳到主程序的J2這個(gè)段

MOVC,P2.2;讀P2.2的值,賦給C

JNCJ3;C為0的時(shí)候跳到主程序中J3這個(gè)段

JMPL1;跳到ZX這里,死循環(huán)實(shí)現(xiàn)燈的流動(dòng)

NX:MOVA,#7FH;逆序點(diǎn)亮流水燈

L2:MOVP0,A

RRA

CALLDELAY

MOVP2,#0FFH

SETBC

MOVC,P2.0

JNCJ1

MOVC,P2.3

JNCJ3

JMPL2

XM:MOVA,#0FFH;熄滅流水燈

L3:MOVP0,A

MOVP2,#0FFH

SETBC

MOVC,P2.0

JNCJ1

MOVC,P2.1

JNCJ2

JMPL3

START:;主程序段,也是程序開(kāi)始的地方

MOVP2,#0FFH;將P2口寫(xiě)1

MOVP0,#0FFH;將P1口寫(xiě)1

SETBC;將C的值置1

J1:MOVC,P2.0;讀P2.0的數(shù)據(jù),賦給C

JNCZX;如果C的值為0跳轉(zhuǎn)到流水燈正序循環(huán)這個(gè)段

J2:MOVC,P2.1;讀P2.1的數(shù)據(jù),賦給C

JNCNX;如果C的值為0,跳轉(zhuǎn)到流水燈逆序循環(huán)這個(gè)段

J3:MOVC,P2.2;讀P2.2的數(shù)據(jù),賦給C

JNCXM;如果C的值為0,跳轉(zhuǎn)到流水燈熄滅這個(gè)段

JMPSTART

END

2.C語(yǔ)言源代碼如下:

#include//C語(yǔ)言我們都比較熟悉,就不做過(guò)多的注釋

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitk1=P2^0;

sbitk2=P2^1;

sbitk3=P2^2;

uchars1,s2,s3;

voiddelay(uintt);

voidf1();

voidf2();

voidf3();

voidmain()

{

uchark=0xfe;

while(1)

{

if(k1==0)f1();

if(k2==0)f2();

if(k3==0)f3();

}

}

voidf1()//正序點(diǎn)亮流水燈

{

uinti=0,k=0xfe;

while(1)

{

P0=k;

delay(100);

k=_crol_(k,1);

if(k2==0)break;

if(k3==0)break;

}

}

voidf2()//倒序點(diǎn)亮流水燈

{

uintk=0x7f;

while(1)

{

P0=k;

delay(100);

k=_cror_(k,1);

if(k1==0)break;

if(k3==0)break;

}

}

voidf3()//熄滅流水燈

{

while(1)

{

P0=0xff;

if(k1==0)break;

if(k2==0)break;

}

}

voiddelay(uintt)

{uinti,j;

for(i=t;i>0;i--)

for(j=114;j>0;j--);

}



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉