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

51单片机-LED篇

目录

    • 准备工作
  • 点亮一个LED灯
    • 写程序
    • 烧录
  • LED闪烁
    • 延时代码Delay500ms
    • 烧录
  • LED流水灯
    • 代码
  • 对LED流水灯代码进行优化,增加复用性
    • 延时代码
    • 代码

准备工作

使用到的单片机是普中51单片机

在这里插入图片描述
使用到的软件是Keil uVision5和stc-isp
在这里插入图片描述

点亮一个LED灯

写程序

首先通过Keil uVision5创建一个项目
在这里插入图片描述
在这里插入图片描述
这里我使用的是STC89C52RC的MCU,由于软件是国外的,不同步国内芯片,这里使用AT89C52效果一样
在这里插入图片描述
这里点击否
在这里插入图片描述
创建文件
在这里插入图片描述
选择.c文件,文件名为main
在这里插入图片描述
鼠标右键单击,添加<REGX52.H>头文件
在这里插入图片描述
LED模块的原理图
这里寄存器是8位,LED模块也是8个线路,通过寄存器0/1代表高低电平,即1代表高电平(5V),0代表低电平0伏
在这里插入图片描述

写代码

void main(){
	P2 = 0xFE; //1111 1110 这里右端接入的是电源正极所以电平为5v,为高电平,左端给0,才能产生电势差
	//1111 1110 - FE
}

点击这个
在这里插入图片描述
选择这个
在这里插入图片描述
在这里插入图片描述

烧录

程序写好,接下来准备烧录到板子上
打开软件选择STC89C52RC
在这里插入图片描述
串口号,选择自己对应的
在这里插入图片描述
找到对应路径下,Objects文件下有Project.hex文件打开
在这里插入图片描述
下载程序
在这里插入图片描述
重启单片机
烧录成功的话这里会显示
在这里插入图片描述
为点亮的LED灯
在这里插入图片描述

LED闪烁

创建新的项目即文件,步骤同上
要使LED闪烁,要将电平再高低电平之间转化

延时代码Delay500ms

在这里插入图片描述
复制代码直接使用即可

代码如下

#include <REGX52.H>
#include <INTRINS.H> //此头文件是使用函数_nop_

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;//FE - 1111 1110
		Delay500ms();
		P2 = 0XFF;//FF - 1111 1111
		Delay500ms();
	}
}

烧录

在这里插入图片描述
这里单片机会产生对应效果,即一个LED灯闪烁,照片无法展现就不放了

LED流水灯

创建新项目,步骤同上
若不是用延时,MCU执行速度快,肉眼分辨不出是否实现流水灯效果

代码

#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();
	}
}

对LED流水灯代码进行优化,增加复用性

创建新项目

延时代码

在这里插入图片描述

代码

#include <REGX52.H>

void Delay1ms(unsigned int xms)	//这里传入参数,即想延时时间单位为毫秒
{
	unsigned char i, j;
	while(xms){   //通过while循环,执行xms次延时1毫秒代码实现
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}
	
}


void main(){
	while(1){
		P2 = 0XFE;//1111 1110
		Delay1ms(500);
		P2 = 0XFD;//1111 1101
		Delay1ms(500);
		P2 = 0XFB;//1111 1011
		Delay1ms(500);
		P2 = 0XF7;//1111 0111
		Delay1ms(500);
		P2 = 0XEF;//1110 1111
		Delay1ms(500);
		P2 = 0XDF;//1101 1111
		Delay1ms(500);
		P2 = 0XBF;//1011 1111
		Delay1ms(500);
		P2 = 0X7F;//0111 1111
		Delay1ms(500);
	}
	
}

烧录后即可实现LED流水灯效果


http://www.kler.cn/a/7419.html

相关文章:

  • 整数唯一分解定理
  • 【HAProxy09】企业级反向代理HAProxy高级功能之压缩功能与后端服务器健康性监测
  • 用PHP实现一个简单的http服务器
  • python:用 sklearn 构建 K-Means 聚类模型
  • STM32 学习笔记-----STM32 的启动过程
  • 【计算机网络】TCP网络特点2
  • erpnext--指令
  • 多个硬盘挂载到同一个目录
  • 重新理解一个类中的forward()和__init__()函数
  • MyBatisPlus-DML编程控制
  • Muduo库源码剖析(八)——TcpServer类
  • 腾讯云轻量应用服务器价格表(2023版)
  • 前端学习:HTML基本标签
  • cgroups是linux内核中限制、记录、隔离进程组(process groups)所使用的物理资源的机制
  • 【C++从0到1】22、C++中switch语句
  • 「SQL面试题库」 No_25 统计各专业学生人数
  • 【ChatGPT】ChatGPT 能否取代程序员?
  • 英语——不定词(二)
  • 对象的比较(数据结构系列12)
  • 2023中国程序员薪酬报告出炉,你拖后腿了吗?
  • ViewBinding用法
  • mysql知识点看这一篇就够了!
  • 振动监测信号的角度域之阶次分析(1)
  • ChatGPT 存在很大的隐私问题
  • Java分布式事务(七)
  • 前端后端交互系列之原生Ajax的使用