iSTC 发表于 2012-1-20 23:02:50

求助:STC89c52rc 使用查表法能够实现流水灯,使用位移法不能实现流水灯。

我把LED接在了P2口,使用位移法时只有P20那个闪了一下,过一会又闪一下,其它的都不亮。


程序肯定没问题,是论坛中现成的程序。我只把P1改成了P2.

techbaby 发表于 2012-1-20 23:07:54

把问题描述清楚,或者把程序黏贴出来,不然别人如何给你回答问题啊?

iSTC 发表于 2012-1-20 23:15:47

程序不是我写的,不能贴,我是想问,是不是STC89C52RC的移位寄存器用不用在程序中设置,或者KEILC软件对STC是否支持移位寄存器?

人家的程序肯定是好的,就是他的灯接在P1,我接在P2,然后我把程序中的P1都改成P2。用查表法改后正常,移位法就不正常。

iSTC 发表于 2012-1-20 23:17:00

对于编辑STC编写程序,有没有专用的软件?谢谢1楼热心回复。

little_Monkey 发表于 2012-1-21 01:12:12

什么流水灯程序那么保密都不能贴出来?

90999 发表于 2012-1-21 02:04:11

回复【4楼】little Monkey
什么流水灯程序那么保密都不能贴出来?
-----------------------------------------------------------------------

国防军用级流水灯,不是我们可以了解的。

jssz_hf 发表于 2012-1-21 08:32:23

保密流水灯程序 汗颜

luzj05 发表于 2012-1-21 09:19:50

回复【4楼】little Monkey
什么流水灯程序那么保密都不能贴出来?
-----------------------------------------------------------------------

++

jtdy 发表于 2012-1-21 09:42:01

顶保密级流水灯。

bh7nly 发表于 2012-1-21 10:33:57

回复【8楼】jtdy
顶保密级流水灯。
-----------------------------------------------------------------------

军用级用STC? 还保密,哈哈~~

此流水灯必火。

wlxtx 发表于 2012-1-21 10:39:24

哈哈,楼主该去找老姚麻烦了,如果向你要程序,卖给他,哈哈……

wajlh 发表于 2012-1-21 10:40:35

估计是程序中还有P1没改,你把你的灯接在P1然后再用源程序就知道了

iSTC 发表于 2012-1-21 17:38:17

原来的程序是硕耀电子的,版权归原作者何先生所有。我把P1改成P2了 。其它地主不知道有没有不小心改错的地方。麻烦各位帮看看。

#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义
/*-------------------------IO口定义----------------------------*/

void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                  主函数
------------------------------------------------*/
void main (void)
{
                  
unsigned char i;//定义一个无符号字符型局部变量 i 取值范围 0~255
P2=0xFF;
       
Delay(5000);
P2=0xfe;
while (1)         //主循环
{
for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
{
   Delay(5000);
   P2=P2<<1;
   P2=P2|0x01;   //左移后,最右端自动赋值0,所以需要该语句赋值1
}
P2=0xfe;         //重新赋初始值
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}

iSTC 发表于 2012-1-21 17:49:50

使用这个程序P20接的LED常亮。
#include<reg52.h> //包含头文件,一般情况不需要改动,
                  //头文件包含特殊功能寄存器的定义
/*-------------------------IO口定义----------------------------*/

void Delay(unsigned int t); //函数声明

/*------------------------------------------------
                  主函数
------------------------------------------------*/
void main (void)
{
                  
unsigned char i;//定义一个无符号字符型局部变量 i 取值范围 0~255

        P2=0xFF;//P1口置1
       
Delay(50000);
P2=0xfe;         //赋初始值
for(i=0;i<8;i++)   //加入 for循环,表明for循环大括号中的程序循环执行8次
{
   Delay(50000);
   P2<<=1;
}
while (1)         //主循环
{
                   //主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数 unsigned int t,无返回值
unsigned int 是定义无符号整形变量,其值的范围是
0~65535
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}

ckvlhf 发表于 2012-1-21 18:50:49

P2=P2|0x01;
你改的程序少了这一句,循环之后全部变成了0,所以只有在重新给P2赋值0xfe的时候P20闪烁一下。C51的移位是不带进位的。

ckvlhf 发表于 2012-1-21 18:52:05

人家的注释里都说的很清楚了,你没看到?

iSTC 发表于 2012-1-23 17:45:28

谢谢楼上解答。加上这句也不行 P2=P2|0x01; 。把头文件改成了 stc89.h 也不行。

jackybany 发表于 2012-1-23 23:09:29

你将延时时间增加了10倍,你等久一点就看到效果了.要不将Delay(50000); 改回Delay(5000); 试一试

cqy1028 发表于 2012-1-24 02:52:21

楼主注意仿真的时候,p0 p2是不能很好仿真的。我一起做流水灯试过。同样的程序你改成p1肯定没问题。
页: [1]
查看完整版本: 求助:STC89c52rc 使用查表法能够实现流水灯,使用位移法不能实现流水灯。