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

控制/MCU

1883人已加入

描述

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

#include

#include

#includePACe.h》

#include

#include


 

#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;

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分