LED闪烁

循环语句

循环语句
(1)while(条件表达式){语句}
只有当 while 后面圆括号内条件表达式的值为真时,程序才会重复执行花括号内语句,当条件表达式为假时则不执行花括号内语句。

(2)for([初值设定表达式];[循环条件表达式];[更新表达式])
{语句}

例:for(i = 1; i <= 100; i++)  {语句}

花括号内语句会被执行100次后才退出。

变量的定义

变量
变量是在程序执行过程中其值能不断变化的量。在使用一个变量之前必须进行定义,用一个标识符作为变量名,并指出它的数据类型。
注意:C语言中每条语句必须用分号结束。
常用定义格式如下:
数据类型 变量名;
例如:

unsigned char a;  // 作用范围(0~255, 无符号字符型)
unsigned char b;
a = 5; b = 2;
b = 5 + a; (其中5是常量,a 与 b 都是变量,b最终的值等于10)

变量作用域
全局变量:在函数体外定义的变量通常为全局变量,作用范围: 从定义开始的整个程序
局部变量:在函数体内定义的变量通常为局部变量,作用范围:函数体内

软件延时

当单片机在处理某些事件的时候用户希望它处理完后间隔一段时间再去处理下一个事件,这时就需要用到延时。

常用的延时方法:

  • 软件延时:优点使用简单;缺点浪费CPU资源
  • 定时器延时:需要操作内部寄存器,节省CPU资源

IO口与一个字节位的数据对应关系

如果把一个字节的数据赋值给一组10口,其中数据的最低位对应此组10口的最低位,数据的最高位对应此组10口最高位。

例如
把十六进制数0xfe赋值给P1口他们的对应关系如下图所示

总结:
每个LED灯对应着 2进制位置 1111 1111
每次写入程序需要通过十六进制数对变量进行赋值

例如:
点亮 LED2 LED3 LED5 的LED灯
需要 P1 = 0xe9;
对 0xe9 解析
在程序员计算器中

十进制为 233
二进制为 1110 1001

当转为二进制后,单片机加载该程序,会根据二进制组对相应的LED灯进行点亮,1110 1001 从高到低排列,

  • 1110 第一个 1 代表P1^7 1为高电平 所以不亮

  • 1110 第二个 1 代表P1^6 1为高电平 所以不亮

  • 1110 第三个 1 代表P1^5 1为高电平 所以不亮

  • 1110 第四个 0 代表P1^4 0为低电平 所以灯亮

  • 1001 第一个 1 代表P1^3 1为高电平 所以不亮

  • 1001 第二个 0 代表P1^2 0为低电平 所以灯亮

  • 1001 第三个 0 代表P1^1 0为低电平 所以灯亮

  • 1001 第四个 1 代表P1^0 1为高电平 所以不亮

点亮 LED6 灯
需要打开程序员计算器 对 二进制位置 1101 1111 进行换算
对应的16进制为 DF
所以 P1 = 0xdf;
即可只点亮 LED6 灯

程序部分

1.使 LED6 灯闪烁

#include <reg52.h>unsigned int i; // 0~65535   全局变量void main(){ // main 函数自身会循环while(1){ // 一般在执行程序的时候需要 写出一个while的循环体来执行代码
//      P1 = 0; // 点亮P1口8个LED
//      P1 = 0xe9; // 点亮  LED2 LED3 LED5灯P1 = 0xdf; // 点亮 LED6 灯i = 65535;while(i--);     // 自定义的软件延时P1 = 0xff; // 1111 1111 熄灭P1口 8个LED      不能直接使用 P1 = 1; 来熄灭8个LED灯i= 65535;while(i--);}}//    while(1){
//      P1 = 0;
//      P1 = 0xff; // 1111 1111 熄灭P1口 8个LED      不能直接使用 P1 = 1; 来熄灭8个LED灯
//  }
// 当去掉软件延时器的时候,软件在执行的过程中会不断的循环,LED会反复的开启和关闭,所以通过人眼是无法辨别出来的
// 但是与常开启的LED相比亮度会相对较暗

2.使 LED1 灯闪烁

#include <reg52.h>/*====================================
函数  : delay(uint z)
参数  :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述  :12T/Fosc11.0592M毫秒级延时
====================================*/void delay(unsigned int z){ // 毫秒级延时函数定义unsigned int x, y;for (x = z; x > 0; x--){for (y = 114; y > 0; y--){}}
}void main(){ // main函数自身会循环delay(100);while(1){P1 = 0XFE; // 点亮 LED1 灯delay(100);  // 延时 100毫秒  通过增加延时的时间或减少延时的时间,来控制灯的闪烁间隔      P1 = 0xff;  // 关闭所有的LED 灯 delay(100);    // 延时 100毫秒  通过增加延时的时间或减少延时的时间,来控制灯的闪烁间隔   }
}

3.使 LED1、3、5、7 灯亮,使 LED2、4、6、8 灯闪烁;

#include <reg52.h>void delay(unsigned int z){ // 毫秒级延时函数定义unsigned int x, y;for (x = z; x > 0; x--){for (y = 114; y > 0; y--){}}
}void main(){ // main函数自身会循环delay(100);while(1){P1 = 0; // 0000 0000     // 使 LED1、2、3、4、5、6、7、8 灯亮delay(500);  // 延时 500毫秒     通过增加延时的时间或减少延时的时间,来控制流水灯的速度 P1 = 0XAA; // 1010 1010 // 关闭 2、4、6、8 灯delay(500); // 延时 500毫秒  通过增加延时的时间或减少延时的时间,来控制流水灯的速度 }
}

STC89C52单片机 LED灯闪烁相关推荐

  1. 52单片机led灯闪烁c语言程序,单片机LED灯闪烁程序

    原标题:单片机LED灯闪烁程序 点亮 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点 ...

  2. 单片机led灯闪烁实验总结_51单片机实现LED流水灯

    流水灯 用51单片机实现点亮1个2个3个--8个流水灯.我们选择P1口作为控制端口,输出0时LED灯点亮.流水灯实现步骤如下: 点亮第一个LED灯,对P1口赋值为" 1111 1110&qu ...

  3. 51单片机led灯闪烁程序C语言,51单片机控制led灯闪烁程序

    Keil 写程序的过程,建立工程-->保存工程-->建立文件-->添加文件到工程-->编写程序-->编译-->下载程序. #include sbit LED = P ...

  4. 单片机c语言led灯闪烁程序,单片机LED灯闪烁程序

    点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁 ...

  5. 52单片机led灯闪烁c语言程序,单片机 LED 灯闪烁程序

    点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁 ...

  6. 单片机led灯闪烁实验总结_单片机很好玩3,花三分钟,使用普通LED小灯,制作手机“呼吸灯”...

    上一节为了解决单片机 IO 电流驱动能力不足,导致 LED 小灯亮度不高的问题,借助了三极管.单片机的 IO 通过三极管开关 LED 小灯的电流,最后的确明显让小灯的亮度更高了. 使用电路模拟软件 还 ...

  7. 单片机led灯闪烁实验总结_新款LED型便携式实验室高强度紫外线灯对比说明

    实验室高强度紫外线灯有传统100W的高压汞灯和新款LED便携紫外灯,主要都用在科研院所.高校生命科学的转基因荧光蛋白筛选和分子材料的光催化反应的应用.另外还有UV固化,食品污染检测,齿科动物污染检查, ...

  8. 51单片机c语言led灯闪烁实验报告,实验一LED灯闪烁.doc

    实验一LED灯闪烁.doc 单片机小系统设计与制作实验报告姓名 李文浩 学号 1423102 班级 14级电仪维 指导教师 陈雪莲 实验一 八个LED灯闪烁一.实验要求仿照图1-1在Proteus中绘 ...

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

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

最新文章

  1. mysql单列索引和多列索引_mysql索引类型 normal, unique, full text
  2. 调侃 -- 刚入职时的单纯
  3. 1057. Stack (30)
  4. PowerCLI脚本,利用哈希表对参数进行转换
  5. Jasperreport之与Springboot整合
  6. 详解CoordinatorLayout
  7. Android服务部分总结
  8. python连接linux服务器读取txt文件_python 读取Linux服务器上的文件方法
  9. 使用acs-engine在Azure中国区部署kubernetes集群详解
  10. C#基础(201)--常量枚举
  11. HoloLens 2开发:使用Gaze开发,视线小球不停向眼端移动
  12. vsftpd配置详解
  13. 用origin画重叠柱状图 - 三维变化
  14. 2021-09-27 网安实验-文件恢复-DiskGenius恢复已删除文件
  15. 评估 OKRs 的最佳频率是什么?
  16. A001 - 基础 - 交换机原理简述
  17. hexo博客中添加categories分类
  18. 说一下自动化测试的优缺点
  19. 中国数学家黄金一代-北大数学专业2000级
  20. 数字货币stochRSI指标python计算实现

热门文章

  1. 临时起异,要进入C++领域耍一个程序
  2. 第93课:SparkStreaming updateStateByKey 基本操作综合案例实战和内幕源码解密
  3. android viewpager嵌套侧滑删除listview冲突问题
  4. 数据中心虚拟化的7大考量要素
  5. 分组合计且排序和显示名称
  6. 给GridView中的buttonField添加一个删除确认功能
  7. java 矩阵计算 加减乘除 反转 分解
  8. 玩转数据结构从入门到进阶四
  9. JUC并发编程五 并发架构--Monitor工作原理
  10. <X86汇编语言:实模式到保护模式>四十四 协同式任务切换