用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);
}
}
}
这两个怎样改才能符合要求呀?谢谢大家~
此帖出自
小平头技术问答
一周热门 更多>