51单片机Day03---让一个LED灯闪烁

目录

1.研究原理图:

2.一些小知识(重定义的使用):

[(1)在单片机中,unsigned int 常用于以下场景:](#(1)在单片机中,unsigned int 常用于以下场景:)

[(2)unsigned char:](#(2)unsigned char:)

3.思路构造:

4.代码完成:

5.出现的问题:

(1)延时函数:

(2)重定义的使用举例说明:

(3)更完善:

6.代码完善并实现:


1.研究原理图:

先找到本实验要用到哪一块:

2.一些小知识(重定义的使用):

(1)在单片机中,unsigned int 常用于以下场景:

循环计数 :在编写循环语句时,用于记录循环执行的次数。比如通过 for 循环控制 LED 闪烁特定次数,unsigned int 可确保计数值始终为非负数。

事件计数 :统计外部事件发生的次数,像记录按键被按下的次数、传感器触发的次数等 。例如,用单片机检测按钮按下次数并在数码管上显示,就可使用 unsigned int 类型变量来记录次数。

数组索引:用于访问数组元素时指定索引位置,索引必然是从 0 开始的非负整数,unsigned int 能满足此需求。比如在单片机采集温度数据并存储在数组中,后续要访问数组中特定位置的数据时,索引就可用 unsigned int 类型 。

延时函数参数:在编写延时函数时,常使用 unsigned int 类型参数来指定延时时间。

存储测量数据:当单片机采集传感器数据(如温度、湿度、压力等 ),若数据不需要表示负数,可使用 unsigned int 存储。例如,采集温度传感器数据,温度值不会出现负数(在特定测量场景下 ),就可以用 unsigned int 存储测量值。

数据传输计数 :在进行数据通信时,统计发送或接收的数据字节数等,unsigned int 可用来记录数据量,确保计数为非负。

(2)unsigned char:

(本题中并未用到unsigned char,之后若用到会再提)

ASCII 码存储 :在处理字符相关操作时,可用来存储 ASCII 码字符。ASCII 码表中字符编码范围是 0 - 127(扩展 ASCII 码到 255 ),unsigned char 能完整覆盖。比如在单片机串口通信中,接收或发送的字符数据常用 unsigned char 存储。

字符串操作 :单片机中表示字符串时,每个字符元素通常用 unsigned char 类型。如定义字符串 unsigned char str[] = "Hello"; ,通过对数组中 unsigned char 类型元素操作,可实现字符串的显示、比较、复制等功能 。

直接操作字节位unsigned char 只有 8 位,可方便对这 8 位进行位操作,如与(&)、或(|)、异或(^)、取反(~)、左移(<<)、右移(>>)等。比如控制一个 8 位的 LED 灯组,每个灯的亮灭状态对应一位,用 unsigned char 变量表示灯组状态,通过位操作就能轻松控制各灯亮灭 。

串口通信数据传输 :在串口通信中,每次传输的数据单元通常是 8 位(1 字节 ),unsigned char 正好适配。无论是发送端将数据按字节发送,还是接收端按字节接收数据,都常用 unsigned char 存储。

SPI、I2C 等通信协议 :这些通信协议传输的数据也常以字节为单位,使用 unsigned char 存储传输数据,便于与协议规范匹配,实现数据的正确收发和处理 。

3.思路构造:

先选择一个LED灯,进行重定义,延时函数,主函数。

主函数思路:

让这个灯亮,然后调用延时函数,再让这个灯灭,再调用延时函数。

4.代码完成:

#include <REGX51.H>

sbit LED=P2^2;

typedef unsigned int u16;

typedef unsigned char u8;

void delay(u16 t)(这里有问题!!!)

{

while(t--);

}

void main()

{

LED=0;

delay(5000);

LED=1;

delay(5000);

}

5.出现的问题:

(1)延时函数:

本人这样写会导致延时的时间不固定

void delay_10us(u16 t)
{
while(t--);
}

这样写比较好,意思是10微秒的倍数,也就是说,u16后面会是一个非负的整数,整个句子的含义就是多少个10微秒。

(2)重定义的使用举例说明:

typedef(注意拼写) unsigned int u16;

这就像C语言一样,u16就像一个变量类型名字,之后可以把他当成一个类型。

类比C语言:int a;(定义变量时)

(3)更完善:

可以让灯的亮灭在一个循坏之中

6.代码完善并实现:

#include <REGX51.H>

sbit LED=P2^2;

typedef unsigned int u16;

typedef unsigned char u8;

void delay_10us(u16 t)

{

while(t--);

}

void main()

{

while(1)

{

LED=0;

delay_10us(5000);

LED=1;

delay_10us(5000);

}

}

相关推荐
「QT(C++)开发工程师」11 小时前
Atollic TrueSTUDIO for STM32 9.3.0 是一款专为 STM32 微控制器 设计的集成开发环境(IDE)
ide·stm32·嵌入式硬件
聆风吟º11 小时前
【顺序表习题|图解|双指针】移除元素 + 删除有序数组中的重复项
c语言·数据结构·c++·经验分享·算法
Darken0311 小时前
为什么舵机的0度在单片机中代表500?180度代表2500?
单片机·嵌入式硬件·舵机
学困昇11 小时前
Linux 进程概念与内存管理详解(含冯诺依曼体系结构、环境变量、调度算法)
linux·c语言·开发语言·网络·数据结构·c++
EXtreme3511 小时前
【数据结构】算法艺术:如何用两个栈(LIFO)优雅地模拟队列(FIFO)?
c语言·数据结构·算法·设计模式·栈与队列·摊还分析·算法艺术
阿拉斯攀登11 小时前
51单片机:了解最小核心系统
单片机·嵌入式硬件·51单片机
AuroraWanderll11 小时前
C++面向对象与类和对象(一)----C++重要基础入门知识
c语言·数据结构·c++·算法·stl
sali-tec19 小时前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
DIY机器人工房21 小时前
(十三)嵌入式面试题收集:6道
单片机·嵌入式硬件·diy机器人工房
国科安芯21 小时前
国产RISC-V架构MCU在工控系统中的节能性分析
网络·单片机·嵌入式硬件·fpga开发·性能优化·架构·risc-v