📄 anjian.c
字号:
#include <avr/io.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<2280;j++);
}
return;
}
uchar key_press()
{
uchar j;
DDRD|=0X3C;
PORTD|=0X3C;
DDRD&=0XC3;
delay(10);
j=PIND;
j=j&0X3C;
if(j==0X3C)
{
return 0;
}
else
{
return 1;
}
}
uchar key_scan()
{
uchar key;
key=PIND;
key&=0X3C;
switch(key)
{
case 0X38:
key=1;
break;
case 0X34:
key=2;
break;
case 0X2C:
key=3;
break;
case 0X1C:
key=4;
break;
default:
key=0;
}
while(key_press());
return key;
}
void paomadeng1()
{
unsigned char a;
DDRA=0xFF;
while(key_press()==0)
{
for(a=0;a<8;a++) //循环八次,完成一路跑马灯的亮
{
PORTA=~(1<<a); //简单的移位操作,让PORTA的值左移
delay(10); //延时时间与系统的主频有关
}
}
return;
}
void paomadeng2()
{
unsigned char a;
DDRA=0xFF;
while(key_press()==0)
{
for(a=0;a<8;a++) //循环八次,完成一路跑马灯的亮
{
PORTA=~(0X80>>a); //简单的移位操作,让PORTA的值左移
delay(10); //延时时间与系统的主频有关
}
}
return;
}
void laihui()
{
unsigned char k,m,n;
DDRA=0XFF;
while(key_press()==0)
{
for(k=1;k<4;k++)
{
PORTA=0XFF;
m=~(0x01<<k);
n=~(0x80>>k);
PORTA&=m&n;
delay(10);
}
for(k=3;k>=1;k--)
{
PORTA=0XFF;
m=~(0x01<<(k-1));
n=~(0x80>>(k-1));
PORTA&=m&n;
delay(10);
}
}
return;
}
int main()
{
uchar i,l;
DDRA|=0XFF;
PORTA=0XFF;
while(1)
{
i=key_press();
if(i)
{
l=key_scan();
switch(l)
{
case 1:
paomadeng1();
break;
case 2:
paomadeng2();
break;
case 3:
laihui();
break;
case 4:
PORTA=0X00;
break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -