51单片机实现跑马灯,流水灯project仿真软件实验(32灯)

本文章意在记录自己学习以及分享仿真成功乐趣,需要的同学往里走。

也是借着学校要交实验报告理由整理一下自己的代码和思路。

本文章代码在project7.8仿真软件实现

1.LED灯实现从上到下点亮,再从下到上点亮的流水灯循环两次。

2.从上到下依次点亮,从下到上依次熄灭

3.两侧同时向中间流动,中间向两侧依次点亮

废话就不多写了什么实验内容,实验原理放在文章最后需要的同学自取。

二、实验内容

熟悉Keil C51集成环境软件的安装和使用方法。

1.照接线图编写程序,完善给出程序,实现以下功能。

2.要求LED灯实现从上到下依次点亮,再从下到上依次点亮。完成后实现从两侧向中间循环点亮,再从中间往外循环点亮。功能完成后循环上述过程。

3.观察实验结果,验证程序是否正确。延时实现LED流水灯效果,每个i/o端口的八个口都接led二极管作跑马灯。在本实验中,p0、p1、p2、p3作为输出口,每个接8发光二极管,编写程序,使发光二极管循环点亮。

三、实验原理

1.led二极管,电流由n端流向p端点亮。本实验led二极管由高电平点亮。

2.AY89C51单片机端口可以根据需要输出低电平和高电平,通过led可知单片机输出高电平。如图1.1可知。

图1.1电路原理图

3.3.keil5 c51进行流水灯代码的实现。

四,实验代码(不能运行可以借鉴思路)

#include <REGX51.H>

unsigned char led,i,j,k,led_up,led_down,num;//led高电平点亮


void delay(unsigned int xms)//延迟函数
{
	unsigned char i,j;
	while(xms)
	{
		i=2;
		j=239;
		do
		{
			while(--j);
		}while(--i);
		xms--;
	
	}
}

		
void main(void)
{
	unsigned char j;//整个代码块的循环
      P0=0x00;
	  P1=0x00;
	  P2=0x00;
	  P3=0x00;//
	/*先向上在向下循环两组*/
	while(1)
   {
		for(j=0;j<2;j++)
		{
			led=0x01;// 0000 0001
			P0=led;
			delay(250);
				for(k=1;k<8;k++)//p0 由上至下
			    {
				led=led<<1;
				P0=led;
				delay(250);
				P0=0X00;//将p0口的全部清0
			    }
			led=0x01;
			P1=led;
			delay(250);//
				for(k=1;k<8;k++)
			    {
				led=led<<1;
				P1=led;
				delay(250);
				P1=0x00;
			    }
		    led=0x01;
		    P2=led;
		    delay(250);
				for(k=1;k<8;k++)
			    {
				led=led<<1;
				P2=led;
				delay(250);
				P2=0X00;
			    }
	        led=0x01;
		    P3=led;
		    delay(250);
			   for(k=1;k<8;k++)
			   {
			    led=led<<1;
				P3=led;
				delay(250);
				P3=0x00;
			   }
		   	
		}
			
	/*先向下再线上循环*/
	
	    for(j=0;j<2;j++)
		{	
			led=0x80;// 1000 0000
			P3=led;
			delay(250);
				for(k=1;k<8;k++)//p0 由上至下
			    {
				led=led>>1;
				P3=led;
				delay(250);
				P3=0X00;//将p0口的全部清0
			    }
			led=0x80;
			P2=led;
			delay(250);//
				for(k=1;k<8;k++)
			    {
				led=led>>1;
				P2=led;
				delay(250);
				P2=0x00;
			    }
		    led=0x80;
		    P1=led;
		    delay(250);
				for(k=1;k<8;k++)
			    {
				led=led>>1;
				P1=led;
				delay(250);
				P1=0X00;
			    }
	        led=0x80;
		    P0=led;
		    delay(250);
			   for(k=1;k<8;k++)
			   {
			    led=led>>1;
				P0=led;
				delay(250);
				P0=0x00;
			   }
			
		}
		/*  由上依次增加,再以此减少*///一次
		for(j=1;j<2;j++)
		{
			led=0xfe;//1111 1110
			   for(k=0;k<8;k++)
		  	   {
			   P0=~led;
			   led=led<<1;
			   delay(250);
			   }
		    led=0xfe;
			   for(k=0;k<8;k++)
			   {
			   P1=~led;
			   led=led<<1;
			   delay(250);
			   }
			led=0xfe;//1111 1110
			   for(k=0;k<8;k++)
			   {
			   P2=~led;
			   led=led<<1;
			   delay(250);
			   }
		   led=0xfe;
			   for(k=0;k<8;k++)
			   {
				P3=~led;
				led=led<<1;
				delay(250);
			   }

			  
	    }

		/*先从下往上走*/
		for(j=1;j<2;j++)
		{
	           P0=0xff;
	           P1=0xff;
	           P2=0xff;
	           P3=0xff;
		   led=0x7f;//0111 1111
			   for(k=0;k<8;k++)
		  	   {
			   P3=led;
			   led=led>>1;
			   delay(250);
			   }
		    led=0x7f;
			   for(k=0;k<8;k++)
			   {
			   P2=led;
			   led=led>>1;
			   delay(250);
			   }
			led=0x7f;//0111 1111
			   for(k=0;k<8;k++)
			   {
			   P1=led;
			   led=led>>1;
			   delay(250);
			   }
		   led=0x7f;//0111 1111
			   for(k=0;k<8;k++)
			   {
				P0=led;
				led=led>>1;
				delay(250);
				   
			   }
	           
		}
	/*两边向中间流动 灯亮一下灭*/
		for(j=0;j<2;j++)
		{
	       P0=0x00;
		   P1=0x00;
		   P2=0x00;
		   P3=0x00;
		   led_down=0x01;//0000 0001  led系列  向下
		   led_up=0x80;//1000 0000 led1系列
		   P0=led_down;
		   P3=led_up;
		   delay(250);
		       for(k=1;k<8;k++)
		       {
			   led_down=led_down<<1;//向下
			   led_up=led_up>>1;//线上
			   P0=led_down;
			   P3=led_up;
			   delay(250);
			   P0=0x00;//清零
			   P3=0x00;//P3口全灭
			   }
		   led_down=0x01;//0000 0001
		   led_up=0x80;
		   P1=led_down;
		   P2=led_up;
		   delay(250);
		       for(k=1;k<8;k++)
		       {
			   led_down=led_down<<1;
			   led_up=led_up>>1;
			   P1=led_down;
			   P2=led_up;
			   delay(250);
			   P1=0x00;
			   P2=0x00;
		       }
		 /* 中间向两边,依次点亮*/
			led_up=0x7f;//0000 0001
			led_down=0xfe;//1111 1110
			   for(k=0;k<8;k++)
		  	   {
			   P1=~led_up;
			   P2=~led_down;   
			   led_up=led_up>>1;
			   led_down=led_down<<1;
			   delay(250);
			   }
		    led_up=0x7f;
			led_down=0xfe;   
			   for(k=0;k<8;k++)
			   {
			   P0=~led_up;
			   P3=~led_down;
			   led_up=led_up>>1;   
			   led_down=led_down<<1;
			   delay(250);
			   }			   
		}
 }

   }		
}

5、实验效果展示

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值