标题:
avr单片机流水灯和 按键抗干扰,左右按键要松开才行 带仿真和程序
[打印本页]
作者:
chrees
时间:
2017-2-23 22:28
标题:
avr单片机流水灯和 按键抗干扰,左右按键要松开才行 带仿真和程序
第一次做。都是用的avr单片机ATMEGA16仿真。。有3个按键控制流水灯程序 和1个单片机按键抗干扰,左右按键要松开才行.
0.png
(29.46 KB, 下载次数: 67)
下载附件
2017-2-24 00:45 上传
单片机源码:
#include <iom16v.h>
void delay(unsigned int x)
{
int i,j;
for(i=0;i<x;i++)
for(j=0;j<1141;j++);
}
void button(int i)
{
if((PINC&(1<<PC0))==0)
{
delay(20);
if((PINC&(1<<PC0))==0)
{
up(i);
}
while((PINC&(1<<PC0))==0);
}
if((PINC&(1<<PC1))==0)
{
delay(20);
if((PINC&(1<<PC1))==0)
{
down(i);
}
while((PINC&(1<<PC1))==0);
}if((PINC&(1<<PC2))==0)
{
delay(20);
if((PINC&(1<<PC2))==0)
{
left(i);
}
while((PINC&(1<<PC2))==0);
}
if((PINC&(1<<PC3))==0)
{
delay(20);
if((PINC&(1<<PC3))==0)
{
right(i);
}
while((PINC&(1<<PC3))==0);
}
}
void down(int i)
{
while(i<4)
{
int k = i;
for(i+=4;i<8;i+=4)
{
PORTA = 1<<i;
delay(50);
PORTA = 0x00;
button(i);
}
i-=4;
for(i+=4;i<16;i+=4)
{
PORTB = 1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
i-=4;
i=k;
PORTA = 1<<i;
delay(50);
button(i);
}
while(i>3&&i<8)
{
for(i+=4;i<16;i+=4)
{
PORTB = 1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
i-=4;
for(i-=12;i<8;i+=4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
i-=4;
}
while(i>7&&i<12)
{
for(i+=4;i<16;i=+4)
{
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
i-=4;
for(i-=12;i<8;i+=4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
while(i<16&&i>11)
{
for(i-=12;i<8;i+=4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
for( ;i<16;i+=4)
{
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
i-=4;
}
}
void up(int i)
{
while(i<4)
{
PORTA=0x00;
for(i+=12;i<16&&i>7;i-=4)
{
PORTB = 1<<(i-8);
delay(50);
button(i);
}
PORTB=0x00;
i+=4;
for(i-=4;i>=0&&i<8;i-=4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
i+=4;
}
while(i>3&&i<8)
{
for(i-=4;i>=0;i-=4)
{
PORTA = 1<<i;
delay(50);
PORTA=0x00;
button(i);
}
i=+4;
for(i+=12;i<16&&i>7;i-=4)
{
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
PORTA=1<<i;
delay(50);
button(i);
}
while(i>7&&i<12)
{
for(i-=4;i<8&&i>=0;i=-4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
i+=4;
for(i+=12;i<16&&i>7;i-=4)
{
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
i+=4;
}
while(i>11&&i<16)
{
for(i-=4;i<16&&i>7;i=-4)
{
PORTB=1<<(i-8);
delay(50);
PORTB=0x00;
button(i);
}
for( ;i<8&&i>=0;i-=4)
{
PORTA=1<<i;
delay(50);
PORTA=0x00;
button(i);
}
i+=16;
PORTB=1<<(i-8);
delay(50);
button(i);
}
}
void right(int i)
{
while(i<4)
{
i-=1;
for(i+=1;i>=0&&i<4;i+=1)
{
PORTA = 1<<i;
delay(50);
button(i);
}
i-=4;
}
while(i>3&&i<8)
{
i-=1;
for(i+=1;i>3&&i<8;i+=1)
{
PORTA = 1<<i;
delay(50);
button(i);
}
i-=4;
}
while(i>7&&i<12)
{
i-=1;
for(i+=1;i>7&&i<12;i+=1)
{
PORTA = 1<<(i-8);
delay(50);
button(i);
}
i-=4;
}
while(i>11&&i<16)
{
i-=1;
for(i+=1;i>11&&i<16;i+=1)
{
PORTA = 1<<(i-8);
delay(50);
button(i);
}
i-=4;
}
}
void left(int i)
{
while(i<4)
{
i+=1;
for(i-=1;i>=0&&i<4;i-=1)
{
PORTA = 1<<i;
delay(50);
button(i);
}
i+=4;
}
while(i>3&&i<8)
{
i+=1;
for(i-=1;i>3&&i<8;i-=1)
{
PORTA = 1<<i;
delay(50);
button(i);
}
i+=4;
}
while(i>7&&i<12)
{
i+=1;
for(i-=1;i>7&&i<12;i-=1)
{
PORTA = 1<<(i-8);
delay(50);
button(i);
}
i+=4;
}
while(i>11&&i<16)
{
i+=1;
for(i-=1;i>11&&i<16;i-=1)
{
PORTA = 1<<(i-8);
delay(50);
button(i);
}
i+=4;
}
}
void main()
{
int i;
DDRA = 0xFF;
DDRB = 0xFF;
PORTC|=(1<<PC0);
PORTC|=(1<<PC1);
PORTC|=(1<<PC2);
PORTC|=(1<<PC3);
while(1)
{
for(i=0;i<4;i++)
{
PORTA = 1<<i;
delay(50);
button(i);
}
}
}
复制代码
0.png
(62.09 KB, 下载次数: 65)
下载附件
2017-2-24 00:47 上传
下载地址:
流水灯和按键.zip
(60.58 KB, 下载次数: 11)
2017-2-23 22:28 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
青苹果
时间:
2017-2-24 08:40
表示支持一下
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1