EX1 AVRmega8A 用所有IO口输出流水灯

2018-06-14  本文已影响7人  山前雨1

//function:source and sink every i/o pin

//微信号:shanqianyu1

//从左到右是PORTB\PORTD\PORTC左边是高位,C只用到了PC4,PC5作为按钮开关的检测,当按下的时候检测绿灯全部亮起来

//time:2018.3.9

//author:Dave#include#include//初始化

void init(void)

{

DDRB=0XFF; //端口B C D 配置为输出模式

DDRC=0XDF;

DDRD=0XFF;

PORTB=0;//端口B C D初始值为0

PORTC=0X20;

PORTD=0;

}

void delay(void)

{

int a,b;

for(a=0;a<500;a++)

{

for(b=0;b<500;b++){}//一定要加上这个花括号要不然会报错

}

}

//输出函数

void source(void)

{

char a=0;

PORTB=0X80;

delay();

while(PORTB &=BIT(1))

  {

a=PORTB;

PORTB >>=1;

PORTB +=a;

delay();

}

PORTD=0X80;

delay();

while(PORTD &=BIT(1))

  {

a=PORTD;

PORTD >>=1;

PORTD +=a;

delay();

}

PORTC=0X10;

delay();

while(PORTC &=BIT(1))

  {

a=PORTC;

PORTC >>=1;

PORTC +=a;

delay();

}

}

void sink(void)

{

while(PORTC |=!BIT(4))

  {

PORTC =~BIT(4);

PORTC <<=1;

delay();

}

while(PORTD |=!BIT(7))

  {

PORTD <<=1;

delay();

}

while(PORTB |=!BIT(7))

  {

PORTB<<=1;

delay();

}

}

void input(void)

{

if(PINC !=BIT(5))

{

int b,d,c;

b=PORTB;

d=PORTD;

c=PORTC;

while(1)

{

PORTB=0X00;

PORTD=0XFF;

PORTC &=0XE0;

if(PINC =BIT(5))

{

PORTB=b;

  PORTD=d;

  PORTC=c;

break;

}

}

}

}

void main(void)

{

while(1)

  {

input();

source();

sink();

}

}

上一篇 下一篇

猜你喜欢

热点阅读