【51单片机】点亮第一个LED灯

这篇具有很好参考价值的文章主要介绍了【51单片机】点亮第一个LED灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

橙色

点亮第一个LED灯

单片机 GPIO 介绍

GPIO 概念

GPIO(general purpose intput output) 是通用输入输出端口的简称, 可以通过软件来控制其输入和输出。 51 单片机芯片的 GPIO 引脚与外部设备连接起来, 从而实现与外部通讯、 控制以及数据采集的功能。 不过 GPIO 最简单的应用还属点亮 LED 灯了, 只需通过软件控制 GPIO 输出高低电平即可。 当然GPIO 还可以作为输入控制, 比如在引脚上接入一个按键, 通过电平的高低判断按键是否按下。

我所使用的51单片机型号为STC89C52, 此芯片共有40 引脚, 芯片引脚图如下图所示:
【51单片机】点亮第一个LED灯,51单片机,51单片机,嵌入式硬件,单片机
当然,不是所有引脚都是 GPIO , 51 单片机引脚可以分为这么几大类:

  1. 电源引脚: 引脚图中的 VCC、 GND 都属于电源引脚。
  2. 晶振引脚: 引脚图中的 XTAL1、 XTAL2 都属于晶振引脚。
  3. 复位引脚: 引脚图中的 RST/VPD 属于复位引脚, 不做其他功能使用。
  4. 下载引脚: 51 单片机的串口功能引脚(TXD、 RXD) 可以作为下载引脚使用
  5. GPIO 引脚: 引脚图中带有 Px.x 等字样的均属于 GPIO 引脚。 从引脚图可以看出,GPIO 占用了芯片大部分的引脚, 共达 32 个, 分为了 4 组, P0、 P1、P2、 P3, 每组为 8 个 IO, 而且在 P3 组中每个 IO 都具备额外功能, 只要通过相应的寄存器设置即可配置对应的附加功能, 同一时刻, 每个引脚只能使用该引脚的一个功能。

GPIO 结构

51 单片机所有 IO 口都是双向的, 即可以作为输入也可以作为输出使用。由于 P0 口是漏极开路的, 所以要操作 P0 口必须外接上拉电阻, 其他P1、 P2、 P3 口都内部自带上拉电阻, 可以不加, 如果要增强 IO 口驱动能力, 可以外接上拉电阻。

LED简介

LED 即发光二极管。 它具有单向导电性, 通过 5mA 左右电流即可发光, 电流越大, 其亮度越强, 但若电流过大, 会烧毁二极管, 一般我们控制在 3 mA-20mA之间, 通常我们会在 LED 管脚上串联一个电阻, 目的就是为了限制通过发光二极管的电流不要太大, 因此这些电阻又可以称为“限流电阻” 。

当发光二极管发光时, 测量它两端电压约为 1.7V, 这个电压又叫做发光二极管的“导通压降” 。下图左右分别为直插式发光二极管和贴片式发光二极管实物图。 发光二极管正极又称阳极, 负极又称阴极, 电流只能从阳极流向阴极。 直插式发光二极管长脚为阳极, 短脚为阴极。 仔细观察贴片式发光二极管正面的一端有彩色标记,通常有标记的一端为阴极。
【51单片机】点亮第一个LED灯,51单片机,51单片机,嵌入式硬件,单片机

软件设计

点亮D1指示灯

本章所要实现的功能是: 点亮 D1 发光二极管, 即让 P0.0 管脚输出一个低电平。 完成后可再控制 D1 指示灯闪烁, 即间隔一定时间点亮和熄灭 D1 指示灯。

#include "reg52.h"

sbit led=P2^0;

void main()	
{
	led=0;
	while(1)
	{
	}

}

编译一下,如下图所示:
【51单片机】点亮第一个LED灯,51单片机,51单片机,嵌入式硬件,单片机

可以看到没有错误, 也没有警告。 从编译信息可以看出, 我们的代码占用FLASH 大小为: 19 字节, 所用的 SRAM 大小为: 9 个字节(9+0) 。 这里我们解释一下, 编译结果里面的几个数据的意义:

  • Code: 表示程序所占用 FLASH 的大小。
  • data: 数据储存器内部 RAM 占用大小。
  • xdata: 数据储存器外部 RAM 占用大小。

有了这个就可以知道你当前使用的 flash 和 sram 大小了。 一定要注意的是程序的大小不是.hex 文件的大小, 而是编译后的 Code 和 data 之和。

LED流水灯

#include "reg52.h"
#include<intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define led P2

//延时函数,i=1时,大约延时10us
void delay(u16 i)
{
	while(i--);
}

void main()	
{
	u8 i;
	led=~0x01;//0x01 取反即为 0xFE
	delay(5000);//大约延时450ms
	while(1)
	{
		for(i=0;i<8;i++)
		{
			P2=~(0x01<<i);//将 1 右移 i 位, 然后将结果赋值到 P2 口
			delay(50000);
		}
	}
}

进入 main 函数后,首先 led=~ 0x01, 因为 LED 是低电平点亮, 所以 0X01 取反后的结果是 0XFE, 对应二进制数为 1111 1110, 即最低位为 0, 因此最开始的 D1指示灯会点亮;然后延时一段时间进入while循环, 由于要实现8个LED从D1->D8循环点亮, 因此可以使用 for 循环语句循环 8 次, 每循环一次,点亮的小灯向右移动一个,即 P2 口输出的低电平要左移一位, 因此可以使用 P2=~(0x01<<i);语句实现。 0X01<<i 表示0x01 中的 1 移动移动 i 位。因为1(高电平)不会让LED点亮,需要取反后变为低电平才能点亮,所以最后的结果需要取反后给P2口.


左移_crol_、 右移_cror_函数的使用

上面的代码是通过for 循环语句实现移位,但 KEIL C51 软件内也有对应的移位库函数,左移函数是_crol_(), 右移函数是_cror_(), 这两个函数在在 intrins.h 头文件当中。 该移位函数实现的移位功能就相当于一个队列内循环移动, 如果是左移, 那么最高位就被移到最低位了, 次高位变为最高位, 依次类推。使用左移、 右移函数实现的流水灯操作代码如下:文章来源地址https://www.toymoban.com/news/detail-822760.html

#include "reg52.h"
#include<intrins.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define led P2

void delay(u16 i)
{
	while(i--);
}


void main()	
{
	u8 i;
	led=~0x01;
	delay(5000);
	while(1)
	{
		for(i=0;i<7;i++)
		{
			led=_crol_(led,1); //将led左移一位
			delay(50000);
		}
		for(i=0;i<7;i++)
		{
			led=_cror_(led,1); //将led右移一位
			delay(50000);
		}
	}

}

到了这里,关于【51单片机】点亮第一个LED灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机(二)成功点亮LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月25日
    浏览(37)
  • 【51单片机】点亮LED灯(四种形式)

    💖作者简介:大家好,我是泽奀。全栈领域新星创作者🥇  📝个人主页:weixin_52632755的博客_泽奀_CSDN博客 🎉点赞➕评论➕收藏 == 养成习惯 😋 💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚  https://blog.csdn.net/weixin_52632755/category_11316267.html 介绍两个比

    2023年04月13日
    浏览(32)
  • 51单片机入门(2)LED点亮的背后

    上一节提到了51单片机开发环境的搭建,这节我们开始正式进入51单片机的学习——点亮LED。 所有的控制类芯片学习的第一个实践就是点亮LED,这是最简单、最基本的操作,但这个实现过程却可能攘括了单片机的整个工作流程,所以要想学好单片机,点灯实验是一定要掌握的

    2023年04月08日
    浏览(27)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(35)
  • STM32/51单片机编程入门(点亮LED)

    目录 一、Proteus电路仿真软件上的C51程序设计及仿真 1.原理图绘制 2.Keil5上的51程序编写 3.仿真 二、安装mdk5软件和stm32包,完成一个stm32的简单程序 1.mdk5软件中编写程序 2.stm32仿真程序调试 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤

    2024年02月02日
    浏览(50)
  • 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁

    点亮LED灯,根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下: #include “reg52.h” sbit led1= P3^7; void main() { led1 = 0;//给led1一个低电平,点亮 } 结果图: 图中有一盏LED灯为我这个51单片机自带的电源接通灯,被代码点亮的只有一盏 实现2盏LED灯的交替闪烁

    2024年02月07日
    浏览(33)
  • 51单片机点亮LED的5中方法(由简单到困难)

    本文将介绍用各种不同的方法和算法点亮51单片机LED的程序,包括详细的注释和说明。 以上代码使用了P1口的第0位控制LED的亮灭。当LED=0时,输出低电平,LED亮;当LED=1时,输出高电平,LED灭。 以上代码使用了延时函数和定时器来控制LED的闪烁。在这段代码中,我们定义了一

    2024年02月09日
    浏览(30)
  • 一周学完C51单片机(1)点亮LED灯以及按键控制

    首先找到单片机的原理图,找到LED模块。我这里是P2口是连接了LED灯,通过此原理图我们可以看到 我们只需将单片机的IO口置为低电平,就可以点亮LED灯。 因为代码比较简单,我就分别展示一下代码,一颗LED灯的亮灭,流水灯 延时函数可以通过小工具来实现,选择好系统的频

    2024年02月08日
    浏览(35)
  • 单片机/嵌入式小白教程—硬件(三)51单片机最小系统

    目录 简介 51单片机器件原理图 复位电路 供电电路 晶振电路 下载电路 最小系统原理图  更加方便的51单片机 传统51单片机最小系统包含:复位电路、供电电路、晶振电路、下载电路   其中, 第9脚(RST)为复位引脚, 第40脚(VCC)第20脚(GND)为供电引脚, 第19脚(XTAL1)第

    2024年02月08日
    浏览(61)
  • 嵌入式51单片机04-矩阵按键系列

    一、矩阵按键基础知识 矩阵按键工作原理 : 逐行扫描 :通过高四位轮流输出低电平来对矩阵键盘进行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过判断低四位数据中哪一位为零来判断哪一个按键被按下。 逐列扫描 :通过低四位轮流输出低电平来

    2024年02月07日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包