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

📄 osd.c

📁 7"车载液晶电视机 控制程序源码 WinRar3.2压缩 MCU ATMega8
💻 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 + -