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

前言

大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁

主要内容含:

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

目录

一.点亮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闪烁项目一致,主要区别是代码区别
  • 先写出二进制下的状态,再转换成十六进制
  • 代码:
相关推荐
数据智能老司机1 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机1 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机1 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机20 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机20 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿21 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆21 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010121 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy21 小时前
Redis常用的数据结构及其使用场景
数据库·redis