51单片机之流水灯(C语言和汇编两个版本)

c语言

#include<reg52.h>
typedef unsigned char uint8;
 

sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ENLED0=P1^4;
sbit ENLED1=P1^3;

uint8 i;
uint8 j;
void delay()
{
 for(i=0;i<255;i++)
  {
  for(j=0;j<255;j++)
  {

  }
 }
}


 uint8 x;
void Main()
{
 ENLED0=0;ENLED1=1;
 ADDR0=0;ADDR1=1;ADDR2=1;

 x=1;
 while(1)
 {
    
 
 P0=~x;
 delay();
   
 if(0x80==x)
 {
  x=1;
 }
 else
     x=x<<1;

 

 }
 
}

 

 

 

汇编

org 00H
ajmp start

org 30H
start:
   /*为流水灯发亮做好准备工作*/
 

 //1.使ENLEDS=0----
 clr P1.4
 setb P1.3
 setb P1.2
 setb P1.1
 clr  P1.0

//汇编位定义的使用,上面的几句话就等效于下面的六行代码

//sbit ADDR0=P1.0
//sbit ADDR1=P1.1
//sbit ADDR2=P1.2

//setb ADDR2
//setb ADDR1
//clr  ADDR0 


 mov A,#1H
 mov P0,A
 main:
    cpl A 
 mov P0,A
 lcall delay
 cpl A
 rl A
 
 ajmp main
 


delay:
 
      mov R1,#1H
 loop1:
      mov R2,#0FFH
 loop2:
   mov R3,#0FFH
 loop3:
 djnz R3,loop3
 djnz R2,loop2
 djnz R1,loop1

ret
end

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值