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

📄 display.c

📁 液晶显示程序,开发平台是DSP,640X480格式
💻 C
字号:
#include "stdhead.h"

#include <fvid.h>
#include <edc.h>
#include <vport.h>
#include <vportcap.h>
#include <vportdis.h>
#include <saa7105.h>
#include <saa7115.h> 


#include <evmdm642.h>

#include "evmdm642_vdisparams.h"  
#include "char_lib.h"         
#include "musicsource.h"
#include "font.h"

#define WHITE_Y        180
#define WHITE_CB       128
#define WHITE_CR       128 

#define YELLOW_Y       162
#define YELLOW_CB      44
#define YELLOW_CR      142 

#define CYAN_Y         131
#define CYAN_CB        156
#define CYAN_CR        44 

#define GREEN_Y        112
#define GREEN_CB       72
#define GREEN_CR       58 

#define MAGENTA_Y       84
#define MAGENTA_CB     184
#define MAGENTA_CR     198 

#define RED_Y          65
#define RED_CB         100
#define RED_CR         212 

#define BLUE_Y          35
#define BLUE_CB        212
#define BLUE_CR        114 

#define BLACK_Y        17
#define BLACK_CB       128
#define BLACK_CR       128  

void display_character( unsigned char character[32], Int row, Int volume, FVID_Frame *disFrameBuf)
{
	Uint32 i = 0;
	Int x,y;
	unsigned char m_even[32];
	unsigned char m_odd[32];
	unsigned char m[64];
	unsigned char buf[64][4];
	
	for( i=0; i<32; i++)
	{
		m_even[i] = character[i]/16;
		m_odd[i] = character[i]%16;
		m[2*i] = m_even[i];
		m[2*i+1] = m_odd[i];
	}               
	
	for( i=0; i<64; i++)
	{
		switch(m[i])
		{
		case 0x0:
			buf[i][0] = 17;
			buf[i][1] = 17;    
			buf[i][2] = 17;
			buf[i][3] = 17;     
			break;
		case 0x1:
			buf[i][0] = 17;
			buf[i][1] = 17;    
			buf[i][2] = 17;
			buf[i][3] = 180; 
			break;    
		case 0x2:
			buf[i][0] = 17;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 17;      
			break;    
		case 0x3:
			buf[i][0] = 17;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 180;     
			break;     
		case 0x4:
			buf[i][0] = 17;
			buf[i][1] = 180;              
			buf[i][2] = 17;          
			buf[i][3] = 17;             
			break;  
		case 0x5:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;     
		case 0x6:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 17;       
			break;   
		case 0x7:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;    
		case 0x8:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 17;     
			buf[i][3] = 17;     
			break;     
		case 0x9:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;     
		case 0xA:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 17;       
			break;  
		case 0xB:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;  
		case 0xC:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 17;       
			break; 
		case 0xD:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;   
		case 0xE:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 17;         
			break;   
		case 0xF:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;      
        default:
            break;
			
		}           
	}   
	
	for( x=row; x<row+16; x++ )
	{
		for( y=volume; y<volume+4; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*4][y-volume])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*4][y-volume];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*4][y-volume])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*4][y-volume];//RED_Y;
		}	 
		for( y=volume+4; y<volume+8; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*4+1][y-volume-4])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*4+1][y-volume-4];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*4+1][y-volume-4])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*4+1][y-volume-4];//RED_Y;
		}	 
		for( y=volume+8; y<volume+12; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*4+2][y-volume-8])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*4+2][y-volume-8];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*4+2][y-volume-8])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*4+2][y-volume-8];//RED_Y;
		}	 
		for( y=volume+12; y<volume+16; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*4+3][y-volume-12])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*4+3][y-volume-12];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*4+3][y-volume-12])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*4+3][y-volume-12];//RED_Y;
		}	 
	}    
	
}                                        

void display_number( unsigned char number[16], Int row, Int volume, FVID_Frame *disFrameBuf)
{
	Uint32 i = 0;
	Int x,y;
	unsigned char m_even[16];
	unsigned char m_odd[16];
	unsigned char m[32];
	unsigned char buf[32][4];
	
	for( i=0; i<16; i++)
	{
		m_even[i] = number[i]/16;
		m_odd[i] = number[i]%16;
		m[2*i] = m_even[i];
		m[2*i+1] = m_odd[i];
	}               
	
	for( i=0; i<32; i++)
	{
		switch(m[i])
		{
		case 0x0:
			buf[i][0] = 17;
			buf[i][1] = 17;    
			buf[i][2] = 17;
			buf[i][3] = 17;     
			break;
		case 0x1:
			buf[i][0] = 17;
			buf[i][1] = 17;    
			buf[i][2] = 17;
			buf[i][3] = 180; 
			break;    
		case 0x2:
			buf[i][0] = 17;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 17;      
			break;    
		case 0x3:
			buf[i][0] = 17;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 180;     
			break;     
		case 0x4:
			buf[i][0] = 17;
			buf[i][1] = 180;              
			buf[i][2] = 17;          
			buf[i][3] = 17;             
			break;  
		case 0x5:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;     
		case 0x6:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 17;       
			break;   
		case 0x7:
			buf[i][0] = 17;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;    
		case 0x8:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 17;     
			buf[i][3] = 17;     
			break;     
		case 0x9:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;     
		case 0xA:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 17;       
			break;  
		case 0xB:
			buf[i][0] = 180;
			buf[i][1] = 17;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;  
		case 0xC:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 17;       
			break; 
		case 0xD:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 17;     
			buf[i][3] = 180;     
			break;   
		case 0xE:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 17;         
			break;   
		case 0xF:
			buf[i][0] = 180;
			buf[i][1] = 180;         
			buf[i][2] = 180;     
			buf[i][3] = 180;      
			break;      
        default:
            break;
		}           
	}   
	
	for( x=row; x<row+16; x++ )
	{
		for( y=volume; y<volume+4; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*2][y-volume])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*2][y-volume];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*2][y-volume])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*2][y-volume];//RED_Y;
		}	 
		for( y=volume+4; y<volume+8; y++ )
		{
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2))<=buf[(x-row)*2+1][y-volume-4])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + (y<<2)) = buf[(x-row)*2+1][y-volume-4];//RED_Y;
			if(*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2))<=buf[(x-row)*2+1][y-volume-4])
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * x + 2 + (y<<2)) = buf[(x-row)*2+1][y-volume-4];//RED_Y;
		}	 
	}    
	
}        

void display_key(unsigned char number, Int row, Int volume, FVID_Frame *disFrameBuf)
{
	switch( number )
	{
		case 0x00:
			display_number(number_0,row,volume,disFrameBuf);
			break;     
		case 0x01:
			display_number(number_1,row,volume,disFrameBuf);
			break;     
		case 0x02:
			display_number(number_2,row,volume,disFrameBuf);
			break;     
		case 0x03:
			display_number(number_3,row,volume,disFrameBuf);
			break;     
		case 0x04:
			display_number(number_4,row,volume,disFrameBuf);
			break;     
		case 0x05:
			display_number(number_5,row,volume,disFrameBuf);
			break;     
		case 0x06:
			display_number(number_6,row,volume,disFrameBuf);
			break;     
		case 0x07:
			display_number(number_7,row,volume,disFrameBuf);
			break;     
		case 0x08:
			display_number(number_8,row,volume,disFrameBuf);
			break;     
		case 0x09:
			display_number(number_9,row,volume,disFrameBuf);
			break;          	
		default: break;	
	}          	
}     

void display_color(FVID_Frame *disFrameBuf) 
{
	Int i,j;  
	for(i = 0; i < (EVMDM642_vDisParamsChan.imgVSizeFld1); i++)
	{//RED
		for(j = 0; j < ((EVMDM642_vDisParamsChan.imgHSizeFld1)>>1); j++)
		{
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + (j<<2)) = BLUE_Y;
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 1 + (j<<2)) = BLUE_CB-128;
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 2 + (j<<2)) = BLUE_Y;
			*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 3 + (j<<2)) = BLUE_CR-128;
		}
	}              

}                   

void displayAlarmingType( unsigned char byCh, FVID_Frame *disFrameBuf )
{
	int i;
	for( i=0; i<4; i++ )
	{
		if(byWarningType[byCh][i] != 0)
			display_character( characterLib+GBK_getOffset(byWarningType[byCh][i]), 200, 20+i*30, disFrameBuf );
	}
}

void datcpy(FVID_Frame *disFrameBuf)   
{
	Int i;
	for(i = 0; i < EVMDM642_vDisParamsChan.imgVSizeFld1; i++)
	{
		*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i) = 0x03;
		*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 1) = 0x00;
		*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 2) = 0x03;
		*(disFrameBuf->frame.rpFrm.buf + (EVMDM642_vDisParamsChan.imgHSizeFld1<<1) * i + 3) = 0x00;
	}
}                    

⌨️ 快捷键说明

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