51单片机学习 led流水灯

51单片机学习

2022/10/3 wreath

led流水灯

补充的c语言知识
  • 位运算符
运算符含义描述
&按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
I按位或两个相应的二进制位中只要有一个为1,该位的结果值为1
^按位异或若参加运算的两个二进制位值相同则为0,否则为1
~取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<<左移用来将一个数的各二进制位全部左移N位,右补0
>>右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
  • sbit
    定义特殊功能寄存器的位变量。
    sbit P0_0=P0^0;
    //即定义P0_0为P0口的第1位,以便进行位操作。
    

1.笨办法

2.位移

    #include<REGX52.H>
  
    #define	LED_PORT	P2 //宏定义P2端口
  
    //延迟时间函数
    void delay_10us( int ten_us)
    {
        while(ten_us--);
	    {
	    }
  
    }
  
    void main()
    {
        int i;
        while(1)
	    {
		    for(i=0;i<8;i++)
		    {
			    LED_PORT=~(0X01<<i);
			    delay_10us(50000);
		    }		
  
	    }

3.使用库函数位移

#include<REGX52.H>
#include<intrins.h>
  
#define	LED_PORT	P2//宏定义P2端口
  
//延迟时间函数
void delay_10us( int ten_us)
{
	while(ten_us--);
	{
  
	}
  
}
  
void main()
{
int i;
	LED_PORT=~(0x80);
	while(1)
	{
		for(i=0;i<7;i++)
		{
	        LED_PORT=_cror_(LED_PORT,1);
			delay_10us(50000);
		}
  
		for(i=0;i<7;i++)
		{
	     	LED_PORT=_crol_(LED_PORT,1);
			delay_10us(50000);
		}
  
	}
}    

使用库函数#include<intrins.h>

/*--------------------------------------------------------------------------
INTRINS.H
  
Intrinsic functions for C51.
Copyright (c) 1988-2010 Keil Elektronik GmbH and ARM Germany GmbH
All rights reserved.
--------------------------------------------------------------------------*/
  
#ifndef __INTRINS_H__
#define __INTRINS_H__
  
#pragma SAVE
  
#if defined (__CX2__)
#pragma FUNCTIONS(STATIC)
/* intrinsic functions are reentrant, but need static attribute */
#endif
  
extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
//右移right
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
//左移left
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if defined (__CX2__)
extern int           abs       (int);
extern void          _illop_   (void);
#endif
#if !defined (__CX2__)
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);
#endif
  
#pragma RESTORE
  
#endif

*crol
向左循环移位时,从左边出去会从右边边重新补入
*cror
向右循环移位时,从右边出去会从左边重新补入

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值