51单片机流水灯C语言小问题
发布网友
发布时间:2022-12-26 13:08
我来回答
共3个回答
热心网友
时间:2023-09-26 20:18
那个 temp就是个临时变量,暂时存放数据的一个变量.
举个例子,你的左手拿着一大瓶可乐,右手拿着一摞书,你旁边还有把椅子,现在,你想要把左手的可乐给右手,右手的书给左手,那么肯定是先把右手的书放在椅子上,然后可乐递到右手,然后左手从椅子上把书捡起来.
这个temp就相当于是在椅子的作用.
就是先把temp运算,然后把结果给IO口送去.
i = 0时,Temp =00000001; ~Temp =11111110
i = 1时,Temp =00000010; ~Temp =11111101
i = 2时,Temp =00000100; ~Temp =11111011
i = 3时,Temp =00001000; ~Temp =11110111
i = 4时,Temp =00010000; ~Temp =11101111
i = 5时,Temp =00100000; ~Temp =11011111
i = 6时,Temp =01000000; ~Temp =10111111
i = 7时,Temp =10000000; ~Temp =01111111
其实,不用Temp也完全可以做到:
for(i=0;i<8;i++)
{ //8个流水灯逐个闪动
DY_PORT=~(1<<i); //---这样就省了用Temp这个变量了
delay(100); //调用延时函数
}
热心网友
时间:2023-09-26 20:19
temp是一个随机变量,在这里就是代表LED的状态,所以这个地方你将temp换成LED更清楚一点。从程序看来当DY_PORT也就是P1的某一位为“0”时,该位的LED点亮,而temp初始值为0x01所以需要取反,至于为什么要设置初始值为0x01而不是0xfe,这与temp<<=1;有关,这句话移位后直接地位填0,所以很方便处理,如果为0xfe那么还需要将低位置1才行。
当temp=0x01时 temp<<=1;
当temp=0xfe时 temp<<=1;temp|=0x01;
热心网友
时间:2023-09-26 20:19
0x01是16进制的数是两位数,换成二进制就是八位数 这个八位数每位代表一个IO,代表一个灯。数制跟位数是不同的概念追问嗯,明白了,那请问temp为什么取反值呢?
追答这个是根据你板子上二极管的正负极接法定的,看是高电平亮还是低电平亮,看你这个程序应该是低电平二极管才两即与单片机IO口相连的是发光二极管的负极