欢迎光临散文网 会员登陆 & 注册

51单片机入门教程-2020版 程序全程纯手打 从零开始入门

2023-04-12 11:07 作者:oo1233214567  | 我要投稿

P4--点亮一个LED灯

1)通过PCB原理图可以知道控制LED灯亮灭的是P2口的,并且接入+VCC5V即高电平1,LED灯要那个亮的话那个线,P2端要设置为0,不亮就设置为1,有电势差,即有电流流过灯亮;

2)P2=1111 1110,即第一个灯亮其他灯不亮,但是我们读取是从下面的,所有不是(P2=0111 1111)这样写;

3)用到P2口,所有要导入头文件#....鼠标右键点击就可以加进来;

4)不能识别 P2=1111 1110这样的类型,所有将它转为16进制,开头用0x表示16进制的数

P2=0xFE ; //1111 1110 转换可以网上搜索,计算器也可以直接算;

5)一个亮一个灭P2=0x55; //0101 0101


P5---一个LED灯亮灭交替

1)用STC可以生成延迟函数:根据晶振改系统频率,还有其他信息;

2)复制生成代码到主函数上面,如下图代码:(void:无返回值,这里()可以设置参数);while、do...while都表示循环;

3)_nop_(),表示空语句,什么都不做,这个函数要加头文件如下:

4)要在主函数,及程序入口调用才可以实现延迟:如下

P6--流水灯---->1)-3)即可实现,4)后面为-->优化

1)将P5延迟的代码复制过来;

2)在main函数里面控制P2口灯的亮灭,代码如下,如上图放在while循环里面;

3)下载到板子上测试即可

4)生成延迟1秒函数,复制到main()函数前面


5)修改生成的延迟函数,可设置控制延时时间


6)主函数修改延时加参数就可以了

P7------独立按键---------

1)(上图)一端接GND,另一端接IO口,单片机上电,所有io口默认都是高电平,没按下高电平,按下低电平;

2)把上面的头文件加上X就可以单独设置:

3)如下,单独设置:

4)K1接P3_1(看芯片网络标号RXD对应的引脚)上得到对应连接:


5)按下亮松开灭第一个,P3_1是控制开关的,P2_0控制灯;


p8---------独立按键控制LED灯状态

1)消除抖动的方法,延时代码生成:

2)粘贴到main函数上方,修改延时代码如下:

3)实现一个LED灯亮灭未用按键:

4)监测按下按键是否松手,一直按着要一直监测,松手了才操作,像鼠标点击关闭浏览器,点到X的位置,不松还没关闭,松手了才关闭:(28行代码取反的意思,原来亮,取反就是不亮)


p9----延迟函数同P8 独立按键控制LED------

1)通过工具,生成延时函数,复制到mian.c文件

2)修改延时函数,将延时设置为可改变的,带参数函数;

3)主函数调用延时函数,实现LED灯亮灭,P3_1为控制按钮,P2控制灯亮灭,LEDNum控制移动:


P10----代码---延迟同P9

1)把前面的延迟函数复制过来,延迟函数放在main函数前面,也可以放到后面,如果放到后面要把下面选中的蓝色部分复制到到现在的位置加分号“;”:

2)延时函数在后面时,代码如下,要在前面声明:

3)位移的情况,下面是左移<<

4)左移操作实现:

5)板上的操作实现,只控制第一个按钮,按其他没用,灯往箭头方向移动:

6)实现右移操作(看行数,接5)代码):


P11 ----静态数码管显示------

1)常见数码管使用

2)板中数码管,可控制显示各个位置显示不同数字

3)控制数码管显示的原理图


4)管脚定义(对应字母控制对应位置亮):上面的为共阴极、下面的为共阳极(可以理解为3,8管脚处为供电,三角形尖尖有一横的是负极,所有共阴极),两个图中的数字为引脚:

5)用共阴极(因为共阴极所有3、8号公共端要接地,即为0)连接显示数字6的操作,有电势差即有电流流过灯才会亮,所有下面的1为亮,0不亮:(位选:10111110:显示6)

6)共阳极,接VCC为1,下面的为0才亮,有电流流过,有电势差灯才亮:

7)下面为多个数码管,PCB板的4个为一体,同样上面为共阴极下面为共阳极的原理图:

8)共阴极,那么我们公共端(12、9、8、6)接地给0才会亮,及可以控制第几个亮;显示的数字则通过下面(11、7、4、2、1、10、5、3即对应字母ABCDEFG)控制,给1才亮,给0不亮(电势差);下图显示结果:第三亮,显示数字1:(共引脚,其他亮的话数字也一样)

9)原理图是共阴极(上面给0、下给1亮)

10)上图完整版:

11)输入3(ABC,读的时候是从下读 C B A )个口,控制输出8个口,输出口连接共阴极的,是0还是1,在这里控制:使能端连接(按下图给1和0就可以用了)

12)通过CBA给数字0和1二进制转换10进制(得到数字几)就控制Y几,Y0头上“—”是表示低电平有效(即给0):

13)双向缓冲,高电平往低电平送数据

14)CC2电容作用:滤波电容,稳定电源,确定电路稳定性,提高电路工作性能可靠运行;

RP4:排阻,限流,防止电流过大

15)这里的P01......P07,就是用P0口,后面代码就是通过P0口控制灯的

16)只有Y5为0,其他Y0...Y7都为1;

17)读取顺序都是从下到上

18)代码控制公共端,从下往上写:

19)二进制101转换为1十进制为5,控制Y5,即公共端的LED6;

20)要显示下图的数字6

21)代码实现如下(P2控制共阴极,P0控制显示数字)及结果;

22)要显示的数字对应的值

23)优化操作代码,代码第三行如上表内容,下面//8表示第一个灯Y7即LED8,在最左边那个

24)函数调用(前面参数为显示位置,后面为显示数字),接上面代码:

P12---动态数码管显示-----

1)将P11代码复制粘贴到这里项目;

2)生成延迟函数复制过来,修改一下:

3)动态显示,放循环里面

4)注释掉上面的延时调用,旁边的管会有些影响,需要消影,段选、位选影响造成串位,如下代码消除

5)了解


P13--模块化编程----

1)驱动,先会用,后续有详细内容:

2)模块化,功能函数用点C文件写,点H文件声明函数,在main函数文件引入头文件直接调用:

3)注意事项

4)预编译


[5-1] 模块化编程 P13 - 15:49


5)写代码


[5-1] 模块化编程 P13 - 26:42


6)延时函数文件

7)头文件延迟

8)主函数文件程序入口:

9)数码管模块,用到的头文件要引用:

10)数码管模块头文件

11)函数调用

12)显示


P14--LCD1602调试工具-------

1)调试工具原理图

2)模块化代码,可以自己去下(我没有板不下),下完放到自己工程目录下:


[5-2] LCD1602调试工具 P14 - 03:43


3)将下好的两个文件添加到工程:

4)文件主要内容如下:

5)main函数调用:

6)显示其他管脚冲突,所有会一起显示:

7)其他函数的调用及功能,可以设置显示位置和范围:


[5-2] LCD1602调试工具 P14 - 14:08


8)需要用到延迟函数:可以直接将前面模块化文件复制到工程目录下,添加进来引用即可;


[5-2] LCD1602调试工具 P14 - 18:18



P15---矩阵按键-----


扫描矩阵按键代码





P16,其他代码同上

P17定时器


51单片机入门教程-2020版 程序全程纯手打 从零开始入门的评论 (共 条)

分享到微博请遵守国家法律