MCU-51:让LED闪烁起来

这篇具有很好参考价值的文章主要介绍了MCU-51:让LED闪烁起来。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、LED闪烁

昨天我们初识单片机,点亮了一个灯开启了我们51单片机的学习之旅。那么今天我们来一步步深入学习。

1.1 编写代码

会了点亮一个灯,那么闪烁应该就是一亮一灭循环,那代码应该如下

#include <REGX52.H>
void main()
{
	while(1)
	{
		P2=0xFE;
	  P2=0xFF;
	}
}

将以上代码进行编译并无问题。
但是将以上代码烧写到单片机,你会发现单片机LED灯一直长亮。
这是为什么?使我们的代码有问题吗?
其实不是,代码正确,只是单片机晶振频率是12MHz,是M哦,那么一秒会闪几万次,我们的肉眼根本看不到
所以要在程序中加入延时函数

1.2 延时函数

延时函数有两种方法:
第一种方法:通过STC内的工具实现
选择软件演技计算器进行代码生成
单片机led灯闪烁编程,51单片机学习,单片机,嵌入式硬件,51单片机,c语言
延时代码如下

void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 205;
	k = 187;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

将以上代码加入到刚刚写的程序中

#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;
		Delay500ms();
	  P2=0xFF;
		Delay500ms();
	}
}

注意需要包含头文件

#include <INTRINS.H>

在while函数中进行调用

while(1)
	{
		P2=0xFE;
		Delay500ms();
	  P2=0xFF;
		Delay500ms();
	}

将以上代码编译烧进单片机,奇迹就出现了。

第二种方法:通过函数调用配合while语句实现

void delay(unsigned int i)
{
	while(i--);	
}

学过C语言的都知道什么意思,这里就不解释了
完整代码如下

#include <REGX52.H>
void delay(unsigned int i)			
{
	while(i--);	
}

void main()
{
	while(1)
	{
		P2=0xFE;
		delay(50000);
	  P2=0xFF;
		delay(50000);
	}
}

这是不是比第一种方法代码要简单的多,越简单,计算越快

1.3 由0和1控制实现

代码如下,每一行代码都有解释,这里不做解释

#include <reg52.h>			 //定义单片机的一些特殊功能寄存器
sbit led=P2^0;				//定义指定LED灯的管脚
 
void delay(unsigned int i)			//延时函数。unsigned int定义无符号整型,范围0-655535
{
	while(i--);	//i=1时,大约延时10us
}
 
void main()       //主函数,程序从这里开始执行
{
	while(1)
	{
		led=0;        //0表示低电平,共阳极二极管点亮
		delay(50000); //大约延时450ms
		led=1;        //1表示高电平,LED熄灭
		delay(50000); //大约延时450ms	
	}		
}

二、LED流水灯

2.1 流水灯基础版

8个LED灯的定义,以共阳极为例,让某一个灯点亮就是让这个LED灯为低电平。从左到右依次为01111111、10111111、11011111、11101111、11110111、11111011、11111101、11111110。其中1就是高电平、0位低电平,为低电平时LED点亮。
代码如下

#include <reg52.h>			 //定义单片机的一些特殊功能寄存器
 
sbit led1=P2^0;				//定义指定LED灯的管脚
sbit led2=P2^1;
sbit led3=P2^2;
sbit led4=P2^3;
sbit led5=P2^4;
sbit led6=P2^5;
sbit led7=P2^6;
sbit led8=P2^7;
 
void delay(unsigned int i)			//延时函数。unsigned int定义无符号整型,范围0-655535
{
	while(i--);	//i=1时,大约延时10us
}
 
void main()       //主函数,程序从这里开始执行
{
	while(1)
	{
		led1=0;        //0表示低电平,led1点亮
		delay(5000); 
		led1=1;        //1表示高电平,led1熄灭
		delay(5000); 	
		led2=0;        //0表示低电平,led2点亮
		delay(5000); 
		led2=1;        //1表示高电平,LED2熄灭
		delay(5000); 	
		led3=0;        //0表示低电平,LED3点亮
		delay(5000); 
		led3=1;        //1表示高电平,LED3熄灭
		delay(5000); 	
		led4=0;        //0表示低电平,LED4点亮
		delay(5000); 
		led4=1;        //1表示高电平,LED4熄灭
		delay(5000); 	
		led5=0;        //0表示低电平,LED5点亮
		delay(5000); 
		led5=1;        //1表示高电平,LED5熄灭
		delay(5000);	
		led6=0;        //0表示低电平,LED6点亮
		delay(5000); 
		led6=1;        //1表示高电平,LED6熄灭
		delay(5000); 
		led7=0;        //0表示低电平,LED7点亮
		delay(5000); 
		led7=1;        //1表示高电平,LED7熄灭
		delay(5000); 	
		led8=0;        //0表示低电平,LED8点亮
		delay(5000); 
		led8=1;        //1表示高电平,LED8熄灭
		delay(5000); 	
	}		
}

最基础最原始的流水灯方式,就是单纯让LED按照顺序依次点亮,从而达到流水灯的效果,看似笨拙、程序繁多,却突出流水灯的思想和原理,为后面库函数、左移右移、数组索引法奠定基础。

2.2 移位法实现LED流水灯

从左开始循环

#include <reg51.h>
 
void delay(unsigned int i)   //延时函数
{
    while(i--);
}
 
void main(void)   //主函数,程序从这里开始执行
 {
     int j;   //引入变量,定义字符
     while(1)
    {
        P2=0xfe;   //即11111110,将8个LED的状态赋值给P2
        delay(50000);
	for(j=0;j<8;j++)  //循环8次,因为有8个LED灯
         {
            P2=P2<<1 | 0x01; //实现程序左移1位,或运算,有1为1,全0为0
            delay(50000);
         }
     }
 }

那么右循环就是与上面相反

#include <reg51.h>
 
void delay(unsigned int i)   //延时函数
{
    while(i--);
}
 
void main(void)   //主函数,程序从这里开始执行
 {
     int j;   //定义字符
     while(1)
    {
        P2=0x7f;   //即01111111,将8个LED的状态赋值给P2
        delay(50000);
	for(j=0;j<8;j++)  //循环8次,因为有8个LED灯
         {    
            P2=P2>>1 | 0x80; //实现程序右移1位,或运算,有1为1,全0为0
            delay(50000);
         }
     }
 }

还有其他方法可以实现流水灯,小伙伴们自己探索吧文章来源地址https://www.toymoban.com/news/detail-724769.html

到了这里,关于MCU-51:让LED闪烁起来的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32/51单片机编程入门(点亮LED)

    目录 一、Proteus电路仿真软件上的C51程序设计及仿真 1.原理图绘制 2.Keil5上的51程序编写 3.仿真 二、安装mdk5软件和stm32包,完成一个stm32的简单程序 1.mdk5软件中编写程序 2.stm32仿真程序调试 三、STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置的一般步骤

    2024年02月02日
    浏览(56)
  • 学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

    在模块化编程里,函数使用分为如下三步: 返回值 函数名称( 入口参数 ) { 函数要执行的功能 } @返回值:没有返回值就是void @函数名称:避开(IDE中标蓝),不重复,非特殊字符随便取 @入口参数:类型+名称,多个参数“,”分开,空就写void 返回值 函数名称( 入口参

    2024年02月12日
    浏览(49)
  • 单片机LED灯闪烁的简单代码

    目录 前言 一、定义LED灯 二、设置延迟函数 三、让LED闪烁 四、总结 本文将介绍普中51单片机多功能LED灯闪烁的概念、原理、硬件设计、实验测试以及总结展望。 工作原理 1.在LED点亮、LED闪烁实验的基础之上。 2.移位函数 crol (a,b):循环左移函数,a为左移的值,b为左移的位数

    2024年03月22日
    浏览(40)
  • 单片机-c语言LED灯循环闪烁

    1.1一灯循环 1.2for循环实现八个依次亮 1.3使用intrins.h库函数实现 (连接完电路后,双击单片机,在programfiles中导入keil代码生成的 .HEX文件即可)

    2024年02月06日
    浏览(40)
  • 【51单片机】LED 点阵

    参考:普中 51 单片机开发攻略 第13章 mian.c

    2024年01月22日
    浏览(41)
  • 51单片机点亮LED灯

    目录 前言 一、点亮一个LED 二、LED闪烁 三、LED流水灯 四、独立按键控制LED 独立按键控制LED亮灭 独立按键控制LED状态 独立按键控制LED以二进制形式显示 独立按键控制LED状态循环移位 总结           嵌入式学习的入门就是点亮LED灯,就好比学习编程语言敲 “Hello world”

    2024年02月06日
    浏览(40)
  • 51单片机LED点阵屏

    LED点阵屏是一种由许多小型LED灯组成的矩阵式显示屏。这些LED灯可以是单色、双色或全彩的,它们排列成行和列的网格,可以根据需要点亮来显示图像、文字或动画等内容。LED点阵屏广泛应用于户外广告牌、室内显示、交通信号灯、电子价格标签和其他需要显示信息的场合。

    2024年01月23日
    浏览(49)
  • 【51单片机】LED点阵屏

    🎊专栏【51单片机】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Waiting For Love】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 🍔74HC595图片 🍔74HC595原理 🍔”上升沿“是什么意思 🎆LED点阵屏显示图形  🎈现象  🎈代码(三部分) main.c  Del

    2024年02月02日
    浏览(40)
  • 51单片机 82C55扩展控制8个LED,单片机扩展一片82C55可编程并行I/O芯片,实现数字量的输入/输出:8个输入开关分别控制8个输出LED。

    目录 题目: 分析题目: Proteus仿真:  代码: 82c55工作方式: 代码解析: 单片机扩展一片82C55可编程并行I/O芯片,实现数字量的输入/输出:8个输入开关分别控制8个输出LED。                  82C55—可编程的通用并行接口电路(3个8位I/O口) 由题可知,我们可以将82c55的

    2024年02月09日
    浏览(45)
  • 51单片机-按键控制led灯

    1.开发环境介绍 使用C语言,环境为keil Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用. 什么是单片机 单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具

    2024年02月09日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包