求助:STC89c52rc 使用查表法能够实现流水灯,使用位移法不能实现流水灯。
我把LED接在了P2口,使用位移法时只有P20那个闪了一下,过一会又闪一下,其它的都不亮。程序肯定没问题,是论坛中现成的程序。我只把P1改成了P2. 把问题描述清楚,或者把程序黏贴出来,不然别人如何给你回答问题啊? 程序不是我写的,不能贴,我是想问,是不是STC89C52RC的移位寄存器用不用在程序中设置,或者KEILC软件对STC是否支持移位寄存器?
人家的程序肯定是好的,就是他的灯接在P1,我接在P2,然后我把程序中的P1都改成P2。用查表法改后正常,移位法就不正常。 对于编辑STC编写程序,有没有专用的软件?谢谢1楼热心回复。 什么流水灯程序那么保密都不能贴出来? 回复【4楼】little Monkey
什么流水灯程序那么保密都不能贴出来?
-----------------------------------------------------------------------
国防军用级流水灯,不是我们可以了解的。 保密流水灯程序 汗颜 回复【4楼】little Monkey
什么流水灯程序那么保密都不能贴出来?
-----------------------------------------------------------------------
++ 顶保密级流水灯。 回复【8楼】jtdy
顶保密级流水灯。
-----------------------------------------------------------------------
军用级用STC? 还保密,哈哈~~
此流水灯必火。 哈哈,楼主该去找老姚麻烦了,如果向你要程序,卖给他,哈哈…… 估计是程序中还有P1没改,你把你的灯接在P1然后再用源程序就知道了 原来的程序是硕耀电子的,版权归原作者何先生所有。我把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);
} 使用这个程序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);
} P2=P2|0x01;
你改的程序少了这一句,循环之后全部变成了0,所以只有在重新给P2赋值0xfe的时候P20闪烁一下。C51的移位是不带进位的。 人家的注释里都说的很清楚了,你没看到? 谢谢楼上解答。加上这句也不行 P2=P2|0x01; 。把头文件改成了 stc89.h 也不行。 你将延时时间增加了10倍,你等久一点就看到效果了.要不将Delay(50000); 改回Delay(5000); 试一试 楼主注意仿真的时候,p0 p2是不能很好仿真的。我一起做流水灯试过。同样的程序你改成p1肯定没问题。
页:
[1]