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

📄 xieyingdong.c

📁 通过avr单片机的定时器
💻 C
字号:
#include <avr/io.h>
#include<avr/delay.h>
#include<avr/interrupt.h>
#include<avr/signal.h>
#define  uchar unsigned char
#define  uint  unsigned int


uchar time[4];					
uchar dis_buff[6];				
uchar time_counter;				
uint point_on;
uchar flag;					

uchar  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
		           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar  position[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};				   
void delay(uint ms)
{
        uint i,j;
	for(i=0;i<ms;i++)
	   _delay_loop_2(4*250);
}


void display()
{
    uchar i;
	for(i=0;i<=5;i++)
	{
	   PORTA|=_BV(PA3);	  
	   PORTB=table[dis_buff[i]];
	   if(point_on&&(i==1||i==3))
	   PORTB=0X80;
	   PORTA&=~_BV(PA3);
	  
	   PORTA&=~_BV(PA3);
	   PORTA|=_BV(PA4);
	   PORTB=position[i];
	   PORTA&=~_BV(PA4);
	   delay(1);
	   PORTA|=_BV(PA4);
	   PORTB=0XFF;
	   PORTA&=~_BV(PA4);	  
	}
}


void time_to_disbuff()
{
   uchar i ,j=0;
   for(i=3;i>0;i--)
   {
      dis_buff[j++]=time[i]/10;
	  dis_buff[j++]=time[i]%10;
   }
}


ISR(TIMER0_OVF_vect)
{
  TCNT0=0;
  flag++;
}

void main()
{
   DDRA|=_BV(PA3);
   DDRA|=_BV(PA4);
   DDRB=0XFF;
   PORTB=0XFF;
   TCCR0=0X05;
   TCNT0=0;
   
   TIMSK=0X01;
   sei();

   time[3]=23;
   time[2]=56;
   time[1]=55;
   time_to_disbuff();
  
   while(1)
   {
       display();
	   point_on=~point_on;
	   if(flag==30)
	   {
	      flag=0;	 
		  if(++time[1]>=60)
		  {
		     time[1]=0;
			 
			 if(++time[2]>=60)
			 {
			    time[2]=0;
				if(++time[3]>=24)
				{
				   time[3]=0;
				}
			 }
		  }
		  time_to_disbuff();
	   }
	   delay(1);
   }
}

⌨️ 快捷键说明

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