📄 jiaotongdeng.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 + -