//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();
}
}
网友评论