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流水灯闪烁

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

剑鞘的流苏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值