关于单片机流水灯的问题,求高手求解

作者&投稿:大季终 (若有异议请与网页底部的电邮联系)
用51单片机写了一个流水灯程序,有一点问题,请高手解惑~

单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移7次,再右移7次,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。

要想按键随时有效,应该把两个移位函数_cror_,_crol_ 放在主程中,检测key也放在主程中,而不能这样放一个子程序中。

51单片机的左移右移,首先在开始要调用"intrins.h"的文件包,这个文件包含_cror_(右移),_crol_(左移);然后通过for语句来控制;
for(m=20;m>0;m--)
for(n=20;n>0;n--)
for(k=250;k>0;k--);
理解这三句,第一句是指:m=20;m>0然后m--是真就执行:
for(n=20;n>0;n--)
for(k=250;k>0;k--);
这两句,m--一直减,减一次,里面就执行一次,这里是20次。
流水灯的左右移,第一用"intrins.h"的文件包,第二要要会定义赋值变量,第三延时,这是关键。

首先我不明白你的i是什么参数,i<0;i<8,这个循环是什么逻辑含义?然后,你的程序是想实现流水灯先循环左移吗?如果是的话,在开始,P1已经设置成0xfe了,也就是最低位的灯是亮着的,设想一下,要是没有P1|0X01,那么,在第一次左移之后,P1=1111 1100 ,因为P1<<=1之后最低位变成0,而不是1,所以要P1|0X01。在第二次移位之后,P1=1111 1010,此时也要|0x01,则P1=1111 1011。依次循环。当右移的时候|0x80其实是一样的,只是因为左右顺序变了,所以0x01变成了0x80。
我只能解释这么清楚了,希望你能懂。再说一个,你要是想以后找单片机工作的话,还是去北京上海,要是不不是这两个城市的话,还是学好自己专业,不然你会觉得现实很残忍!

其实就是想保证左移完,最低位是1,感觉可以用循环左移或者循环右移来实现,让代码看起来更清爽,
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

void main()
{
unsigned char i;
P1=0xfe;
for(i<0;i<8;i++)
{
delay(50000);
P1 = _crol_(P1,1);//循环右移

}

移到第八次的时候,不执行按位或,应该就不会有灯亮了,移到CY位去吧。


刚开始学51单片机,学点流水灯时有些问题:P1 = 0xAA; \/\/点亮 D1,D3...
1~8灯连接的是P1.0~P1.7,当P1=0xaa=0b10101010,那么1,3,5,7灯对应的是0,所以是1,3,5,7灯亮,如果要2,4,6,8灯亮么只要按位取反P1=0b01010101=0x55就行了。要学单片机的话我建议你先找本数电的书看看吧,最基本的二进制码都没搞明白,难。

如何用单片机制作一个流水灯?
1、首先要写入单片机的头函数,定义单片机P1口的8个管脚,让他们分别代表流水灯的8个led。2、写一个大约一小时的延时函数,为了清楚的看到流水灯的、效果。3、下面是流水灯的主函数,流水灯一个点亮后一个熄灭反复循环点亮熄灭。4、这样流水灯就可以反复循环了。把程序下到仿真软件或者是开发板,进行...

关于单片机流水灯0x7e的控制问题
然后是temp再次赋值0x7e,依次循环。如果你想实现的是带进位的循环,可以自己写一个函数,也可以使用库函数_cror_(x,i)(右移)或者_crol_(x,i)(左移),但是如果使用这两个库函数必须加上头文件,即#include<intrins.h> x是你希望的操作数,相当于你的temp,i是每次移动的位数。

单片机问题 流水灯为啥不亮
1. 从程序看基本没什么问题;2. 要注意电路图,是不是P2接了LED,没接就不亮;3. 流水灯或花样灯一般都用数组,用自带移位函数还是挺少的。

单片机中,关于流水灯问题,从P1口接了8盏led灯,要实现从上到下两次,从...
你好 大致看了一下,没有测试,感觉问题出在这个程序段 for(n=2;n>0;n--){P1=0;delay(300);P1=1;delay(300);P1口是个8位口,P1=1相当于00000000+00000001,将P1=0改成P1=0x00,P1=1改成P1=0xff,这样该能解决问题。

单片机 初级 流水灯问题求教... sbit led1=P1^0;这句定义为什么不能放在...
指定一个端口P1的0号接脚的别名为led1,不是动态分配内存哦,相当于申明全局变量,全局变量就应当是放在函数之外的,而且,如果编译器支持的话,你也可以试着把它放函数里,C51比C++死板得多,很多就是一个硬性的规定,方便编译器处理,有了规范了才以少出错 ...

单片机流水灯c程序疑问~~~
temp<<=1 是 temp=temp<<1 的简写表达式。“<<”是左移指令,没执行一次左移指令将被操作数的最高位移入单片机PSW寄存器的CY位,CY位中原来的数丢弃。被操作数的最低位补0 如temp=0x01 即0000 0001 左移位操作后 CY中为0 temp的值变为 0x02 即 0000 0010 再次左移位操作后 CY=0 temp...

单片机流水灯闪烁问题!急急急!
ORG 0000H LJMP MAIN ORG 000BH T0MS EQU NOT 50000 ; 50 mS 晶振 12.000 MHz PJSBZ EQU 20H PJSBZY EQU 21H PST0: MOV TL0, #LOW T0MS ; T0 中断 MOV TH0, #HIGH T0MS SETB PJSBZ ; 50 mS 标志 DJNZ R6, PST02 MOV R6, #40 ; ...

51单片机的问题:控制定时器时流水灯实验时,灯为什么不亮??实验代码如下...
你好 你程序结够没问题 运行也没问题,就是参数计算错误65536-50000=15536,如果你晶振为12M的话,延时15.5ms,你根本看不见在工作。即使定时器0赋值的话,也才65.5ms。你在中断里把定时器赋值语句屏蔽应该可以看见运行情况,不过速度也是很快。流水灯的间隙一般在0.5s=500ms。或者这样改 include<reg...

怎样用单片机做一个简单的流水灯?
在这个单片机流水灯代码中,假设使用的是8051单片机。需要定义8个LED灯,分别连接到P1端口的不同引脚上。然后使用一个循环结构来控制这8个LED灯按照一定的顺序逐个亮起,形成流水灯的效果。具体来说,使用for循环来控制LED灯的亮灭顺序。在每次循环中,通过给P1端口赋值来控制LED灯的亮灭状态。例如,给...

内乡县19148478061: 关于单片机流水灯的问题 -
支试脾肾: 硬件上很好办,5V--电阻(560欧姆)--发光二级管---单片机IO(P1.0) ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB TR0 SETB ...

内乡县19148478061: 关于这个单片机流水灯程序,有几个问题求解答 -
支试脾肾: 1、i用于依次点亮(熄灭)4个灯,for(j=0;j<a;j++)用于重复“依次点亮(熄灭)4个灯”操作的次数,次数函数就是函数形参a.2、 (800,1) 指延时800个延时单位后,再点亮一个灯,依次亮的重复次数为1.其它的类似.3、延时要精确计算,需看dalay函数内的指令执行时间.一般是设个t值,把程序烧进芯片里,估约延时长短,调几次,就得出经验值.

内乡县19148478061: 关于单片机流水灯编程的问题,求解析 -
支试脾肾: 20000时应该在0.2秒左右吧,40000时应该在0.3~0.4秒,1.6秒的话可能有问题.

内乡县19148478061: 我C语言写了一个C51单片机的流水灯定时一秒的程序,有如下问题,求助高手改错 -
支试脾肾: 1.单片机启动时,端口为高电平即P1 = 0xff,时间比较的短,则会刚开始运行时八个灯全都亮.2.可以50ms定时20次,即TH0 = 0x3c,TL0 = 0xb0,这样误差会小一点.3.因为a为int型,16位的,而P1为8位的,所以第一遍和第二遍相差约8秒;将int a 改为 unsigned char a;就不会出现这样的情况了.呵呵,希望对你有帮助,祝你顺利!

内乡县19148478061: 求单片机高手指导下此程序是否可以实现流水灯从上至下,在从下至上点亮的功能,菜鸟求助 ! -
支试脾肾: 不行,你就一直循环,你应该加个判断上去啊,当他运行到最后一个灯的时候,就让他重新运行

内乡县19148478061: 高分求大神对这个单片机流水灯程序讲解一下 -
支试脾肾: t是设定延时时间,a是次数,table[]是依次亮一个灯,两个灯,三个,四个.table[3]是依次亮三个,两个,一个,全灭.void zgxh1(uint t,uchar a) { uchar i,j; for (j=0;j<a;j++) { P0=0xff; //全灭 for(i=0;i<4;i++) //循环4次 { P0=table[i]; //调用table数...

内乡县19148478061: 单片机中的流水灯,花样灯,跑马灯? -
支试脾肾: 没什么实质的区别只是各人说法不一样,像流水灯程序也有人叫跑马灯,说个简单的例子,比方说一个亮点不断的左循环就叫流水灯.从中间亮两个点,从左右两边流动就叫花样.

内乡县19148478061: 求助关于单片机流水灯程序的问题 -
支试脾肾: 亲,你看程序了吗!!你看看你P1口的赋值是多少?uchar P1=0xff,temp; 还有就是这句话也不能这样写啊!UCHAR TEMP; P1=0XFF;

内乡县19148478061: 单片机作业,关于流水灯的 -
支试脾肾: //包含头文件 #include <reg51.h> #include <intrins.h> //定义端口,按键接在P1口低5位 //sbit key1=P1^0; //sbit key2=P1^1; //sbit key3=P1^2; //sbit key4=P1^3; //sbit key5=P1^4;unsigned char key_val; //定义键值变量 //8个LED接在P0口 //定义延时...

内乡县19148478061: 51单片机用独立按键控制不同流水灯,那个流水灯的循环放哪里?我放流水灯里,不能正常工作?求大神指教 -
支试脾肾: 重点是你要在 “那个流水灯的循环放” 里 放上检测按键的语句,没按键正常循环,有按键要根据按键的值 去做别的(例如转到另外一种流水灯的循环,或者是改变流水模式,具体咋样与你的程序编写方式有关)

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网