AutoLeaders控制组——51单片机学习笔记(模块化编程、LCD_1602、矩阵键盘)

本文介绍了模块化编程的优势及其实现方法,并通过实例展示了如何使用模块化编程进行动态数码管控制。此外,还详细讲解了LCD_1602的使用方法及矩阵键盘的应用,包括密码锁的设计。

本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整。

以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅)

一些内容涉及前面的知识点,可能需要提前了解(可以翻看本人之前的文章或者去B站看UP主的视频)

目录

5-1、模块化编程

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

模块化编程用法

有关c与h文件位置的注意事项:

预编译

 实验操作(以模块化动态数码管代码为例)

5-2、LCD_1602调试工具

调试

LCD1602介绍

 LCD1602原理图

补充:忽略warning方法及一点细节

LCD1602代码函数(源于up主提供)

 Ⅰ、LCD_Init( )函数。

Ⅱ、LCDShowChar ( unsigned char Line, unsigned char Column, char Char)函数。

Ⅲ、LCD_ShowString(unsigned char Line,unsigned char Column,char *String)函数

Ⅳ、LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)函数——显示为十进制

Ⅴ、LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)函数——显示为十进制

Ⅵ、LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)函数

Ⅶ、LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)函数

总结意义:

6-1、矩阵键盘

矩阵键盘介绍

 扫描的概念

矩阵键盘原理图

补充:弱上拉模式与准双向口输出

写入程序

Ⅰ、添加main.c文件

Ⅱ、将需要的之前写过的模块代码添加到工程中。

Ⅲ、编写矩阵按键代码

Ⅳ、编写main.c文件

Ⅴ、烧录程序

补充:使用注释

6-2、矩阵键盘密码锁

写入程序

Ⅰ、新建工程

Ⅱ、更改主函数内容

Ⅲ、烧录程序

自行优化的代码

 写入代码

Ⅰ、编写输入数字、确定、退格、清零功能代码。

Ⅱ、编写设置密码模式

Ⅲ、编写猜密码模式

Ⅳ、编写主函数

补充说明:

Ⅴ、烧录程序


5-1、模块化编程

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

传统方式编程:

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

模块化编程:

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

因此,推荐用模块化编程。

模块化编程用法

①创建一个.c文件,将需要移植的函数放置到这里。(放置函数、变量定义)

②创建一个.h文件(放置可被调用的函数、变量的声明)

 这里只需要加入预编译和声明(即中间的void),即可完成.h文件编辑。

③在需要调用该函数的位置,将.h文件include进去。

(如最上面的语句,添加之后,即可直接使用.h文件内声明过的函数)

有关c与h文件位置的注意事项:

Ⅰ、使用的自定义函数的.C文件,必须放到工程中参与编译(位置跟main文件位置一样)

 Ⅱ、使用到的.h文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)——这里一般跟main文件放在同一个位置。

 如果选择另建一个文件夹(自定义)也可,但需要配置.h的路径(不然可能会出现找不到文件的问题)

 配置路径在上方的蓝线处配置即可。(当然直接放在main文件夹处不需要配置)

预编译

C语言的预编译以#开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)。

 ①#include的作用:相当于将里面的内容复制粘贴到当前文件中。

例如:将REGX52.H文件内的东西全部移到main文件中,替代掉#include <REGX52.H>,编译后只会warning(删除掉 #endif 后面的后警告消失),不会报错。 

 下面图片的warning,一个是因为有,一个是因为有函数未使用。

 

②#define的作用:定义一个变量(因此后面可以直接用,无需再定义)。如果后面有内容,那么就将前面的变量更换为后面的内容(即后面使用时,输入的虽然是变量,但是编译后,会将它全部换为后面的内容,有利于给特定数字定名字,便于理解)

 如上面的第二条语句,就是定义。(后面的__Delay_h__其实就是一个名字,只是一般都这么编写名字——__文件名_H__——其中文件名一般英文全部大写)

③#ifdef与#ifndef的作用:前者为如果定义了XXX(后面接的内容),就执行下面语句;后者为如果没有定义XXX(后面接的内容),就执行下面语句。

④#endif的作用:与#ifdef与#ifndef匹配,充当结尾括号(里面的内容就是#ifdef与#ifndef发挥作用的内容)。

解释③与④:

 上面代码,因为没有定义AAA,因此里面的东西不会执行。

 上面代码,因为定义了AAA,因此执行了里面的东西。(然后因为里面的内容是没有意义的,就报错了)

利用这个特性,就可以编辑.h文件,防止重复定义了。

如:

补充:解决Keil中输入中文删减出现乱码的问题

 图中1是我们的默认字体,因为外国对汉字的不兼容问题,因此删减等处理会出现乱码。(且复制网上的其他代码,或者从STC烧录软件拷贝代码时,可能中文会变为乱码)

图中3和4分别是繁体中文和简体中文,但是切换后,之前的英文字体会改变(比较难看),可能会有人考虑通过改字体的方式,但是都不尽人意(而且改动后,初始字体会消失,需要重新进入windows启用)。——但是对中文操作就不会出现乱码;

图中2是全球通用编码,使用该字体,能保留之前好看的英文字体,且处理中文不会出现乱码,但是使用上面选择的字体编辑的中文,切换到该字体后,会变为乱码(但是可以切回去原字体查看原内容,然后重新输入到第二种字体下的文本中)。

Ps:编辑字体的方法(如非必要,建议别切字体)

点击扳手图标,进入下面弹窗,选择[Colors & Fonts],即可编辑。

 

 实验操作(以模块化动态数码管代码为例)

Ⅰ、按照之前操作,完成main.c文件的建立

 补充:打开REGX52.H文件的存储位置

①右击<REGX52.H>,点击Open,进入该文件。

 ②右击上方文件栏的<REGX52.H>文件,点击Open,进入文件存储位置。

 ③在弹出来的弹窗中即可看到位置。(位于安装文件下)

 补充:< >与” 包含文件的区别

 前者表示直接在系统盘中寻找文件,后者表示在当前文件下寻找文件(如果找不到,逐级向下找,直到找到系统盘)。

因此< >可以替换为 ,而 替换为< >可能会出现找不到文件的情况。

Ⅱ、添加需要的.C文件,并使其包含需要的函数

①像之前添加main.c文件一样,新建一个Delay.c文件。

 ②在Delay.c文件中,加入Delay函数(可以复制之前的文件,也可重新在STC烧录文件中生成,重新编写)。

 Ⅲ、添加对应.C文件的.h文件

①像创建main.c文件一样,创建Delay.h文件,但是选择的文件类型改为H类型。

 ②编写Delay.h文件内容,添加预编译以及函数声明。

 ③将Delay.h文件添加进当前工程目录处(即左侧的排列文件)。——这一步建议与步骤②对调

Ps:也可不用添加,因为.h文件存储位置就在存放main.c文件的文件夹内,编译时可以找到。(但是.c文件必须添加)

为了便于管理,我们选择添加.h文件到工程目录中

 

 数码管相关函数添加方法同上。

①Nixie.c文件添加:

这里因为应用了Delay函数,以及使用了P2之类的内容,因此需要在上面加入对应的.h文件。(否则会显示没定义而出错)

Ps:编译时可能会显示warning(如果按照之前,每添加一点内容就测试的话),是因为没有调用函数导致,这个时候可以选择忽视(因为此时程序空间还有,因此不用担心)。

②Nixie.h文件添加:

 Ps:如果编译出错了,可能不一定是当前的文件有问题,有可能是该语句前面一个内容出问题了(所以可能得需要切换文件找原因)。

Ⅳ、编辑主函数

 Ps:一定要记得,如果在使用了对应函数内容,那么就要include对应函数的.h文件(如果模块化编译了的话)

Ⅴ、将程序烧录进单片机

5-2、LCD_1602调试工具

调试

 调试方式:

数码管——缺点:需要不断扫描

串口——缺点:需要连接电脑传输数据,有点麻烦

LCD1602液晶屏

LCD1602介绍

利用附带的LCD160

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值