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

📄 video_ctrler.c

📁 视频叠加处理源代码,用于在模拟视频信号上叠加字符信号
💻 C
📖 第 1 页 / 共 2 页
字号:
	TCNT1L=0X00; 
	timer1++;
}






SIGNAL(SIG_USART_RECV)
{
unsigned char temp;
temp=UDR0;

switch(com_flag)
{
case 0x0:
      if(temp==0x68)
     {com_flag=0x1;

	  
	 }
     break;

case 0x01:
    
     if(temp==0x02)
     {
	 recix_buf[0]=0x68;
	 recix_buf[1]=0x02;
	 recd_count=0x2;
	 com_flag=0x2;}
	 else
	 {com_flag=0x0;}
     break;
case 0x02:
 
	 recix_buf[recd_count++]=temp;
     if(recd_count==0x04)
      {
	  com_flag=0x0;
      temp=0x6a+recix_buf[2];
	  if(temp==recix_buf[3])
	  {
	  videobuff=recix_buf[2];
	  LED_1();
	  }

	  }
	 break;

default:
     if(temp==0x68)
     {com_flag=0x1;
	 
	 }
     break;
}


}








SIGNAL(SIG_USART_TRANS)
{
sei();
if(send_begin==1)
{
 
UDR0=send_buff[send_count++];
 if(send_count==send_length)
 { send_length=0;
   send_begin=0;
   send_count=0;
  }

  }

}


void init_cpu(void)
{
 
     
/*	PORT D - unused right now	*/
	PORTD = 0xFF;							/* Initial state is both LEDs off			*/
	DDRD  = 0xf2;							/* Data direction register for port D		*/
	PORTB = 0xfd;
    DDRB =  0xFF;							/* Initial state is both LEDs off			*/
//	uart initial  
	 
	  UBRR0H=00;
	  UBRR0L=47;//38400
	  UCSR0C=0X86;
	  UCSR0B=0XD8;
	  UCSR0A=0X02;

	MCUCR = 0;								/* Select AIN1 as neg. input					*/
//	ACSR = (1<<ACBG) | (1<<ACIE);		/* Select Bandgap for pos. input				*/


	CLKPR = 0x80; 							/* Timer0 clock prescale of 8					*/
    CLKPR = 0x00; 
	
	TCCR0A = 0x00;//定时器0不分频,
	TCCR0B = 0x01;


	TCNT0 = 135;
//	TIFR0 |= 1<<TOV0;						/* Clear any potential interrupt				*/
//	TIMSK0 |= 1<<TOIE0;
	TIMSK0 &= ~(1<<TOIE0);




	TCCR1A=0x00;//定时器1八分频
    TCCR1B=0x02;
	TCNT1H=0X00;
	TCNT1L=0XFF; 
//	TIFR1 |= 1<<TOV1;						/* Clear any potential interrupt				*/
//	TIMSK1 |= 1<<TOIE1;
//	TIMSK1 &= ~(1<<TOIE1);

    ADMUX=0x00;
	DIDR0=0x03;
	DIDR1=0x00;
	ADCSRA=0x07;
	ADCSRB=0x00;
    ADCSRA=ADCSRA|(1<<(ADEN));

	SPCR = (1<<SPE) | (1<<MSTR) | (1<<CPHA);
	SPSR = 1;

//	TIMSK0 = 1<<TOIE0;

	EICRA	= (1<<ISC01) + (1<<ISC11);	/* Set interrupt on falling edge 			*/
	EIMSK	= (1<<INT0) + (1<<INT1);	/* Enable interrupt for interrupt0			*/

/* Enable the watchdog timer */
	cli();			
	WatchdogReset();
	WDTCSR	= (1<<WDCE) | (1<<WDE);		/* Wake-up the watchdog register*/
	WDTCSR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
    WatchdogReset();
//	TIMSK1 &= ~(1<<TOIE1);
//	initial_eprom();


}





void send_char(char *s,char lendgth)
{
char temp2;
cli();
	for(temp2=0;temp2<lendgth;temp2++) 
	{
	while( !( UCSR0A & (1<<UDRE0)));
	UDR0=*s++;
	}
sei();

}

void rsp_com(unsigned char btye)
{
unsigned char i,t;
rsp_data[0]=0x5a;
rsp_data[1]=comm_rdata[3];
t=comm_rdata[7]+4;
for(i=0;i<t;i++)
{rsp_data[i+2]=comm_rdata[i+4];
}
t=t+2;
rsp_data[i+2]=btye;
send_char(disp_buff,30);

}


void del_ms(int ii)
{unsigned int temp;

for(temp=0;temp<ii;temp++)
{}

}
void waitius(void)
{
unsigned i;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
);

}





void add_operations(void)
{
unsigned char ii=0,row_count=0;
unsigned char collum_count=0;
//unsigned long temp;
unsigned long  temp1;

	cli();
	ADCSRA=ADCSRA&0x7f;
	ADMUX=0x00;
	ADCSRA=ADCSRA|((1<<ADEN)|(1<<ADSC));
	while(!(ADCSRA&(1<<ADIF)));
        add_rdata[0]=ADCL;
		add_rdata[1]=ADCH;


	    ADCSRA=ADCSRA|1<<ADIF;
		ADCSRA=ADCSRA&0x7f;
		ADMUX=0x01;
	ADCSRA=ADCSRA|((1<<ADEN)|(1<<ADSC));
	while(!(ADCSRA&(1<<ADIF)));
        add_rdata[4]=ADCL;
		add_rdata[5]=ADCH;
	
        ADCSRA=ADCSRA|1<<ADIF;
		ADCSRA=ADCSRA&0x7f;
		
		sei();
		temp1=add_rdata[1]*256+add_rdata[0];
	/*	if(temp1>0x200)
		{errorflash=1;}
		else
		{errorflash=0;}*/
		temp1=((temp1*500)/1024)*3.0+Adjust_voltage;
		add_rdata[0]=temp1/1000;
		add_rdata[1]=(temp1%1000)/100;
		add_rdata[2]=(temp1%100)/10;
		add_rdata[3]=temp1%10;

		temp1=add_rdata[5]*256+add_rdata[4];
		if(temp1<Low_voltage)
		{errorflash=1;
		flash_dsp_data(0xff);
		}
		else
		{errorflash=0;
		error_done=0x0;
		}
		temp1=((temp1*500)/1024)*6.0+Adjust_voltage;
		add_rdata[4]=temp1/1000;
		add_rdata[5]=(temp1%1000)/100;
		add_rdata[6]=(temp1%100)/10;
		add_rdata[7]=temp1%10;

if(disp_buff[0]!=0xaa)
	return;

collum_count=disp_buff[3];//起始列
temp1=collum_count;
for(ii=0;ii<(34-collum_count);ii++)
	{
	
	if(disp_buff[ii+4]>=0x4c)
	{temp1++;}
if(disp_buff[ii+4]==0x40)
		{
if(disp_buff[ii+5]==0x43)
   {
    collum_count=temp1+1;
	for(row_count=0;row_count<16;row_count++)
	{
		WatchdogReset();
		if(add_rdata[4]!=0)
		{disp_tebmp[row_count][collum_count+0]=pgm_read_byte(&char_table [add_rdata[4]][row_count]);}
		else
		{disp_tebmp[row_count][collum_count+0]=0xff;}
		disp_tebmp[row_count][collum_count+1]=pgm_read_byte(&char_table[add_rdata[5]][row_count]);
		disp_tebmp[row_count][collum_count+3]=pgm_read_byte(&char_table[add_rdata[6]][row_count]);
		disp_tebmp[row_count][collum_count+4]=pgm_read_byte(&char_table[add_rdata[7]][row_count]);
	}
   break;
   }
  		}
		temp1++;
	}





}


void LED_0(void)
{
if(led_flag0==0)
{
PORTD =PORTD|(1<<PD4);
led_flag0=0xff;
}
else
{
PORTD = PORTD&0xef;
led_flag0=0x0;
}
}

void LED_1(void)
{
if(led_flag1==0)
{
PORTD =PORTD|(1<<PD5);
led_flag1=0xff;
}
else
{
PORTD = PORTD&0xdf;
led_flag1=0x0;
}
}

void LED_2(void)
{
if(led_flag2==0)
{
PORTD =PORTD|(1<<PD1);
led_flag2=0xff;
}
else
{
PORTD = PORTD&0xfd;
led_flag2=0x0;
}
}


void LED_3(void)
{
if(led_flag3==0)
{
PORTD =PORTD|(1<<PD2);
led_flag3=0xff;
}
else
{
PORTD = PORTD&0xfb;
led_flag3=0x0;
}
}

unsigned char SET_disp_nchar(void)
{
	unsigned i;
	if(comm_rdata[5]>13)
	{return 0x00;}
	if(comm_rdata[6]>=34)
	{return 0x00;}
	if(comm_rdata[7]>=34)
	{return 0x00;}
	counter=comm_rdata[7]+4;
	disp_buff[0]=0xaa;
	for(i=0;i<counter;i++)
	{
	disp_buff[i+1]=comm_rdata[i+4];
	}
	read1_dsp_data();
	return 0xff;
	




}





void order_done(void)
{
	unsigned char temp,i,leng_ord;

	
	leng_ord=comm_rdata[1]-1;
	temp=0;
	for(i=0;i<leng_ord;i++)
	{
	temp=temp+comm_rdata[i];
	}
	if(temp!=comm_rdata[i])
    return;
	switch (comm_rdata[3])
	{ 
		case REST_PSW://复位
		     break;
		case DATE_PSW://日期显示
		     break;
	    case TIME_PSW://时间显示
		     break;
        case FIXED_PSW://固定字符显示
		     break;
        case SET_ROW_PSW://设行显示模式
		     break;
		case SET_DT_PSW://设置日期和时间
		     break;
	    case N_CHAR_PSW://显示N个字符
		     if(SET_disp_nchar()==0)
			 {
			 	WatchdogReset();
				rsp_com(0xbb);
			 }
			 else
			{	WatchdogReset();
				rsp_com(0xaa);
			 }
		     break;
        case ALL_LAP_PSW://全屏叠加起始位置读取
		     break;
        case RD_ALL_LAP_PSW ://全屏纵向放大设置
		     break;
		case ROOM_V_PSW://全屏纵向放大状态读取
		     break;
	    case RD_ROOM_V_PSW:
		     break;
        case RV_DEVICE_PSW://显示设备地址
		     break;
        case DAT_STATIC_PSW://ID码读取命令
		     break;
	    case RD_DAT_STATIC_PSW://日期静态设置
		     break;
        case TIM_STATIC_PSW://读日期静态设置参数
		     break;
        case RD_TIM_STATIC_PSW://时间静态设置
		     break;
	    case SET_FIX_PSW://读时间静态设置参数
		     break;
        case RD_SET_FIX_PSW://固定显示字符静态设置
		     break;

		default:
			  break;  





	

	}


}





void  flash_dsp_data(unsigned char j_byte)
{
unsigned char ii=0,row_count=0,tt;
unsigned char collum_count=0;
	collum_count=disp_buff[3];//起始列
	if(j_byte!=0)
	{tt=0x68;}
	else
	{tt=0x69;}
	tt=(tt-76)*2+76;
	for(row_count=0;row_count<16;row_count++)
	{
		WatchdogReset();
		disp_tebmp[row_count][collum_count+0]=pgm_read_byte(&char_table[tt][row_count*2]);
		disp_tebmp[row_count][collum_count+1]=pgm_read_byte(&char_table[tt][row_count*2+1]);
	
	}

}

void delay1(unsigned char i)
{unsigned temp;
for(temp=0;temp<i;temp++)
{}
}



void test2(unsigned char i)
{
asm volatile (
"cli\n\t"
"wdr\n\t"
"push r16\n\t"
"in     r16,0x3f\n\t"
"push r16\n\t"
"push r25\n\t"
"push r24\n\t"
"push r18\n\t"
"push r17\n\t"
"mov r17,r24\n\t"
"ldi r18,0x8\n\t"

"ldi r16,0xff\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"ldi r16,0xfd\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"ldi r16,0xff\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"ldi r16,0xfd\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
//"rcall sende_bbit\n\t"
"goon_mmbiy:\n\t"

"rol r17\n\t"
"brcs  goon_hbit\n\t"
"nop\n\t"
"ldi r16,0xfd\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"

"ldi r16,0xff\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"

"rjmp  goon_nbit\n\t"
"goon_hbit:\n\t"
"ldi r16,0xff\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"

"ldi r16,0xfd\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"rjmp  goon_nbit\n\t"
"goon_nbit:\n\t"
"dec r18\n\t"
"cp r18,0\n\t"
"brne goon_mmbiy\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"ldi r16,0xff\n\t"
"out 5,r16\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"ldi r16,0xfd\n\t"
"out 5,r16\n\t"


"pop  r17\n\t"
"pop  r18\n\t"
"pop  r24\n\t"
"pop  r25\n\t"
"pop  r16\n\t"
"out    0x3f,r16\n\t"
"pop	r16\n\t"
"sei\n\t"
);

}


void send_int_tocom(void)
{
com_flag=0;
send_buff[0]=0x68;
send_buff[1]=0x02;
send_buff[2]=0x1d;
 send_buff[3]=0x87;
 send_count=0;
 send_length=4;
 UDR0=send_buff[send_count++];
 send_begin=1;
 }

⌨️ 快捷键说明

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