JackCin's blog JackCin's blog
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

JackCin

前端小菜鸡(✪ω✪)
首页
  • 页面

    • Html
    • CSS
  • 核心

    • JavaScript基础
    • JavaScript高级
  • 框架

    • Vue
  • jQuery
  • Node
  • Ajax
Linux
  • 操作系统
  • 数据结构与算法
  • 51单片机
  • CC2530
  • 网站
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 51单片机

    • 51单片机及补充知识
      • 一些基础知识
        • 1、进制转换
        • 2、C51数据类型
        • 3、数据运算
        • 4、基本逻辑判断语句
        • 5、模块化
        • 5.1 模块化编程
        • 5.2 模块化编程框图
        • 5.3 模块化编程注意事项
        • 5.4 c预编译
        • 6、C51的sfr、sbit
        • 7、BCD码
    • LED
    • 独立按键
    • 数码管
    • LCD1602液晶显示器
    • 矩阵按键
    • 定时器
    • 串口
    • LED点阵屏
    • 蜂鸣器
    • AT24C02存储器
    • AD与DA
    • DS18B20温度传感器
    • DS1302时钟
    • LCD1602液晶显示屏
    • 红外遥控
    • 呼吸灯与直流电机调速(PWM)
  • 单片机
  • 51单片机
JackCin
2023-09-13
目录

51单片机及补充知识

# 51单片机

# 1、单片机介绍

  • 单片机,英文Micro Controller Unit,简称MCU

  • 内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能

  • 单片机的任务是信息采集(依靠传感器)、处理(依靠CPU)和硬件设备(例如电机,LED等)的控制

  • 单片机跟计算机相比,单片机算是一个袖珍版计算机,一个芯片就能构成完整的计算机系统。但在性能上,与计算机相差甚远,但单片机成本低、体积小、结构简单,在生活和工业控制领域大有所用

  • 同时,学习使用单片机是了解计算机原理与结构的最佳选择

  • 在STC89C52 (opens new window)芯片中所有的IO口都可以是输入也可以做输出,P1 P2 P3都是弱上拉,P0是开漏输出,但在开发板上已经做了外部上拉电阻和P1 P2 P3一样。IO口都是弱上拉,强下拉,所以按键扫描是可以IO口接IO的,不会发生短路的现象。

# 2、单片机的应用领域

  • 单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等

# 3、STC89C52单片机

  • 所属系列:51单片机系列
  • 公司:STC公司
  • 位数:8位
  • RAM(Random Access Memory):512字节
    • 随机存取存储器,相当于内存条
  • ROM(Read Only Memory):8K(Flash)
    • 只读存储器,相当于硬盘
  • 工作频率:12MHz(本开发板使用)
    • 这里我买的是普中A2的板子,是STC89C52RC ,工作频率为11.0592

image-20230224134128690

# 4、单片机内部结构图

image-20230224153929374

image-20230224153935831

# 5、单片机管脚图

image-20230224154325733

  • 40正极,20接地。P0到3,镜像Z型。左侧上下,右侧里外。9脚复位,P0上拉。31引脚,电平决定,接高访低,接低访高。(看具体的单片机型号,我买的板子,不是这样排列)

image-20230224154333993

# 一些基础知识

# 1、进制转换

十进制 二进制 十六进制 十进制 二进制 十六进制
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

# 2、C51数据类型

image-20230224165817463

# 3、数据运算

类别 运算符 意义
逻辑 && 逻辑与
|| 逻辑或
! 逻辑非
位运算 << 按位左移
>> 按位右移
& 按位与
| 按位或
^ 按位异或
~ 按位取反
// & 按位与  有0为0,同1为1(同真)
0001 1000 & 0010 1010   ->  0000 1000
// | 按位或  有1为1(有一个正确就是正确)
0001 1000 | 0010 1010   ->  0011 1010
// ^ 按位异或  不同为1
0001 1000 ^ 0010 1010    ->  0011 0010
    
~0001 1000   ->  1110 0111

1
2
3
4
5
6
7
8
9

# 4、基本逻辑判断语句

语句 解释 语句 解释
if(逻辑表达式) { 语句体1; }else { 语句体2; } 如果逻辑表达式成立 执行语句体1 否则 执行语句体2 (else可以不写) for(初始化;逻辑表达式;更改条件) { 循环体; } 先执行初始化 再判断逻辑表达式 若成立则执行循环体 执行后更改条件 再判断逻辑表达式 直到表达式不成立
while(逻辑表达式) { 循环体; } 如果逻辑表达式成立 执行循环体 执行后再次判断 若还成立则继续执行直到表达式不成立 switch(变量) { case 常量1:语句体1;break; case 常量2:语句体2;break; (...) default:语句体x;break; } 将变量与case后的各个常量对比 若有相等,则执行相应的语句体 若没有一个相等,则执行default后的语句体 (default可以不写)

# 5、模块化

# 5.1 模块化编程

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

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

# 5.2 模块化编程框图

模块化编程版图

  • .h 文件声明函数语句记得加分号;

# 5.3 模块化编程注意事项

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

# 5.4 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 等

# 6、C51的sfr、sbit

  • sfr(special function register):特殊功能寄存器声明

    • 例:sfr P0 = 0x80;
    • 声明P0口寄存器,物理地址为0x80
  • sbit(special bit):特殊位声明

    • 例:sbit P0_1 = 0x81; 或 sbit P0_1 = P0^1;
    • 声明P0寄存器的第1位
  • 可位寻址/不可位寻址:在单片机系统中,操作任意寄存器或者某一位的数据时,必须给出其物理地址,又因为一个寄存器里有8位,所以位的数量是寄存器数量的8倍,单片机无法对所有位进行编码,故每8个寄存器中,只有一个是可以位寻址的。对不可位寻址的寄存器,若要只操作其中一位而不影响其它位时,可用“&=”、“|=”、“^=”的方法进行位操作

# 7、BCD码

  • BCD码(Binary Coded Decimal‎),用4位二进制数来表示1位十进制数
  • 例:0001 0011表示13,1000 0101表示85,0001 1010不合法
  • 在十六进制中的体现:0x13表示13,0x85表示85,0x1A不合法
  • BCD码转十进制:DEC=BCD/1610+BCD%16; (2位BCD)
  • 十进制转BCD码:BCD=DEC/1016+DEC%10; (2位BCD)

BCD码转换

编辑 (opens new window)
上次更新: 2023/09/13, 12:29:52
LED

LED→

最近更新
01
独立按键
09-13
02
LCD1602液晶显示器
09-13
03
LED
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式