太原理工大学机器人团队20天学习打卡day20(51单片机初步)

太原理工大学机器人团队20天学习打卡day20(51单片机初步)

不定期更新

一切随缘(佛系ing)。

控制多个LED左移或者右移的程序1

控制多个LED左移的程序

#include<reg52.h>
void Delay(unsigned int t);			 //声明一个延时函数,t的范围为0到65535


void main()
{
    unsigned char i;				//定义一个无符号字符型变量,
    P1=0xfe//给P1口赋值,P1=FEH=11111110B
        while(1)
        {
        for(i=0;i<8;i++)
            
            
            
        {
            Delay(6000);		    //将6000赋值给t。
            
            P1=P1<<1;  				//这是本例子的重点,它表示爸P1端口的数值左移一位
            			//放在for循环里面,咱们品品就知道左移了8次,进行8次字节操作
        	P1|0x01;	//给P1口最低位补1
        }
    P1=0xfe;
        }
    while(1)                          //一个循环结尾。----------------------①
    {
        
    }
    
}
/*下面是延时函数(也就是对delay声明的解释)*/
void Delay(unsigned int t)
    
{
    while(--t);					//当--t的值为0时候 判定为假。
    
}
现象

接通电源后 P1.0先亮,然后依次亮起(每次只要一个LED亮。)

以此周而复始。

对于①的解释以及一些说明

没有while(1);的话单片机程序执行到最后会从头开始执行。

如果希望程序执行后运行到某处停止,可以采用死循环。while(1);或者while(1){}。

在上面这个程序里面如果删除whlie(1){}

那现象就变为LED逐个点亮的过程不断重复。

控制多个LED左移或者右移的程序2

左移有了,那就再来个右移,它和左移还是有一些区别的。

#include<reg52.h>
void Delay(unsigned int t);			 


void main()
{
    unsigned char i;				
    P1=0x7f//给P1口赋值,P1=FEH=11111110B
        while(1)
        {
        for(i=0;i<8;i++)
            
            
            
        {
            Delay(6000);		    
            
            P1=P1>>1;  				
            P1=P1|0x80;			 
        }
            P1=0x7f;      		//P1端口赋初值,最高位led点亮
        }
    while(1)                          
    {
        
    }
    
}
/*下面是延时函数(也就是对delay声明的解释)*/
void Delay(unsigned int t)
    
{
    while(--t);					
    
}
现象

最左端LED,也就是P1.7的开始逐个点亮(每次只要一个点亮)。

以此周而复始。

一些说明

在右移(高位往低位移动)前,先用P1=0x7f语句将最高位的LED点亮,然后用P1=P1>>1语句将P1的8位数右移一位,执行8次,每次执行后用P1=P1|0x80语句给P1最高位补1,8次执行完后,又用P1=0x7f语句将最高位的LED点亮,接着又执行for语句,如此循环反复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值