51单片机-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流水灯效果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值