51单片机点灯、流水灯、跑马灯

文章展示了如何使用keil5编写代码和proteus8.6进行仿真来控制LED灯的不同效果,包括点亮、闪烁、延时函数的多种实现方式以及流水灯和跑马灯的编程实现。通过不同的循环语句和移位运算符,实现了LED灯的动态变化效果。
摘要由CSDN通过智能技术生成

使用软件:keil5、 proteus8.6

1、点亮一排led灯

代码:

#include <reg51.h>

void main()
{
	P2 = 0xff;      //端口2灯全部亮  
}

仿真:

 2、让一排LED灯闪烁

代码:

#include <reg51.h>
void delay()
{
    unsigned char i = 100; 
    unsigned char j = 100;
    
    while (i--)
    {
        while (j--);
    }
}
void main()
{
    P2 = 0xff; 
    delay();
    P2 = 0x0;
    delay();
}

仿真:

 3、延时函数中循环语句的不同写法

#include <reg51.h>
    unsigned char i, j;     //两种不同形式,实现一样的结果
    //unsigned char i;
    //unsigned char j;

void delay()
{
	/*
    while(i--)      //下面为不同形式的写法,实现相同的结果
    while(j--);
    */
    
    /*
    while(i--)
    {
        while(j--)
        {
        
        }
    }
    */
    
    /*
    while(i--)
	{
		while(j--);
	}
    */
    
    for (i=200; i>0; i--)       // “疑惑”:在i,j的赋值相同时,for循环写法小灯闪烁速度明显快于while循环写法
    {
        for (j=200; j>0; j--)
        {
            ;
        }
    }
}
void main()
{
	P2 = 0xff;
	delay();
	P2 = 0x0;
	delay();
}

4、LED依次点亮(流水灯)

代码:

/**********************
功能:C语言移位运算符的方法实现流水灯
**********************/

#include <reg51.h>
void delay()
{
    unsigned int i, j;      //“疑问”:当i,j数值不变时,用整形延时比用字符型延时时间更长
    for (i=0; i<300; i++)
    {
        for (j=0; j<300; j++);
    }
}

void main()
{
    unsigned char k;
    while(1)
    {
       unsigned char temp = 0x01;       //0x01对应P2口0000 0001,第一个灯亮
       for (k=0; k<8; k++)
        {
            P2 = temp;      //第一个灯亮
            temp = temp << 1;       //此时temp值为0x10,0000 0010
            delay();
        } 
    }
}
/*
void main()
{
    unsigned char k;
    unsigned char temp = 0x01;
    while (1)
    {
        
        
        
        for (k=0; k<8; k++)
        {
            P2 = (temp << k);      //向左移k位,temp的值不变,一直为0x01;是P2被赋的值在变
            delay();
        }
        
        
        
        P2 = (temp<<k++);
        if(8 == k) k = 0;       //如果k等于8时,将k赋值0,以实现循环
        delay();
        
    }
    
}
*/

仿真:

5、跑马灯

程序:

/*****************
    跑马灯程序
*****************/
#include <reg51.h>
void delay()
{
    unsigned char i, j;
    for(i=0; i<200; i++)
    {
        for(j=0; j<200; j++);
    }
}
void main()
{
    unsigned char i;
    while(1)
    {
        unsigned char temp = 0x01;
        for(i=0; i<8; i++)
        {
            P2 = ~temp;        //~为按位取反 例如:~1000 = 0111
            temp = temp << 1;       //左移一位赋值给新的temp 。    temp <<= 1;   两种写法是一样的,写哪一种都可以。
            delay();
        }
    }
}

仿真:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值