用51单片机点亮流水灯

用51单片机点亮流水灯的几种方法

1. 直接按位操作一个一个点亮

#include<reg51.h>//头文件
sbit LED0=P2^0;  //位定义单片机接LED灯的端口
sbit LED1=P2^1;
sbit LED2=P2^2;
sbit LED3=P2^3;
sbit LED4=P2^4;
sbit LED5=P2^5;
sbit LED6=P2^6;
sbit LED7=P2^7;
void delay()//延时函数
{
    unsigned char a,b;
	for(a=0;a<200;a++)
	for(b=0;b<200;b++);
}
void main()//主函数
{	
	while(1)
	{
    LED0=0;//第一个灯亮
	delay();//延时
	LED0=1;//第一个灯灭 以下以此类推
	
	LED1=0;
	delay();
	LED1=1;

	LED2=0;
	delay();
	LED2=1;
	
	LED3=0;
	delay();
	LED3=1;
	
	LED4=0;
	delay();
	LED4=1;
	
	LED5=0;
	delay();
	LED5=1;
	
	LED6=0;
	delay();
	LED6=1;
	
	LED7=0;
	delay();
	LED7=1; 
	}  
}

2 利用数组结合for循环点亮流水灯

#include<reg51.h>//头文件
unsigned char table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
                       //将8个LED灯亮放在一个数组中
void delay()//延时函数
{
    unsigned char a,b;
	for(a=0;a<200;a++)
	for(b=0;b<200;b++);
}
void main()//主函数
{
    unsigned char i;
	while(1)
	{
	for(i=0;i<8;i++)
	{
    P2=table[i];//for循环将LED灯显示出来
	delay(); //延时
	}
	}
}

3 利用左移符号<<实现流水灯显示

#include<reg51.h>//头文件
#define uchar unsigned char//宏定义用uchar表示unsigned char
#define uint unsigned int //宏定义用uint表示unsigned int
void delay()//延时函数
{
    unsigned char a,b;
	for(a=0;a<200;a++)
	for(b=0;b<200;b++);
}
void main()//主函数
{
    uchar k,i;
	while(1)
	{
	k=0xfe;//11111110 <<
	for(i=0;i<8;i++)
	{
	P2=k;
	delay();//延时
	k=k<<1;  //11111100	<<左移运算符,左移后最右边补0
	k=k|0x01;//00000001 |按位或,把最低位置变1
	}        //11111101
	}		 //11111010
			 //00000001
			 //11111011
}

4 利用循环函数实现流水灯

#include<reg51.h>//头文件
#include<intrins.h>//循环函数所在的库
#define uchar unsigned char//宏定义用uchar表示unsigned char
#define uint unsigned int  //宏定义用uint表示unsigned int
void delay() //延时函数
{
    unsigned char a,b;
	for(a=0;a<200;a++)
	for(b=0;b<200;b++);
}
void main()//主函数
{
    uchar k;
	k=0xfe;
	while(1)
	{
	P2=k;
	delay();
	k=_crol_(k,1);//11111110
	}			  //11111101 
	 //_crol_(a,b) 循环左移函数,a是代表左移的值,b是代表左移的位数
	  //_cror_(a,b) 循环右移函数,a是代表右移的值,b是代表右移的位数
}

注:

  1. 该程序51单片机开发板P2口接的是8位跑马灯
  2. 该程序51单片机开发板中LED位低电平驱动,即为0是灯亮
  • 20
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值