單片機實驗--跑馬燈
ORG0000H;這個匯編程序?qū)崿F(xiàn)的是跑馬燈實驗
本文引用地址:http://m.butianyuan.cn/article/201611/319586.htmJMPSTART
ORG0200H
DELAY:MOVR1,#50;延時程序,延時0.5秒
DELAY0:MOVR2,#99
DELAY1:MOVR3,#49
DJNZR3,$
DJNZR2,DELAY1
DJNZR1,DELAY0
RET
ZX:MOVA,#0FEH;正序點亮流水燈
L1:MOVP0,A
RLA
CALLDELAY
MOVP2,#0FFH;把P2口寫1,
SETBC;置C為1
MOVC,P2.1;如果P2.1按下,則C的值為0,
JNCJ2;C的值為0的時候跳到主程序的J2這個段
MOVC,P2.2;讀P2.2的值,賦給C
JNCJ3;C為0的時候跳到主程序中J3這個段
JMPL1;跳到ZX這里,死循環(huán)實現(xiàn)燈的流動
NX:MOVA,#7FH;逆序點亮流水燈
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:;主程序段,也是程序開始的地方
MOVP2,#0FFH;將P2口寫1
MOVP0,#0FFH;將P1口寫1
SETBC;將C的值置1
J1:MOVC,P2.0;讀P2.0的數(shù)據(jù),賦給C
JNCZX;如果C的值為0跳轉(zhuǎn)到流水燈正序循環(huán)這個段
J2:MOVC,P2.1;讀P2.1的數(shù)據(jù),賦給C
JNCNX;如果C的值為0,跳轉(zhuǎn)到流水燈逆序循環(huán)這個段
J3:MOVC,P2.2;讀P2.2的數(shù)據(jù),賦給C
JNCXM;如果C的值為0,跳轉(zhuǎn)到流水燈熄滅這個段
JMPSTART
END
2.C語言源代碼如下:
#include//C語言我們都比較熟悉,就不做過多的注釋
#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()//正序點亮流水燈
{
uinti=0,k=0xfe;
while(1)
{
P0=k;
delay(100);
k=_crol_(k,1);
if(k2==0)break;
if(k3==0)break;
}
}
voidf2()//倒序點亮流水燈
{
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--);
}
評論