51单片机 跑马灯程序

要求:六个灯p0--p5,先点亮p0,延时10秒,再点亮p1,p0熄灭,再延时十秒,依次循环,每分钟循环一次。求一份程序(最好能在Proteus上直接用,有仿真的面板),... 要求:六个灯p0--p5,先点亮p0,延时10秒,再点亮p1,p0熄灭,再延时十秒,依次循环,每分钟循环一次。求一份程序(最好能在Proteus上直接用,有仿真的面板),写出每步程序说明,谢谢!!!
使用汇编语言编程,最好有每部程序的文字说明,因为本人是菜鸟。谢谢各位!!!
展开
 我来答
djw375681000
2009-11-25 · TA获得超过226个赞
知道答主
回答量:184
采纳率:0%
帮助的人:71.6万
展开全部

org 0000h

    jmp start

    org 0030h

start:

    mov p0,#11111110b  ;  此时第一个灯亮

    call t10s

    mov p0,#11111101b  ;此时第二个灯亮

    call t10s

    mov p0,#11111011b

    call t10s

    mov p0,#11110111b

    call t10s

    mov p0,#11101111b

    call t10s

    mov p0,#11011111b

    call t10s

    jmp start        ;此处跳到开始 即 循环

;延时子程序10秒=250usX2X200X100

t10s:mov r5,#100

lpr5:mov r6,#200

lpr6:mov r7,#250

    djnz r7,$

    djnz r6,lpr6

    djnz r5,lpr5

  ret

  end

把灯的正极接电源正极 即vcc 负极分别接p0.0-p0.5

此时  给p0  送0灯就亮 1灯就不亮

程序已经过调试 可用

仿真如下:

做而论道
高能答主

推荐于2017-11-22 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:8317万
展开全部
用汇编语言实现的程序如下。
本程序已经经过在Proteus上验证、仿真成功。

ORG 0000H
SJMP _START
ORG 0050H
_START:
MOV P1, #0xFE
CALL DL10S
MOV P1, #0xFD
CALL DL10S
MOV P1, #0xFB
CALL DL10S
MOV P1, #0xF7
CALL DL10S
MOV P1, #0xEF
CALL DL10S
MOV P1, #0xDF
CALL DL10S
SJMP _START

DL10S:
MOV R5, #100
_DELAY100MS:
MOV R6, #200 ;1T
DL250T:
MOV R7, #250 ;1T
D2:
DJNZ R7, D2 ;2T, 原地转移250遍, 共用500T
DJNZ R6, DL250T ;2T, 转移200遍
DJNZ R5, _DELAY100MS
RET ;2T
END
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lonelyrainzqb
2009-12-01 · TA获得超过237个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:169万
展开全部
#include <reg51.h>

void main()
{
unsigned char ch[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/*0--9*/
unsigned char i,j;
j=1;
P2=P2&0x00;
P1=0xef;
P0=0xa4;
while(1)
{
i=P1;
i=i;
if(i==0xee)
{
P0=0xb0;

}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
First_lufei
2009-11-24 · 超过11用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:0
展开全部
c还是汇编呀?

#include<reg51.h>

void delay(void);
void main()
{
do{
P1=0xFE;
delay();
P1=0xFD;
delay();
P1=0xFB;
delay();
P1=0xF7;
delay();
P1=0xEF;
delay();
P1=0xDF;
delay();
P1=0xBF;
delay();
P1=0x7F;
delay();
}while(1);
}

void delay()
{
unsigned int x=60000;
do{ x--;
}while(x>1);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式