新手51单片机流水灯程序问题请教
#include<reg51.h>#include<intrins.h>
void delay(void)
{
unsigned int i,j,k;
for(i=20;i>0;i--)
for(j=20;j>0;j--)
for(k=248;k>0;k--);
}
void main()
{
int temp;
temp=0x01;
while(1)
{
P1=~temp;
delay();
P1=0xff;
temp=temp<<1;
if (temp==0x00)
temp=0x01;
}
}
想要用单片机左位移指令实现流水灯,程序正确,调试也显示正确,在单片机上运行了一遍也是可以实现,问题在于,当第八个LED熄灭后,要等很长时间后第一个LED才会重新亮起, int temp->unsigned char temp 在mcs51上int类型是16bit的,char类型是8bit。 多一倍的时间,上面都说了;
如果对效率要求不高,建议用计数方式,通用性好;
while(1)
{
temp = 1;
for(i=0;i<8;i++)
....
或
temp = (1<<i);
楼上正解 mcu5i51正解 chunk 发表于 2020-10-27 08:39
在mcs51上int类型是16bit的,char类型是8bit。
收到 改正 mcu5i51 发表于 2020-10-27 08:56
多一倍的时间,上面都说了;
如果对效率要求不高,建议用计数方式,通用性好;
while(1)
好的
新手51单片机流水灯程序问题请教
temp 数据类型错误
页:
[1]