#include <iom8v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
uchar table[4];
uint time;
uchar dw=16;
void delay1(void)
{
uint i;
for(i=0;i<50000;i++);
for(i=0;i<50000;i++);
}
void delay(void)
{uint i;
for(i=0;i<100;i++);}
void delay2(void)
{uint i;
for(i=0;i<1000;i++);}
void timeinit(void)
{
TCCR1B|=0X02;//8分频
TCNT1H=0XFF; //8MHZ晶振定时0.1ms
TCNT1L=0X9C;
TIMSK|=BIT(2);
SREG|=0X80;
}
# pragma interrupt_handler timer:9
void timer(void)
{
TCNT1H=0XFF; //8MHZ晶振定时0.1ms
TCNT1L=0X9C;
time++;
}
void int0init(void)
{
DDRD&=~BIT(2);//PD2设输入模式
PORTD|=BIT(2);//上拉电阻
MCUCR|=0X02;//下降沿触发
GICR|=BIT(6);//使能外部中断0
SREG|=BIT(7);//开全局中断
}
# pragma interrupt_handler int0:2
void int0(void)
{
uchar i,j,k;
GICR&=~BIT(6);
delay2();
if(PIND&BIT(2))
{
GICR|=BIT(6);
return;
}
while(!(PIND&BIT(2)))
{delay();}
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
while(PIND&BIT(2))
{delay();}
while(!(PIND&BIT(2)))
{delay();}
time=0;
while(PIND&BIT(2));
table[j]=table[j]>>1;
k=time;
if(k>=12)
{
table[j]=table[j]|0x80;
}
}
}
switch(table[2])
{
case 0x05:
PORTB=0x00;
break;
case 0x0d:
PORTB=0xff;
break;
case 0x11:
dw=20;
break;
}
GICR|=BIT(6);
}
void main(void)
{
DDRB|=0XFF;
PORTB|=0XFF;
DDRD|=BIT(0);
PORTD|=BIT(0);
timeinit();
int0init();
while(1)
{
PORTB=0xe7;
delay1();
PORTB=0xdb;
delay1();
PORTB=0xbd;
delay1();
PORTB=0x7e;
delay1();
}
}
此帖出自
小平头技术问答
一周热门 更多>