【学习笔记】C51 keil v4 流水灯简单代码的编写

打算利用暑假时间好好学习硬件知识,网上买了个板子,开始学习硬件描述语言。不知道有没有比较好的书籍推荐呢

#include<reg52.h>
#include"intrins.h"
typedef unsigned char u8;/*char 为1字节,8位  */
typedef unsigned int u16;
/*一般情况下用int,因为unsigned char取值范围为0~255;而int为65535;
用u16,u8使代码的可移植性高		  */
#define led P0
//sbit led=P0^0;
//两种表示方式
void delay(u16 i)
{
	while(i--);
}//运用延时函数达到使led灯闪烁的目的
void main()
{
		/*
		 while(1)
		 {
		led=1;
		delay(50000);//i=1时,约等于是10us,所以50000是500ms
		led=0;
		delay(50000);
		}
		//这段代码实现一个led灯的闪烁。即亮了0.5秒后,暗0.5秒。但是由于delay函数是不精确的,所以时间不是准确的0.5s
		*/


        /*u8 i;
        led=0x01;//表示16进制,第一个led灯   0000  0001
        delay(50000);  
		while(1)
		{
			
        for(i=0;i<8;i++)
        {
        	led=(0x01<<i);//意思是把1往左移动i位
        	delay(50000);
        }

		}
        //这段代码实现了八个led灯的依次点亮,实现了流水灯的功能
		 */

         u8 i;
		led=0x01;
		delay(50000);
		while(1)
		{
				for(i=0;i<7;i++)
                {
        	        led=_crol_(led,1);
        			delay(50000);
        		}
       			 for(i=0;i<7;i++)
        		{
        			led=_cror_(led,1);
        			delay(50000);
        		}
		}
        

         /*这段代码实现了走马灯的功能1~8依次亮,接着8~1亮
        因为运用了_cror_(a,b)函数,所以需要引用头文件instrins.h


        至于为什么上一段代码是i<8,这一段是i<7;
        其实是根据具体操作来的,亲故可以自行体验下他的用法
        第二段代码是led=(0x01<<i);也就是每一次循环都是从0x01开始的,i=0起始
        最后一段代码是led=_crol_(led,1);是运用了左移函数,且赋值给了led,所以led每次循环的起始源是不同的。
        值在i=0循环的时候就变成了0010起始,而上一段还是0001起始。	   */
}

猜你喜欢

转载自blog.csdn.net/weixin_42194402/article/details/81355226