百度知道 - 信息提示
间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
/*****************************看看这个行不,假设8个小灯与P0口相连*********************************/#include
#include
#define uint unsigned int
#define uchar unsigned char uint num , temp , i;void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}uint a[] = {0xfe , 0xfc , 0xf8 , 0xf0 , 0xe0 , 0xc0 , 0x80 , 0x00} ;
int main(void)
{ while(1)
{
for(i = 0 ; i < 8 ; i++)
{
temp = a[i] ;
P0 = temp ;
for(num = 0 ; num < (8 - i) ; num++)
{
P0 = temp ;
temp=_crol_(temp,1);
delay(300) ; }
}
}
}
求解 希望大虾帮忙间隔300ms第一次一个管亮流动一次, 第二次两个管亮流动,依次到8个管亮, 然后重复整个
你应该是_crol_没看懂吧,这是character to rotate left的缩写,也就是字符循环左移的意思。例如
void test_crol (void)
{
char a;/* character to rotate left要循环左移的字符 */
char b;/* bit positions to rotate要循环左移的位数 */
a = 0xA5;/*a = 1010_0101*/
b = _crol_(a,3); /* b now is 0x2D 循环左移3次以后,变成0010_1101*/
}
这个弄明白了吧,然后再看<<这个的,这个是算术左移吧,如果a = 1010_0101,那么a<<3以后应该a=0010_1000,不懂?就是这个左移以后右边将自动补0,而不是补上左边移掉的数据。