很多人在点亮一个led灯以后,觉得点亮流水灯其实没什么意思。不过我觉得对于从点亮一个led等,到玩顺流水灯,其实我们还是可以提高不少的。
比如:
1.单片机软件延时的计算
2.c语句的语法学习
3.加深对io口的操作,以及位操作
那么下面我们就开始,流水灯的操作吧—对8个发光二极管循环亮灭。
主要我这里是讲单片机和语句的解释,是软件的学习。
#inlcude<reg51.h> //引用我们使用的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–);
}
}
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!