其他分享
首页 > 其他分享> > C51单片机学习记录

C51单片机学习记录

作者:互联网

认识单片机

单片机的特点

单片机,Micro Controller Unit ,简称 MCU 内部集成了 CPU、RAM、ROM、定时器、中断、通讯接口等一系列硬件。单片机工作时,对从传感器采集到的信息进行处理,以及对硬件做出相应的控制。单片机体积小、成本低,是一个袖珍版的计算机,虽然在性能上与 PC 机相差甚远,但能够为特定的应用领域提供针对性的解决方案。

单片机的 TTL 电平标准为:高电平 +5V,低电平 0V 。RS232 电平标准为:高电平 -12V ,低电平 +12V 。

型号信息

以单片机型号信息 STC 89C52 RC 40C - PDIP 0721 CV 4336 为例,其包含的信息大体:

C51 的库函数和语法

C51包含的头文件: reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h

C51 的语法和 C 语言大体相同,可使用的逻辑有 ifwhileforswitch/casedo while 。C51 中特殊的写法有:interuptsbit 等。

各组件的使用

独立按键

按键的特点是按下时导通,每个按钮都有一端接地,另一端引到 IO 口上,具体 IO 口对照如下图。当一个按键被按下时,与其相连的 IO 口的电平将会变成低电平。所以,可以通过检测 IO 口的电平来判断按键是否被按下。

image-20220504105311942

由于按键本身是通过弹片实现按压功能的,所以在一个很短的时间内会存在 “抖动” 的现象,可能会被程序误捕捉到。因此,我们需要进行 “消抖” 的处理,可以通过硬件和软件两种方式实现。由于硬件方式需要部分硬件知识,所以这里只用软件方式的实现方法。

P2 = 0xff;  				// 一开始让8个灯都熄灭
while(1) 
{
    // 如果按键被按下
    if (P3_1 == 0) {
        Delay_ms(20);  		// 对按下的过程进行延时消抖
        while (P3_1 == 0);  // 若按键未松开则阻塞于此处
        Delay_ms(20);  		// 对松开的过程进行延时消抖
        P2_0 = ~P2_0;
    }
}

image-20220504110200499

八段数码管

要使用是数码管,首先要了解数码管内部电路组织方式,数码管一般分为 共阳极共阴极 两种。
共阳极的方式是将 LED 灯阳极(接正极)的一端统一提供高电平,LED 阴极(接负极的一端)则通过 IO 口设置电平,设置为低电平的数码管才能够形成回路,使数码管亮起。
共阴极的方式则与共阳极相反,将 LED 的阴极统一接低电平,阳极由 IO 口设置,设置为高电平时数码管亮起。

我所使用的开发板使用的是共阴极的接法。

image-20220505113253627

image-20220505113344217

通过 3-8 译码器可以选择数码显示管,被选中的数码显示管就以共阴极的等待高电平的驱动。由于 IO 口高电平的驱动能力比较弱,一般会通过缓冲器来增强电流驱动能力,原来的 IO 口只需要以微弱电流提供控制信号即可。所以,只要按照原理图的 IO 口与数码管上不同端的对应关系,就能够完成显示。

实际上,驱动数码管可以用单片机,也可以用专用驱动芯片(如 TM1604 )。如果用单片机来驱动,由于每次只能完成一个数码显示管的显示,所以只能按序逐个循环刷新所有数码管的显示,利用人眼的视觉暂留来保持所有数码管可视。但这样对单片机负载较大,期间单片机也无法进行其他操作。所以更好的方式是用专用的驱动芯片来驱动,由单片机的 IO 口提供控制信号,以更好地协同工作。

标签:C51,单片机,高电平,低电平,数码管,IO,按键,记录
来源: https://www.cnblogs.com/kimkey/p/16224229.html