51单片机流水灯

流水灯是学习51单片机的一个基本项目,是我们对单片机IO口输出认识的基本项目。当然学会了花样流水灯也很好玩。

下面就分享一种51单片机流水灯制作的方法。

一、流水灯原理图

二、相关知识

1、while语句

书写格式:while(表达式)   {       语句;                    //循环体         。。。    }

备注:当while语句中的()里的值为非零值是,while所带的语句就会执行,为0时程序不执行(只有为0值时不执行),括号里可以是常量,可以是变量,也可以是一个公式。

我们常用写法:

(1)while(1){  语句;               }     //这样写代表了这是一个死循环,{  }中的程序会一直循环执行

(2)while(a--){  语句;               } //这样写就是当a每执行一次循环会自减一个数,当a的值减到0了,就不执行了。

2、for循环语句

除了while语句语句之外,c语言还有一个for循环语句。

书写格式:for(初始化表达式;条件表达式;增量表达式)  {          语句;      。。。         }

常用写法:

for(i=0;i<8;i++)  {     语句:。。。  } 

 //这样写代表了,for语句的{}中的程序循环执行,循环的次数由()的内容决定,()中的意思是i变量从0开始,到8结束(不含8),i每次自加1,加到8 了跳出循环。

3、左移右移指令

4、位取反指令

5、延时函数

/*--------微秒延时--------*/
void delay_us(uint z)
{
    uint x;
    for(x=z;x>0;x--);
}

第一个延时函数是微秒级延时,程序原理是for语句每循环一次,单片机执行一次空语句,51单片机(接12M晶振)执行每次空语句实际不止1us,一般会是几微秒。
/*--------毫秒延时--------*/
void delay_ms(uint z)
{
  uint x,y;
    for(x=z;x>0;x--)
       for(y=110;y>0;y--); 
}

第二个延时函数是毫秒级延时,其中的两个for语句成为嵌套训话语句,下面的for嵌套在上面的for里面执行。下面的for代表了循环执行110次空语句,得到一个1ms延时,此时上面的for循环多少次就延时多少毫秒,而延时多少毫秒由,变量z决定。

三、例程


/*---------------------------
流水灯接口:P1    
------------------------------*/


#include<reg52.h>

#define uint unsigned int
#define uchar unsigned char



/*--------微妙延时--------*/
void delay_us(uint z)
{
	uint x;
	for(x=z;x>0;x--);
}
/*--------毫秒延时--------*/
void delay_ms(uint z)
{
  uint x,y;
	for(x=z;x>0;x--)
	   for(y=110;y>0;y--); 
}

/*----------主函数-----------*/
void main()
{
	
	P0=0x00;P1=0xff;P2=0x00;P3=0x00;//端口初始化,熄灭所有LED灯
	uchar i,j;
	while(1)
	{
	  j=0x01;
	  for(i=0;i<8;i++)    //for循环8次
	 {
	   P1=~j;              //P1等于j位取反
	   j=j<<1;             //j左移1位
	   delay_ms(1000);     //等待1秒
	 }
    }
}

四、视频讲解

项目2、流水灯

B站链接:https://www.bilibili.com/video/BV1pW421N7r2/?spm_id_from=333.1365.list.card_archive.click&vd_source=963ae9aae236be73cd4b5b480953fe48

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值