51单片机项目-点亮第一个LED灯(涉及:进制转换表、创建项目、生成HEX文件、下载程序到单片机、二极管区分正负极)

新建项目

在这里插入图片描述
在这里插入图片描述

选择型号

stc是中国生产的、这个里面没有包括stc型号,可以用Atmel中的AT89C52代替

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

添加新文件到该项目

在这里插入图片描述
在这里插入图片描述

设置字体和utf-8编码

在这里插入图片描述
在这里插入图片描述

二极管如何区分正负极

在这里插入图片描述

在这里插入图片描述
VCC是LED模块中的正极。(VCC,是Volt Current Condenser的简写,意思是电路的供电电压)

左边的红色部分是负极、它们的编号对应引脚部分的编号。
在这里插入图片描述
LED模块蓝色的框是电阻、对应上图红框圈着的东西。

电阻是一千欧的。

1000欧对应102。

102 = 10 x 10^2 = 1000欧

473 = 47 x 10^3 = 47 000欧

1001 =  100 x 10

1002 = 100 x 10^2

高电流是5V、低电流是0V

灯直接接5V的话可能会烧毁、所以需要电阻。

原理:CPU通过寄存器来控制硬件电路

在这里插入图片描述
寄存器的八位对应LED的低电流端的8个引脚

寄存器的1代表高电流 5V。
0代表低电流0V

用P2寄存器的值控制第一个灯亮

在这里插入图片描述
当最上面的设置为0,那么就对应低电流,D1就可以亮。
其它的设置为1、那么负极设置成高电流、设置为1的不会亮。
从而只让第一个灯亮。

P2 = 1111 110

直接这样写系统会认为是十进制、所以需要进制转换。

进制转换

在这里插入图片描述

十六进制就是十进制到10的时候编程A、然后15的时候变成F

二进制1111 1110 可以转换为 0xFE

void main()
{
	P2 = 0xFE; // 相当于二进制1111 1110
}

这样的话第一个端口是低电流,其它都是高电流。

编译

在这里插入图片描述
点击编译发现报错说P2没有定义。

导入:

#include <REGX52.H>

查看P2寄存器的地址

导入项目之后,右键这个包可以打开里面的内容:
在这里插入图片描述
P2已经被定义为0xA0;
在这里插入图片描述
导入包之后代码就不会报错了,因为会把P2自动识别为0xA0这个地址的寄存器。

点击编译。

生成HEX文件

在这里插入图片描述

然后重新编译。

如果不生成HEX文件,是无法将代码弄到单片机中的。

把代码下载到单片机中

此处要看清单片机的型号,我的是STC89C52RC。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

找到项目的Objects文件,打开hex后缀的文件

在这里插入图片描述

点击打开。

下载程序到单片机

此时单片机必须是打开状态、点击下载,右边显示正在检测。

在这里插入图片描述

在这里插入图片描述

然后 关闭单片机,然后重新打开

右边下交显示成功下载则成功。
在这里插入图片描述

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
单片机中的 LED 状态转换为 16 进制数的方法如下: 1. 假设单片机中有 8 个 LED ,它们的状态分别为 11001101,其中左边第一个为最高位,右边第一个为最低位。 2. 将 8 个 LED 的状态分成两组,每组 4 个。例如,将上面的状态分成 1100 和 1101 两组。 3. 对于每组状态,将其转换为对应的 16 进制数。例如,1100 对应的 16 进制数是 C,1101 对应的 16 进制数是 D。 4. 将两个 16 进制数组合起来,形成一个 2 位的 16 进制数。例如,C 和 D 组合起来形成 CD。 5. CD 就是单片机中 8 个 LED 的状态对应的 16 进制数。 因此,在程序中可以使用以下代码将单片机中 8 个 LED 的状态转换为 16 进制数: ```c #include <reg51.h> unsigned char toHex(unsigned char ledState) { // 将 4 个 LED 的状态转换为 16 进制数 unsigned char hex = 0; if (ledState & 0x08) hex += 0x80; if (ledState & 0x04) hex += 0x40; if (ledState & 0x02) hex += 0x20; if (ledState & 0x01) hex += 0x10; return hex; } void main() { unsigned char ledState = 0xCD; // 假设单片机中 8 个 LED 的状态为 11001101 unsigned char hex = 0; hex += toHex(ledState >> 4); // 将左边 4 个 LED 的状态转换为 16 进制数 hex += toHex(ledState & 0x0F); // 将右边 4 个 LED 的状态转换为 16 进制数 // 现在 hex 就是单片机中 8 个 LED 的状态对应的 16 进制数 } ``` 请注意,以上代码同样是使用 Keil C51 编写的,需要使用相应的编译器和下载器进行编译和下载。如果您使用的是其他编程语言或开发工具,请相应地修改代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

computer_vision_chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值