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

📄 osddrow.c

📁 T112 MCU源程码,用于T112外接MCU篇程,用来驱动模拟屏
💻 C
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "TwoWire.h"
#include "TW10xReg.h"
#include "panel.h"
#include "timer0.h"
#include "DEF.H"


extern uCHAR VOL;
extern uCHAR Pauto;
extern uCHAR menu_num;
extern bit OSD_open;
extern bit AV;
extern code unsigned char *page1_Fonts[];

/****************************************************************************************************************************
											color for OSDDROW
****************************************************************************************************************************/

code unsigned char cOSDMenuLutData[]={
0x0f,0x00,  //1 blue
0x00,0x00,  //2 black
0x0f,0x0a,  //3 purple
0x0f,0x00,  //4 blue
0xf8,0x00,  //5 green
0x22,0x0A,  //6 red
0x1f,0x01,  //7 light blue//olive
0x88,0x05,  //8 light grey
0xb9,0x0b,  //9 purple
0xBD,0x05,  //A purple
0x0f,0x0f,  //B 
0xA3,0x0A, 	//C Yellow
0xcc,0x0c,  //D light grey
0x68,0x03,  //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
0xff,0x0f,  //F white
0x00,0x00,  //0
};

code unsigned char DIG[]={0,'1','2','3','4','5','6','7','8','9','0'};//digital
code unsigned char source1_font[]={'C','H','1'};
code unsigned char source2_font[]={'C','H','2'};
code unsigned char source3_font[]={'C','H','3'};
code unsigned char source4_font[]={'C','H','4'};
code unsigned char *source_font[]={source1_font,source2_font,source3_font,source4_font};

/*****************************************************************************/

void OSDLoadColor(void)
{
	uCHAR i;
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
  	for(i=0;i<32;i++)
	{
		I2CWriteByte(TW101,OSD_CFG_DATA,cOSDMenuLutData[i]);
	}
}

void OSDSetRamAddr(uWORD address)					///设置DATA_OSDRAM地址
{
	I2CWriteByte(TW101,OSD_RAM_AH,(uCHAR)(address>>8));		///0xa3
  	I2CWriteByte(TW101,OSD_RAM_AL,(uCHAR)(address & 0xff));		///0xa2
}

void OSDEnable(void)															///			使能OSD功能
{
	if(AV)
	{
		OSDCfgWr(OSD_CTRL,0x8d);
		AV=0;
	}
	else
		OSDCfgWr(OSD_CTRL,0x84);
	Timer0Start();
}

void OSDDisable(void)
{
	OSDCfgWr(OSD_CTRL,0x18);
}

void OSDCleanLine(uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)			///x为列地址,y为行地址
{
	if((x < 30) && ( y < OSD_LINE_NUM))									///OSD_LINE_NUM		=	10;
  	{
  		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);			///设置OSDRAM地址[ROW_ATTR_ADDR	= ROW_ADDR + COLU_ADDR)
     	twdWr_Burst_A(OSD_RAM_DL);      								/// Write OSD index		//写T112的数据口 note by chen	06'12'1
     	while((x < 30) && (x < cLength))
    	{
    		twdWr_Burst_D(BLANK);										///BLANK=0x3a/0x00;
       		twdWr_Burst_D(cColor);
       		x++;
    	}
    	twdWr_Burst_P();
	}
}

void send(uCHAR c,uCHAR cColor)
{
	if(c>0x40)			// Character
    	twdWr_Burst_D(c-IndexCharacterOffset);
	else if(c>=0x30)	// number
		twdWr_Burst_D(c-IndexNumOffset);  
	else				
		twdWr_Burst_D(c);
			
   	twdWr_Burst_D(cColor );
}	

void OSDShowLine(uCHAR *string,uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)
{
 	uCHAR c;
	if((x < 30) && ( y < OSD_LINE_NUM))
	{
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
		twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
     	while((*string) != 0xff && (x < cLength)){
		    c=*string++;
			send(c,cColor);
        	x++;
  		}
	}
   	twdWr_Burst_P();
}

void OSDShowDig(uCHAR x,uCHAR y,uCHAR cColor,uCHAR num)
{
	uCHAR c,b,d;
	d	=DIG[num/100];
	num	=num%100;
	c	=DIG[num/10];
	b	=DIG[num%10];
	if(d!=0&&c==0)c=DIG[10];
	if(b==0)b=DIG[10];
	if((x < 30) && ( y < OSD_LINE_NUM))
	{
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
		twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
		send(d,cColor);
		send(c,cColor);
		send(b,cColor);
	}
   	twdWr_Burst_P();
}

void OSDSetLineAttribute(uCHAR cLine,uCHAR cAttribute)			
{
    OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);	
    twdWr_Burst_A(OSD_RAM_DL);      	
    twdWr_Burst_D(0);			
    twdWr_Burst_D(cAttribute);		
	twdWr_Burst_P();		
}

void OSDPosition(uCHAR cPos)			
{	
	if(cPos==RIGHT_TOP){
		OSDCfgWr(CHAR_DLY_0,Y0RightTop);	
  		OSDCfgWr(CHAR_DLY_1,Y1RightTop);    
  		OSDCfgWr(CHAR_DLY_2,Y2RightTop);    
	}
	if(cPos==CENTER){
 		OSDCfgWr(CHAR_DLY_0,Y0Center); 		
  		OSDCfgWr(CHAR_DLY_1,Y1Center);    	
  		OSDCfgWr(CHAR_DLY_2,Y2Center);    	
	}
	else if(cPos==LEFT_BOTTOM){
  		OSDCfgWr(CHAR_DLY_0,Y0LeftBottom); 	
  		OSDCfgWr(CHAR_DLY_1,Y1LeftBottom);  
  		OSDCfgWr(CHAR_DLY_2,Y2LeftBottom);  
	}
}

void OSDShowSource(uCHAR P)			///显示选择源
{
	uCHAR i;
	AV=1;
    OSDDisable();
	for(i=0;i<10;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
	OSDPosition(RIGHT_TOP);	
   	OSDShowLine(source_font[P],1,0,0x0c,4);
	OSDEnable();
}

void OSDDrawGauge(uCHAR cVal, uCHAR cMax, uCHAR x, uCHAR y, uCHAR cColor)///进度条显示
{
	int index,i;
	int step_size=100/25;
	OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<< 5)+x);	
	twdWr_Burst_A(OSD_RAM_DL);      
	index= (int)cVal*25/(int)cMax;
	twdWr_Burst_D(34);
	twdWr_Burst_D(cColor);
    for(i=0;i<index;i++)
    {
	  	twdWr_Burst_D(2);
	  	twdWr_Burst_D(cColor);
    }
  	for(i=index;i<25;i++)
	{
	  	twdWr_Burst_D(1);
	  	twdWr_Burst_D(cColor);
	}
	twdWr_Burst_D(36);
	twdWr_Burst_D(cColor);
	
	twdWr_Burst_P();
}

void DRWA_VOL(uCHAR num,uCHAR max_num)			///进度条
{
	OSDPosition(LEFT_BOTTOM);
	{
		OSDShowLine(page1_Fonts[menu_num],0,0,0x06,10);		
		OSDShowDig(23,0,0x06,num);
		OSDDrawGauge(num,max_num, 0, 1, 0x06);
	}
	OSDEnable();
}

void OSDShowpage1(void)									
{
	OSDShowLine(page1_Fonts[0],0,0,0x06,28);
	OSDShowLine(page1_Fonts[6],0,1,0x06,28);
	if(Pauto==0)
	{
		OSDShowLine(page1_Fonts[8],18,1,0x06,28);
	}
	else
	{
		OSDShowLine(page1_Fonts[7],18,1,0x06,28);
	}
}
void OSDExit(void)
{
	uCHAR i;
	OSDCfgWr(OSD_CTRL,0x18);
	OSDCfgWr(0x10,0x00); 						///Disable window
	OSDDisable();
	for(i=0;i<10;i++)
  	{
  		OSDCleanLine(0,i,0,30);
    	OSDSetLineAttribute(i,0x80);
	}
}


⌨️ 快捷键说明

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