点击查看【bilibili】
STC89Cxx中文参考手册.pdf
51单片机入门教程.pptx
软件设备
Keil5软件注意事项
- Keil5 C51和Keil5 MDK的区别
- 两者都是Keil系列软件,但前者是用来开发51单片机的,后者是用来开发ARM系列,比如STM32的。
单片机介绍
- 单片机,英文Micro Controller Unit,简称MCU
- 内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能
- 单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制
- 单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用
- 同时,学习使用单片机是了解计算机原理与结构的最佳选择
STC89C52单片机
- 所属系列:51单片机系列
- 公司:STC公司
- 位数:8位
- RAM:512字节
- ROM:8K(Flash)
- 工作频率:12MHz(本开发板使用)
命名规则 单片机内部结构图 单片机管脚图 单片机最小系统
LED介绍
- 中文名:发光二极管
- 外文名:Light Emitting Diode
- 简称:LED
- 用途:照明、广告灯、指引灯、屏幕
进制转换
十进制 | 二进制 | 十六进制 | 十进制 | 二进制 | 十六进制 |
---|---|---|---|---|---|
0 | 0000 | 0 | 8 | 1000 | 8 |
1 | 0001 | 1 | 9 | 1001 | 9 |
2 | 0010 | 2 | 10 | 1010 | A |
3 | 0011 | 3 | 11 | 1011 | B |
4 | 0100 | 4 | 12 | 1100 | C |
5 | 0101 | 5 | 13 | 1101 | D |
6 | 0110 | 6 | 14 | 1110 | E |
7 | 0111 | 7 | 15 | 1111 | F |
C51数据类型
按键介绍
轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开
C51数据运算
类别 | 运算符 | 意义 | 类别 | 运算符 | 意义 |
---|---|---|---|---|---|
算术 | + | 加 | 逻辑 | && | 逻辑与 |
- | 减 | || | 逻辑或 | ||
* | 乘 | ! | 逻辑非 | ||
/ | 除 | 位运算 | << | 按位左移 | |
% | 取余 | >> | 按位右移 | ||
= | 赋值 | & | 按位与 | ||
判断 | > | 大于 | | | 按位或 | |
>= | 大于等于 | ^ | 按位异或 | ||
< | 小于 | ~ | 按位取反 | ||
<= | 小于等于 | ||||
== | 等于 | ||||
!= | 不等于 |
C51基本语句
语句 | 解释 | 语句 | 解释 |
---|---|---|---|
if(逻辑表达式) { 语句体1; } else { 语句体2; } |
如果逻辑表达式成立 执行语句体1 否则 执行语句体2 (else可以不写) |
for(初始化;逻辑表达式;更改条件) { 循环体; } |
先执行初始化 再判断逻辑表达式 若成立则执行循环体 执行后更改条件 再判断逻辑表达式 直到表达式不成立 |
while(逻辑表达式) { 循环体; } |
如果逻辑表达式成立 执行循环体 执行后再次判断 若还成立则继续执行直到表达式不成立 |
switch(变量) { case 常量1:语句体1;break; case 常量2:语句体2;break; (…) default:语句体x;break; } |
将变量与case后的各个常量对比 若有相等,则执行相应的语句体 若没有一个相等,则执行default后的语句体 (default可以不写) |
按键的抖动
对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动
数码管介绍
LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件
数码管引脚定义
C51数组
数组:把相同类型的一系列数据统一编制到某一个组别中,可以通过数组名+索引号简单快捷的操作大量数据
int x[3]; //定义一组变量(3个)
int x[]={1,2,3}; //定义一组变量并初始化
x[0] //引用数组的第0个变量
x[1] //引用数组的第1个变量
x[2] //引用数组的第2个变量
C51子函数
子函数:将完成某一种功能的程序代码单独抽取出来形成一个模块,在其它函数中可随时调用此模块,以达到代码的复用和优化程序结构的目的
void Function(unsigned char x, y)
{
}
返回值 函数名(形参)
{
函数体
}
数码管段码表
0 1 2 3 4 5 6 7 8 9
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
A B C D E F 空
0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,
数码管驱动方式
- 单片机直接扫描:硬件设备简单,但会耗费大量的单片机CPU时间
- 专用驱动芯片:内部自带显存、扫描电路,单片机只需告诉它显示什么即可
模块化编程
传统方式编程:所有的函数均放在main.c
里,若使用的模块比较多,则一个文件内会有很多的代码,不利于代码的组织和管理,而且很影响编程者的思路
模块化编程:把各个模块的代码放在不同的.c
文件里,在.h
文件里提供外部可调用函数的声明,其它.c
文件想使用其中的代码时,只需要#include "XXX.h"
文件即可。使用模块化编程可极大的提高代码的可阅读性、可维护性、可移植性等
模块化编程框图
模块化编程注意事项
.c
文件:函数、变量的定义.h
文件:可被外部调用的函数、变量的声明- 任何自定义的变量、函数在调用前必须有定义或声明(同一个
.c
) - 使用到的自定义函数的
.c
文件必须添加到工程参与编译 - 使用到的
.h
文件必须要放在编译器可寻找到的地方(工程文件夹根目录、安装目录、自定义)C预编译
C语言的预编译以#
开头,作用是在真正的编译开始之前,对代码做一些处理(预编译)
预编译 | 意义 |
---|---|
#include <REGX52.H> |
把REGX52.H文件的内容搬到此处 |
#define PI 3.14 |
定义PI,将PI替换为3.14 |
#define ABC |
定义ABC |
#ifndef __XX_H__ |
如果没有定义XX_H |
#endif |
与#ifndef,#if匹配,组成“括号” |
此外还有#ifdef,#if,#else,#elif,#undef
等
LCD1602调试工具
- 使用LCD1602液晶屏作为调试窗口,提供类似printf函数的功能,可实时观察单片机内部数据的变换情况,便于调试和演示。
- 本视频提供的LCD1602代码属于模块化的代码,使用者只需要知道所提供函数的作用和使用方法就可以很容易的使用LCD1602 | 函数 | 作用 | | —- | —- | | LCD_Init(); | 初始化 | | LCD_ShowChar(1,1,’A’); | 显示一个字符 | | LCD_ShowString(1,3,”Hello”); | 显示字符串 | | LCD_ShowNum(1,9,123,3); | 显示十进制数字 | | LCD_ShowSignedNum(1,13,-66,2); | 显示有符号十进制数字 | | LCD_ShowHexNum(2,1,0xA8,2); | 显示十六进制数字 | | LCD_ShowBinNum(2,4,0xAA,8); | 显示二进制数字 |
矩阵键盘介绍
- 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式
- 采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态
扫描的概念
- 数码管扫描(输出扫描)
- 原理:显示第1位→显示第2位→显示第3位→……,然后快速循环这个过程,最终实现所有数码管同时显示的效果
- 矩阵键盘扫描(输入扫描)
- 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果
-
定时器介绍
定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
定时器作用:
定时器个数:3个(T0、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源
注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的
定时器框图
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
定时器工作模式
STC89C52的T0和T1均有四种工作模式:
- 模式0:13位定时器/计数器
- 模式1:16位定时器/计数器(常用)
- 模式2:8位自动重装模式
- 模式3:两个8位计数器
- 工作模式1框图: