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

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

❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。
☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋。
🌙专栏目标:实现从零基础入门51单片机和STM32单片机,力求在玩好单片机的同时,能够了解一些计算机的基本概念,了解电路及其元器件的基本理论等。

⭐️ 专栏主要内容: 主要学习51单片机的功能、各个模块、单片机的外设、驱动等,最终玩好单片机和单片机的外设,全程手敲代码,实现我们所要实现的功能。
🌴 专栏说明 :如果文章知识点有错误的地方,欢迎大家随时在文章下面评论,我会第一时间改正。让我们一起学习,一起进步。
💑专栏主页:http://t.csdn.cn/HCD8v

本学习过程参考:https://space.bilibili.com/383400717

单片机安装软件、各种资料以及源码的路径:
https://pan.baidu.com/s/1vDTN2o8ffvczzNQGfyjHng
提取码:gdzf

本节目标

本节会学习如何利用51单片机去控制开发板上的LED。LED模块在开发板上的位置如下图所示:图中红框框出来的就是LED模块;

51单片机(二)成功点亮LED
本节将写三个程序代码,分别实现的功能是:

第一个代码点亮一个LED:

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

第二个代码实现的功能是让第一个灯以1s为周期闪烁:

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

第三个代码实现的功能是D1-D88个灯循环闪烁的流水灯:

51单片机(二)成功点亮LED文章来源地址https://www.toymoban.com/news/detail-424274.html

一、准备工作

1.1 LED原理介绍(很重要!!!!)

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

LED灯在开发板上的连接方式:

请见51单片机入门教程资料\开发板资料包\HC6800-ES V2.0\开发板原理图\HC6800-ES+V2.0+新版.pdf

51单片机(二)成功点亮LED
按照左边红色的引脚图,结合pdf文件中的MCU引脚图总览可以看到,LED是大致接在MCU的右下角位置的,如下图所示:
51单片机(二)成功点亮LED

LED具体结构如下:
51单片机(二)成功点亮LED
单片机的P2口(P20-P27)都对应着TTL电平,即高电平5v低电平0v,例如当P20口输出低电平时,则D1灯点亮,P20口输出高电平时,D1灯不亮;所以控制单片机接口的高低电平输出,即可实现对D1等LED灯的控制;那么如何实现对P20口高低电平的控制呢?
51单片机(二)成功点亮LED

以P2口为例,MCU中的结构如上图所示,CPU和寄存器相连,寄存器和硬件i/o口相连;寄存器寄存器8个为一组,分别对应着硬件i/o口的P20-P27,最下面的低地址寄存器对应着P20口,依次类推,最上面的高地址寄存器对应着P27口;每个寄存器中存放1和0两个数字,如果寄存器中放的是数字1,那么对应的i/o口就会输出高电平,反之,如果寄存器中放的是数字0,那么对应的i/o口就会输出低电平;所以i/o口输出高电平还是低电平,就由CPU向寄存器中写入的数字决定;例如,如果寄存器中存放的数字是1111 1110(从左往右是高地址->低地址,即对应着上图中的寄存器从上到下) ,即说明P27口到P21口都是1即高电平,P20口对应的是低电平,则只有P20口对应的LED灯会亮

CPU通过配置寄存器中的1和0,实现对硬件电路i/o口的高低电平配置

1.2 建立keil工程并添加源文件

打开keil5软件,新建一个工程:
51单片机(二)成功点亮LED
选择路径
51单片机(二)成功点亮LED
然后弹出窗口让我们选择单片机的型号,找到我们单片机的型号,比如本文用的是STC89C52,但是keil软件里对中国生产的单片机不太友好,找不到该型号,因此可以选择Atmel里的AT89C5代替:
51单片机(二)成功点亮LED
51单片机(二)成功点亮LED
是否自动添加启动文件,选择否即可:
51单片机(二)成功点亮LED
此时我们的工程就建好了,其中Source Group 1就是我们编写代码的文件夹:
51单片机(二)成功点亮LED

在Source Group 1上面右键,添加代码文件(我们选择C语言文件),并起名为main:

51单片机(二)成功点亮LED
51单片机(二)成功点亮LED
然后就可以对main.c进行编写,编译,构建等操作了:

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

一般我们写好代码之后都会点击build进行构建,如下例子,我们写个main函数,进行构建:
51单片机(二)成功点亮LED
会发现构建结果为0错误0警告。

1.3 选择生成hex文件

要想将程序下载到单片机中,必须生成HEX文件,配置过程如下步骤1 2 3 4所示:
51单片机(二)成功点亮LED

二、点亮一个LED

有了1.1 LED介绍节的基础,我们可以知道操作P2口对应的寄存器即可实现对P2口高低电平的控制,进而控制P2口对应的LED灯的亮和灭,在main.c中输入以下代码:
51单片机(二)成功点亮LED
其中P2定义在REGX52.H头文件中,代表P2口,0xFE代表16进制,换算成2进制就是1111 1110;然后将这段代码build,会发现0错误0警告:

#include <REGX52.H>

void main()
{
	P2=0xFE;	//1111 1110
	while(1)
	{
		
	}
}

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

然后将此段代码下载到单片机中,打开STC-ISP软件,单片机型号选择STC89C52系列下面的STC89C52,如下图
51单片机(二)成功点亮LED
串口号选择如下:
51单片机(二)成功点亮LED
然后“打开程序文件”,选择刚刚我们建好的工程下面build生成的的Project.hex文件,打开->下载/编程:
51单片机(二)成功点亮LED
51单片机(二)成功点亮LED

然后将开发板上的开关按两次,即可发现第一个LED灯亮了。

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

三、LED闪烁

源码路径:
51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\2-2 LED闪烁

按照上面1.2和1.3新建另一个工程,可以起名为2-2LED灯闪烁,并新增源文件。源文件中输入以下代码:

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void main()
{
	while(1)
	{
		P2=0xFE;	//1111 1110
		Delay500ms();
		P2=0xFF;	//1111 1111
		Delay500ms();
	}
}

下面解释一下代码的含义:
首先P2=0xFE; //1111 1110,通过上面的学习,可以得知该代码可以控制第一个LED亮。
Delay500ms()函数的功能是延时500ms,至于这个函数是如何生成的,下面会讲解。
P2=0xFF可以控制第一个LED亮;
所以代码最终的效果是,第一个LED灯先亮,500ms后灭,500ms后再亮,一直循环。

Delay500ms()函数是如何实现的呢?过程如下:
在STC-ISP工具中,找到“软件延时计算器”,按照下图分别设置系统频率、定时长度和8051指令集,然后点复制代码,在Keil5中粘贴即可。
51单片机(二)成功点亮LED
需要注意的是,Delay500ms()中包含_nop_()函数,该函数是包含在INTRINS.H头文件中的,所以在main.c文件中要包含该头文件。

代码写好后,点击rebuild,然后参考第一节的过程,将写好的程序下载到单片机上,重新开关两次开发板的开关,即可看到LED灯闪烁的效果。

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

四、LED流水灯

源码路径:51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\2-3 LED流水灯
51单片机入门教程资料\课件及程序源码\程序源码\KeilProject\2-4 LED流水灯Plus

和第二节类似,重新建立工程,将main.c文件换成以下代码,提供两种方法:
方法1:

#include <REGX52.H>
#include <INTRINS.H>

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
		P2=0xFE;//1111 1110
		Delay500ms();
		P2=0xFD;//1111 1101
		Delay500ms();
		P2=0xFB;//1111 1011
		Delay500ms();
		P2=0xF7;//1111 0111
		Delay500ms();
		P2=0xEF;//1110 1111
		Delay500ms();
		P2=0xDF;//1101 1111
		Delay500ms();
		P2=0xBF;//1011 1111
		Delay500ms();
		P2=0x7F;//0111 1111
		Delay500ms();
	}
}

方法2:

#include <REGX52.H>

void Delay1ms(unsigned int xms);		//@12.000MHz

void main()
{
	while(1)
	{
		P2=0xFE;//1111 1110
		Delay1ms(1000);
		P2=0xFD;//1111 1101
		Delay1ms(1000);
		P2=0xFB;//1111 1011
		Delay1ms(100);
		P2=0xF7;//1111 0111
		Delay1ms(100);
		P2=0xEF;//1110 1111
		Delay1ms(100);
		P2=0xDF;//1101 1111
		Delay1ms(100);
		P2=0xBF;//1011 1111
		Delay1ms(100);
		P2=0x7F;//0111 1111
		Delay1ms(100);
	}
}

void Delay1ms(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
}

两种代码都和第二节种的代码类似,就不一行一行的讲解了。如果有不理解的地方欢迎留言讨论。同样的过程,下载到单片机中即可看到流水灯的效果:

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

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

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

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

相关文章

  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

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

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

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

    2024年02月02日
    浏览(60)
  • 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍:        LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等。         通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点阵显示屏,比如16*16点阵可以使用4个8*8点阵构成。因

    2024年02月09日
    浏览(45)
  • 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日
    浏览(41)
  • 51单片机 | LED点阵实验 | 点亮一个点 | 显示数字 | 显示图像

      开发板上使用了 64 个红色 LED 按照行列排布组成的 8*8 LED 点阵。下面介绍 LED 点阵的使用。    LED 点阵 是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见,被广泛应用于汽车报站器,广告屏等。如下所示:   通常应用较多的是 8*8 点阵,然后使

    2023年04月08日
    浏览(43)
  • 51单片机点亮LED的5中方法(由简单到困难)

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

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

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

    2024年02月08日
    浏览(48)
  • 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记

    纯小白写的文章,如有问题,欢迎评论区讨论,反驳,指正。 如果你只想了解74HC595如何使用,建议只看2.3。 通过查看普中A2开发板的原理图(图1)可以知道,通过P0(P0_0、P0_1…P0_7)口和DPa、DPb…DPh来控制哪一颗LED点亮。我这个开发板上的点阵模块没有按照他给的原理图上

    2024年02月05日
    浏览(86)
  • 51单片机定时器。实验(六):定时器实验:使用AT89S51单片机的定时器/计数器T1控制LED每隔3秒点亮一次(即亮3秒,灭3秒,如此反复)

    目录 题目: proteus仿真: 代码: 分析题目: 定时器: 工作方式寄存器TMOD设置: 控制寄存器TCON设置: 设定计数初值:  定时器四种工作方式: 实验过程讲解: 配置定时器:设置TMOD寄存器 设定定时器初值:THx和TLx(x=0,1) 设置IE寄存器: 启动定时器: 中断检测: 使用

    2023年04月20日
    浏览(54)
  • 学习笔记|LED点亮原理|三极管在数字电路中的应用|Keil中的Tab设置|C51中对准双向口|STC32G单片机视频开发教程(冲哥)|第四集-上:点亮LED

    为什么LED能点亮? 概念引入:输出电压=VCC就是高电平,输出电压 =GND(一般是OV)就是低电平,分别用1和0来表示,这个是理想值。 现在STC 的带硬件USB的MCU支持用硬件USB下载,因为用的是USB-HID通信协议,不需要安装任何驱动。STC打狗棒、降龙棍、开天斧、屠龙刀核心板以及STC开

    2024年02月14日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包