51单片机学习笔记

一、模块化编程

1.一般编程和模块化编程的比较

**一般编程方式:**所有的函数放在“.c”文件里。
(缺点:如果使用的模块功能较多,则文
件中有很多代码,不利于对代码的组织和
管理,影响代码的美观性)
模块化编程: 将各个模块的代码放在不同的“.c”文件里,
在“.h”文件里提供外部可调用函数的声明,
其它“.c”文件想使用其中的代码时,只需要#include "XXX.h"文
件即可。
(优点:极大的提高代码的可阅读性、可维护性、可移植性
等)

2.模块化编程的使用(以delay函数为例)

1先把delay函数的代码写进一个独立的“.c”文件里
在这里插入图片描述
2.建立一个“.h”文件来声明delay函数
在这里插入图片描述
3在需要调用delay函数的主函数前写入头文件,就可以调用delay函数
在这里插入图片描述
4.用到的“.h”文件必须放在编译器可以找到的地方(建议和主函数程序放在一起)
在这里插入图片描述

3. LCD1602(模块化编程演示)

LCD1602
在这里插入图片描述
已存在的内部函数
在这里插入图片描述
直接调用函数,来控制LCD1602
在这里插入图片描述

二、矩阵键盘

1.上拉电阻和下拉电阻

上拉电阻:
将一个不确定的信号(高电平和低电平),通过一个电阻和电源VCC相连,固定再高电平。
下拉电阻
将一个不确定的信号(高电平和低电平),通过一个电阻和地GND相连,固定在低电平。当上拉电阻和下拉电阻共同作用时,表现为接地低电平状态。
在这里插入图片描述
上图中画蓝色方块的就是上拉电阻

2.矩阵键盘原理图

在这里插入图片描述
**用矩阵键盘的原因:**和独立按键类似,当16个键盘和单片机连接时,每个按键都需要有I/O口,但是如果这样的话,就会占用过多的I/O口,所以单片机设计者引入了矩阵键盘。
**实现方式:**快速扫描。扫描有两种方式,分别时按行扫描和按列扫描。
因为单片机I/O口设计的问题,我们一般采用按列扫描。具体操作如下:
首先,让p17置低电平,p14-p16置高电平,同时检测p10-p13是否有电平被拉低,假如此时检测到p13有电平变化,则肯定是s1按键被按下了。同理,可以检测到任意一个按键是否被按下。
**原理:**读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果。

**优点:**省单片机IO
**缺点:**不能同时按下多个按键

3.代码的实现

在这里插入图片描述在这里插入图片描述

三、定时器

51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。

1.定时器作用:

1、用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作;

2、替代长时间的for循环Delay,提高CPU的运行效率和处理速度;

……

工作框图

在这里插入图片描述
计数器可以计算外部脉冲个数,定时器就是用计数的原始实现的。

2.STC89C52定时器资源:

定时器个数:3个(T0、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。

注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的。

STC89C52的T0和T1均有四种工作模式:
模式0:13位定时器/计数器
模式1:16位定时器/计数器(常用)
模式2:8位自动重装模式
模式3:两个8位计数器
模式1工作框架图:
在这里插入图片描述
SYSclk:系统时钟,即晶振周期,本开发板上的晶振为11.0592MHz。

3.中断系统:

与定时器相互配合
在这里插入图片描述
定时器请求中断后,根据中断优先级执行任务。
在这里插入图片描述
寄存器补充:
定时器/结束器0/1控制寄存器TCON
在这里插入图片描述
定时器/计数器工作模式寄存器TMON
在这里插入图片描述

4.LED自动流水灯

按键
在这里插入图片描述
定时器
在这里插入图片描述
主函数
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值