要用51单片机实现流水灯操作我想是每个初学者学习单片机,了解嵌入式的第一个动手的小实验吧,今天在重新学习的时候遇到了一点小问题,在这里和大家分享一下。

要想控制流水灯操作其实是用单片机给每个二极管高低电平来控制灯的亮与不亮。

我用的51单片机学习板的二极管的硬件原理图如下图所示

板子上电之后,J2是跳线帽,一般是连接上的,再过来是LED1~LED8共8个发光二极管,然后经过电阻连接到51单片机的8个P1端口上。

电阻的作用是为了限流,是为了达到二极管规定的电压与电流,避免烧坏二极管。

51单片机上电引脚默认是高电平,所以我们通过给P1各个引脚低电平(即逻辑0),电路即导通则指定的二极管变亮(因为二极管的单向导电性,阳极电压高于阴极电压则二极管导通,则灯亮)。

刚开始我写的程序如下

因为编译器会一直执行主函数里的程序,所以单片机的第一个灯则一直亮

sbit 是位操作,P1^0即对P1的第0位进行操作,所以要想控制哪个灯亮则对哪个位进行置0操作即可。

接下来我又进行了一个操作,我想使8个灯依次点亮,我用了左移运算符 <<,因为单片机的初始引脚都是高电平,所以P1端口8个位的初始值是0xff(即8个位是 1111 1111)依次点亮即每次左移一位即可。所以我进行了如下操作。

我的理解是8个灯依次亮直到全亮,结果实验现象为只有第一个灯亮,当时我就很郁闷,与我设想的实验现象不一致,然后我又回头从新按照网上的一些资料从新编程,结果如下

这次的实验现象为依次点亮直到全亮(由于懒得放视频,就口头描述现象)

这时我就比较纳闷了因为新的程序只比我的多了一个while(1)死循环,但是我当时的理解是程序是一直会执行主函数里的程序,所以我就又做了一个实验来验证我的想法结果如下

假如灯只亮灭一次,那么主函数只执行一次,结果一直在那亮灭,就说明我理解的没有错误,主函数一直在重复执行

这时我就纳闷了,我预想的第一个实验加while 与不加while的实验现象应该都是一样的啊,执行一次主函数P1左移一位,灯依次点亮直到全亮,也是一个无限循环与wile(1)的操作应该是一样的啊,这时我就去请教了一下我的大哥,哈哈哈,终于在一顿激烈的讨论下,得出了一个结论,我的理解如下,加了while(1)的主函数在进行第一次的时候,在执行第一次的主函数时进行了无限循环,即一直是在执行第一次的主函数,P1的值一直是一个局部变量,一直在接着上次的值在改变,而没有加while(1)的则进行了无限次循环,每次循环则重新调用库函数里的P1值每次都是0xFF,左移一位每次都是0xFE,那么每次循环则是第一个灯亮这样就能解释为什么两个实验现象不一致(比较绕,要对c语言变量的作用域与生存空间有一定理解,c语言有一定基础)

所以我就行进行了如下实验来验证这个猜想

如果猜想正确,那么实验现象就应该是第一个灯亮然后8个全亮,接着又是第一个灯亮,怀着激动地心情我烧录了程序之后,果然和我想的一样!!!

最后实现简单流水灯的终极操作如下

所以我们在以后的编程里要注意这个坑!!!

变量的作用域和作用的作用范围,要不然会出现很多难以理解的现象。

89c51单片机流水灯操作相关推荐

  1. 51单片机流水灯制作

    文章目录 51单片机流水灯制作 初试与复试 初试 复试 制作 分工 制作之硬件 制作之软件 总结 51单片机流水灯制作 我不得不承认自己的毅力实在是太差了,原先准备一星期写一篇博客的目标一致没有实现, ...

  2. 51单片机流水灯现象1

    **` 51单片机流水灯程序 `** 初学者小白,分享上课时写的小程序和普中科技程序,感兴趣的可以瞧瞧. 程序如有相同冒犯了. /*********************************** ...

  3. 单片机流水灯三种实现

    单片机流水灯的三种实现方式(由上至下,再重下到上) 原理图 一般使用单片机的P1口 输出,不需要加上拉电阻: 由原理图可以看出这里采用低电平输出. 一.采用数组方式进行字节定义,最好理解的方式 #in ...

  4. c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解

    用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...

  5. AT89C51单片机流水灯c语言程序及详解(扫盲教程)

    AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...

  6. 89c52流水灯汇编语言,89c52单片机流水灯汇编程序

    8路流水灯汇编语言程序的写法 汇编语言程序如下: ;假设1:D1~D8八个彩灯接在P1口,输出低电平发光 ;假设2:系统晶振为12MHz ;假设3:N = 5 ;程序如下: ORG 0000H MOV ...

  7. 基于STM32单片机流水灯仿真与程序设计

    STM32单片机流水灯仿真与程序设计 摘要 本次程序设计和仿真是基于Proteus和keil的环境对STM32F103系列单片机进行流水灯设计,通过配置STM32的GPIO工作模式,实现LED的点亮和 ...

  8. 单片机流水灯串口控制流水灯

    单片机流水灯串口控制的功能要求[从PC通过串口发送字符('R','L,'S),分别控制流水灯向右流动.向左流动.停止]: ​ (1)编写完整的C语言程序实现功能要求,采用循环轮询结构: ​ 答:循环轮 ...

  9. 80c51流水灯程序汇编语言,单片机流水灯汇编语言源代码大全(六款流水灯汇编语言源代码)...

    描述 单片机流水灯汇编语言源代码大全(一) 单片机AT89C51的P1口接8个发光二极管,让这8个发光二极管能够双灯左移之后再双灯右移,形成霹雳灯的效果,如此循环5次后全灭,延时0.5S.灯右移,形成 ...

  10. 51单片机-------流水灯(实验报告)

    实验二:LED流水灯 一.实验目的 掌握51单片机开发板的使用步骤: 掌握51单片机开发板所需软件的安装过程: 以LED流水灯实验为例子,掌握软件KEIL4的使用方法. 二.实验设备 实验仪器设备: ...

最新文章

  1. 表单的几个基本常用功能
  2. list 用法总结2
  3. flask上下文管理机制
  4. html输入完账号密码才能跳转,HTML输入字段跳转
  5. 【Python CheckiO 题解】Absolute Sorting
  6. Python数据预处理之异常值的处理——【自定义的three_sigma()函数、boxplot()方法】
  7. ElasticSearch之高亮显示
  8. 腾讯云Ubuntu20.04配置Jupyter notebook
  9. 终于搞定了cxgrid的多行表头(转终于搞定了cxgrid的多行表头 )
  10. idea全局主题_2020年最新-IDEA最详细配置(配图文收藏版配置)
  11. C# 使用VS建立数据库并使用
  12. fm核武破解 java出错_java.lang.UnsupportedClassVersionError 错误的原因
  13. 带通 带阻滤波器 幅频响应_方程推导:二阶有源带通滤波器设计!(内附教程+原理图+视频+代码下载)...
  14. cvc 降噪_CVC降噪和DSP降噪有什么区别?
  15. App项目开发流程图解
  16. 住宅IP和机房IP有什么区别,爬虫用哪种好?
  17. Python 面向对象 老虎和羊问题详解
  18. 关于python的ppt_用Python玩转PPT
  19. 良心推荐:最适合玩吃鸡手游的安卓机型有哪些?刺激战场为例
  20. html超酷图片墙特效代码,超酷超绚精美图片展示效果代码(一)

热门文章

  1. matlab pi调节器,pi调节器的输入和输出_pi调节器的传递函数
  2. SPSS学习(四)单样本t检验
  3. 2021年T电梯修理免费试题及T电梯修理考试试卷
  4. 随机森林简单回归预测
  5. 选址(重心法、微分法迭代)
  6. 企业数据架构和集成架构规划方案(PPT)
  7. 詹森不等式到底是什么?
  8. 常用的一些vba代码
  9. 第十一届蓝桥杯物联网设计与开发实验(合集)STM32学习
  10. 基于C语言实现比赛评分系统