demo.c

来自「avr单片机的一些实际应用源码」· C语言 代码 · 共 117 行

C
117
字号
#include <avr/io.h>
#include <avr/delay.h>

#define uint unsigned int
#define uchar unsigned char

#ifdef BASE_BORD

	#define SET_RED_LED cbi(PORTC,2);
	#define CLR_RED_LED sbi(PORTC,2);

	#define SET_LFT_LED cbi(PORTC,1);
	#define CLR_LFT_LED sbi(PORTC,1);

	#define SET_RIT_LED cbi(PORTC,3);
	#define CLR_RIT_LED sbi(PORTC,3);
#else
	#define SET_RED_LED cbi(PORTB,2);
	#define CLR_RED_LED sbi(PORTB,2);

	#define SET_LFT_LED cbi(PORTB,1);
	#define CLR_LFT_LED sbi(PORTB,1);

	#define SET_RIT_LED cbi(PORTB,0);
	#define CLR_RIT_LED sbi(PORTB,0);
#endif

#define FREQ 4

void DelayMs(uint ms)
{
	uint i;
	for(i=0;i<ms;i++)
		_delay_loop_2(FREQ *250);
}

int main(void)
{
	uchar i;
	
	DDRC=0XFF;
	PORTC=0XFF;
	
	DDRB=0XFF;
	PORTB=0XFF;
	
	while(1)
	{
#ifdef BASE_BORD
		//三个灯逐一闪
		for(i=1;i<4;i++)
		{
			PORTC=0xff;
			PORTC&=~_BV(i);
			DelayMs(500);
		}
#else
		for(i=0;i<3;i++)
		{
			PORTB=0XFF;
			PORTB&=~_BV(i);
			DelayMs(500);
		}
#endif
		//每一闪两次,循环2次
		for(i=0;i<2;i++)
		{
			PORTC=0XFF;
			
			SET_LFT_LED;
			DelayMs(500);
			CLR_LFT_LED;
			DelayMs(500);
			SET_LFT_LED;
			DelayMs(500);
			CLR_LFT_LED;
			
			SET_RED_LED;
			DelayMs(500);
			CLR_RED_LED;
			DelayMs(500);
			SET_RED_LED;
			DelayMs(500);
			CLR_RED_LED;

			SET_RIT_LED;
			DelayMs(500);
			CLR_RIT_LED;
			DelayMs(500);
			SET_RIT_LED;
			DelayMs(500);
			CLR_RIT_LED;			
		}
		
		SET_RED_LED;
		DelayMs(500);
		CLR_RED_LED;
		DelayMs(500);
		SET_RED_LED;
		DelayMs(500);
		CLR_RED_LED;
		
		SET_LFT_LED;
		SET_RIT_LED;
		DelayMs(500);
		CLR_LFT_LED;
		CLR_RIT_LED;
		DelayMs(500);
		SET_LFT_LED;
		SET_RIT_LED;
		DelayMs(500);
		CLR_LFT_LED;
		CLR_RIT_LED;
		DelayMs(500);				
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?