51单片机点亮LED灯(一)

目录

一、点亮一个LED灯

1、Keil写程序前准备步骤(Keil写程序步骤和stc-isp软件程序烧录步骤只写于第一个文章,后续跳过)

(1)新建工程

(2)新建文件夹放程序

(3)选择单片机

(4)开始写程序

(5)更改程序编辑字体

2、LED模块原理图详解

3、编写点亮一个LED灯的程序

4、将写好的程序通过软件烧录至单片机中 

5、亮一个LED灯实物图

三、让LED灯闪烁

1、软件延时设定

2、编写LED灯闪烁程序

3、LED闪烁实物图

四、LED流水灯

1、编写流水灯程序

(1)初阶流水灯程序

(2)高阶流水灯程序 

2、LED流水灯实物图


由B站江科大51单片机视频学习做的笔记,便于自己以后复习回顾。

一、点亮一个LED灯

1、Keil写程序前准备步骤(Keil写程序步骤和stc-isp软件程序烧录步骤只写于第一个文章,后续跳过)

(1)新建工程

 

(2)新建文件夹放程序

 KeilProject用来保存所有文件的程序

第二层文件名用于显示程序的功能 

 

 用通用文件夹名Project来保存程序

(3)选择单片机

 

 单片机实物采用B站江科大视频中的89C52RC单片机,Keil软件中选择单片机如上

 

 跳出的提示选择否

(4)开始写程序

新建程序文件 

选择语言,第一个是C语言,第二个是C++,第三个是汇编

选择语言确定后,Name编辑统一名字main,再点add 

在新出现的main.c中,编辑程序

 添加主函数

(5)更改程序编辑字体

 

 

 以上就是写C语言程序前需要用到的步骤

 

2、LED模块原理图详解

上图左边8个口连接到单片机的P2.0口~P2.7口, 右边VCC是指电源;

VCC左边的蓝色方框是指电阻,右上角1K指1000Ω,用于保护电路,防止超载;

中间绿色的为LED二极管,当P2.0口为低电平时,则对应电路上的LED灯D1亮;若为高电平,则对应电路上的LED灯D1灭,其他灯同理。

单片机上电阻的读数方式 

3、编写点亮一个LED灯的程序

 为了让编译器识别单片机上的寄存器,需在主函数前插入#include<REGX52.H>

#include<REGX52.H>
void()
{
    P2=0xFE;    /*0x代表前缀,表示后面的是16进制
                (0xFE)H=(1111 1110)B,功能是将P2.0口为低电平,点亮P2.0上的LED;
                其他口为高电平*/
    while(1)    //让程序停滞在循环体中,而不会重复执行主程序
    {
    
    }
}

点亮一个LED灯的C语言程序

 点击左上角Build编译按钮

 出现0错误,0警告,即程序没有问题

 

 在option选项中的output,勾选生成HEX后缀文件,才能通过STC-ISP软件烧录程序

4、将写好的程序通过软件烧录至单片机中 

 

打开STC-ISP软件,选择单片机型号为STC89C52(这里型号以自己单片机为准)

如果板子烧录程序没有反应,可能是单片机型号不对,比如我的板子是89C52RC版本

串口号可以通过右键我的电脑,选择属性,再找到设备管理器,在端口一栏查看 

选择打开程序文件后,打开KeilProject/2-1点亮一个LED/project/object中hex后缀的文件 

 最后再点击下载/编程,然后将按下单片机的复位键,即完成烧录程序

5、亮一个LED灯实物图


三、让LED灯闪烁

1、软件延时设定

打开STC-ISP软件中的软件延时计数器 

 系统频率选择12MHZ,定时长度选择500ms,指令集选择STC-Y1,然后将代码复制至Keil编译器

2、编写LED灯闪烁程序

#include <REGX52.H>
#include <INTRINS.H>     //函数库,定义空语句_nop_()

void Delay500ms()		//晶振为12.000MH,延迟函数,延迟0.5s
{
	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;         //让P2.0为低电平,LED亮
		Delay500ms();    //LED亮0.5s
		P2=0xFF;         //让P2全部为高电平,LED都灭
		Delay500ms();    //LED灭0.5s
	}
}

 

3、LED闪烁实物图

51单片机一个LED灯闪烁


四、LED流水灯

1、编写流水灯程序

(1)初阶流水灯程序

#include <REGX52.H>
#include <INTRINS.H>   //函数库,定义空语句_nop_()

void Delay500ms()		//@12.000MHz,延迟函数,延迟500毫秒
{
	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();
	}
}

 

(2)高阶流水灯程序 

#include <REGX52.H>
#include <INTRINS.H>   

void Delay1ms(unsigned int x)		//@12.000MHz,延迟1ms,x为无符号整数参数
{
	unsigned char i, j;				//定义i、j为无符号字符
    while(x)						//将延迟1ms函数循环x次
    {
	i = 2;
	j = 239;
	do
	    {
		while (--j);
	    } while (--i);				//将程序延迟1ms
    x--;							//每循环一次,x自动减1
    }
     
}


void main()
{
	while(1)
	{
		P2=0xFE;				//1111 1110
		Delay1ms(500);	        //将500赋予x参数,可以通过更改函数参数,直接改变延迟时间
		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);
	}
}

 

2、LED流水灯实物图

LED流水灯闪烁

  • 28
    点赞
  • 217
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要使用51单片机点亮LED,需要首先连接单片机LED。一般情况下,将LED的正极连接到单片机的一个IO口,将LED的负极连接到单片机的地(GND)上。 接下来,可以使用C语言编写程序,通过控制IO口的高低电平来点亮或熄灭LED。下面是一个简单的示例程序: ```c #include <reg51.h> // 头文件 void main() { P1 = 0x00; // 将P1口的所有位全部清零,确保初始状态下LED是熄灭的 while(1) // 无限循环 { P1 = 0x01; // 将P1.0口输出高电平,点亮LED } } ``` 在上面的程序中,P1口的所有位被设置为0,确保LED在初始状态下是熄灭的。然后进入一个无限循环,不断地将P1.0口输出高电平,从而点亮LED。 当然,为了更好地控制LED,也可以使用延时函数,让LED以一定的频率闪烁。例如,下面的程序可以让LED每隔500毫秒闪烁一次: ```c #include <reg51.h> // 头文件 void Delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i = 0; i < t; i++) { for(j = 0; j < 500; j++); } } void main() { P1 = 0x00; // 将P1口的所有位全部清零,确保初始状态下LED是熄灭的 while(1) // 无限循环 { P1 = 0x01; // 将P1.0口输出高电平,点亮LED Delay(1000); // 延时1秒 P1 = 0x00; // 将P1.0口输出低电平,熄灭LED Delay(1000); // 延时1秒 } } ``` 在上面的程序中,我们定义了一个延时函数Delay,它可以让程序等待一段时间。在while循环中,我们先将P1.0口输出高电平,点亮LED,然后延时1秒;接着将P1.0口输出低电平,熄灭LED,再次延时1秒。这样就实现了LED的闪烁。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

剑鞘的流苏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值