89c51单片机流水灯操作

发布者:纸扇轻摇最新更新时间:2019-02-18 来源: eefocus关键字:89c51  单片机  流水灯操作 手机看文章 扫描二维码
随时随地手机看文章

要用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  单片机  流水灯操作 引用地址:89c51单片机流水灯操作

上一篇:51单片机 定时器及其应用
下一篇:89c51 CPU时序

推荐阅读最新更新时间:2024-03-16 16:24

飞思卡尔推出全新基于ARM Cortex-M4内核的KS22 MCU
飞思卡尔半导体(NYSE: FSL)日前宣布推出全新KS22系列MCU。KS22系列基于ARM Cortex-M4内核,是飞思卡尔为了满足中国市场需求全新打造的一款通用MCU。KS22系列在继承了飞思卡尔32位MCU高度集成和丰富产品特性的同时,优化了功能配置和生产流程,提高了性价比和市场竞争力,可广泛用于车载信息娱乐系统、工业及消费类等应用领域。 飞思卡尔微控制器事业部中国区产品及研发总监周荣政博士表示: 中国MCU市场瞬息万变,竞争日趋激烈,设计人员面临着应用广泛、需求多样、客户分散、成本控制等多种挑战。飞思卡尔在中国市场深耕多年,投资巨大。为了更好地服务于中国市场,我们通过对本土市场的潜心研究,整合市场和设计资源,精
[单片机]
基于AVR单片机的高精度频率调节器
摘要: 精确的频率控制是现代化工业生产与高精度测试的必备手段。基于AD9850可以发生优于1Hz频率精确度的信号,这对于频率测试来说至关重要。本文介绍的这种频率调节器由Atmel公司的AVR单片机Atmega16L作为控制核心,采用4%26;#215;4键盘作为频率值输入设备。AVR单片机扫描键盘并且读入用户设定的频率值。随后,AVR单片机计算出AD9850的控制字,并且对AD9850发出指令。本文介绍的频率控制器可以通过“+1Hz”键和“–1Hz”键微调频率值。本文对频率控制器扩展了液晶显示模块,因此当前频率值可以被实时显示。它可以生成方波和正弦波。设计中使用了看门狗定时器防止程序进入死循环而不能正常工作。 关键词: AVR
[单片机]
车规级汽车MCU详解
01 控制类芯片介绍 控制类芯片主要就是指MCU(Microcontroller Unit),即微控制器,又叫单片机,是把CPU的主频与规格做适当缩减,并将存储器、定时器、A/D转换、时钟、I/O端口及串行通讯等多种功能模块和接口集成在单个芯片上,实现终端控制的功能,具有性能高、功耗低、可编程、灵活度高等优点。 汽车是MCU的一个非常重要的应用领域,据IC Insights数据,2019年全球MCU应用于汽车电子的占比约为33%。高端车型中每辆车用到的MCU数量接近100个,从行车电脑、液晶仪表,到发动机、底盘,汽车中大大小小的组件都需要MCU进行把控。早期,汽车中应用的主要是8
[汽车电子]
车规级汽车<font color='red'>MCU</font>详解
基于ATmega16单片机的新型智能空调遥控器
简介:为了解决空调遥控器不兼容问题,设计了一款基于Atmega16 单片机的智能空调遥控器。该遥控器采用测量脉冲宽度的方法学习红外信号,同时使用游程编码算法对数据进行压缩后存储,并利用单片机内部定时器PWM 模式产生红外载波,成功实现了对红外遥控的学习与再现,并可通过上位机进行控制。经运行测试表明,该智能遥控器操作灵活,性能稳定,为智能遥控器设计提供了一种新方案。 摘 要:为了解决空调遥控器不兼容问题,设计了一款基于Atmega16单片机的智能空调遥控器。该遥控器采用测量脉冲宽度的方法学习红外信号,同时使用游程编码算法对数据进行压缩后存储,并利用单片机内部定时器PWM 模式产生红外载波,成功实现了对红外遥控的学习与再现,并可通
[单片机]
基于ATmega16<font color='red'>单片机</font>的新型智能空调遥控器
【核芯观察】汽车MCU产业链分析(中)
前言:【核芯观察】是 电子 发烧友编辑部出品的深度系列专栏,目的是用最直观的方式令读者尽快理解电子产业架构,理清上、中、下游的各个环节,同时迅速了解各大细分环节中的行业现状。本期【核芯观察】,将对近年较为火热的汽车 MCU 产业进行梳理分析,主要对汽车MCU的类型、上游产能、市场规模、主要企业等方面进行整理,以及分析国内外主要厂商的产品线差异。本期我们主要梳理汽车MCU产业链上下游厂商,并对中游部分的 芯片 设计、晶圆代工、 封装测试 等进行深度解析。 汽车MCU产业链上下游厂商梳理 在汽车MCU的产业链中,芯片设计公司也就是MCU原厂处于中游位置,全球主要的汽车MCU厂商几乎都具备IDM能力,不过出于成本考虑,在进行产能
[汽车电子]
【核芯观察】汽车<font color='red'>MCU</font>产业链分析(中)
STM32Note初识单片机(2)
本期主要介绍单片机核心--CPU的架构、组成及运作方式。 架构之争 目前微型计算机系统的架构主要有X86、MIPS、ARM、PowerPC、SPARC这几种,但市场上最常见的还是X86和ARM架构的,我们接下来以这两种为例了解下微型计算机体系结构,至于剩下几种如果读者有兴趣就只能自行百度了(任天堂、索尼PS、摩托罗拉了解一下)。 在了解X86和ARM架构之前,我们先介绍下复杂指令集CISC(Complex InstucTIon Set Computer)和精简指令集RISC(Reduced InstrucTIon Set Computer)。上期我们说过CPU运行是通过取指令完成的,根据CPU可执行指令我们分成CISC和R
[单片机]
STM32Note初识<font color='red'>单片机</font>(2)
MCS-51单片机定时器和计数器的4种工作方式解析
MCS-51单片机含有2个定时器/计数器,具有4种工作方式。具有两种工作模式(计数器模式和定时器模式) MCS-51单片机含有1个全双工串行口,具有4种工作方式。 TMOD-》定时器/计数器方式控制寄存器 TCON-》定时器/计数器控制寄存器 SMOD-》串行口波特率系数选择位 SCON-》串行口控制寄存器 SBUF -》串行口数据缓冲器 TH0 -》定时器/计数器0(高字节) TL0 -》定时器/计数器0(低字节) TH1 -》定时器/计数器1(高字节) TL1 -》定时器/计数器1(低字节) MCS-51单片机定时器和计数器的4种工作方式解析 一、定时器/计数器 定时器/计数器T0由特殊功能寄存器TH0、TL0
[单片机]
MCS-51<font color='red'>单片机</font>定时器和计数器的4种工作方式解析
51单片机P0口的特性及使用方法解析
一、P0口特性: P0口为三态双向I/O口。对于内部有程序存贮器的单片机基本系统(如定制的8051),P0口可以作为输入/输出口使用,直接连外部的输入/输出设备;也可以作为系统扩展的地址/数据总线口。对于内部没有程序存贮器的单片机(如8031),P0口只能作为地址/数据总线口使用。 1、P0口的输出驱动器中也有一个多路电子开关。输出驱动器转接至口锁动器的Q端时,P0口作为双向I/O口使用。 这时,CPU发来的控制信号为低电平,使输出驱动电路的上拉场效应管T1截止。P0口的锁存器为“1”时,输出驱动器中的两个场效应管均截止,引脚浮空;由于P0口输出电路是漏极开路的电路,必须外接10kΩ拉高电阻才能有高电平输出。而写入“0”时,下
[单片机]
51<font color='red'>单片机</font>P0口的特性及使用方法解析
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved