ORG 0000H;这个汇编程序实现的是跑马灯实验
JMP START
ORG 0200H
DELAY:MOV R1,#50;延时程序,延时0.5秒
DELAY0: MOV R2,#99
DELAY1: MOV R3,#49
DJNZ R3,$
DJNZ R2,DELAY1
DJNZ R1,DELAY0
RET
ZX:MOV A, #0FEH ;正序点亮流水灯
L1:MOV P0, A
RL A
CALL DELAY
MOV P2,#0FFH;把P2口写1,
SETB C;置C为1
MOV C, P2.1;如果P2.1按下,则C的值为0,
JNC J2;C的值为0的时候跳到主程序的J2这个段
MOV C, P2.2;读P2.2的值,赋给C
JNC J3;C为0的时候跳到主程序中J3这个段
JMP L1;跳到ZX这里,死循环实现灯的流动
NX:MOV A, #7FH;逆序点亮流水灯
L2:MOV P0, A
RR A
CALL DELAY
MOV P2,#0FFH
SETB C
MOV C, P2.0
JNC J1
MOV C, P2.3
JNC J3
JMP L2
XM:MOV A, #0FFH;熄灭流水灯
L3:MOV P0, A
MOV P2,#0FFH
SETB C
MOV C, P2.0
JNC J1
MOV C, P2.1
JNC J2
JMP L3
START:;主程序段,也是程序开始的地方
MOV P2, #0FFH;将P2口写1
MOV P0, #0FFH;将P1口写1
SETB C;将C的值置1
J1:MOV C, P2.0;读P2.0的数据,赋给C
JNC ZX;如果C的值为0跳转到流水灯正序循环这个段
J2:MOV C, P2.1;读P2.1的数据,赋给C
JNC NX ;如果C的值为0,跳转到流水灯逆序循环这个段
J3: MOV C, P2.2;读P2.2的数据,赋给C
JNC XM ;如果C的值为0,跳转到流水灯熄灭这个段
JMP START
END
2.C语言源代码如下:
#include //C语言我们都比较熟悉,就不做过多的注释
#include
#define uint unsigned int
#define uchar unsigned char
sbit k1=P2^0;
sbit k2=P2^1;
sbit k3=P2^2;
uchar s1,s2,s3;
void delay(uint t);
void f1();
void f2();
void f3();
void main()
{
uchar k=0xfe;
while(1)
{
if(k1==0) f1();
if(k2==0) f2();
if(k3==0) f3();
}
}
void f1() //正序点亮流水灯
{
uint i=0,k=0xfe;
while(1)
{
P0=k;
delay(100);
k=_crol_(k,1);
if(k2==0)break;
if(k3==0) break;
}
}
void f2() //倒序点亮流水灯
{
uint k=0x7f;
while(1)
{
P0=k;
delay(100);
k=_cror_(k,1);
if(k1==0)break;
if(k3==0) break;
}
}
void f3()//熄灭流水灯
{
while(1)
{
P0=0xff;
if(k1==0) break;
if(k2==0)break;
}
}
void delay(uint t)
{uint i,j;
for(i=t;i>0;i--)
for(j=114;j>0;j--);
}
关键字:单片机实验 跑马灯『本文转载自网络,版权归原作者所有,如有侵权请联系删除』