51单片机,按键控制流水灯程序,懂的进!

来源:百度问答 责任编辑:王亮
默认
特大
宋体
黑体
雅黑
楷体


51单片机,按键控制流水灯程序,懂的进!(图2)


51单片机,按键控制流水灯程序,懂的进!(图7)


51单片机,按键控制流水灯程序,懂的进!(图14)


51单片机,按键控制流水灯程序,懂的进!(图17)


51单片机,按键控制流水灯程序,懂的进!(图19)


51单片机,按键控制流水灯程序,懂的进!(图23)

  为了解决用户可能碰到关于"51单片机,按键控制流水灯程序,懂的进!"相关的问题,突袭网经过收集整理为用户提供相关的解决办法,请注意,解决办法仅供参考,不代表本网同意其意见,如有任何问题请与本网联系。"51单片机,按键控制流水灯程序,懂的进!"相关的详细问题如下:八个LED灯与单片机P1口连,按键key1与单片机P32连。该程序是完成以下工作:单片机上电,流水灯每一秒移一位,当按键key1按下后,流水灯停止在该灯处;当再次按下key1时,流水灯在停止...八个LED灯与单片机P1口连,按键key1与单片机P32连。该程序是完成以下工作:单片机上电,流水灯每一秒移一位,当按键key1按下后,流水灯停止在该灯处;当再次按下key1时,流水灯在停止处继续移位。

问题是:
在有些时候(注意:只是有些时候)在流水灯运行的时候,按下按键,流水灯停止,而当再一次按下的时候,流水灯却一直停在那里,而不重新开始运行了。
请各位高手帮我看看该程序是否哪里有缺陷!谢谢……
/****************************************/

#include<reg52.h>
#include<intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit key1=P3^2;
uchar num=0,temp;

void delay_ms(uchar N)
{
uchar i,j;
for(i=N;i>0;i--)
for(j=220;j>0;j--);
}

void init()
{
P0=0xfe;
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}

void display(void)
{
P0=_crol_(P0,1);
temp=P0;
}

void key_scan(void)
{
if(key1==0)
{
delay_ms(10);
if(key1==0)
{
P0=temp;
TR0=~TR0;
}
}
while(!key1);
}

void main()
{
init();
while(1)
{
if(num==20)
{
num=0;
display();
}
key_scan();
}
}

void timer0() interrupt 1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
}
不好意思,8个LED是与单片机P0口连,写错了。程序中写的P0是没错的!展开
===========突袭网收集的解决方案如下===========

解决方案1:

假如,你的程序在执行key_scan();是触发了两次中断导致num>20,你的显示函数将永远被跳过,你应该写成
if(num>20)
{
num=0;
display();
}
这是一个比较直观的错误,其他的没细看,你在试试

解决方案2:

你把键盘扫描程序里的延时改小些 并试一下再TR0=~TR0后加一句init();

解决方案3:

你的程序我在自己的开发板上跑了一遍,没有问题。你那里跑不对很可能是按键消抖做得不够好,或许是按键没焊好。可以换另外一个按键试一下。 追问 谢谢……

解决方案4:

将程序if(num==20)
{
num=0;
display();
}
放到定时器0中断子程序中 就0k了。

解决方案5:

呵呵,找你的程序看,应该是当你按下键后,TR0=0;而又刚好定时器再执行中断void timer0();这样定时器不起作用了,它只能一直停在时间中断程序里面,无法进入主函数,自然无法你的按键扫描了,所以此时你不管怎么按也没有反应。。

找出了问题,相信以你的能力,你想办法尽量避免这种情况就行了。具体怎么操作我就不说了。。哈哈

解决方案6:

问题出在键盘扫描,有可能按键时根本没有执行到扫描程序处,因此可能漏掉按键,可以考虑将键盘扫描程序安在定时中断里,发现有按键就置一个按键标志,在主循环中判断键盘标志来决定显示或停止

51单片机,按键控制流水灯程序,懂的进!

答:假如,你的程序在执行key_scan();是触发了两次中断导致num>20,你的显示函数将永远被跳过,你应该写成 if(num>20) { num=0; display(); } 这是一个比较直观的错误,其他的没细看,你在试试

c51单片机独立按键控制,流水灯程序

答:while(1) { P1=aa; delayms(1000); aa=_crol_(aa,1); } 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0) { P1=0x7e;

51单片机利用独立按键控制流水灯

答:while(1) { P1=aa; delayms(1000); aa=_crol_(aa,1); } 这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了 if(key1==0) { P1=0x7e;

利用51单片机,做一个按键控制流水灯程序。 默认8...

答:你看到独立键盘就可以写了,有c基础的话用不了多久就会了

51单片机8路流水灯! 用三个按键控制三个程序!每...

答:#include #define uchar unsigned char sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; uchar led1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar led2[]={0xe7,0xdb,0xbd,0x7e}; bit flag; void delay(uchar a) { uchar i; while(a--...

51单片机,开关控制LED,开始流水灯,按一下停止,...

答:采用中断方式,程序如下: #include #include #define uchar unsigned char sbit button = P3^2; uchar press = 0; uchar luishui = 0xfe; void Delay(uchar z) { uchar x, y; for(x = z; x > 0; x--) for(y = 255; y > 0; y--); } void main() ...

51单片机怎么控制50个流水灯?

答:就像二楼说的 用74HC595之类的 芯片做 IO口用的比较少 图中 DIN 是串行口数据输入端 CLK是移位时钟,STC是锁存时钟,OE是使控制(消隐用) 其它的就是程序了 595的程序 块 网上有的是 然后就是用中断3做 把你需要的流水方式写入数组,然后寻址就...

求一个51单片机程序,要求用一个按键控制流水灯的...

答:#include typedef unsigned char uint8; typedef unsigned int uint16; it anjian = P1

51单片机 c语言 如何用4个按键控制4个流水灯

答:不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后: void light_water() { num=1; for(a=0;a

51单片机汇编怎么用四个独立按键来控制流水灯的速度?

答:不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后: void light_water() { num=1; for(a=0;a

声明:突袭网提供的解决方案均由系统收集自互联网,仅供参考,突袭网不保证其准确性,亦不代表突袭网观点,请自行判断真伪,突袭网不承担任何法律责任.

为您准备的相关内容:

  • c51单片机独立按键控制,流水灯程序
  • 51单片机8路流水灯! 用三个按键控制三个程序!每个按键对应...
  • 51单片机利用独立按键控制流水灯
  • 求一个51单片机程序,要求用一个按键控制流水灯的启停,按一下...
  • 51单片机 c语言 如何用4个按键控制4个流水灯
  • 51单片机,开关控制LED,开始流水灯,按一下停止,再按一下...
  • 51单片机流水灯程序
  • 51单片机按键中断控制流水灯
  • >>> 温馨提示:您还可以点击下面分页查看更多相关内容 <<<

    头条

    热门

    Copyright ? 2012-2016 tuxi.com.cn 版权所有 京ICP备10044368号 京公网安备11010802011102号 关于我们 | 广告服务 | 诚聘英才 | 联系我们 | 友情链接 | 免责申明 | 懂视