第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
}
}
第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 ;程序结束本回答被网友采纳