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

📄 st9306.c

📁 以ST公司CPU为核心的彩色电视机的完整源程序。
💻 C
字号:
#include "tv_glob.h"
#include "st92196.h"
#include "register.h"
#include "osdconst.h"
#include "osdchar.h"
#include "osddrv.h"
#include "st9306.h"
#include "eeprom.h"
#include "i2c_bus.h"
#include "osdutil.h"
#include "utility.h"

unsigned char v_amp_60_ec;
unsigned char v_sh_60_ec;
unsigned char v_amp_50_ec ;   
unsigned char v_sh_50_ec ;    
unsigned char v_sc ;    
unsigned char v_cc ;    
unsigned char ew_wth ;  
unsigned char ew_amp ; 
unsigned char ew_shape ;
unsigned char ew_trap ; 

void write_st9306(unsigned char subaddr,unsigned char value)
{
   unsigned char repeaterr;
   repeaterr = I2C_REPEAT_NUM;
   while(repeaterr--)
       {
       if(!I2cCheck()) continue; /* the bus can use or not */
       I2cSendByte(ST9306_DEVICE_ADDRESS,STARTTRUE,STOPFALSE);
       I2cSendByte(subaddr,STARTFALSE,STOPFALSE);
       I2cSendByte(value,STARTFALSE,STOPTRUE);
       if( I2cOK() ) break; /* if the operation is done correctly ,exit loop */
       }
}

void write_st9306_all(void)
{
        unsigned char tmp;
        write_st9306(0,v_amp_50_ec|0x01);

        if(v_sh_50_ec<0x80)
            tmp = (~v_sh_50_ec)&(0x78);
        else
            tmp = v_sh_50_ec;
        write_st9306(0x20,tmp|0x01);

        write_st9306(0x40,v_sc|0x01);

        if(v_cc<0x80)
            tmp = (~v_cc)&(0x70);
        else
            tmp = v_cc;
        
        write_st9306(0x60,tmp|0x01|0x08);
        
        tmp = (~ew_wth)&0xf8;
        write_st9306(0x80,tmp|0x01);
        write_st9306(0xa0,ew_amp|0x01);
        write_st9306(0xc0,ew_shape|0x01);
        
        if(ew_trap<0x80)
            tmp = (~ew_trap)&0x78;
        else
            tmp = ew_trap;
        write_st9306(0xe0,tmp|0x01);
}

void write_eeprom_st9306(void)
{
    write_eeprom(EEPROM_V_AMP_60,v_amp_60_ec);    
    write_eeprom(EEPROM_V_SH_60,v_sh_60_ec);    
    write_eeprom(EEPROM_V_AMP_50,v_amp_50_ec);    
    write_eeprom(EEPROM_V_SH_50,v_sh_50_ec);    
    write_eeprom(EEPROM_V_SC,v_sc);    
    write_eeprom(EEPROM_V_CC,v_cc);    
    write_eeprom(EEPROM_EW_WTH,ew_wth);    
    write_eeprom(EEPROM_EW_AMP,ew_amp);    
    write_eeprom(EEPROM_EW_SHAPE,ew_shape);    
    write_eeprom(EEPROM_EW_TRAP,ew_trap);    
}

void read_eeprom_st9306(void)
{
    v_amp_60_ec=read_eeprom(EEPROM_V_AMP_60);    
   v_sh_60_ec =read_eeprom(EEPROM_V_SH_60);    
   v_amp_50_ec =read_eeprom(EEPROM_V_AMP_50);    
   v_sh_50_ec =read_eeprom(EEPROM_V_SH_50);    
   v_sc =read_eeprom(EEPROM_V_SC);    
  v_cc =read_eeprom(EEPROM_V_CC);    
  ew_wth =read_eeprom(EEPROM_EW_WTH);    
  ew_amp =read_eeprom(EEPROM_EW_AMP);    
  ew_shape =read_eeprom(EEPROM_EW_SHAPE);    
  ew_trap =read_eeprom(EEPROM_EW_TRAP);    
}

void  st9306_high_low(unsigned char *value,unsigned char max,unsigned char min,unsigned char step)
{
    if(menu_item & MENU_DIRECTION)
        {
        if(*value < max)
            *value +=step;
        }
    else
        if(*value > min )
            *value -=step;
}

void init_st9306(void)
{
    v_amp_50_ec=0x0;
    v_sh_50_ec=0x0;
    v_sc=0x0;
    v_cc=0x0;
    ew_wth=0x0;
    ew_amp=0x0;
    ew_shape=0x0;
    ew_trap=0x0;
}

void st9306_left_right(void)
{
    switch( menu_item & ~MENU_DIRECTION)
        {
        case ITEM_V_AMP :
            st9306_high_low(&v_amp_50_ec,V_AMP_MASK,0x0,0x4);
        break;   
        case ITEM_V_SH :  
            st9306_high_low(&v_sh_50_ec,V_SH_MASK,0x0,0x8);
        break;
        case ITEM_V_SC : 
            st9306_high_low(&v_sc,V_SC_MASK,0x0,0x10);
        break;
        case ITEM_V_CC :
            st9306_high_low(&v_cc,V_CC_MASK,0x0,0x10);
        break;
        case ITEM_EW_WTH :
            st9306_high_low(&ew_wth,EW_WTH_MASK,0x0,0x8);
        break;
        case ITEM_EW_AMP :
            st9306_high_low(&ew_amp,EW_AMP_MASK,0x0,0x8);
        break;
        case ITEM_EW_SHAPE :
            st9306_high_low(&ew_shape,EW_SHAPE_MASK,0x0,0x8);
        break;
        case ITEM_EW_TRAP :
            st9306_high_low(&ew_trap,EW_TRAP_MASK,0x0,0x8);
        break;
        }
    write_st9306_all();
    write_eeprom_st9306();
    menu_item &= ~MENU_DIRECTION; 
}            


void show_theme_9306(void)
{
    display_value(0,13,(v_amp_50_ec>>2)&0x3F);
    display_value(1,13,(v_sh_50_ec>>3)& 0x1f);
    display_value(2,13,(v_sc>>4)&0x0f);
    display_value(3,13,(v_cc>>4)& 0x0f);
    display_value(4,13,(ew_wth>>3)& 0x1f);
    display_value(5,13,(ew_amp>>3)& 0x1f);
    display_value(6,13,(ew_shape>>3)& 0x1f);
    display_value(7,13,(ew_trap>>3) & 0x1f);
}
                 

void show_st9306_menu(void)
{   
unsigned char i;
reset_current_screen();
for(i=0;i<=ITEM_EW_TRAP;i++)
   {
   append_line_to_buffer(&block_service[i]);
   }
for(i=0;i<=ITEM_EW_TRAP;i++)
   {
   fill_string_in_line(i,0x6,(unsigned char *)ST9306_STRING[i]); 
   }
fill_char_in_line(menu_item,5,0xD0,1);
show_theme_9306(); 
set_current_screen();
osd_enabled();
}

⌨️ 快捷键说明

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