一个用C语言做51单片机做流水灯控制向左移动一位,右边补0的一段程序作业.求指教!

#include "reg51.h"
void delay(unsigned char m);
main()
{
unsigned char temp;
temp=0xfe; //temp=1111 1110,使得P1口的某个引脚为低电平(亮)
while(1)
{
P1=temp; //P1口的数据来自temp,而temp的数据是不断变化的
If()…… //temp向左移动一位,右边补0
else …… ( 这里就是要填补的空!!!!!!!!!)
delay(20);
}
}
void delay(unsigned char m) //延时子程序
{
unsigned char i,j,k; //定义字符型变量,范围为0至255
for (i=0;i<m;i++)
{
for (j=0;j<100;j++)
{
for (k=0;k<100;k++);
}
}
}
最新回答
回眸丶时光冷

2024-04-24 00:23:41

//右边补0,直接移位就可以temp<,=1; 如果流水灯只有一个亮,下面的程序就是对的,移位之后补1.
#include "reg51.h"
void delay(unsigned char m);
main()
{
unsigned char temp;
temp=0xfe; //temp=1111 1110,使得P1口的某个引脚为低电平(亮)
while(1)
{
P1=temp; //P1口的数据来自temp,而temp的数据是不断变化的
temp=temp<<1 | 0x01;//temp向左移动一位,右边补0
if(temp==0xff)
temp=0xfe; //( 这里就是要填补的空!!!!!!!!!)
delay(20);
}
}
void delay(unsigned char m) //延时子程序
{
unsigned char i,j,k; //定义字符型变量,范围为0至255
for (i=0;i<m;i++)
{
for (j=0;j<100;j++)
{
for (k=0;k<100;k++);
}
}
安七

2024-04-24 00:22:32

加一句判断在P1那句下面
temp=temp&0xfe; 判断其他引脚,如果其他引脚有0,那么temp不等于temp&0xfe
if(temp==0xfe)
temp<<1; 只移位不循环,右边自动变0
else
temp=0xfe;
delay(20);

哦,上面无效 - - 题目我看错了,上面的只是单纯判断引脚和左移一位,没流水
流水的话,
if()
temp<<1; 这个只移位,不循环 那if就是temp!=0x00
temp=_crol_(temp,1); 这个是循环的左移 可以省下面else的了 两个temp二选一
else
temp=0xfe;
追问
谢谢咯!
但是不怎么看得懂.
你可以直接给一个完整的答案么.. 我build不出来...
追答
#include "reg51.h"
void delay(unsigned char m);
main()
{
unsigned char temp;
temp=0xfe; //temp=1111 1110,使得P1口的某个引脚为低电平(亮)
while(1)
{
P1=temp; //P1口的数据来自temp,而temp的数据是不断变化的
if(temp!=0x00)//temp向左移动一位,右边补0
{
temp=temp<<1;
P1=temp;
}
else // ( 这里就是要填补的空!!!!!!!!!)
temp=0xfe;
delay(20);
}
}
void delay(unsigned char m) //延时子程序
{
unsigned char i,j,k; //定义字符型变量,范围为0至255
for (i=0;i<m;i++)
{
for (j=0;j<100;j++)
{
for (k=0;k<100;k++);
}
}
}
白首有我共你

2024-04-24 04:38:39

while (1)
{
delay ();
temp <<= 1;
P1 = temp | 0x01;
if(P1==0x7f)
{
delay ();
P1 = 0xfe;
}
}
风吹萤火

2024-04-24 04:55:46

延时子程序变量可以定义为unsigned int 型的。就不要写3个FOR了。
行尸走肥肉

2024-04-24 03:46:11

1