51单片机入门
课程来源:江科大自化协
1 单片机及开发板介绍
单片机
- Micro Controller Unit 简称 MCU
- 内部集成 CPU RAM ROM 定时器 终端系统 通讯接口等一系列常用硬件功能
- 单片机的任务:信息采集、处理和硬件设备的控制
- 学习使用单片机是了解计算机原理与结构的最佳选择
STC89C52 单片机
- 所属系列:51 单片机系列
- 公司:STC 公司
- 位数:8 位
- RAM:512 字节
- ROM:8K
- 工作频率:12MHz
- 是对所有兼容 Intel 8031 指令系统的单片机的统称
命名规则
工作电压、程序空间 RAM 大小、工作频率、温度范围、封装类型、管脚数
2 LED
- 2-1 LED 点亮
- 2-2 LED 闪烁
- 2-3 LED 流水灯
- 延时代码
1 | void Delay500ms() //@12.000MHz |
3 按键开关
3-1 独立按键控制 LED 亮灭
- 轻触按键:按下开关接通、松开开关断开,原理:金属弹片受力弹动
- 根据原理图,按下按键对应值为 0;
C51 数据运算
- 算术:+, -, *, /, %, =
- 判断: >, >=, <, <=, ==, !=
- 逻辑:
运算符 意义 && 逻辑与 || 逻辑或 ! 逻辑非 - 位运算
运算符 意义 << 按位左移 >> 按位右移 & 按位与 | 按位或 ^ 按位异或 ~ 按位去反
C51 基本语句
if
for
while
switch
3-2 按键控制 LED 状态
按键抖动
在开关闭合及断开的瞬间会伴随一连串的抖动
消抖
- 硬件消抖:
- RS 触发器
- 电容器
- 软件消抖
- 延时函数
优点:简单方便
缺点:程序空跑浪费 CPU 资源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//@12.000MHz-1ms 延时函数
void Delay(unsigned int xms){//延时1ms
unsigned char i, j;
while(xms--){
i = 2;
j = 239;
do{
while (--j);
} while (--i);
}
}
//消抖函数
void debounce(){
if(PXin(x)==KEY_PRESS) //代表按下按键
Delay(10); //刚按下时出现抖动,延时10ms
while(PXin(x)==KEY_PRESS); //按键闭合,不做处理
Delay(10); //按键弹起出现抖动,延时10ms
/*按键处理*/
} - 延时函数
4 数码管
4-1 静态数码管显示
数码管介绍
- 动态数码管模块原理图
- 74HC138(U5):
三线-八线译码器,详见数电课本 - 74HC245(U4):
- 作用:双向数据缓冲器,将数据由 AX 传至 BX
- 原因:单片机驱动能力弱,将驱动改为控制信号,使 LED 数码管的驱动能力来源 VCC
- RP3&4 100R
- 100 欧姆排阻
- 作用:分流
- 应用原理
- 74HC138 译码器,输入三位 421 二进制数,输出结果作为位码
- 74HC245,八位输入作为段码
C51 数组
1 | int x[3]; //定义一组变量 |
C51 子函数
将完成某一功能的程序代码单独抽取出来形成一个模块,在其他函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的。
数码管段码表
1 | uchar code table[]={ |
1 | uchar code leddata[]={ |
4-2 动态数码管显示
数码管串位现象(数码管消影)下一次位选和上一次段选重合。
解决方式:在下一次位选之前段选清零
1 | //.... |
数码管驱动方式
- 单片机直接扫描(动态扫描)
硬件设备简单,但会耗费大量的单片机 CPU 时间 - 专用驱动芯片
内部自带现存、扫描电路,单片机只需告诉它显示什么即可
5 编程与调试
5-1 模块化编程
- 传统方式编程
所有函数在 main.c,模块较多则不利于代码组织与管理,影响思路。 - 模块化编程
将模块独立放在不同的.c 文件,在.h 文件里提供外部可调用函数的声明,其他.c 文件想使用其中的代码,只需 include 调用即可。使用模块化编程课极大提高代码的可阅读性、可维护性、可移植性等。
fun.c->fun.h->main.c
- 模块化编程的注意事项
- .c 文件:函数、变量的定义
- .h 文件:可被外部调用的函数、变量的声明
- 任何自定义的变量、函数在调用前有定义或声明
- 使用到的自定义函数的.c 需参与编译
- 使用到的.h 文件必须要放在百年一起可寻找到的地方(工程文件夹根目录、安装目录、自定义)
C 预编译
以#开头,在编译前对代码做出的一些处理
5-2 LCD1602 调试工具
常用函数
1 | void LCD_Init(); |
函数定义详见LCE1602.c
6 矩阵键盘
6-1 矩阵键盘
为节省 IO 口,逐行逐列扫描,可读出任何位置按键的状态
6-2 矩阵键盘密码锁
矩阵键盘+LCD1602
补充:单行清屏显示
1 | //第二行的清除函数 |
7 定时器
7-1 定时器
- 定时器介绍:51 单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
- 定时器作用:
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的 Delay,提高 CPU 的运行效率和处理速度
(…) - 定时器工作模式
- 模式 0:13 位定时器/计数器
- 模式 1:16 位定时器/计数器
- 模式 2:8 位自动重装模式
- 模式 3:两个 8 位定时器
- 时钟来源:
- 系统时钟(晶振周期),本开发板晶振的频率 12MHz,周期 1/12us,机器周期为 12*1/12us=1us
- 外部 IO 口时钟(T0-P3.4,T1-P3.5)
- 定时器和计数器:
- 二者核心部件都是一个加减法计数器,其本质相同均为对脉冲进行计数
- 区别在于定时器的计数脉冲来自系统时钟,计数器的计数脉冲来自外部时钟
中断系统
是为使 CPU 具有对外界紧急事件的实时处理能力而设置的。
CPU 总是先相应优先级别最高的中断请求。
相关寄存器
51单片机内计时器是由特殊的功能寄存器控制
寄存器是连接软硬件的媒介
在单片机中寄存器就是一段特殊的 RAM 存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式
寄存器相当于一个复杂机器的“操作按钮”
具体定义详见手册
- 控制寄存器TCON:
- 低四位:外部中断的控制位
- 高四位用于定时器启动、停止、移除的标志控制位
- 模式寄存器TMOD:定时器工作方式及功能的确定(定时|计数)
7-2 按键控制 LED 流水灯模式&定时器闹钟
评论
评论插件加载失败
正在加载评论插件