89c51单片机流水灯操作

89c51单片机流水灯操作要用51单片机实现流水灯操作我想是每个初学者学习单片机,了解嵌入式的第一个动手的小实验吧,今天在重新学习的时候遇到了一点小问题,在这里和大家分享一下。要想控制流水灯操作其实是用单片机给每个二极管高低电平来控制灯的亮与不亮。我用的51单片机学习板的二极管的硬件原理图如下图所示板子上电之后,J2是跳线帽,一般是连接上的,再过来是LED1~LED8共8个发光二极管,然后经过电阻连接到51…

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

89c51单片机流水灯操作

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

89c51单片机流水灯操作

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

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

刚开始我写的程序如下

89c51单片机流水灯操作

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

89c51单片机流水灯操作

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

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

89c51单片机流水灯操作

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

89c51单片机流水灯操作

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

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

89c51单片机流水灯操作

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

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

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

89c51单片机流水灯操作

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

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

89c51单片机流水灯操作

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134369.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP情人:p十几天来学习hp第一天

    PHP情人:p十几天来学习hp第一天

    2022年1月3日
    48
  • ExaGrid获得+73的净推荐值

    ExaGrid获得+73的净推荐值根据NPS标准,此分数值被归为“优秀”马萨诸塞州韦斯特伯鲁–(美国商业资讯)–备份用超融合二级存储器领先供应商ExaGrid®今日宣布,在近日开展的净推荐值(NPS)调查中,该公司的NPS为+73。NPS客户忠诚度指标用于测评现有客户向同行推荐供应商产品或服务的可能性。得到的NPS分数可能低至-100或高达+100。ExaGrid的大多数竞争对手的NPS介于+10和+20之间,而Exa…

    2022年6月6日
    31
  • mysql(八)日志介绍

    mysql(八)日志介绍

    2021年9月13日
    60
  • 熟悉w3c标准_w3c规则

    熟悉w3c标准_w3c规则简介    万维网联盟(外语缩写:W3C)标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3CDOM)、ECMAScript等。这些标准大部分由万维网联盟(外…

    2025年12月14日
    4
  • C语言中的选择排序

    C语言中的选择排序文章目录前言一、选择排序1.计算素组元素个数2.选择排序基本逻辑(例子是从大到小排列)3.具体实现1.外层循环:决定大回合个数每个大回合决出一个席位2.内层循环:决定小回合个数每个小回合进行1V1大战实力强的为擂主直至最后一位挑战者3.两个元素值的交换总结前言在C语言中用来解决排序问题的常见方法有选择排序和冒泡排序两种一、选择排序先上代码:1.计算素组元素个数通过sizeof()计算数组全体元素占空间的大小再去除以一个元素占空间的大小即可得到元素个数。2.选择排序基本

    2022年6月25日
    22
  • 第一章,安装spark集群,测试和运行wordcount 案例

    第一章,安装spark集群,测试和运行wordcount 案例第一章,安装spark集群,测试和运行wordcount 案例

    2022年4月23日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号