目录

前言

一、点亮一个LED

二、LED闪烁

三、LED流水灯

四、独立按键控制LED

独立按键控制LED亮灭

独立按键控制LED状态

独立按键控制LED以二进制形式显示

独立按键控制LED状态循环移位

总结



前言

嵌入式学习的入门就是点亮LED灯,就好比学习编程语言敲 “Hello world” 一样


一、点亮一个LED

8051系列单片机上电默认都是高电平,而开发板上的LED都是共阳极的,所以只有输出低电平才会产生电势差,LED才会被点亮。那么为什么要用共阳极呢?这是因为51单片机IO默认是准双向口模式,它的驱动能力很弱,弱到不足以点亮LED灯,只能用来输出高低电平信号,所以共阳极只需要将端口电位拉低就可以了。

#include <REGX52.H>
sbit LED = P2^0;        //将P2_0引脚定义为LED
void main()
{LED=0;while(1){}
}

IO口的配置可以采用字节寻址和位寻址两种方法,也就是说上述代码还可以这样写:

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

将程序烧录进单片机,这样一颗LED就被点亮了!

二、LED闪烁

将LED循环往复的置高置低并在期间加入一定的延时,就形成了闪烁的效果:

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

三、LED流水灯

流水灯只需要循环点亮每一个LED并加入延时即可

#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;//1111 1110      // 8位依次置为0Delay500ms();P2=0xFD;//1111 1101Delay500ms();P2=0xFB;//1111 1011Delay500ms();P2=0xF7;//1111 0111Delay500ms();P2=0xEF;//1110 1111Delay500ms();P2=0xDF;//1101 1111Delay500ms();P2=0xBF;//1011 1111Delay500ms();P2=0x7F;//0111 1111Delay500ms();}
}

或者可以用个循环左移函数 _nrol_() 可以简洁得多,需要引入头文件#include <INTRINS.H>

#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()
{unsigned char tem = 0xfe;       //设置初值1111 1110 while(1){P2 = tem;                   //LED的IO口位tem = _crol_(tem,1);        //_crol_:循环左移函数 1111 1101 函数的参数tem是要移位的十六进制数,1是每次移的位数Delay500ms();}
}

四、独立按键控制LED

独立按键需要再使用一个IO口做检测,当然开发板上是已经连接好了的,K1 ~ K4分别接在P3_0 ~ P3_3引脚(很多普中的板子K1和K2是接反的,也就是P3_0是K2,也就是P3_1是K1),当按键按下时,IO口与GND短路电位被拉低,单片机即可接收到按键按下的信号。

这里需要注意一下,当按键按下时,按键内部的弹簧片会在接触的临界点产生抖动,这会使得信号不稳定,需要加入一段极短的延时做软件消抖。

独立按键控制LED亮灭

判断按键是否被按下,如果按下就点亮LED

#include <REGX52.H>void main()
{while(1){if(P3_1==0 || P3_0==0)    //如果K1按键或K2按键按下{P2_0=0;             //LED1输出0,点亮}else                    //松手{P2_0=1;                //LED1输出1,熄灭}}
}

独立按键控制LED状态

当按键按下时,给LED取反

#include <REGX52.H>void Delay(unsigned int xms)    //定义一个有形式参数的延时函数,可改变延时的时间
{unsigned char i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void main()
{while(1){if(P3_1==0)               //如果K1按键按下{Delay(20);           //延时消抖while(P3_1==0);       //松手检测Delay(20);            //延时消抖P2_0=~P2_0;           //LED1取反}}
}

独立按键控制LED以二进制形式显示

当按键按下时LED会以二进制的规律依次被点亮,一个char型是1字节,8位二进制,正好对应8个LED

#include <REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}void main()
{unsigned char LEDNum=0;while(1){if(P3_1==0)            //如果K1按键按下{Delay(20);       //延时消抖while(P3_1==0);   //松手检测Delay(20);        //延时消抖LEDNum++;     //变量自增  0000 0001 ~ 0000 0010 ~ 0000 0011 ...P2=~LEDNum;        //因为是低电平点亮,所以变量取反输出给LED}}
}

独立按键控制LED状态循环移位

创建一个变量“LEDNum”,每次按键按下“LEDNum”自增或自减,"<<"为左移操作符,将0x01左移LEDNum位就是把“1”左移,再取反赋给LED就是点亮第“LEDNum”位

#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;void main()
{P2=~0x01;              //上电默认LED1点亮while(1){if(P3_1==0)            //如果K1按键按下{Delay(20);while(P3_1==0);Delay(20);LEDNum++;     //LEDNum自增if(LEDNum>=8)  //限制LEDNum自增范围LEDNum=0;P2=~(0x01<<LEDNum);    //LED的第LEDNum位点亮}if(P3_0==0)            //如果K2按键按下{Delay(20);while(P3_0==0);Delay(20);if(LEDNum==0) //LEDNum减到0后变为7LEDNum=7;else            //LEDNum未减到0,自减LEDNum--;P2=~(0x01<<LEDNum);    //LED的第LEDNum位点亮}}
}void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}

masterLED

总结

祝各位都能成为点灯大师!


51单片机点亮LED灯相关推荐

  1. 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁

    点亮LED灯,根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下: #include "reg52.h" sbit led1= P3^7; void ...

  2. 51单片机--点亮LED灯和流水灯

    文章目录 前言 LED模块的原理 点亮一个LED灯 LED灯的闪烁 LED流水灯 前言 大家好,这里是诡异森林.我使用的是普中科技的A2的51开发板,适合新手入门.用到的应用是Keil5和Stc-is ...

  3. 51单片机,点亮LED灯和闪烁

    1.关键字sfr与sbit的区别 sfr是定义寄存器的字节地址,sbit是定义可位寻址的位地址 例如:sfr P1 =0x90; sbit A = P1^0 sbit B = P1^1; 2. 单片机 ...

  4. 用51单片机中断控制LED灯亮灭

    用51单片机中断控制LED灯亮灭 #include<reg51.h>//头文件 sbit LED=P2^0;//位定义LED灯 sbit k3=P3^2;//位定义按键 void dela ...

  5. 用51单片机点亮流水灯

    用51单片机点亮流水灯的几种方法 1. 直接按位操作一个一个点亮 #include<reg51.h>//头文件 sbit LED0=P2^0; //位定义单片机接LED灯的端口 sbit ...

  6. 51单片机点亮流水灯

    51单片机点亮流水灯 51单片机点亮流水灯 首先介绍开发板easyboard上的LED灯 P1端口通过74HC573连接到LED灯,查询74HC573芯片手册,内部由8个D锁存器构成,当OE为低电平, ...

  7. 单片机学习笔记————51单片机实现用LED灯和按键来模拟工业自动化设备的运动控制

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  8. STC89C52单片机 点亮LED灯

    点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...

  9. 51单片机入门:LED灯闪烁(原理图+仿真+程序)

    目录 硬件电路设计 仿真电路设计 程序设计 仿真实现 在用51单片机点亮一个LED小灯的基础上,下面尝试将一个LED灯闪烁起来. 硬件电路设计 结合51单片机最小系统的知识,利用AD19画好最小系统电 ...

  10. 51单片机点亮LED和使用定时器中断控制蜂鸣器发声

      初学51单片机第一个实验一般都是以点亮LED灯开始,以下是使用Proteus仿真软件的实验效果.   实验需要仿真仪器:   示波器.LED.电压表.蜂鸣器.AT89C51 实验电路图: 实验代码 ...

最新文章

  1. 【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第1节 ①...
  2. 电路常识性概念(2)-电容
  3. 《大数据》2015年第3期“网络大数据专题”——网络大数据的文本内容分析
  4. 企业网络高级技术-VTP中继协议(2)
  5. Django模板继承后出现logo图片无法加载的问题
  6. Android SDK Manager下载详解
  7. Alibaba船新出品“Java架构核心宝典”,java教程视频百度网盘
  8. 为了在简历上写掌握【Java中IO流】,做了该篇总结
  9. 为什么我的crontab不起作用呢
  10. C++头文件重复定义问题的处理(不会看看,会了防身!)
  11. Android中利用ActivityGroup制作首页框架
  12. mysql instr函数_MySQL 的instr函数
  13. 从模型制作(3dmax)到网页显示(babylonjs)全过程介绍
  14. 快速使用git、svn
  15. PowerBI-关系函数-RELATED RELATEDTABLE
  16. 卢卡斯(Lucas)定理
  17. fabric cita 调研对比
  18. python基础语法25_Python基础语法习题参考(0-9关)
  19. 亚马逊产品该如何定价?这9种定价策略你一定要了解哦!
  20. 希腊字母以及发音 α β γ

热门文章

  1. 【数据库基础笔记】1、MySQL数据库与操作
  2. 全球科技巨头高管云集 深入探讨数字化未来趋势
  3. 报错Pointcut is not well-formed: expecting ‘(‘ at character position 9(已解决)
  4. 机器学习做多维时间序列预测
  5. 学习计算机在化学中的应用的心得,学习计算机的心得体会
  6. Goby漏洞更新 | SolarView Compact downloader.php 任意命令执行漏洞(CVE-2023-23333)
  7. ElasticSearch的使用:docker搭建EIK(一)
  8. 17.从多个文件中连接数据
  9. [附源码]java+ssm计算机毕业设计哈金院食堂美食评价系统vx929(源码+程序+数据库+部署)
  10. 电视剧佳人当道分集介绍五