跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从左向右移动,时间间隔0.5秒。 最好加上

跪求单片机c51用汇编语言写的程序,功能为:8只发光二极管依次点亮,从左向右移动,时间间隔0.5秒。 最好加上注释每一步在做什么,急用,好人一生平安!

第1个回答  2012-07-05
#include<iostream>
#include <intrins.h>
unsigned int i;

void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿
}

void main()
{
unsigned int i;
while(1)
{
for(i=8;i>0;i--)
{
if(i==8)
P1=~0x01;
//P1_0所接二极管亮,下面依次是P1_1到P1_7(电路连接时二极管一端连P1_0,一端连电阻再连5v,低电平的时候亮,因此加取反“~”)
if(i==7)
P1=~0x02;
if(i==6)
P1=~0x04;
if(i==5)
P1=~0x08;
if(i==4)
P1=~0x10;
if(i==3)
P1=~0x20;
if(i==2)
P1=~0x40;
if(i==1)
P1=~0x80;
delay_nms(500);//延时0.5s

}
}
第2个回答  2012-07-09
兄弟用C语言不行吗,那样更方便吧
第3个回答  2012-06-26
;*****************************************************************************************
;说明:程序预定义
;*****************************************************************************************
LED_CTRL EQU P1.4 ;发光管控制引脚(0:有效,1:无效)
LED_STATUS EQU P0 ;发光管L1至L8状态引脚(0:有效,1:无效)

;*****************************************************************************************
;说明:程序开始
;*****************************************************************************************
ORG 0000H ;程序首地址 PC=0000H
JMP START ;程序跳转至START PC=0030H

ORG 0030H ;程序开始
START:
CLR LED_CTRL ;发光管显示有效

MOV A, #0FEH ;发光管显示码初始值
L1:
MOV LED_STATUS, A ;发光管显示码送发光管状态引脚
RL A ;左移发光管显示码

CALL DELAY ;延时

AJMP L1 ;循环

;*****************************************************************************************
;函数:DELAY
;说明:程序延时
;参数: 无
;返回: 无
;*****************************************************************************************
DELAY:
MOV R6, #0FFH
DELAY_1:
MOV R7, #0FFH
DJNZ R7, $
DJNZ R6, DELAY_1

RET

;*****************************************************************************************
;说明:程序结束
;*****************************************************************************************
END ;程序结束本回答被网友采纳