51单片机入门教程——模块化编程(新手版)

前言

本教程基于B站江协科技课程进行个人学习整理,专为拥有C语言基础的零基础入门51单片机新手设计。既帮助解决因时间差导致的设备迭代调试难题,也助力新手快速掌握51单片机核心知识,实现从C语言理论到单片机实践应用的高效过渡 。

目录

前言

1.知识储备

1.传统方式编程与模块化编程区别

传统方式编程:

模块化编程:

2.模块化编程框图

3.模块化编程注意事项

4.C预编译

​作用:

2.操作流程

1.调试Keil uVision5,正常显示汉字

2.代码模块化

3.主体代码编写

4.进行烧录

3.代码解析

5-1 模块化编程中的代码

5-2 LCD1602调试工具中的代码

4.总结


1.知识储备

1.传统方式编程与模块化编程区别

传统方式编程:

所有的函数均放在main.c里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路。


模块化编程:

把各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数的声明,其它.c文件想使用其中的代码时,只需要#include“XXX.h"文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等。

2.模块化编程框图

下图所标记位置为预编译,其作用是防止重复包含声明,这就能够避免编译错误,提高编译效率,保持代码清晰。

下图所标记位置即为Delay函数的声明,在头文件(.h)中进行.

防止重复包含代码的实现过程,如下图所示,蓝色框内的左边红色文字就是对右边代码的解释。

3.模块化编程注意事项

1. .c文件:函数、变量的定义
2. .h文件:可被外部调用的函数、变量的声明
3. 任何自定义的变量、函数在调用前必须有定义或声明(同一个.c)
4. 使用到的自定义函数的.c文件必须添加到工程参与编译
5. 使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)

4.C预编译

作用:

实现代码可选化与精简化,既能按需启用不同功能模块,精简冗余代码,还能提升代码的可维护性、可移植性,方便调试测试与软件定制,高效满足多样化开发需求。

2.操作流程

1.调试Keil uVision5,正常显示汉字

由于Keil uVision5是外国软件,不兼容中国汉字,为了方便我们能够看到“LCD1602.h”(下文将会用到)中的注释,我们需要调试,解决方法如下:

1.打开Keil uVision5,左击下图所标记位置。

2.左击“Encoding”右边的小箭头,选择“UTF-8(全球语言)”,再左击“OK”。(“Encoding“中有“BIG5(繁体中文)”和“GB2312(简体中文)”,选择什么看个人的习惯)

注意:选择“UTF-8”之后,不会出现半字和乱码的问题,但是在使用它之前的汉子会变成乱码,所以我们需要先选择“UTF-8”,再创建或导入含有中文的文件。

2.代码模块化

1.打开Keil uVision5,左击屏幕左上角的“Project”。

2.左击如图所示的位置

3.“Ctrl+Shift+N”新建一个文件夹(作者这里已经建好了),左击进入。

4..文件名命名完成,左击“OK”。

5.基本51单片机格式代码如下图所示。(这里小编省略了创建“main.c”的过程,如要需要可从小编之前的作品中查阅)

6.左击下图标记位置左边的符号,main.c显现

7.输入你想要调用的模块化代码的头文件,这里以“Delay”延时函数为例。

8.右击“Source Group 1”,再左击下图所标记位置

9.选择C语言,“Name”命名为“Delay”,左击“Add”。

10.“Delay.c”在目录中展现

11.找到之前学习时,有用到延时代码的文件,左击进入

12.打开“main.c”(小编选择的打开方式为VS)

13.复制Delay延时代码

14.粘贴进5-1中Delay.c源文件中

15.右击“Source Group 1”,再左击下图所标记位置

16.选择头文件,“Name”命名为“Delay”,左击“Add”。

17.目录中并没有显示"Delay.h"

18.右击“Source Group 1”,再左击下图所标记位置

19.右击文件类型最右侧的小箭头,找到“All”,左击选择,这样我们才能看见Delay.h

20.找到Delay.h并选中,左击“Add”,

21.显然,Delay.h被添加进目录中,左击“close”退出下图所示界面

22.在"Delay.h"中输入预编译代码

23.对Delay延时函数进行声明

24.同理,可得数码管的头文件和源文件(这里小编的头文件命名有误,请将“Nixiie.h”改正为“Nixie.h”),由于该源文件的代码定义P0口并且调用了Delay延时函数,所以要加上两个头文件,如下图标记位置所示。

25.Nixie.h的代码如下图所示

3.主体代码编写

如下图所示。

由于5-1的代码过于简单,所以5-2 LCD1602调试工具中的代码一并展示,如下图所示。(图中的“LCD1602.h”和“LCD1602.c”需要在江协科技的简介中找到并下载)

为什么用LCD1602而不用数码管?理由如下:

1.数码管需要不断扫描,一旦扫描不及时,数码管就会闪烁,显示内容也没有LCD1602多

2.LCD1602只与数码管和三个LED冲突,与其他器件不冲突,那么使用它调试会很方便,但是也有一个缺点,就是数码管和三个LED就不能用了。

4.进行烧录

1..打开stc-isp,左击“打开程序文件”。

2.找到存储代码文件夹的位置,双击进入。

3..双击“Objects”。

4.双击选中下图所示位置。

5.在确保51单片机已经与电脑连接的状态下,左击“下载/编程”。

6.在确保51单片机已经与电脑连接的状态下,按下51单片机开关,等待操作界面显示“操作成功”的字样后,关闭51单片机再次启动即可。

7.操作结果如下图所示。

8.同理,得到LCD的操作结果,如下所示。

3.代码解析

5-1 模块化编程中的代码

Nixie(1,1)到Nixie(8,8)中,Nixie第一个参数表示现实的数码管的位置,第二个参数表示要在该位置上数码管要显示的数字。

5-2 LCD1602调试工具中的代码

根据下图进行理解

 1.()中第一个参数表示第几行,第二个参数表示第几列,第三个参数表示要显示的数据,第四个参数表示指定长度(只有显示的数据为数字时才会有)

2.如果 LCD_ShowNum(1,9,123,3)中指定长度小于“3”,比如“2”,那么要显示的数字的最高位“1”就不会显示,只显示“23”;如果指定长度大于“3”,比如“4”,那么高位会补“0”,显示“0123”。

3.LCD_ShowSignedNum(1,13,-66,2)中第三个参数“-66”中的“-(负号)”并不包括在第四个参数即指定长度中。

4.LCD_ShowBinNum(2,4,0xAA,8)中第三个参数不能输入“1010 1010”,只能用十六进制数字来代表。

“LCD1602.h”和“LCD1602.c”

需要在江协科技的简介中找到并下载。我们之前调试软件,将编码方式改为“UTF-8”就是为了让我们能够阅读它们中的内容。

4.总结

本文既是我跟随 B 站江协科技学习 51 单片机模块化编程及 LCD1602 调试工具的实践总结,也是一份专为新手打造的实用指南。全文虽篇幅较长,但紧扣知识储备与代码模块化两大核心内容展开。当你深入理解并熟练掌握这两点,便能精准把握课程精髓,开启单片机开发的进阶之路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值