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

📄 video_ctrler.c

📁 视频叠加处理源代码,用于在模拟视频信号上叠加字符信号
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/signal.h>
#include <avr/eeprom.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include "StdDefines.h"
#include "order_md.h"
#include "char_table.h"
#include "Main.h"

#define WatchdogReset() asm("wdr")	/* Macro substitution to kick the dog		*/
#define Wait() while(!(SPSR & (1<<SPIF)))
void clr_dsp_map(void);
void delay1(unsigned char i);
void test2(unsigned char i);
/* Static functions and variables */
void displaylarge(void);
void  read1_dsp_data(void);
unsigned char linect;						/* State of Delay function						*/
unsigned char print_line;				/* State of Delay function						*/
unsigned char maindelay,disply_1=0;				/* State of mainDelay function				*/
short ltemp,it;						/* State of Delay function						*/
short ntemp;						/* State of Delay function						*/
unsigned char timer_ct0=0,timer_ct1=0,flag_sign=0,errorflash=0,error_done=0;
extern 
/*$FUNCTION$*******************************************************************/
void test_time0(void);


void  read1_dsp_data(void)
{
unsigned char ii=0,ttemp=0,code_count=0,char_code=0,row_count=0;
unsigned char collum_count=0;
if(disp_buff[0]!=0xaa)
return;
clr_dsp_map();
collum_count=disp_buff[3];//起始列
ttemp=34-disp_buff[3];//剩余列
code_count=disp_buff[4];//显示字符个数
if(ttemp<code_count)
	{code_count=ttemp;}//应该显示的字符个数
for(row_count=0;row_count<16;row_count++)
	{WatchdogReset();
		ii=0;
		for(ttemp=0;ttemp<code_count;ttemp++)
		{ 
		 
	      char_code=disp_buff[ttemp+5];//
	      if(char_code>75)
	      {
	       char_code=(char_code-76)*2+76;
	       disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count*2]);
	       disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count*2+1]);
	      }
	      else
	      {
	        disp_tebmp[row_count][collum_count+(ii++)]=pgm_read_byte(&char_table[char_code][row_count]);
	      }
	 		if(ii>=34)
			break;

		 }
	
	}

}
	
void clr_dsp_map(void)
{unsigned char i,j;
  for(i=0;i<16;i++)
  {
  for(j=0;j<35;j++)
  {disp_tebmp[i][j]=0xff;}
  }
}


extern int	main(void)
{
	unsigned char temp1;
  	init_cpu();
	led_flag0=0;
	led_flag1=0;
	led_flag2=0;
	led_flag3=0;
    read1_dsp_data();	
	WatchdogReset();
	set_sleep_mode(SLEEP_MODE_IDLE);
	sei();
	do
	{
	sleep_mode();
    WatchdogReset();
	}while(1);

	return(1);
}	/* main */

void initial_eprom(void)
{
 unsigned int i;
 unsigned char judge[3],temp;

    for(i=0;i<3;i++)
	{
	eeprom_busy_wait();
    judge[i] = eeprom_read_byte(&etable_oritial[i]); /* 读 */
	eeprom_busy_wait();
	}
	temp=0;
    for(i=0;i<3;i++)
	{
	 if(judge[i]==0xaa)
	 temp=0xaa;
	 else
	 {
	 temp=0xbb;
	 break;
	 }
	}

	eprom_buf=etable_char;
	if(temp==0xbb)
	{
		for(i=0;i<364;i++)
		{
		eeprom_busy_wait();
		eeprom_write_byte(eprom_buf++, 0x00);
		}

	for(i=0;i<3;i++)
		{eeprom_busy_wait();
		eeprom_write_byte(&judge[i], 0xaa);
		}
	}
	eprom_buf=etable_char;
	bufftemp=disp_buff;
	for(i=0;i<364;i++)
	{ 
		eeprom_busy_wait();
        *bufftemp = eeprom_read_byte(eprom_buf++); 
		
	}
     eeprom_busy_wait();

}

void displaylarge(void)
{
  unsigned char temp=0,line=0;
   	if((char_line!=0)&((disp_buff[1])==(char_line-1)))
	{
	 line=linect-line_buff;
	 SPDR=disp_tebmp[line][0];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][1];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][1];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][2];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][3];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][4];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][5];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][6];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][7];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][8];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][9];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][10];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][11];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][12];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][13];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][14];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][15];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][16];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=disp_tebmp[line][17];
	 waitius2();
	 SPDR=0xff;
	 waitius2();
	 SPDR=0xff;


}
}
void display(void)
{
  unsigned char temp=0,line=0;

   	if((char_line!=0)&&((disp_buff[2])==(char_line-1))&&(error_done==0))
	{
	 line=linect-line_buff;
	 SPDR=disp_tebmp[line][0];
	 waitius2();
	
	 SPDR=disp_tebmp[line][1];
	 waitius2();
	 SPDR=disp_tebmp[line][2];
	 waitius2();
	
	 SPDR=disp_tebmp[line][3];
	 waitius2();
	
	 SPDR=disp_tebmp[line][4];
	 waitius2();
	 
	 SPDR=disp_tebmp[line][5];
	 waitius2();
	
	 SPDR=disp_tebmp[line][6];
	 waitius2();
	
	 SPDR=disp_tebmp[line][7];
	 waitius2();
	
	 SPDR=disp_tebmp[line][8];
	 waitius2();
	
	 SPDR=disp_tebmp[line][9];
	 waitius2();
	
	 SPDR=disp_tebmp[line][10];
	 waitius2();
	 SPDR=disp_tebmp[line][11];
	 waitius2();
	
	 SPDR=disp_tebmp[line][12];
	 waitius2();
	
	 SPDR=disp_tebmp[line][13];
	 waitius2();
	
	 SPDR=disp_tebmp[line][14];
	 waitius2();
	
	 SPDR=disp_tebmp[line][15];
	 waitius2();
	 SPDR=disp_tebmp[line][16];
	 waitius2();
	 SPDR=disp_tebmp[line][17];
	 waitius2();
	 SPDR=disp_tebmp[line][18];
	 waitius2();
	
	 SPDR=disp_tebmp[line][19];
	 waitius2();
	 
	 SPDR=disp_tebmp[line][20];
	 waitius2();
	
	 SPDR=disp_tebmp[line][21];
	 waitius2();
	
	 SPDR=disp_tebmp[line][22];
	 waitius2();
	 
	 SPDR=disp_tebmp[line][23];
	 waitius2();
	
	 SPDR=disp_tebmp[line][24];
	 waitius2();
	
	 SPDR=disp_tebmp[line][25];
	 waitius2();
	
	 SPDR=disp_tebmp[line][26];
	 waitius2();
	
	 SPDR=disp_tebmp[line][27];
	 waitius2();
	
	 SPDR=disp_tebmp[line][28];
	 waitius2();
	
	 SPDR=disp_tebmp[line][29];
	 waitius2();
	
	 SPDR=disp_tebmp[line][30];
	 waitius2();
	
	 SPDR=disp_tebmp[line][31];
	 waitius2();
	 SPDR=disp_tebmp[line][32];
	 waitius2();
	 SPDR=disp_tebmp[line][33];
	 waitius2();
	 SPDR=0xff;
	 waitius2();

}
else if(char_line==(disp_buff[2]+2))
	{



		if(disply_1>30)
	{
	     disply_1=0;
	if(disp_buff[0]==0xaa)
			{
	if(ad_op_begin!=0x01)
	 {
	 ad_op_begin=0x01;
  	 add_operations();
	 ad_op_begin=0x00;
  	
	 }
	 		 }
	  	
		}
		

	}

else
	{
	line=linect;
	if(disply_1>1)
	{if(line<0xf)
	{
	 if(line>0x0b)
	 {delay1(10);
	 temp=videobuff;
	  test2(temp);}
	}
	 if(line==35)
	 send_int_tocom();
	}
	}
}





SIGNAL(SIG_OVERFLOW0)
{
	TCNT0 = 185;
	TIMSK0 &= ~(1<<TOIE0);				/* Disable the timer0 interrupt		*/


}	




SIGNAL(SIG_INTERRUPT0)

{
	unsigned char i,j,line;
	sei();
	linect++;
	line=linect;	
	char_line=0;
    if((line > 34) && (line <= 50))
	{char_line=0x01;
	asm volatile (
	"nop\n\t"
	);}
	else if((line > 50) && (line <= 66))
	{char_line=0x02;
		asm volatile (
	"nop\n\t"
    "nop\n\t"
	);}
	else if((line > 66) && (line <= 82))
	{char_line=0x03;
	asm volatile (
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	);}
	else if((line > 82) && (line <= 98))
	{char_line=0x04;
			asm volatile (
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	
	);}
	else if((line >98) && (line <= 114))////????????????
	{char_line=0x05;
			asm volatile (
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	);}
	else if((line >114) && (line <= 130))
	{char_line=0x06;
			asm volatile (
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	
	);}
	else if((line >130) && (line <=146))//???????????/
	{char_line=0x07;
	asm volatile (
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	
	);
	}
	else if((line >146) && (line <=162))//恢复
	{char_line=0x08;
	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"
	"nop\n\t"
	"nop\n\t"



	);
	}
	else if((line >162) && (line <=178))//////12++++++++++++++
	{char_line=0x09;
			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"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	
	);
	}
	else if((line >178) && (line <= 194))///???????
	{char_line=0x0a;
			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"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	);
	}
	else if((line >194) && (line <= 210))
	{char_line=0x0b;
			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"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	
	
	);
	}
	else if((line >210) && (line <= 226))
	{char_line=0x0c;
			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"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"

	
	);
	}
	else if((line >226) && (line <= 242))
	{char_line=0x0d;
		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"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	"nop\n\t"
	);
	}
	else if(line >242)
	{
	linect=243;
//	char_line=0x0;
	char_line=0x0e;
	line=line-1;
	}

	line_buff=(char_line-1)*16+35;
	j=15-char_line;
	if(char_line!=0)
	{
	for(i=0;i<j;i++)
		 {
		 }
	
	}
	if(com_flag==0)
    {
	display();
	}
		if((timer_ct0>25)&&(errorflash==0))
	{
	timer_ct0=0;
	if(flag_sign==0)
	{flag_sign=0xff;}
	else
	{flag_sign=0x0;}
	flash_dsp_data(flag_sign);
	}
		if(timer_ct1>40)
	    {   timer_ct1=0;
		if(errorflash!=0)
		{
	
		
     	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)

{
sei();
linect = 0;
char_line=0;
disply_1++;	
if(com_flag==0x3)
com_flag=0;
timer_ct0++;
timer_ct1++;
led_fflash++;
if(led_fflash>0x20)	
{
led_fflash=0;
LED_0();}
}	


SIGNAL(SIG_OVERFLOW1)

{
   	TCNT1H=0XDF;

⌨️ 快捷键说明

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