从零开始学C51单片机,以下是学习单片机的笔记,如果你感兴趣并且也想学习的话,那我们一起开始吧!不懂的可以留言!我会及时回复!
1.点亮一个LED
点亮LED可以两种方法:
①P2 = 0xFE (1111 1110) ,由上图LED模块可知LED正极接入VCC,这是只需要最低位置零,电路就通了,此时D1亮。例如:P2 = 0x00,此时全亮;P2 = 0xFF,此时全灭。
②P2_0 = 0 的意思与 P2 = 0xFE (1111 1110)相同。例:P2_1 = 0,此时D2亮。
2.LED闪烁
会控制LED亮灭后,接下来只需要加一个简单的延时代码,就可实现LED闪烁了!
这是自动生成延时代码的界面,看过江科大51教学的应该都不陌生了。简单的修改延时代码,可以自己放入参数设置自己需要的时间。
3.LED流水灯
一个简单的写法就是
P2 = 0xFE; // 1111 1110
Delay1ms(500);
P2 = 0xFD;// 1111 1101
Delay1ms(500); 依次类推写到第8个LED。
接下来我介绍一个简洁代码的写法,有C基础的应该好理解。
int i = 8,while(i--),因为有八个LED,循环八次,while循环体外,i = 8,为了使循环继续,如果没有末尾i= 8这行代码,流水灯直流一次。
P2 = ~(1<<j), ~这个符号的意思是取反,例如:~0xFF (1111 1111) 的结果是 0x00 (0000 0000),
<<这个符号的意思是按位左移,1<<1,也就是 0000 0001 左移 1位,结果是 0000 0010。
循环体执行第一次时,j=0,P2 =~(1<<0) ,1左移了0,此时对(0000 0001) 取反结果为(1111 1110),此时第一颗灯亮,延时500ms后,j++,循环体内执行第二次,此时j = 1;也就是上面1<<1位,再取反结果为(1111 1101),此时第二颗亮。依次下去、、、
4.独立按键控制LED亮灭
只需要if语句判断按键状态即可实现。不做过多讲解,以及后面的只放出代码,不懂得评论大家一起讨论讨论。
5.独立按键控制LED状态
6.独立按键控制LED显示二进制
7.独立按键控制LED位移
这一个我并没有照抄江科大写法,我这个有点BUG没能解决,如果有懂的大佬可以指点一下谢谢。
以上就是点灯的所有程序,写这篇文章也是为了给自己做个笔记,顺便分享一下自己的想法。谢谢支持。大家一起加油!!!