单片机C语言实例:1、点亮LED的多种方法

这篇具有很好参考价值的文章主要介绍了单片机C语言实例:1、点亮LED的多种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

不管学习什么单片机,通常点灯是迈入编程的第一步,点灯虽然简单,但是玩出花样来,需要的知识点还是不少的,本文归纳了15种点灯方式,看看自己会几种,看看是否能帮到努力点灯的工程师们。

一、控制单个IO口电平的高低来控制LED灯的亮灭

程序实例1:

#include<reg52.h> 

// 用sbit 关键字 定义 LED到P1.0端口
// LED是自己任意定义且容易记忆的符号
sbit LED=P1^0;
              

void main (void)
{                 
	LED=1; //将P1.0口赋值 1,对外输出高电平
	LED=0;//将P1.0口赋值 0,对外输出低电平

	while (1)  //主循环
	{
      //主循环中添加其他需要一直工作的程序
	}
}

二、控制一组IO口的电平来控制LED灯的亮灭

程序实例2:

#include<reg52.h>

void main (void)
{
    //此方法使用1个字节对单个端口赋值
	//P1口全部为高电平,对应的LED灯全灭掉
	//0xFF换算成二进制是 1111 1111
	P1 = 0xFF;
                  
	//P1口的最低位点亮,可以更改数值是其他的灯点亮
	//0xFE是16进制,0x开头表示16进制数
	//0xFE换算成二进制是 1111 1110 
	P1 = 0xfe;        
                                 
	while (1)         
	{
        //主循环中添加其他需要一直工作的程序
	}
}

三、控制多个IO口的电平来控制多个LED的亮灭

程序实例3:

#include<reg52.h> //包含头文件,一般情况不需要改动

sbit LED0 = P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
sbit LED1 = P1^1;//LED是自己任意定义且容易记忆的符号
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;

void main (void)
{
    //此方法使用bit位对单个端口赋值
	LED0=0;  //将P1.0口赋值 0,对外输出低电平
	LED1=1;
	LED2=0;
	LED3=1;
	LED4=0;
	LED5=1;
	LED6=0;
	LED7=1;
	while (1)        
	{
        //主循环中添加其他需要一直工作的程序
	}
}

四、控制一组IO口的电平高低来控制8个LED灯的亮灭

程序实例4:

#include<reg52.h> //包含头文件,一般情况不需要改动

void main (void)
{
    //此方法使用bit位对单个端口赋值
	P1=0x55;  //换成二进制是0101 0101 

	while (1)        
	{
        //主循环中添加其他需要一直工作的程序
	}
}

五、控制单个LED灯闪烁

程序实例5:

#include<reg52.h> //包含头文件,一般情况不需要改动,

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
    //此方法使用bit位对单个端口赋值
	while (1)         //主循环
	{
		LED0=0;   //将P1.0口赋值 0,对外输出低电平
		Delay(10000);//调用延时程序;更改延时数字可以更改延时长度,用于改变闪烁频率
                    
		LED0=1; //将P1.0口赋值 1,对外输出高电平
		Delay(10000);                    
  }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

六、不同频率闪烁一个LED

程序实例6:

#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,
               //LED是自己任意定义且容易记忆的符号


void Delay(unsigned int t); //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
    //此方法使用bit位对单个端口赋值
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255

	while (1)         //主循环
	{
		for(i=0;i<10;i++)   //加入 for循环,表明for循环大括号中的程序循环执行10次
		{
			LED0=0; //将P1.0口赋值 0,对外输出低电平
			Delay(5000); //调用延时程序;更改延时数字可以更改延时长度,用于改变闪烁频率

			LED0=1;  //将P1.0口赋值 1,对外输出高电平
			Delay(5000);
		}

		for(i=0;i<10;i++)
		{
			LED0=0; //将P1.0口赋值 0,对外输出低电平
			Delay(60000);//调用延时程序;更改延时数字可以更改延时长度,用于改变闪烁频率

			LED0=1; //将P1.0口赋值 1,对外输出高电平
			Delay(60000);      
		}
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(--t);
}

七、不同频率闪烁多个LED

程序实例7:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED0 = P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;
sbit LED4 = P1^4;
sbit LED5 = P1^5;
sbit LED6 = P1^6;
sbit LED7 = P1^7;

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  //此方法使用bit位对单个端口赋值
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255

	while (1)         //主循环
	{
		for(i=0;i<10;i++)   //加入for循环,表明for循环大括号中的程序循环执行10次
		{
			LED0=0; //将P1.0口赋值 0,对外输出低电平
			LED2=1;
			LED4=0;
			Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;
						//用于改变闪烁频率
			LED0=1; //将P1.0口赋值 1,对外输出高电平
			LED2=0;
			LED4=1;                
			Delay(5000);
		}

		for(i=0;i<10;i++)
		{
			LED0=0;            //将P1.0口赋值 0,对外输出低电平
			LED2=1;
			LED4=0;
			Delay(60000);      //调用延时程序;更改延时数字可以更改延时长度;
					 //用于改变闪烁频率
			LED0=1;            //将P1.0口赋值 1,对外输出高电平
			LED2=0;
			LED4=1;
			Delay(60000);      
		}
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
 while(--t);
}

8、流水灯,8个LED左移流水

程序实例8:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
	Delay(50000);
	P1=0xFE;           //赋初始值
	for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
	{
		Delay(50000);
		P1<<=1;
	}
	while (1)  //主循环
	{
        //主循环中添加其他需要一直工作的程序
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
     while(--t);
}

9、流水灯,8个LED右移流水

程序实例9:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                 
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
	Delay(50000);
	P1=0x7F;      //赋初始值
	for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
	{
		Delay(50000);
		P1>>=1;
	}
	while (1)//主循环
	{
        //主循环中添加其他需要一直工作的程序
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
     while(--t);
}

10、LED循环左移

程序实例10:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                 
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
	Delay(50000);
	P1=0xfe;           //赋初始值
	while (1)         //主循环
	{
		for(i=0;i<8;i++)   //加入for循环,表明for循环大括号中的程序循环执行8次
		{
			Delay(50000);
			P1<<=1;
			P1=P1|0x01;     //左移后,最右端自动赋值0,所以需要该语句赋值1
		} 
		P1=0xfe;           //重新赋初始值
  }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

11、LED循环右移

程序实例11:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{
                  
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255
	Delay(50000);
	P1=0x7f;           //赋初始值
	while (1)          //主循环
	{
		for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
		{
			Delay(50000);
			P1>>=1;
			P1=P1|0x80;     //右移后,最左端自动赋值0,所以需要该语句赋值1
		} 
		P1=0x7f;           //重新赋初始值
  }
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

12、查表法显示LED

程序实例12:

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
                   查表表格
------------------------------------------------*/
unsigned char code table[]={0x7f,0xbf,0xdf,0xef,
                            0xf7,0xfb,0xfd,0xfe,
							0xff,0xff,0x00,0x00,
							0x55,0x55,0xaa,0xaa};
						//rom允许情况可以无限添加
						
/*------------------------------------------------
                  函数声明
------------------------------------------------*/
void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{              
	unsigned char i;  //定义一个无符号字符型局部变量 i 取值范围 0~255

	while (1)         //主循环
	{
		for(i=0;i<16;i++)   //加入 for循环,表明for循环大括号中的程序循环,执行16次,表明表格中有16个元素
		{
			P1=table[i];
			Delay(30000);
		}
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

13、双灯左移右移闪烁

程序实例13:

#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义

void Delay(unsigned int t); //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{              
	unsigned char i;  //定义一个无符号字符型局部变量 i ,取值范围 0~255
	unsigned char temp;//定义临时变量用于转换
	while (1)          //主循环
	{
		temp=0xfc;
		P1=temp;
		for(i=0;i<7;i++)   //加入 for循环,表明for循环大括号中的程序循环执行7次
		{
			Delay(50000);   //调用延时程序;更改延时数字可
							//以更改延时长度;用于改变闪烁频率
			temp<<=1;
			temp=temp|0x01;    //也可以直接把temp换成P1
			P1=temp;  	//之所以加入temp做中间变量,转换
						//完成后直接赋值到端口,防止直接
						//操作端口造成的短暂闪烁
		}
 
		temp=0x3f;
		P1=temp;
		for(i=0;i<7;i++)   //加入 for循环,表明for循环大括号中的程序循环执行7次
		{
			Delay(50000);  	//调用延时程序;更改延时数字可以
							//更改延时长度;用于改变闪烁频率
			temp>>=1;
			temp|=0x80;        //等效于 temp=temp|0x80
			P1=temp;
		}

		for(i=0;i<3;i++)   //加入 for循环,表明for循环大括号中的程序循环执行3次
		{
			P1=0xff;
			Delay(50000);
			P1=0x00;
			Delay(50000);
		}
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

14、花样点灯

程序实例14:

#include<reg52.h>     //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

/*------------------------------------------------
                  花样表格
------------------------------------------------*/
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,
						  0xf7,0xfb,0xfd,0xfe,
						  0xff,0xff,0x00,0x00,
						  0x55,0x55,0xaa,0xaa
						  };//rom允许情况可以无限添加

void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
	unsigned char i; //定义一个无符号字符型,局部变量 i 取值范围 0~255

	while(1)
    {
		P1=0xFE;                   //第1个LED亮
		for(i=0;i<8;i++)
	    {
			Delay(20000);
			P1 <<=1;
		}

		P1=0x7F;                   //第8个LED亮
		for(i=0;i<8;i++)
	    {
			Delay(20000);
			P1 >>=1;
		}

		P1=0xFE;                  //第1个LED亮
		for(i=0;i<8;i++)
	    {
			Delay(20000);
			P1 <<=1;
			P1 |=0x01;
		}

		P1=0x7F;                  //第8个LED亮
		for(i=0;i<8;i++)
	    {
			Delay(20000);
			P1 >>=1;
			P1 |=0x80;
		}
      //下面通过查表方法获得花样参数
		for(i=0;i<16;i++)//查表可以简单的显示各种花样 实用性更强
	    {
			Delay(20000);
			P1=seg[i];
		}
    }
}

/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

15、通过PWM调节LED的亮度

程序实例15:文章来源地址https://www.toymoban.com/news/detail-705647.html

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit LED0=P1^0;// 用sbit 关键字 定义 LED到P1.0端口,LED是自己任意定义且容易记忆的符号


void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                 
	unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值
	while (1)         //主循环
	{
		LED0=1;
		Delay(60000);        //特意加延时,可以看到熄灭的过程
		for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
		{ //PWM_LOW表示低电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次
			LED0=0;        //点亮LED  
			Delay(PWM_LOW);//延时长度,600次循环中从1加至599
			LED0=1;        //熄灭LED
			Delay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1  
		}
		LED0=0;
		for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
		{ //与逐渐变亮相反的过程
			LED0=0;
			Delay(PWM_LOW);
			LED0=1;
			Delay(CYCLE-PWM_LOW);
		}
	}
}
/*------------------------------------------------
 延时函数,含有输入参数 unsigned int t,无返回值
 unsigned int 是定义无符号整形变量,其值的范围是
 0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
	while(--t);
}

到了这里,关于单片机C语言实例:1、点亮LED的多种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 51单片机(二)成功点亮LED

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2023年04月25日
    浏览(47)
  • 单片机-控制按键点亮LED灯

    定义四个按键引脚  1、按键按下 为 输入为低电平 2、按键不按下 IO有上拉电阻,为高电平 // 定义 按键的 管教 sbit KEY1 = P3^1; sbit KEY2 = P3^0; sbit KEY3 = P3^2; sbit KEY4 = P3^3; LED 输出高电平为亮 // 定义LED灯 管教 sbit LED1 = P2^0; sbit LED2 = P2^1; sbit LED3 = P2^2; sbit LED4 = P2^3; 1、定义按键管教

    2024年02月10日
    浏览(44)
  • 如何使用单片机点亮LED灯,并使用按键控制[51单片机]

    首先先看一下我的板子,如果我们板子不相同,可能操作也不太相同 我们就不讲底层原理了,直接看,我们可以看到板子上有 8个LED灯   那这个8个LED用什么来控制呢,我们先看底层的线路图,所有的LEDD都连接到了P2带后缀的接口上, 那么只需要操作这几个接口的高低电频,

    2024年02月05日
    浏览(46)
  • 【51单片机】点亮第一个LED灯

    橙色 GPIO 概念 GPIO(general purpose intput output) 是通用输入输出端口的简称, 可以通过软件来控制其输入和输出。 51 单片机芯片的 GPIO 引脚与外部设备连接起来, 从而实现与外部通讯、 控制以及数据采集的功能。 不过 GPIO 最简单的应用还属点亮 LED 灯了, 只需通过软件控制

    2024年01月25日
    浏览(45)
  • 【51单片机】点亮LED灯(四种形式)

    💖作者简介:大家好,我是泽奀。全栈领域新星创作者🥇  📝个人主页:weixin_52632755的博客_泽奀_CSDN博客 🎉点赞➕评论➕收藏 == 养成习惯 😋 💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚  https://blog.csdn.net/weixin_52632755/category_11316267.html 介绍两个比

    2023年04月13日
    浏览(41)
  • 51单片机入门(2)LED点亮的背后

    上一节提到了51单片机开发环境的搭建,这节我们开始正式进入51单片机的学习——点亮LED。 所有的控制类芯片学习的第一个实践就是点亮LED,这是最简单、最基本的操作,但这个实现过程却可能攘括了单片机的整个工作流程,所以要想学好单片机,点灯实验是一定要掌握的

    2023年04月08日
    浏览(37)
  • 各款单片机点亮内置LED的入“坑“指南

    单片机(Microcontroller Unit, MCU)是一种集成了处理器核心、内存、输入/输出端口等多种功能于一体的微型计算机。几乎所有的单片机开发板都配备了至少一个内置的LED,通常用于简单的输出测试。本文将向您介绍几种流行的单片机如何点亮它们的内置LED。 Arduino是最受欢迎的单

    2024年02月22日
    浏览(34)
  • STM32/51单片机编程入门(点亮LED)

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

    2024年02月02日
    浏览(60)
  • 51单片机——LED 点阵点亮一个点,小白详解

    LED点阵介绍:        LED点阵是由发光二极管排列组成的显示器件,在我们生活中的电器中随处可见,被广泛用于汽车报站器,广告屏等。         通常用用较多的是8*8点阵,然后使用多个8*8点阵组成不同分辨率的LED点阵显示屏,比如16*16点阵可以使用4个8*8点阵构成。因

    2024年02月09日
    浏览(45)
  • 学习笔记|LED点亮原理|STC32G单片机视频开发教程(冲哥)|第四集-下:点亮LED

    新建工程时待选择的Device:如 STC32G12K128 Seies,需要先在下拉菜单中选择“STC MCU Database”,然后可以选择STC32G12K128 Seies了。 当前以上节课的代码为基础,经过精简后的代码(裸板未添加任何头文件): 需手工下载至开发板(屠龙刀三.1版)。 当前已实现功能:点亮P2^1端口的板

    2024年02月13日
    浏览(55)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包