用ATmega16主控使八个流水灯以一秒闪一次,我不知道怎样编才能使八个流水灯按照顺序接到PD0~PD7引脚上……希望前辈们帮帮我
第一个程序是:
#include<iom16v.h> #define uint unsigned int #define unchar unsigned char void Delay_ms(unsigned int Time) { //定义延时函数 unsigned char n=0; while(Time>0) { for (n=1;n<80;n++) { NOP(); } Time--; } } void main (void) { //主函数 // DDRC=0xFF; DDRB=0xFF; //定义输出端口 // DDRD=0xFF; //PORTC=0xFF; PORTB=0xFF; //PORTD=0xFF; while(1) { //死循环 PORTB=~0b11111110; //让最右边的LED点亮 Delay_ms(1000); PORTB=~0b11111101; //让LED左移一位,这样就可实现"流水灯的效果了 Delay_ms(1000); PORTB=~0b11111011; Delay_ms(1000); PORTB=~0b11110111; Delay_ms(1000); PORTB=~0b11101111; Delay_ms(1000); PORTB=~0b11011111; Delay_ms(1000); PORTB=~0b10111111; Delay_ms(1000); PORTB=~0b01111111; Delay_ms(1000); } }
第二个程序是
#include<iom16v.h> const unsigned char dis[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; void delay(unsigned char x)//延迟函数 {unsigned char i,j; for(i=0;i<x;i++) for(j=0;j<1140;j++); } void main(void) {unsigned char n; DDRA=0xff; while(1) { for(n=0;n<8;n++) {PORTA=dis[n]; delay(1000); } for(n=7;n>1;n--) {PORTA=dis[n]; delay(1000); }
} }
这两个怎样改才能符合要求呀?谢谢大家~
|