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

📄 video_flap.c

📁 视频叠加处理源代码,用于在模拟视频信号上叠加字符信号
💻 C
📖 第 1 页 / 共 2 页
字号:
		
     	if(error_done==0)
		{error_done=0xff;}
        else
		{error_done=0x0;}	 
		}
		}
    
}	

void waitius2(void)
{
unsigned i;

i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;
i=SPSR;


}
/*


void waitius2(void)
{
unsigned char i;
asm volatile (
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"
"nop\n\t"





);
}*/

SIGNAL(SIG_INTERRUPT1)

{

linect = 0;
char_line=0;	
if(com_flag==0x3)
com_flag=0;
disply_1++;
timer_ct0++;
timer_ct1++;

}	


SIGNAL(SIG_OVERFLOW1)

{
   	TCNT1H=0XDF;
	TCNT1L=0X00; 
	timer1++;
}






SIGNAL(SIG_USART_RECV)
{
unsigned char temp;

temp=UDR0;

if(com_flag==0x2)
{
	
	comm_rdata[lens_comp++]=temp;
	timer1=0x0;
	if(lens_comp==(comm_rdata[1]))
	{//
	 order_done();
	 com_flag=0x3;
	}
}
else
{
	if(com_flag==0x1)
	{
	timer1=0x0;
	comm_rdata[0]=0x5a;
	comm_rdata[1]=temp;
	lens_com=temp;
	lens_comp=2;
	com_flag=0x2;
	}
	else
	{
		if(temp==0x5a)
		{com_flag=0x1;
		timer1=0x0;
		}
	}

}








}
SIGNAL(SIG_USART_TRANS)
{
unsigned char temp;
temp=UCSR0A;


}


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 = 0xff;
    DDRB =  0xFF;							/* Initial state is both LEDs off			*/
//	uart initial  
	 
	  UBRR0H=00;
	  UBRR0L=0xbf;
	  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)*3.0+Adjust_voltage;
		
	//	temp1=add_rdata[5];
	//	temp1=((temp1*256+add_rdata[4])*500)/1024;
		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<<PD0);
led_flag0=0xff;
}
else
{
PORTD = PORTD&0xef;
led_flag0=0x0;
}
}

void LED_1(void)
{
if(led_flag1==0)
{
PORTD =PORTD|(1<<PD0);
led_flag1=0xff;
}
else
{
PORTD = PORTD&0xfe;
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 test_com(void)
{
unsigned char temp;
temp=tst_rdata[it++];
if(com_flag==0x2)
{
	
	comm_rdata[lens_comp++]=temp;
	if(lens_comp==(comm_rdata[1]+1))
	{com_flag=0x3;}
}
else
{
	if(com_flag==0x1)
	{
	comm_rdata[0]=0x5a;
	comm_rdata[1]=temp;
	lens_com=temp;
	lens_comp=2;
	com_flag=0x2;
	}
	else
	{
		if(temp==0x5a)
		{com_flag=0x1;}
	}

}
}

void  ufix_dsp_data(void)
{
unsigned char ii=0,row_count=0,tt;
unsigned char collum_count=0;
if(disp_buff[0]!=0xaa)
return;

collum_count=disp_buff[3];//起始列
tt=collum_count;
for(ii=0;ii<(34-collum_count);ii++)
	{
	
	if(disp_buff[ii+4]>=0x4c)
	{tt++;}
if(disp_buff[ii+4]==0x40)
		{
if(disp_buff[ii+5]==0x43)
   {
    collum_count=tt+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;
   }
  		}
		tt++;
}

}


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]);
	
	}

}


⌨️ 快捷键说明

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