avr单片机的数码管显示时钟设计

//数码管数据P0口,数码管控制P2口

#include

#include

#includePACe.h》

#include

#include

avr单片机的数码管显示时钟设计
 

#definecodePROGMEM

#defineucharunsignedchar

#defineuintunsignedint

codeconstucharLED_7[16]={0x28,0x7E,0xA2,0x62,0x74,0x61,0x21,0x7A,0x20,0x60,0xff};//commonof+

codeconstucharposition[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

ucharTIme[4];//时间计数

volaTIleuchardisp_buff[8];//显示缓冲区

volaTIleucharTIme_count=0;

volatileucharpoint_on=0;

volatileucharposit=0;

volatileuchartime_10ms_ok=0;

voidtime_to_dispbuff(void);

voidtime1_init(void);

voidtime0_init(void);

voiddisplay(void);

intmain(void)

{

PORTA=0xff;

DDRA=0xff;

PORTC=0xff;

DDRC=0xff;

time[0]=00;//1/10sec

time[1]=30;//sec

time[2]=59;//minute

time[3]=23;//hour

time_to_dispbuff();

time1_init();

sei();

while(1)

{

if(time_10ms_ok)

{

time_10ms_ok=0;

if(++time[0]》=100)

{

time[0]=0;

point_on=~point_on;

if(++time[1]》=60)

{

time[1]=0;

if(++time[2]》=60)

{

time[2]=0;

if(++time[3]》=24)

{

time[3]=0;

}

}

}

}

time_to_dispbuff();

}

}

}

voidtime0_init(void)

{

TCCR0=0x05;

TCNT0=0xea;

TIFR|=0x02;

TIMSK|=0x02;

}

voidtime1_init(void)

{

TCCR1A=0x00;

TCCR1B=0x01;

TCNT1=0xa99a;

//TCNT1H=0xa9;

//TCNT1L=0x9a;

TIFR|=0x80;

TIMSK|=0x80;

}

SIGNAL(SIG_OVERFLOW1)

{

TCNT1=0xa99a;

display();

if(++time_count》=5)

{

time_10ms_ok=1;

time_count=0;

}

}

voiddisplay(void)

{

PORTC=0xff;

PORTA=pgm_read_byte(&led_7[disp_buff[posit]]);

if(point_on&&((posit==2)||(posit==4)||(posit==6)))PORTA&=0x7f;

PORTC=pgm_read_byte(&position[posit]);

if(++posit》=8)posit=0;

}

voidtime_to_dispbuff(void)

{

uchari,j=0;

for(i=0;i《=3;i++)

{

disp_buff[j++]=time[i]%10;

disp_buff[j++]=time[i]/10;

}

}

  • avr单片机的数码管显示时钟设计已关闭评论
    A+
发布日期:2019年07月14日  所属分类:参考设计