C51单片机学习记录
作者:互联网
认识单片机
单片机的特点
单片机,Micro Controller Unit ,简称 MCU 内部集成了 CPU、RAM、ROM、定时器、中断、通讯接口等一系列硬件。单片机工作时,对从传感器采集到的信息进行处理,以及对硬件做出相应的控制。单片机体积小、成本低,是一个袖珍版的计算机,虽然在性能上与 PC 机相差甚远,但能够为特定的应用领域提供针对性的解决方案。
单片机的 TTL 电平标准为:高电平 +5V,低电平 0V 。RS232 电平标准为:高电平 -12V ,低电平 +12V 。
型号信息
以单片机型号信息 STC 89C52 RC 40C - PDIP 0721 CV 4336
为例,其包含的信息大体:
-
STC:公司名。
-
89C51:系列名。
C 表示必须用编程序烧录程序,S 表示支持串行下载,LV 表示低电压。(某些带 AD 后缀的表示自带 AD 转换)。
51表示 ROM 为 4K ,以此类推,52 、54 、55 、58 分别带 8K 、16K 、20K 、32K 的 ROM 。
-
40C:40 表示可支持的最高晶振频率为 40M Hz;
C (Commercial)表示商业级,I (Industrial)表示工业级,此外还有军用级。
-
PDIP:封装形式为双列直插式。
-
0721 CV:表示该芯片是 07 年第 21 周生产的。
C51 的库函数和语法
C51包含的头文件: reg51.h
、 reg52.h
、 math.h
、 ctype.h
、 stdio.h
、 stdlib.h
、 absacc.h
。
C51 的语法和 C 语言大体相同,可使用的逻辑有 if
、 while
、 for
、 switch/case
、 do while
。C51 中特殊的写法有:interupt
、sbit
等。
各组件的使用
独立按键
按键的特点是按下时导通,每个按钮都有一端接地,另一端引到 IO 口上,具体 IO 口对照如下图。当一个按键被按下时,与其相连的 IO 口的电平将会变成低电平。所以,可以通过检测 IO 口的电平来判断按键是否被按下。
由于按键本身是通过弹片实现按压功能的,所以在一个很短的时间内会存在 “抖动” 的现象,可能会被程序误捕捉到。因此,我们需要进行 “消抖” 的处理,可以通过硬件和软件两种方式实现。由于硬件方式需要部分硬件知识,所以这里只用软件方式的实现方法。
P2 = 0xff; // 一开始让8个灯都熄灭
while(1)
{
// 如果按键被按下
if (P3_1 == 0) {
Delay_ms(20); // 对按下的过程进行延时消抖
while (P3_1 == 0); // 若按键未松开则阻塞于此处
Delay_ms(20); // 对松开的过程进行延时消抖
P2_0 = ~P2_0;
}
}
八段数码管
要使用是数码管,首先要了解数码管内部电路组织方式,数码管一般分为 共阳极 和 共阴极 两种。
共阳极的方式是将 LED 灯阳极(接正极)的一端统一提供高电平,LED 阴极(接负极的一端)则通过 IO 口设置电平,设置为低电平的数码管才能够形成回路,使数码管亮起。
共阴极的方式则与共阳极相反,将 LED 的阴极统一接低电平,阳极由 IO 口设置,设置为高电平时数码管亮起。
我所使用的开发板使用的是共阴极的接法。
通过 3-8 译码器可以选择数码显示管,被选中的数码显示管就以共阴极的等待高电平的驱动。由于 IO 口高电平的驱动能力比较弱,一般会通过缓冲器来增强电流驱动能力,原来的 IO 口只需要以微弱电流提供控制信号即可。所以,只要按照原理图的 IO 口与数码管上不同端的对应关系,就能够完成显示。
实际上,驱动数码管可以用单片机,也可以用专用驱动芯片(如 TM1604 )。如果用单片机来驱动,由于每次只能完成一个数码显示管的显示,所以只能按序逐个循环刷新所有数码管的显示,利用人眼的视觉暂留来保持所有数码管可视。但这样对单片机负载较大,期间单片机也无法进行其他操作。所以更好的方式是用专用的驱动芯片来驱动,由单片机的 IO 口提供控制信号,以更好地协同工作。
标签:C51,单片机,高电平,低电平,数码管,IO,按键,记录 来源: https://www.cnblogs.com/kimkey/p/16224229.html