ATTiny13 頭文件
#include
#include
#define RED_SET PORTB |= (1 << PB0) //位置高
#define RED_CLR PORTB &= ~(1 << PB0) //位置低
#define GREEN_SET PORTB |= (1 << PB1) //位置高
#define GREEN_CLR PORTB &= ~(1 << PB1) //位置低
#define BLUE_SET PORTB |= (1 << PB2) //位置高
#define BLUE_CLR PORTB &= ~(1 << PB2) //位置低
#define KEY_OUT DDRB |= (1 << PB3) //位置高
#define KEY_IN DDRB &= ~(1 << PB3) //位置低
#define KEY_SET PORTB |= (1 << PB3) //位置高
#define KEY_RD PINB & (1 << PB3) //位讀取
#define PUD_SET MCUCR |= (1 << PUD) //位置高
void delay2s();
int main()
{
//第一步,初始化
DDRB = 0b00000111; //設置輸入輸出方向,PB0-2為輸出,其他為輸入
PORTB = 0x00;
PUD_SET;
//第二步,按時序顯示七彩跳閃
while (1)
{
// if (PINB3) //如果沒有按鍵按下
{
// PORTB = 0b00000111; //PB0-2輸出高電平供電
RED_SET;
GREEN_SET;
BLUE_SET;
delay2s();
//PORTB = 0b00000101;
GREEN_CLR;
delay2s();
//PORTB = 0b00000011;
BLUE_CLR;
GREEN_SET;
delay2s();
//PORTB = 0b00000001;
GREEN_CLR;
delay2s();
//PORTB = 0b00000110;
RED_CLR;
GREEN_SET;
BLUE_SET;
delay2s();
//PORTB = 0b00000100;
GREEN_CLR;
delay2s();
//PORTB = 0b00000010;
GREEN_SET;
BLUE_CLR;
delay2s();
}
}
}
void delay2s()
{
int i;
int j;
for(i=0xA0;i>0;i--)
{
KEY_OUT;
KEY_SET;
KEY_IN;
_delay_ms(1);
j=PINB;
if(j<0x08) //按下
{
while (j<0x08){
KEY_OUT;
KEY_SET;
KEY_IN;
_delay_ms(1);
j=PINB;} //等待按鍵釋放
KEY_OUT;
KEY_SET;
KEY_IN;
_delay_ms(1);
j=PINB;
while (j>0x08)
{KEY_OUT;
KEY_SET;
KEY_IN;
_delay_ms(1);
j=PINB;};//等待再次按下按鍵
while (j<0x08){
KEY_OUT;
KEY_SET;
KEY_IN;
_delay_ms(1);
j=PINB;
} //再次按下按鍵
}
}
}