c51单片机流水灯程序灯

进入中国三十一年以来,德州仪器(TI)在不断推出创新半……
2017德州仪器(TI)中国教育者年会上,TI与来自全国97所……
据外媒报道,上周三在社交媒体上出现了一些针对苹果开发……
你所想到的一块芯片多少钱?如果这款MCU同时具有25种功能……
物联网以基础软硬件、互联网技术联合,开动智能电子产品……
演讲人:杨正龙时间: 10:00:00
演讲人:李思齐时间: 10:00:00
演讲人:杨熙时间: 10:00:00
预算:小于¥10,000预算:小于¥10,000
基于51单片机的各种花样的流水灯c51程序
[导读]/*-----------------------------------------------
功能:流水灯对称移动闪烁(双闪烁)------------------------------------------------*/#include&REG52.H&
#define uint unsigned int
void delay(uint);
/*-----------------------------------------------
功能:流水灯对称移动闪烁(双闪烁)本文引用地址:
------------------------------------------------*/
#include&REG52.H&
#define uint unsigned int
void delay(uint);
&&&&&&& uint comp1=0
&&&&&&& uint comp2=0x80;
&&&&&&& P1=0x7e;
&&&&&&& delay(30000);
&&&&&&& while(1)
&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&& comp1&&=1;
&&&&&&&&&&&&&&& comp1|=0x01;
&&&&&&&&&&&&&&& comp2&&=1;
&&&&&&&&&&&&&&& P1&=comp1;
&&&&&&&&&&&&&&& P1^=comp2;
&&&&&&&&&&&&&&& delay(30000);
&&&&&&&&&&&&&&& if(P1==0xe7)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& comp1&&=1;
&&&&&&&&&&&&&&&&&&&&&&& comp1|=0x01;
&&&&&&&&&&&&&&&&&&&&&&& comp2&&=1;&&&&&&&&&&
&&&&&&&&&&&&&&& }&&&&&&
&&&&&&&&&&&&&&& if(comp1==0x7f)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& comp1=0
&&&&&&&&&&&&&&&&&&&&&&& comp2=0x80;&&&&&&&&&&&&&
&&&&&&&&&&&&&&& }&&&&&
&&&&&&& }&&&&&&&&&&&&&&
void delay(uint cnt)
&&&& while(cnt--);&&&&
/*-----------------------------------------------------------------
只循环一次,而没有一直循环下去,出错地方在:
通过添加一条测试语句:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(comp1==0x7f)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& comp1=0& comp2=0x80;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0x00;& delay(30000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&
发现if语句没有被执行,自然继续左右移动:
所以看起来是执行了一次while中的代码。
具体为什么不行,还不清楚&&&&&
更正下列代码后,能够实现功能。&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(P1==0x7e)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& comp1=0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& comp2=0x80;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
或者:&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(comp2==0x01)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& comp1=0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& comp2=0x80;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
--------------------------------------------------------------*/
*********************************************
/*-----------------------------------------------
功能:流水灯(单向单闪烁)
------------------------------------------------*/
#include&reg52.h&
#define uint unsigned int
void delay(uint);
&&&&&&& //uint fre=0x03;
&&&&&&& //uint comp1=0xfe,comp2=0x80;
&&&&&&& P1=0
&&&&&&& while(1)
&&&&&&& /*------------------------------------------------------------------
&&&&&&&&&&&&&&&&&&& 模块1:循环单向闪烁,只有一个灯亮灭
&&&&&&&&&&& 执行3次,转入下一种闪烁
&&&&&&& --------------------------------------------------------------------*/
&&&&&&&&&&&&&&& while(1)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& delay(30000);
&&&&&&&&&&&&&&&&&&&&&&& P1&&=1;
&&&&&&&&&&&&&&&&&&&&&&& P1|=0x01;
&&&&&&&&&&&&&&&&&&&&&&& if(P1=0x7f)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(30000);&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& }&&&&&&&
void delay(uint cnt){while(cnt--);}
/*-----------------------------------------
程序运行结果左右两端跳动,原因是:
if(P1=0x7f);中的等号也成了赋值号,更正为if(P1==0x7f);
特别注意,不要把判断语句种的等号误写为赋值号。
-----------------------------------------*/
**************************************
/*-----------------------------------------------
功能:花样灯(单向单闪烁+单向双闪烁)
------------------------------------------------*/
#include&reg52.h&
#define uint unsigned int
void delay(uint);
&&&&&&& uint fre=0x04;
&&&&&&& uint comp1=0xfe,comp2=0x80;
&&&&&&& while(1)
&&&&&&&&&&&&&&& /*-------------------------------------------------------------------
&&&&&&&&&&&&&&&&&&&&&&&&&&& 模块1:循环单向闪烁,只有一个灯亮灭
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 执行3次,转入下一种闪烁
&&&&&&&&&&&&&&& --------------------------------------------------------------------*/
&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&& while(1!=fre--)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& delay(30000);
&&&&&&&&&&&&&&&&&&&&&&& P1&&=1;
&&&&&&&&&&&&&&&&&&&&&&& P1|=0x01;
&&&&&&&&&&&&&&&&&&&&&&& if(P1==0x7f)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(30000);&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& /*-------------------------------------------------------------------
&&&&&&&&&&&&&&&&&&&&&&&&& 模块2:循环单向闪烁,只有两个灯亮或者灭
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 执行3次,转入下一种闪烁
&&&&&&&&&&&&&&& --------------------------------------------------------------------*/
&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&& while(3!=fre++)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& delay(30000);
&&&&&&&&&&&&&&&&&&&&&&& P1&&=2;
&&&&&&&&&&&&&&&&&&&&&&& P1|=0x03;
&&&&&&&&&&&&&&&&&&&&&&& if(P1==0x3f)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(30000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }&&&&&&&
&&&&&&& }&&&&&&&
void delay(uint cnt)
& while(cnt--);
/*----------------------------------------------------
两个模块均没有问题,但是放在一起,并没有得到想要的结果,
第一个循环没有进行完全,且两个循环的循环的次数与要求的不符。
错误地方在于:模块1和模块2的循环控制的只是一次亮灭,更正为:
#include&reg52.h&
#define uint unsigned int
void delay(uint);
&&&&&&& uint fre=0x04;
&&&&&&& uint fre1,fre2;
&&&&&&& uint comp1=0xfe,comp2=0x80;
&&&&&&& while(1)
&&&&&&&&&&&&&&& /*--------------------------------------------------------------------
&&&&&&&&&&&&&&&&&&&&&&&&&&& 模块1:循环单向闪烁,只有一个灯亮灭
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 执行3次,转入下一种闪烁
&&&&&&&&&&&&&& --------------------------------------------------------------------------*/
&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&& while(1!=fre--)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& fre1=0x08;
&&&&&&&&&&&&&&&&&&&&&&& while(1!=fre1--)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(3000000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1&&=1;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1|=0x01;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(P1==0x7f)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(3000000);&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& /*-------------------------------------------------------------------
&&&&&&&&&&&&&&&&&&&&&&&&&&& 模块2:循环单向闪烁,只有两个灯亮或者灭
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 执行3次,转入下一种闪烁&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& --------------------------------------------------------------------*/
&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&& while(3!=fre++)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& fre2=0x04;
&&&&&&&&&&&&&&&&&&&&&&& while(1!=fre2--)
&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(3000000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1&&=2;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1|=0x03;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if(P1==0x3f)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& delay(3000000);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& P1=0
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&
&&&&&&&&&&&&&&& }
&&&&&&& }&&&&&&&
void delay(uint cnt)
& while(cnt--);
注意控制语句中fre++和fre--;并且fre1和fre2的初始化不能出错,
由于if()语句的出现,fre1和fre2的取值要比预想的减一。
----------------------------------------------------------*/
这是一个 bash shell 脚本,其中有若干可以整蛊(结仇)你的同事的小技巧――或者说恶作剧。看完之后,感觉不寒而栗,要是谁敢这样整我,我一定和他绝交!......关键字:
FZ-MCU51单片机开发板集实验开发、编程、仿真和下载于一体,支持AT89S51、AT89S52、AT89S53的和STC系列单片机如STC89C53RC等全系列单片机的编程和实验,使用配套的仿真模......关键字: 《The Effective Engineer》的作者在写书的过程中,为了了解那些顶级程序员和普通程序员的区别,采访了很多硅谷顶级科技公司的顶尖软件工程师。他发现这些给世界带来巨大影响的的工程师们至少有以下5个共同的思维模式......关键字:
我本身是 Java 工程师出身,写代码至今已超过 15 年,创业也超过 10 年,曾经外包过很多项目给别人,也接过很多外包的项目,现在不接了,只经营电子报发送平台,在二年内累积超过 5000 家企业用户使用。......关键字:
我 要 评 论
热门关键词51单片机学习之陆 —— 1.3 流水灯的花样玩法 - 51单片机 - 电子工程世界网
51单片机学习之陆 —— 1.3 流水灯的花样玩法
10:53:15来源: eefocus 关键字:&&&&
上一次我们点亮了一个 1,其实仅仅点亮一个流水灯还是有些单调的。这一次让我们试着尝试些别的花样1 多个流水灯的点亮& &a 打开 将原来的c文件关掉左边的也删掉,因为我并不像重新创建工程按照昨天的方法新建一个c文件,并添加到工程中(以后也这样,所以请有自己的命名规则,否则都分不清了,而我这里命名的是LED1.1)&&b 将代码写上。(假如你要点亮1357这几个流水灯)#sbit LED1 = P1^0; sbit LED3 = P1^2;sbit LED5 = P1^4;sbit LED7 = P1^6; main(){LED1 = 0;LED3 = 0;LED5 = 0;LED7 = 0;}以上为代码,&&c&和上一次一样,接上usb,烧写程序(记得冷启动哦)这里说明下,因为是在同一个工程中,所以hex文件的名字还是不变的。这是就可以看到1 3 5 7 流水灯点亮了哦。不太好,不过你应该能在板子上看的十分清晰。2 &流水灯的点亮和熄灭  流水灯一直点亮也有些无聊,来我们让他们动起来吧  我们已经知道,LED1 = 0; 置于 点亮,         LED1 = 1; 置于高电平 熄灭  那如何让一个流水灯点亮一段实践熄灭一段时间呢?  这里可以用一个延时函数做到。在延时函数中,不做任何事情。  新建一个c文件,注意你的命名,最好不要出现中文,形成自己的命名规则  a 写下代码说明下:  # uint unsingned int 是宏定义,c语言中学过  // 是单行注释&  /* &是多行注释 */  for(i=1000; i>0; i--) ;    for(j=110; j>0; j--);  1 为什么用两个for循环?    应为一个for循环延时时间不够,无法让人有察觉所以用了两个for循环嵌套。这样就有明显的人眼察觉了  2 为什么第二个for循环后直接是分号    直接分号,就是不执行任何代码的意思,单纯做延时用。&  b 烧写程序  c & 观察流水灯     仔细观察流水灯,第一个流水灯会点亮一定时间,然后熄灭一定时间,又点亮如此循环下去     应为有一个(1)这样的循环,其中为1,即真会一直执行中的语句。     这也是很重要的一点,很多程序中都有while(1)这样一个循环,     这是各中单片机自身决定的。有的单片机程序内如果没有循环程序,那它会从头执行到最后,然后返回最开始继 续执行。一直重复。而有的单片机再执行一次之后,就会停止。有的则是执行完后可能会进入无序运行状态,就只不知道程序跑哪里去了!&所以,在写单片机程序的时候,最好是加上while循环,即便你的程序只运行一次,也要在最后加上while(1);使其一直指向这个语句而不会出现误操作。     还有,这里是不精确的延时,因为一些原因这里无法做到很精确的延时。&3 &流水灯来回点亮   我们将流水灯点亮了,但如何将这些流水灯依次点亮呢?  a 有些同学会想到这样的方法   其实这样写也是可以的,你会看到流水灯从1 到 4 依次点亮   这里写了 P1 = 0xff &这里是说当4个流水灯全部点亮后 ,将整个P1口8为全置1   即全部熄灭。这样的话,就能看到流水灯依次点亮,全部熄灭,又依次点亮   其实还有另外一种方法。&  b & &头文件intr的函数使用      intrins 是一个是一个包含了很多函数的头文件,这里介绍其中的两个函数      _crol_ 字符循环左移      _cror_ 字符循环右移      以_cror_为例      我们都知道P1口控制流水灯 P1 有八位      默认状态下 P1 = 0xff // &      假如写下以下代码      首先,想要使用_cror_函数,首先需要头文件intrins      语句为 #include      这里定义了一个temp=0x7f //       P1 = temp 所以最开始是第八个流水灯亮            for循环表示重复8此该操作      temp = _cror_(temp,1);      上面语句的意思是P1口循环右移一位            所以第七个流水灯就亮了,其他的为1 熄灭。      这里还有一点,定义了一个延时函数,delay 是一个无返回值的函数      定义方法有两种,与c语言中一致。      然后你就会看到。流水灯先亮第八个,然后依次往上点亮,而其他的确熄灭。      好了,_crol_的用法也是一样的 除了依次点亮,也可以间隔一个点亮      temp = _cror_(temp,2);只要将1改为2即可      
关键字:&&&&
编辑:什么鱼 引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。单片机LED流水灯闪烁灯程序大集合
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
单片机LED流水灯闪烁灯程序大集合
点亮LED灯:方1
位操作方式
sbit D1=P1^0;
让LED灯闪烁
//方1:位操作方式点亮LED
#include&reg52.h&
//P1^0的P必须是大写
void main()
//使用P1^0必须先经过sbit定义,而不能直接用P1^0=0;否则编译过不了
//-----------------------------------------------------------------------------------------------------------
//方2:总线方式点亮LED
#include&reg52.h&
void main()
// LED是共阳的,低电平时点亮,所以就是LED1和2灯被点亮
//-----------------------------------------------------------------------------------------------------------
/* 让LED灯闪烁
采用位点亮+内部循环进行延时
#include &reg52.h&
sbit D1=P1^3;
//随便一个你也可改为P1^0,注意P要大写的才可以
void main()
for (a=0;a&=20000;a++) {};
//for循环 {}空操作即可形成延时效果
for (a=0;a&=20000;a++) {};
//-----------------------------------------------------------------------------------------------------------
//让LED灯闪烁
采用位方式+delay延时函数方式
#include &reg52.h&
sbit D1=P1^0;
//位操作方式
void delay(int x)
for(a=x;a&0;a--)
for(b=110;b&0;b--);
delay(50);
//调用延时
delay(50);
//-----------------------------------------------------------------------------------------------------------
//让3个灯一起闪烁
,采用总线方式
#include&reg52.h&
void delay(int x)
for(a=x;a&0;a--)
for(b=110;b&0;b--);
void main()
//,点亮前3个灯,3个灯一起闪烁
delay(500);
delay(500);
//-----------------------------------------------------------------------------------------------------------
//让LED灯闪烁
采用wlile方式
#include &reg52.h&
sbit P10=P1^0;
void main()
while(a--);
//程序停在这里,一直执行减法,直到a从51000减到0后退出循环,这就形成延时
//前面a已经减成0了,这里再给它个初值
while(a--);
//又从初值51000减到0为止,形成延时效果
//-----------------------------------------------------------------------------------------------------------
//流水灯 ,在PIC单片机里流水灯只要设整个端的0x??值然后采用端口值=端口值&&1左移1位即可形成流水灯
//而在52单片机里却不行,得用_crol关皱字,而这个关键字又是在另一头文件intrins.h里,所以在开头就得先包含它_
#include &reg52.h&
#include &intrins.h&
//因为要用到corol这一关键字
#define uchar unsigned char
sbit P23=P2^3 ;
sbit D1=P1^0;
void delay(int x)
for(a=x;a&0;a--)
for(b=110;b&0;b--);
void main()
for (a=8;a&0;a--)
//循环8次,即流水灯8个循环8次即可点亮8个
temp=_crol_(temp,1); //移动
delay(100);
//-----------------------------------------------------------------------------------------------------------
//流水灯 :正流+倒流;在PIC里流水灯只要设整个端的0x??值然后采用端口值=端口值&&1左移1位即可形成流水灯
//而在52单片机里却不行,得用_crol关皱字,而这个关键字又是在另一头文件intrins.h里,所以在开头就得先包含它
#include &reg52.h&
#include &intrins.h&
//因为要用到corol这一关键字
#define uchar unsigned char
sbit P23=P2^3 ;
sbit D1=P1^0;
void delay(int x)
for(a=x;a&0;a--)
for(b=110;b&0;b--);
void main()
for (a=8;a&0;a--)
//循环8次,即流水灯8个循环8次即可点亮8个
temp=_crol_(temp,1); //移动
delay(100);
temp=0x7f;
//注意这一句,如果没有这一句,下面的语句循环是循环了,却没东西出来
for (a=8;a&0;a--)
//循环8次,即流水灯8个循环8次即可点亮8个
temp=_crol_(temp,-1); //移动
delay(100);
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved重拾单片机——如何让按键控制流水灯工作与停止|我爱单片机 - 数码之家
查看完整版本: [--
赞助商链接
如题,网上抄了一段程序,弄了个懵懵懂懂。现在想要用一个按键控制流水灯的工作与停止。即当按键按下时流水灯开始,放开时对她没有影响,再次按下时停止流动。并且停留在亮着的那个灯。下面是程序:(这个是正常的流水灯程序)。谢谢大家&&&&&&真是对不起大家的热心,又没有时间去学单片机了,因为又找到新工作了,以后可能都没时间搞这个了。虽然现在条件不允许,但是以后我还会在学的。谢谢大家,真心的感谢!#include&AT89x51.H&void Delay(unsigned int k){&&&&unsigned int i,j;&&&&for(i=0;i&k;i=i+1)&&&&{&&&&for(j=0;j&120;j=j+1)&&&&{;}&&&&}}void main(){&&&& for(;;)&&&&{&&&&P1_0=0;&&//点亮LED1&&&&Delay(1000);&&&&&&&&P1_0=1;//关闭LED1&&&&&&&&Delay(1000);&&&&P1_1=0;&&&&Delay(1000);&&&&&&&&P1_1=1;&&&&&&&&Delay(1000);&&&&P1_2=0;&&&&Delay(1000);&&&&&&&&P1_2=1;&&&&&&&&Delay(1000);&&&&P1_3=0;&&&&Delay(1000);&&&&&&&&P1_3=1;&&&&&&&&Delay(1000);&&&&P1_4=0;&&&&Delay(1000);&&&&&&&&P1_4=1;&&&&&&&&Delay(1000);&&&&P1_5=0;&&&&Delay(1000);&&&&&&&&P1_5=1;&&&&&&&&Delay(1000);&&&&P1_6=0;&&&&Delay(1000);&&&&&&&&P1_6=1;&&&&&&&&Delay(1000);&&&&P1_7=0;&&&&Delay(1000);&&&&&&&&P1_7=1;&&&&&&&&Delay(1000);}}
赞助商链接
这个……?感觉……忒麻烦了吧
赞助商链接
这个么。。我的想法是设一个bit的标志位FLAG,按键按下时给FLAG取反,主程序里做移位的流水灯,判断FLAG为1时进行移位,流水灯走,FLAG为0停止移位,流水灯停止,这样
弄个按键标志变量,按一次是1,再按一次是0;然后加上判断语句,就行了、
这个程序没法即时停止。
流水灯程序不用写这么麻烦,可以用左移或者右移语句。如果用延时函数就必须用外部中断来控制流水灯工作和停止,因为延时的时候单片机没办法同时扫描键盘。
不必外部中断,定时器中断扫描按键也是一样,要即时停止不能用延时函数,
上面两位的方法都对方案1:用延时+按键中断按一次进入中断程序,流水灯停止运行,再按一次退出中断,流水灯继续运行。方案2:定时器延时+按键(用中断或非中断均可)按一下按键,程序将定时器停止(或者叫暂停),流水灯就停止运行,再按一下,程序让定时器继续工作,流水灯又运行起来了
看到楼主这个代码就头晕~
软件(相对于逻辑硬件)的好处就是实现谋种功能的方法不是唯一的,根据个人喜好,用不同方法可实现同一功能只要稍修改一下程序,就可以实现你想要的不同功能
看到楼主这个代码就头晕~
:不必外部中断,定时器中断扫描按键也是一样,要即时停止不能用延时函数, ( 18:03) 你说得对,学习了
请教下方案一进入中断如何不退出?又如何再次检测按键?
51单片机流水灯通过按键控制流水灯的流向可控流水灯单片机课程设计报告(c语言)以上程序可以借鉴,祝你成功!
:请教下方案一进入中断如何不退出?又如何再次检测按键? ( 06:27) 用下降沿做触发进中断一一一等键释放一一一扫描端口变化,等按键再次按下一一一清理中断标志,中断返回大体思路是这样了,在进中断和退出中断要做一下按键防抖处理。
想不出程序如何写能做到这样
查看完整版本: [--
Powered by
Time 0.086213 second(s),query:5 Gzip enabled

我要回帖

更多关于 led流水灯 的文章

 

随机推荐