⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiaotongdeng.c

📁 一个简单的交通灯程序
💻 C
字号:
#include <avr/io.h>
#include <avr/delay.h> 
#include<avr/signal.h>
#include<avr/interrupt.h>
#define uchar unsigned char
#define uint  unsigned int
/////////////////////////////
#define SET_S_RED PORTC|=0x2
#define CLR_S_RED PORTC&=0xfd
#define SET_S_YELLOW PORTC|=0x1
#define CLR_S_YELLOW PORTC&=0xfe
#define SET_S_GREEN	PORTD|=0x80
#define CLR_S_GREEN PORTD&=0x7f

#define SET_W_RED PORTA|=0x80
#define CLR_W_RED PORTA&=0x7F
#define SET_W_YELLOW PORTA|=0x40
#define CLR_W_YELLOW PORTA&=0xbf
#define SET_W_GREEN	PORTA|=0x20
#define CLR_W_GREEN PORTA&=0xdf
void disp();
const uchar LEDcode[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
                       /* 0  ,   1,   2,  3,    4,  5,   6,   7,   8,    9*/
const uchar LEDctl[] = {0xfe,0xfd,0xfb,0xf7,0xff,0x00};
static uint num=0;
static uchar count=0;

int main(void)
{ PORTA = 0xff;
  DDRA = 0xff;
  PORTB = 0xff;
  DDRB  = 0xff;
  PORTC = 0xff;
  DDRC  = 0xff;
  PORTD = 0xff;
  DDRD  = 0xff;
  TCNT0=256-64;							//t/c0开始值
  TCCR0=_BV(CS02)|_BV(CS00);		//预分频ck/1024,计数允许
  TIMSK=_BV(TOIE0);
  sei();
  while(1)
  {
   disp();
   if(num<=20)
   {CLR_W_GREEN;SET_W_RED;CLR_S_RED;SET_S_YELLOW;} 
   else if(num>20&&num<=25)
   {SET_W_GREEN;CLR_W_YELLOW;}
   else if(num>25&&num<=45)
   {SET_W_YELLOW;CLR_W_RED;SET_S_RED;CLR_S_GREEN;}
   else {SET_S_GREEN;CLR_S_YELLOW;}
  }
}
/////////////////////////////////////////////
SIGNAL(SIG_OVERFLOW0)
{if(++count>14)
   {
    count=0;
	if(num++==50)num=0;
   }
 TCNT0=256-64;	
 }

////////////////////////////////////////
void disp()
{
 uchar i;
 uchar data[3]={0};
 data[0]=num%10;
 data[1]=(num/10)%10;
 data[2]=(num/100)%10;
 data[3]=(num/1000)%10;
 for(i=0;i<4;i++)
   { 
	 PORTB = LEDcode[data[i]];
     PORTD = LEDctl[i];
     _delay_ms(1);
   }
}

⌨️ 快捷键说明

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