复习单片机部分:1.开发板功能及使用介绍 2.51 单片机介绍 3.数字电路与 C 语言基础

简介: 复习单片机部分:1.开发板功能及使用介绍 2.51 单片机介绍 3.数字电路与 C 语言基础

1.开发板功能及使用介绍


7e8e7a78dab24bfaa688170c18500b7a.png

189dd46714a04c83b937b2444773189e.png


2.  51 单片机介绍


单片机简介

一台能够工作的计算机要有这样几个部件构成:CPU(进行运算、控制)、 RAM

(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口

等)。在个人计算机上这些部件被分成若干块芯片,安装一个称之为主板的印刷

线路板上。而在单片机中,这些部件全部被做到一块集成电路芯片中,所以就称

为单片机(也称微控制器 MCU),而且有一些单片机中除了上述部份外,还集成

了其它部份如 A/D,D/A 等。体积不大,一般用 40 脚封装, 当然功能多一些

单片机也有引脚比较多的, 如 68 引脚, 功能少的只有 10 多个或 20 多个引

脚,有的甚至只 8 只引脚。


34c8aa35ab1b4c5f90efa8ac8b197492.png


STC89C51 芯片引脚介绍:


6876856d2b8f447a8df1f17aee66c27c.png


单片机脚位判断


无论哪种芯片,单片机也好,其他不知名的芯片也好,当我们观察它的表面

时,大都会找到一个凹进去的小圆坑,或是用颜色标记的一个小标记(圆点或三

角或其他小图形),这个小圆坑或者小标记所对应的引脚就是这个芯片的第 1

28脚,然后逆时针方向数下去,即 1 到最后一个引脚。如下图所示:


a43700c071a749119f29717f6ebeecfa.png


单片机脚位功能:


cc34036a1e6b4897a6c636d1aabf68cf.png


单片机能做什么


单片机说白了,就是一种微型的电脑。

51 单片机主要用于“控制”,通过串口可以和 WFIF/GPS/蓝牙等模块实现无

线控制,通过 AD 接口可以采集光敏/烟雾传感器/可燃气体传感器等模拟信号,

还可以使用 AD 设计简易示波器。当然还包括直流电机、交流电机、步进电机、

33 伺服电机、变频电机、电磁铁、电磁阀、LED、LCD 等等,进而由这些去驱动各

种设备,应用于家电、机械加工、制造、航空航天等各行各业。

日常生活中可采用 51 单片机设计的电子产品:

智能手环,微型四轴飞行器,平衡车、扫地机、移动 POST 机,智能电饭锅,

3D 打印机、机器人等。

3.数字电路与 C 语言基础

电平特性

单片机是一种数字集成芯片,数字电路中只有两种电平:高电平和低电平。

我们暂时定义单片机

输出与输入为 TTL 电平,其中高电平为+5V,低电平为 0V。计算机的串口为 RS232

电平,其中高电平为-12V,低电平为+12V。这里强调的是,RS232C 电平为负逻

辑电平,大家不要认为上面是我写错了。因此当计算机与单片机之间要通信时,

需要依靠电平转换芯片,比如 MAX232 电平转换芯片。

常用的逻辑电平还有很多,比如 TTL、CMOS、LVTTL、RS-232、RS-485 等。

其中TTL和CMOS的逻辑电平按典型电压可分为四类:

5V系列(

5V TTL和5V CMOS)、

3.3V 系列,2.5V 系列和 1.8V 系列。

5V TTL 和 5V CMMOS 是通用的逻辑电平。3.3V 及以下的逻辑电平被称为低电

压逻辑电平,常用的为 LVTTL 电平。低电压逻辑电平还有 2.5V 和 1.8V 两种。

RS-232 和 RS-485 是串口的接口标准,RS-232 是单端输入/输出。RS-485 是差分

输入/输出。

TTL 电平信号用的最多,这是因为数据表示通常采用二进制,+5V 等价于逻

辑 1,0V 等价于逻辑 0,这被称为 TTL(晶体管-晶体管逻辑电平)信号系统。

CMOS 电平 VCC 可达 12V,CMOS 电路输出高电平约为 0.9VCC,而输出低电平

约为 0.1VCC。CMOS 电路中不使用的输入端不能悬空,否则会造成逻辑混乱。另

外,CMOS 集成电路电源电压可以在较大范围内变化,因而对电源的要求不像 TTL

集成电路那样严格。

TTL 电路和 CMOS 电路的逻辑电平关系如下:

①VOH:逻辑电平 1 的输出电压。

②VOL:逻辑电平 0 的输出电压。

③VIH:逻辑电平 1 的输入电压。

④VIL:逻辑电平 0 的输入电压。

TTL 电平临界值:

①VOHmin=2.4V,VOLmax=0.4V。

②VIHmin=2.0V,VILmax=0.8V。

CMOS 电平临界值(假设电源电压为+5V): 39

①VOHmin=4.99V,VOLmax=0.01V。

②VIHmin=3.5V,VILmax=1.5V。

TTL 和 CMOS 的逻辑电平转换:CMOS 电平能驱动 TTL 电平,但 TTL 电平不能

驱动 CMOS 电平,需加上拉电阻。

常用逻辑芯片的特点如下:

74LS 系列:

TTL

输入:TTL,

输出:TTL

74HC 系列:

CMOS

输入:CMOS, 输出:CMOS

74HCT 系列:

CMOS

输入:TTL,

输出:CMOS

CD4000 系列: CMOS

输入:TTL,

输出:CMOS

通常情况下,单片机、DSP、FPGA 之间引脚能否直接相连要参考以下方法进

行判断:一般来说,同电压的是可以相连的,不过最好还是要查看下芯片技术手

册上的 VIL、VIH、VOL 和 VOH 的值,看是否能够匹配。有些情况在一般应用中没

有问题,但是参数上就是有点不够匹配,在某些情况下运行可能就不够稳定,或

者不同批次的器件就不能运行。

二进制:

数字电路中只有两种电平特性,即高电平和低电平,这也就决定了数字电路

中使用二进制。

当二进制数转换为十进制数时,从二进制数的最后

一位往前看,每一位代表的数为 2 的 n 次幂,这里的 n 表示从最后起的第几位二 进制数,n 从 0 算起,若对应该二进制数位上有 1,那么就有值,为 0 则无值。

例如,再把二进制数 1111 1110B 反推回十进制数,计算过程如下:


5cdd934d7b9b4f8394adf37804b7e928.png


0*2 0 +1*2 1 +1*2 2 +1*2 3 +1*2 4 +1*2 5 +1*2 6 +1*27=254

实际开发中常常会用到其它比较大的数,这时我们用 Windows 系统自带的计

算器,选择程序员模式,可以非常方便的进行二进制、八进制、十进制、十六进


05bc0134f1474aa39015a8383b13a9d0.png


制数之间的任意转换,如下图所示:

十六进制:


十六进制与二进制大同小异,不同之处就是十六进制是“逢十六进一,借一

当十六”。还有一点特别之处需要注意,十进制的 0-15 表示成十六进制为 0~9、

A、B、C、D、E、F,即十进制的 10 对应十六进制的 A,11 对应 B,以此类推。

我们一般在十六进制数的最后面加上后缀 H,表示该数为十六进制数,如 AH、DEH

等。这里的字母不区分大小写,在 C 语言编程时要写成“0xa,0xde”,在数的

最前面加上“0x”表示该数为十六进制数。十进制数与十六进制数之间的转换在

这里不再讲解,大家可参考十进制与二进制数之间的转换规则。关于十进制、二

进制与十六进制数之间的转换,我们要熟练掌握 0~15 之间的数,因为在以后的

单片机 C 语言编程中,我们要大量使用它们。一般的转换规律是,先将二进制数

转换为十进制数,再将十进制数转换为十六进制数,这里不用死机,在后面的学

习中遇到多了也就记住了。二进制、十进制、十六进制 0~15 的数的转换关系如

下:


8c4e91ba01ad4c5d83ac26fcba4d6c3f.png


二进制的逻辑运算:


与运算:


“与”运算是实现“必须都有,否则就没有”这种逻辑关系的一种运算。C

语言中运算符为“

&”,其运算规则如下:0&0=0,0&1=0(

1&0=0),1&1=1。其运


0e8668ec210e417e9a0217fe362a0285.png


算符号如下图所示:

或运算:


d3f44ce620f14015aad986415928a899.png


非运算:同或运算


15fd692972334ecaa5c7c6873273286b.png


同或运算:


“同或”运算是实现“必须相同,否则就没有”这种逻

辑关系的一种运算,其逻辑运算符为“⊙”。其运算规则如下:

0⊙0=1,0⊙1=0(1⊙0=0),1⊙1=1。在 C 语言中没有规定符号。其运算符号如下:


f44b98eadb5443938c8e8d7108eebf32.png


异或运算:


“异或”运算是实现“必须不同,否则就没有”这种逻辑关系的一种运算,

其逻辑运算符为“⊕”。其运算规则如下:0⊕0=0,0⊕1=1(

1⊕0=1),1⊕1=0。

在 C 语言中有“按位异或”运算“^”。其运算符号如下:


fe51c273c4854068adc8270acd13aeb2.png

3a9cecc00eb641d1a2ff10e097e17e8d.png

C51 基础知识:


1ba191a07ca44923a1dd72940efb9792.png


当把一个 double 型

变量赋给 float 型变量时,系统会截取相应的有效位数,例如:

float a; //定义一个 float 型变量

a=123.1234567;

由于 float 型变量只能接受 7 位有效数字,因此最后 3 位小数将会被四舍五

入截掉,即实际 a 的值将是 123.1235。若将 a 改成 double 型变量,则能全部接

收上述 10 位数字并存储在变量 a 中。

C51 扩充数据类型:

单片机内部有很多的特殊功能寄存器,每个寄存器在单片机内部都分配有唯

一的地址,一般我们会根据寄存器功能不同给寄存器赋予各自的名称,当我们需

要在程序中操作这些特殊功能寄存器时,必须要在程序的最前面将这些名称加以

声明,声明的过程实际就是将这个寄存器在内存中的地址编号赋给这个名称,这

样编译器在以后的程序中才可认识这些名称所对应的寄存器


917974a823714641995e51d8b33085be.png


SCON 是单片机的串行口控制寄存器,这个寄存器在单片机内存中的地址是

0X98。这样声明后,我们再以后要操作这个控制寄存器时,就可以直接对 SCON

进行操作,这时编译器也会明白,我们实际要操作的是单片机内部 0X98 地址处

的这个寄存器,而 SCON 仅仅是这个地址的一个代号或是名称而已,当然,我们

46 也可以定义成其他的名称。

例如:sfr16 T2=0xCC;

声明一个 16 位的特殊功能寄存器,它的起始地址为 0XCC。

例如:sbit TI=SCON^1;

SCON 是一个 8 位寄存器,SCON^1 表示这个 8 位寄存器的次低位,最低位是

SCON^0;SCON^7 表示这个寄存器的最高位。该语句的功能就是将 SCON 寄存器的

次低位声明为 TI,以后若要对 SCON 寄存器的次低位操作,则可直接操作 TI。

在 C51 语言程序中,有可能会出现在运算中数据类型不一致的情况。C51 允

许任何标准数据类型的隐式转换,隐式转换的优先级顺序如下:

bit→char→int→long→float→signed→unsigned

也就是说,当 char 型与 int 型进行运算时,先自动对 char 型扩展为 int 型,

然后与 int 型进行运算,运算结果为 int 型。C51 除了支持隐式类型转换外,还

可以通过强制类型转换符“()”对数据类型进行人为的强制转换。

C5l 编译器除了能支持以上这些基本数据类型之外,还能支持一些复杂的组

合型数据类型,如数组类型、指针类型、结构类型、联合类型等这些复杂的数据

类型。对于初学者我们要求先掌握 C 语言基础知识,把基础的掌握了在学习复杂

的。


ea1c67315b4243218cc80c69374edd51.png


数据类型说明符:


在 C51 中,为了增加程序的可读性,允许用户为系统固有的数据类型说明符

用 typedef 起别名,格式如下:

typedef c51 固有的数据类型说明符 别名;

定义别名后,就可以用别名代替数据类型说明符对变量进行定义。别名可以

用大写,也可以用小写,为了区别一般用大写字母表示。

【例】 typedef 的使用。

typedef unsigned

int

u8;

typedef unsigned char u16;

u8 a1=0x12;

u16 a2=0x1234;

存储种类:

存储种类是指变量在程序执行过程中的作用范围。C51 变量的存储种类有四

种,分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。

a.auto :

使用 auto 定义的变量称为自动变量,其作用范围在定义它的函数体或复合

语句内部,当定义它的函数体或复合语句执行时,C51 才为该变量分配内存空间,

结束时占用的内存空间释放。自动变量一般分配在内存的堆栈空间中。定义变量

时,如果省略存储种类,则该变量默认为自动(auto)变量。

b.extern :

使用 extern 定义的变量称为外部变量。在一个函数体内,要使用一个已在

该函数体外或别的程序中定义过的外部变量时,该变量在该函数体内要用

extern 说明。外部变量被定义后分配固定的内存空间,在程序整个执行时间内

都有效,直到程序结束才释放。

c.static :

使用 static 定义的变量称为静态变量。它又分为内部静态变量和外部静态

变量。在函数体内部定义的静态变量为内部静态变量,它在对应的函数体内有效,

一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被保护,

还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变

量。它在程序中一直存在,但在定义的范围之外是不可见的。如在多文件或多模

块处理中,外部静态变量只在文件内部或模块内部有效。

d.register :

使用 register 定义的变量称为寄存器变量。它定义的变量存放在 CPU 内部

的寄存器中,处理速度快,但数目少。C51 编译器编译时能自动识别程序中使用

频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声明。

存储器类型:

b112c9ccdedf41718e78481da1a27c81.png

197828d347714d1ab818c0f094e1d2b5.png


特殊功能寄存器变量:


【例】特殊功能寄存器的定义。

sfr PSW=0xd0;

sfr

SCON=0x98;

sfr TMOD=0x89;

sfr P1=0x90;

sfr16 DPTR=0x82;

sfr16 T1=0X8A;

逻辑运算符:

C51 有 3 种逻辑运算符:

||

逻辑或      

当条件式 1 与条件式 2 都为真时结果为真(非 0 值),否则为假(

0 值)。

&&

逻辑与  

当条件式 1 与条件式 2 都为假时结果为假(

0 值),否则为真(非 0 值)。

逻辑非

当条件式原来为真(非 0 值),逻辑非后结果为假(

0 值)。当条件式原来

为假(

0 值),逻辑非后结果为真(非 0 值)。

例如:若 a=8,b=3,c=0,则!a 为假,a && b

位运算符:

&

按位与

|

按位或

^

按位异或

~

按位取反

<<

左移

>>

右移

【例】设 a=0x45=01010100B,b=0x3b=00111011B,则 a&b、a|b、a^b、~a、

a<<2、b>>2 分别为多少?

a&b=00010000B=0x10。

a|b=01111111B=0x7f。

a^b=01101111B=0x6f。

~a=10101011B=0xab。

a<<2=01010000B=0x50。

b>>2=00001110B=0x0e。


相关文章
|
1月前
|
C语言
C语言-----qsort函数的功能以及模拟实现
C语言-----qsort函数的功能以及模拟实现
27 1
|
1月前
|
算法 C语言 C++
【C语言-扫雷游戏全功能详解】
【C语言-扫雷游戏全功能详解】
39 1
|
5月前
|
C语言
关于C语言中函数的知识总结(一)---函数的功能和分类
关于C语言中函数的知识总结(一)---函数的功能和分类
|
5月前
|
C语言 C++
12 C++ - 三目运算符功能增强(比较C语言)
12 C++ - 三目运算符功能增强(比较C语言)
24 0
|
9天前
|
C语言
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
爱上C语言:扫雷小游戏,展开一片功能实现
|
1月前
|
C语言
C语言程序基本的计算器功能
C语言程序基本的计算器功能
9 0
|
1月前
|
C语言
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
###51单片机学习-----如何通过C语言运用延时函数设计LED流水灯
72 0
|
9月前
|
C语言 芯片 数据格式
C语言课设项目-51单片机-红外通信
C语言课设项目-51单片机-红外通信
|
4月前
|
存储 C语言
探索顺序表:数据结构中的秩序之美(c语言实现常见功能接口)
探索顺序表:数据结构中的秩序之美(c语言实现常见功能接口)
38 0
|
4月前
|
存储 人工智能 算法
C语言之“动态顺序表的增删改查及拥有附加功能的通讯录实现”
C语言之“动态顺序表的增删改查及拥有附加功能的通讯录实现”