C51单片机 -- 流水灯(地址操作 + 位操作)


一.实验准备

1.Proteus 7 Professional

2.Kevil


二.电路图


三.代码讲解

修改端口

#include
#define n 100      //设置延迟时间 

void delay(unsigned int);
     
void main()       // LED灯只有在 底电平 工作  
{
	P0 = 0xFE;   // P0 = 0xFE --> 1111 1110 
                 // 在单片机中 --> P0.0 端口为 0 其余端口 为 1
	while(1)
	{
	P0 = 0xFE;delay(n);
	P0= 0xFD;delay(n);

    P0 = 0xff;   // P0 = 0xff --> 1111 1111 所有端口 均为1 关闭 LED 灯

	P1 = 0xFE;delay(n);
	P1 = 0xFD;delay(n);
    
    P0 = 0xff;
	
	P2 = 0xFE;delay(n);
	P2 = 0xFD;delay(n);

    P0 = 0xff;
	
	P3 = 0xFE;delay(n);
	P3 = 0xFD;delay(n);
    
    P0 = 0xff;

	}
}

void delay(unsigned int t)
{
	unsigned int i;
	while(--t)
		for(i = 0; i <= 256; i++ );

}
 

位操作

#include
#define n 100
sbit LED0 = P0^0;   		// 给每个端口命名 P0^0 代表端口 P0.0
sbit LED1 = P0^1;
sbit LED2 = P1^0;
sbit LED3 = P1^1;
sbit LED4 = P2^0;
sbit LED5 = P2^1;

sbit LED6 = P3^0;

sbit LED7 = P3^1;

void delay(unsigned int);

void main()
{
	LED0 = 0;         				// 给LED灯一个低电平 点亮LED灯
	while(1)
	{
	LED0 = 0;
	delay(n);
	LED0 = 1;						// 给LED灯一个高电平 关闭LED灯
	
	LED1 = 0;
	delay(n);
	LED1 = 1;	

	LED2 = 0;
	delay(n);
	LED2 = 1;	
	
	LED3 = 0;
	delay(n);
	LED3 = 1;	
	
	LED4 = 0;
	delay(n);
	LED4 = 1;	
	
	LED5 = 0;
	delay(n);
	LED5 = 1;	

	LED6 = 0;
	delay(n);
	LED6 = 1;	
	
	LED7 = 0;
	delay(n);
	LED7 = 1;	

	
	}
}
 
void delay(unsigned int t)
{
	unsigned int i;
	while(--t)
		for(i = 0; i <= 256; i++ );

}

 

你可能感兴趣的:(问题讲解)