单片机流水灯闪烁

很多人在点亮一个led灯以后,觉得点亮流水灯其实没什么意思。不过我觉得对于从点亮一个led等,到玩顺流水灯,其实我们还是可以提高不少的。

比如:

1.单片机软件延时的计算

2.c语句的语法学习

3.加深对io口的操作,以及位操作

那么下面我们就开始,流水灯的操作吧—对8个发光二极管循环亮灭。

主要我这里是讲单片机和语句的解释,是软件的学习。

#inlcude   //引用我们使用的51单片机的头文件,寄存器的资源

/*刚开始学的小伙伴会自动的延用点亮一个led灯的语言习惯,会去把8个led灯都定义出来。然后再去程序中一个置为0或1,这样去实现亮灭。这样的操作其实虽然可以实现,但是对于我们语言的学习进步不大,因此我们需要用快捷的方式来操作。以下的定义f方法不推荐,当然了实际中如果真不会,那么还是以实现功能为主。

sbit LED1 = P2^0;

sbit LED2 = P2^1;

sbit LED3 = P2^2;

sbit LED4 = P2^3;

sbit LED5 = P2^4;

sbit LED6 = P2^5;

sbit LED7 = P2^6;

sbit LED8 = P2^7;

*/

unsigned int i;    //定义一个无符号整型变量,用于软件延时

void main()

{

    while(1)

    {

/*51单片机端口初始引脚是高电平,默认P1 = 0xFF(二进制就是11111111)  << 是向左移一位,空出来的补0   

例如 11111111  << 1  运算的结果就是  11111110(最高位被移出去了,最低位补0) 然后依次这样循环  */

       P1 = P1 << 1;   

       i = 60000;

/*  i一直减减,60000减到0的时候跳出while,又返回到 P1 = P1 << 1语句执行。

CPU完成一个基本操作所需要的时间称为机器周期,一个机器周期是12个时钟周期 ,12×(1/11.0592MHZ) 约等于 1us ,执行60000次,总时间为60ms  声明软件延时本身精确度不高(用于延时要求不高的场合)*/

       while(i--);   

    }       

}

你可能感兴趣的:(单片机流水灯闪烁)