📄 osd.c
字号:
/*======================
OSD.c
======================*/
#include <macros.h>
#include "mtv048.h"
extern void iic_init(void);
extern unsigned char iic_start(void);
extern unsigned char iic_send(unsigned char x);
extern unsigned char iic_receive(void);
extern void iic_stop(void);
/*==========================================
write_custom_char()
==========================================*/
void write_custom_char(unsigned char j,unsigned char *x)
{
register unsigned char i;
iic_init();
iic_start();
iic_send(0x7a);
iic_send(0xc0+j);
iic_send(0x40);
for(i=0;i<36;i++)
iic_send(*(x++));
iic_stop();
WDR();
}
/*==========================================
OSD_init()
==========================================*/
void OSD_init(void)
{
iic_init();
iic_start();
iic_send(0x7a);
iic_send(0x8f);
iic_send(17);
iic_send(0xfb);
iic_stop();
}
/*==========================================
OSD_window(unsigned char x)
x==0 频道/视频源
x==1 菜单
x==2 音量
==========================================*/
void OSD_window(unsigned char x)
{
register unsigned char i;
unsigned char osd_init_code[26]={
// ADL ROW COL 00 , 01 , 02 , 03 , 04 , 05 , 06 , 07 , 08 , 09 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18, 19 , 20 , 21 , 22
0x7a,0x8f,0x40,0x0a,0x05,0xc1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x0a,0x00,0x24,0x00,0x91,0xd1,0x00,0x00,0x00,0x00};
// 0x7a,0x8f,0x40,0x00,0x05,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x19,0x00,0x21,0x00,0xd0,0xdd,0x00};//,0x01,0xff,0xff};
switch(x)
{
case 0: //x==0 频道/视频源
osd_init_code[03]=0x00; //高1
osd_init_code[05]=0x48; //宽10
osd_init_code[15]=0x09; //右上
osd_init_code[16]=0x2c;
break;
case 1: //x==1 菜单
osd_init_code[03]=0x06; //高7
osd_init_code[05]=0x70; //宽15
osd_init_code[15]=0x18; //居中
osd_init_code[16]=0x1f;
break;
case 2: //x==2 音量
osd_init_code[03]=0x00; //高1
osd_init_code[05]=0x78; //宽16
osd_init_code[15]=0x3a; //下中
osd_init_code[16]=0x20;
break;
}
// osd_init_code[5]|=2;
OSD_init();
iic_init();
iic_start();
for(i=0;i<26;i++)
{
iic_send(osd_init_code[i]);
}
iic_stop();
}
/*==========================================
OSD_out_1row()//输出一行
row 行号
col 列号
extent 输出字符数量
string 输出内容
size 字体大小
==========================================*/
unsigned char OSD_out_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char size,unsigned int *string)
{
unsigned char mid;
register unsigned char j;
mid=size+1;
extent<<=size;
iic_init();
if(iic_start()==0)
return 0;
if(iic_send(0x7a)==0)
return 0;
if(iic_send(row+0x80)==0)
return 0;
if(iic_send(30)==0)
return 0;
if(iic_send(size*3)==0)
return 0;
iic_stop();
if(iic_start()==0)
return 0;
if(iic_send(0x7a)==0)
return 0;
if(iic_send(row+0x80)==0)
return 0;
for(j=0;j<extent;j++)
{
if(iic_send(j+col+(0x20*((*(string+j/mid))/256)))==0)
return 0;
if(iic_send(*(string+j/mid))==0)
return 0;
}
iic_stop();
/////////////////////
return 0xff;
}
/*==========================================
OSD_out_num()//输出二位数字
row 行号
col 列号
value 数值
size 字体大小
==========================================*/
unsigned char OSD_out_num(unsigned char row,unsigned char col,unsigned char value,unsigned char size)
{
iic_init();
if(iic_start()==0)
return 0;
if(iic_send(0x7a)==0)
return 0;
if(iic_send(row+0x80)==0)
return 0;
if(iic_send(30)==0)
return 0;
if(iic_send(size*3)==0)
return 0;
iic_stop();
if(iic_start()==0)
return 0;
if(iic_send(0x7a)==0)
return 0;
if(iic_send(row+0x80)==0)
return 0;
if(iic_send(col+0x40)==0)
return 0;
if(iic_send(conversion_char(value/10))==0)
return 0;
if(size!=0)
{
if(iic_send(conversion_char(value/10))==0)
return 0;
}
if(iic_send(conversion_char(value%10))==0)
return 0;
if(size!=0)
{
if(iic_send(conversion_char(value%10))==0)
return 0;
}
iic_stop();
/////////////////////
return 0xff;
}
/*==========================================
guage_num()//数码进度条
row 行号
col 列号
value 数值
size 字体大小
==========================================*/
unsigned char gauge_num(unsigned long value)
{
unsigned long int x;
unsigned char tmpbuf[13]={0x7a,0x85,0x42};
unsigned char j;
x=(value*625);
for(j=0;j<8;j++)
{
tmpbuf[11-j]=x%10;
x=x/10;
}
for(j=3;j<7;j++)
{
tmpbuf[j]=tmpbuf[j+1];
}
for(j=3;j<12;j++)
{
tmpbuf[j]=conversion_char(tmpbuf[j]);
}
tmpbuf[7]=_dot;
tmpbuf[11]=_M;
tmpbuf[12]=0x84;
iic_init();
if(iic_start()==0)
return 0;
for(j=0;j<13;j++)
{
if(iic_send(tmpbuf[j])==0)
return 0;
}
iic_stop();
/////////////////////
return 0xff;
}
/*==========================================
OSD_color_1row()//设置一行属性
row 行号
col 列号
extent 属性字符数量
fg_color 字体颜色
bg_color 背景颜色
==========================================*/
unsigned char OSD_attrib_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char fg_color,unsigned char bg_color)
{
register unsigned char j=0;
iic_init();
if(iic_start()==0)
return 0;
if(iic_send(0x7a)==0)
return 0;
if(iic_send(row+0xa0)==0)
return 0;
if(iic_send(0x40+col)==0)
return 0;
for(j=0;j<extent;j++)
{
if(iic_send(fg_color+(bg_color<<4))==0)
return 0;
}
iic_stop();
return 0xff;
}
/*==========================================
OSD_off()
==========================================*/
void OSD_off(void)
{
iic_start();
iic_send(0x7a);
iic_send(0x8f);
iic_send(17);
iic_send(0x7b);
iic_stop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -