#define F_CPU 4000000UL // 4 MHz #include #include volatile unsigned char k,pa,pc; volatile unsigned char* port_pointer; int main (void){ unsigned char i,j; DDRA=0xff; DDRC=0xff; PORTA=1; PORTC=~(1<<0); while(1){ for (i=0;i<7;i++){ if (j&1){ port_pointer=&PORTA; }else{ port_pointer=&PORTC; } if ((j&2)==0){ //编译器未优化,此为循环移位 *port_pointer=(*port_pointer>>(8-1))|(*port_pointer<<1); }else{ *port_pointer=(*port_pointer>>1)|(*port_pointer<<(8-1)); } pa=PORTA; //使用push pop更佳 pc=PORTC; for (k=0;k<4;k++){ PORTA=0; if (k&1){ PORTA=pa; PORTC=pc; }else{ PORTA=0b00011000; PORTC=~0b00011000; } DDRA=0xff; _delay_ms(50); //proteus不响应快扫,故改慢,增大k的终值减少延时结果相同而且不闪 DDRA=0x00; } } j++; } }