###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯

这篇具有很好参考价值的文章主要介绍了###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 文章来源地址https://www.toymoban.com/news/detail-826767.html

前言:感谢您的关注哦,我会持续更新编程相关知识,愿您在这里有所收获。如果有任何问题,欢迎沟通交流!期待与您在学习编程的道路上共同进步。

 

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

目录

一.  延时函数的生成 

1.通过延时计算器得到延时函数 

2.可赋值改变的延时函数 

二.  LED模块编写原理 

1.LED模块图  

2.编写原理

(1)编写原理

(2)快捷编程 

(3)十六进制编程 

三.  具体编写程序 

1.通过生成没有改写的延时函数 

2.可赋值延时函数编写 

四.  LED流水灯视频

 

一.  延时函数的生成 

 

1.通过延时计算器得到延时函数 

 

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

步骤:

1.打开STC-ISP找到软件延时计算器

2.先了解所用51单片机的频率(这里的51单片机频率为11.0592),选择你需要定时的长度,然后注意这里51单片机为AT89C52属于89系列,所以8051指令集选择STC-Y1。

3.点击生成C代码再复制代码

源码如下:

void Delay250ms(void)	//@11.0592MHz
{
	unsigned char data i, j, k;

	_nop_();
	i = 2;
	j = 193;
	k = 57;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

 

2.可赋值改变的延时函数 

   这里我们可以在原有的延时函数的基础上,进行变量定义并运用while语句生成可赋值改变的延时函数。 

源码:

void Delay(unsigned int xms)	//@11.0592MHz
          //在Delay延时函数中新定义一个整型变量xms
{
	unsigned char data i, j;
  while(xms)     //运用while循环,注意while循环括号内非零即增
	{
	i = 2;
	j = 199;    
	do
	{
		while (--j);
	} while (--i);
	xms--;      //注意这里为循环条件改变,不改变无法实现同时写成xms++也无法实现
}
	
}

 

二.  LED模块编写原理 

 

1.LED模块图  

1.单片机多个接口图,LED模块接在P2口 

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

2.LED模块图,这里我们需要注意LED的走向便于理解编写原理

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

3.LED与单片机连接部分

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

2.编写原理

(1)编写原理

  从上面LED的原理图中,我们对于LED知道LED具有单向导电的特征,而反向则电阻很大,所以我们需要使LED单向导电,这里我们规定0为低电平而1为高电平,根据电流的流向,判断当P2口接0即低电平时LED点亮,当P2口接1即高电平时LED不亮。

(2)快捷编程 

 1. 在编写时我们需要加上一个定义了P2口的头文件如下:

#include <REGX52.H>

该头文件定义了所有的接口,一般编写都需要,我们可以在开始时鼠标右键空白处找到并添加。 

2.由于该头文件定义了确切的接口如图:

点击打开

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言

查看接口

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

这里直接定义了接口转为十六进制所以只需要对接口赋值0或1,即加高电平还是低电平。

例如:

1.定义第一个LED点亮 

P2_0=0;

2.定义第一个LED熄灭

P2_0=1;

(3)十六进制编程 

  十六进制编程与上述类似即对于接口没有转换为十六进制需要自己通过原理来设计编写,即对于每个LED的状态进行规定,然后写成一个二进制代码再转为十六进制。(之前的博客有具体的转换过程)。 

例如:

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言

 

  这里定义D1接0,其余接1,则表示只让D1亮,这里写成二进制串需要从下往上写成1111 1110,接着由二进制转十六进制为FE,部分二进制转十六进制如图:

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

例如:这里在FE前面需要加上0x用于表明为十六进制,

	P2=0xFE;

对比:对于快捷编写来说即让人容易明白且编写方便,而对于十六进制编写则过于麻烦,但是该编写方式可以让人更加清楚的熟悉编写原理,从而更加灵活的编写同时有利于后续的编写。 

 

三.  具体编写程序 

 

1.通过生成没有改写的延时函数 

这里在程序中我们还要引入另一个头文件,由于自动生成的延时函数中有一个语句需要被调用,为了完善程序,我们需要调用该头文件。

需要被调用的语句:

	_nop_();

需要被调用的头文件:

#include <INTRINS.H>

打开可看到(打开方式同另一个头文件)

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

下面就是一个具体的程序(C语言编写的):

#include <REGX52.H>       //两个头文件的引入
#include <INTRINS.H>

void Delay250ms(void)	//@11.0592MHz    //延时250ms
{
	unsigned char data i, j, k;

	_nop_();    
	i = 2;
	j = 193;
	k = 57;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()    //函数主体
{
	while(1)      //通过while循环让程序循环进行
	{
		P2=0xFF;   //通过十六进制编写
		Delay250ms();    //延时函数的调用
		P2=0xFE;
		Delay250ms();
		P2=0xFD;
		Delay250ms();
		P2=0xFB;
		Delay250ms();
		P2=0xF7;
		Delay250ms();
		P2=0xEF;
		Delay250ms();
		P2=0xDF;
		Delay250ms();
		P2=0xBF;
		Delay250ms();
		P2=0x7F;
		Delay250ms();
		P2=0xFD;
		Delay250ms();
		P2=0xF7;
		Delay250ms();
		P2=0xDF;
		Delay250ms();
		P2=0x7F;
		Delay250ms();
		P2=0xFC;
		Delay250ms();
		P2=0xE7;
		Delay250ms();
		P2=0x3F;
		Delay250ms();
		P2=0xF1;
		Delay250ms();
		P2=0x1F;
		Delay250ms();
		P2=0xF0;
		Delay250ms();
		P2=0x0F;
		Delay250ms();
		P2=0x00;
		Delay250ms();
	}
	
	
	
}

这里主要可以多试试通过十六进制定义LED的亮灭。 

 

2.可赋值延时函数编写 

这里由于改写后没有上面的那个语句,所以也不需要添加那个头文件。

源码:

#include <REGX52.H>

void Delay(unsigned int xms)	//@11.0592MHz   //定义变量
{
	unsigned char data i, j;
  while(xms)   //while循环
	{
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	xms--;   //循环条件改变
}
	
}

void main()   //主函数
{
	while(1)   //while循环非零即增
	{
		P2=0xFE;
		Delay(100);   //调用延时函数,对于延时可赋值改变
		P2=0xFD;
		Delay(200);
		P2=0xFB;
		Delay(300);
		P2=0xF7;
		Delay(400);
		P2=0xEF;
		Delay(500);
		P2=0xDF;
		Delay(600);
		P2=0xBF;
		Delay(700);
		P2=0x7F;
		Delay(800);
		
	}

}

 

四.  LED流水灯视频

 

大家可以自己设计一个自己的流水灯,如果有问题的话欢迎私聊我哦。 

51单片机LED流水灯

感谢老铁的浏览,希望老铁可以一键三连加个关注,您的支持和鼓励是我前进的动力,后续会分享更多学习编程的内容。 

 

###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯,51单片机,51单片机,学习,c语言,单片机,嵌入式硬件,开发语言 

 

 

 

 

 

 

 

 

 

 

 

 

到了这里,关于###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 电脑通过串口助手和51单片机串口通讯

    今天有时间把电脑和51单片机之间的串口通讯搞定了,电脑发送的串口数据,单片机能够正常接收并显示到oled屏幕上,特此记录一下,防止后面自己忘记了怎么搞得了。 先来两个图片看看结果吧! 下面是串口3.c的文件全部内容: 下面是oled.h的全部内容: 下面是oled.c的全部内

    2024年02月07日
    浏览(57)
  • 51单片机通过计时器实现倒计时

    软件 : Keil5+Proteus7 元件 : AT89C51 * 1,7SEG-MPX2-CA * 1

    2024年02月16日
    浏览(72)
  • 51单片机通过两个按键控制流水灯方向

    按键一接单片机P3_1,按键2接P3_0 8个流水灯接P2口 以下是代码:

    2024年02月11日
    浏览(48)
  • 51单片机开发:通过74HC595控制LED点阵

    (1)LED点阵就是多个LED发光二极管的集合,在单个LED的发光原理上没有任何区别; (2)上面是16x16的LED点阵,总共有16x16=256个LED灯,由32个引脚来控制,其中16个引脚是正极(posn,n=1、2······、16),16个引脚是负极(NEGn,n=1、2······、16); (3)LED点阵可以用坐标系的思想来理解,

    2024年02月12日
    浏览(53)
  • C51单片机——通过使用定时器控制LED闪灭

    目录 0 引言 1 定时的原理 1.1 生活中的定时 1.2单片机中的定时器 2 C语言程序设计 2.1 定时器的内部功能 2.2 设置寄存器 2.3 实验程序 3 有两个小问题(算是延伸吧) 3.1 只能0.05s闪一次吗? 3.2 每次都要在草稿纸手算初始值好麻烦

    2024年02月06日
    浏览(73)
  • 51单片机电子时钟(C语言)

     全部硬件电路分为四大部分: 控制模块51单片机; 显示模块LCD1602,由P0口控制; 计时模块DS1302,由P1口控制; 输入按键,由P3口控制。         实际设计硬件电路时应考虑到51单片机的电源、复位电路以及外接晶振,时钟芯片DS1302的备用电源等。 从1302的寄存器中读取数据

    2024年02月07日
    浏览(45)
  • 51单片机汇编语言指令大全

    参考链接 https://blog.csdn.net/weixin_45702442/article/details/115874162 https://blog.csdn.net/acslsr/article/details/106881712 在这里稍作终结,方便复习 51系列单片机按照功能分科分为5大类 数据传送类指令28条; 算数操作类指令24条; 逻辑运算类指令25条; 控制转移类17条; 位操作类17条。 MOV A,R

    2024年02月07日
    浏览(45)
  • 单片机课设———基于51单片机的智能风扇控制器(汇编语言)

    说明:单片机芯片为AT89C52,使用普中开发板,用汇编语言编程。 系统实现了对风扇的控制: (1)控制器面板包括:启/停键、模式选择键、风速键和类型选择键。 (2)模式分为:手动模式和自动温控模式。在温控模式下,风速键和类型选择键无效。 (3)风速分为:强、中

    2024年02月11日
    浏览(54)
  • 51单片机编程应用(C语言):串口通信

    目录 通信的基本概念和种类    1.1串行通信与并行通信 ​编辑 1.2同步通信与异步通信 1.3单工,半双工,全双工   1.4通信速率  二、波特率和比特率的关系 串口通信简介: 1.接口标准 RS-232 2、D型9针接口定义 3.通信协议: 2.串口内部结构  51单片机串口相关寄存器   1.80c

    2024年02月19日
    浏览(56)
  • 51单片机学习--串口通信

    首先需要配置寄存器: 下面这里SCON配0x40和0x50都可以,因为暂时还不需要接受信息,所以REN置1置0都可 在main中调用SendByte函数,每按下一次复位键,接收缓冲区就会收到一个11 这就是单向发送的一个简单实例,接下来实现每隔一秒发送一个递增的数据,只需要添加一个全局变

    2024年02月14日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包