当前位置: 首页 > news >正文

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言

大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

  • YY的《C++》专栏
  • YY的《C++11》专栏
  • YY的《Linux》专栏
  • YY的《数据结构》专栏
  • YY的《C语言基础》专栏
  • YY的《初学者易错点》专栏
  • YY的《小小知识点》专栏
  • YY的《单片机期末速过》专栏
  • YY的《C++期末速过》专栏
  • YY的《单片机》专栏
  • YY的《数据库》专栏
  • YY的《数据库原理》专栏

目录

  • 一.点亮LED灯
    • 1.新建一个工程&存放工程的文件夹
    • 2.熟悉编译和建立文件项目的操作
    • 3.LED发光二极管介绍
    • 4.开发板图查询(LED对应独立按键和MCU的原理图,找对应接口)
    • 5.单片机的进制转换问题
    • 6.单片机控制硬件(单片机)的原理+(1位控制,8位控制的区别)
    • 7.添加头文件让编译器识别寄存器P2
    • 8.将代码下载到单片机中
  • 二.LED闪烁(1s为周期)
    • 1.用循环让二极管能够反复接收到信号
    • 2.利用STC-ISP的软件延时计算器
    • 3.完整代码(重复第二大点中,写入开发板的过程)
  • 三.LED流水灯

一.点亮LED灯

1.新建一个工程&存放工程的文件夹

  • 打开软件Keil
  • 如图所示设置一个KeilProject文件夹,shift+ctrl+n新建三个文件夹,对应我们这次要做的三个实验(LED点亮&LED闪烁&LED流水灯)
    在这里插入图片描述
  • 如下图所示步骤操作
    在这里插入图片描述
    在这里插入图片描述
  • 点击保存后,会出现【单片机器件选择界面】
  • 黄框里面是各种公司的名字,由于我们是STC,所以软件中没有出现,但我们可以选用Atmel公司的AT89c52,功能都相同
  • 找到AT89C52后,点击OK
    在这里插入图片描述
  • 随后它会询问我们是否添加启动文件,我们一般是不需要改动启动文件的,这里选择否
    在这里插入图片描述
  • 工程建立完毕
    在这里插入图片描述
  • 添加C语言文件
    在这里插入图片描述
  • 一般用C语言,C++语言效率会慢一些,汇编语言更加底层
  • 命名一个main文件
    在这里插入图片描述
  • 创建文件成功,右边是程序编辑框

2.熟悉编译和建立文件项目的操作

  • 在左上角有三个选项,分别代表【编译】,【建立工程】,【所有工程编译建立】
  • 一般选择第二个即可
    在这里插入图片描述
  • 点击【建立工程后】
    在这里插入图片描述

3.LED发光二极管介绍

  • 发光二极管:只有正极接正极,负极接负极才有电流通过在这里插入图片描述

如何区分LED的正负极?

  • 电极:小的是正极,大的是负极;
  • 引脚:长的是正极,短的是负极(长正短负)
    在这里插入图片描述
    在这里插入图片描述

4.开发板图查询(LED对应独立按键和MCU的原理图,找对应接口)

  • 可以进入该传送门,下载对应资料:传送门
    在这里插入图片描述
  • 下载解压后得到文件如下图所示
    在这里插入图片描述
    在这里插入图片描述
  • 找到对应的LED模块
    在这里插入图片描述
  • 根据对应端口,找到MCU中与其链接的口,发现控制LED的是P2寄存器
    在这里插入图片描述

在这里插入图片描述

5.单片机的进制转换问题

  • 在单片机中: 一般都是把 二进制 转换成 十六进制
  • 原因:比较好看出来,十六进制事实上是二进制的一种简写
  • 0x是一个前缀,代表后面的是十六进制数
    在这里插入图片描述

6.单片机控制硬件(单片机)的原理+(1位控制,8位控制的区别)

  • CPU通过配置控制的寄存器P2(0/1)来控制硬件电路(高低电平),(PS:该过程还要经过驱动器驱动)
  • 如下图所示:我们给P20置0,对应低电平,LED低接低高接高,第一个D1LED灯亮,其余不亮
    在这里插入图片描述

根据以上原理我们知道:

  • 我们 既可以8位方式直接控制P2寄存器 ,来控制8盏LED灯
  • 可以通过1位方式 ,如下图所示,通过控制该引脚高低电平来单独控制某一盏LED
    在这里插入图片描述
  • 相对应的代码设置会出现如下,于是我们要利用进制转换来解决这个问题
    在这里插入图片描述
  • 经过进制转换后,代码变化如下:
    在这里插入图片描述

7.添加头文件让编译器识别寄存器P2

  • 针对如下代码,编译后会报错
    在这里插入图片描述
    在这里插入图片描述
  • 我们只要包含头文件就可以解决这个问题,右键编辑栏即可
    在这里插入图片描述
  • 包含头文件成功
    在这里插入图片描述
  • 头文件展开后我们可以发现,头文件中定义了P2寄存器的地址
    在这里插入图片描述

8.将代码下载到单片机中

  • 因为Keil默认不生成程序下载的文件,所以需要我们点击下图所示图标生成
    在这里插入图片描述
  • 再次点击编译则生成下载程序文件
  • 打开软件STC-SIP
  • 选择单片机型号
    在这里插入图片描述
  • 插上单片机后,串口号会出现带USB的字样,直接选择就行
    在这里插入图片描述
  • 点击“打开程序文件”,选择文件夹中的下载程序文件
    在这里插入图片描述
  • 程序打开完毕后,点击“下载”
    在这里插入图片描述
  • 重新打开单片机开关
    在这里插入图片描述
  • 再次点击开关,点亮成功
    在这里插入图片描述

二.LED闪烁(1s为周期)

1.用循环让二极管能够反复接收到信号

  • 在明白点亮LED灯的操作后,我们引入“循环”的概念;每一次while循环,二极管都会接到一次信号;
  • 我们如下所示设计代码,会发现由于循环发生的频率太快,人眼无法捕捉到亮灭,只能一直看到微弱灯光;形成一种视觉暂停效应
    在这里插入图片描述
  • 解决方法:我们要让他每次执行后,都要有一定的延时;

2.利用STC-ISP的软件延时计算器

  • 如下图所示得到延时子程序
    在这里插入图片描述
  • 复制粘贴到程序中
    在这里插入图片描述
  • 添加_nop函数的头文件
    在这里插入图片描述

3.完整代码(重复第二大点中,写入开发板的过程)

  • 写入过程参考第二大点所示,略
    在这里插入图片描述

三.LED流水灯

  • 大体操作和第四步的LED闪烁项目一致,主要区别是代码区别
  • 先写出二进制下的状态,再转换成十六进制
  • 代码:
    在这里插入图片描述
http://www.lryc.cn/news/294669.html

相关文章:

  • Day 17------C语言收尾之链表的删除、位运算、预处理、宏定义
  • python_蓝桥杯刷题记录_笔记_全AC代码_入门5
  • 二叉树的详解
  • 【第三十五节】idea项目的创建以及setting和Project Structure的设置
  • 【c++】跟webrtc学引用计数
  • 开源免费的物联网网关 IoT Gateway
  • 华为OD机试真题C卷-篇3
  • [SWPUCTF 2021 新生赛]include
  • LeetCode、17. 电话号码的字母组合【中等,dfs回溯】
  • SSRF漏洞给云服务元数据带来的安全威胁
  • 【C++】强制类型转换
  • java日志框架总结(四 、JCL日志门面技术)
  • mfc140.dll丢失的几种修复方式,有效的解决文件丢失问题
  • 从一个小故事讲解观察者模式~
  • LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】
  • Python爬虫urllib详解
  • Linux嵌入式开发+驱动开发-中断
  • android tv开发-1,leanback
  • chisel RegInit/UInt/U
  • 华为OD机试真题-田忌赛马-2024年OD统一考试(C卷)
  • QMUI_Android:提升Android开发效率与质量的利器
  • 如何部署Linux AMH服务器管理面板并结合内网穿透远程访问
  • C++文件操作(2)
  • Bootstrap5 图片轮播
  • WINDOWS搭建NFS服务器
  • LeetCode、216. 组合总和 III【中等,组合型枚举】
  • 支持534种语言,开源大语言模型MaLA-500
  • 面试 JavaScript 框架八股文十问十答第一期
  • 【发票识别】新增针对图片发票的识别(升级中)
  • 面试数据结构与算法总结分类+leetcode目录【基础版】