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

📄 lcddrv.c

📁 本程序是汽车音响中不可缺少的LCD显示程序
💻 C
字号:
void LCD_state_init(unsigned char C1);
void Process_Ram_Data(unsigned char *DE1);
void Process_Send_Addr(unsigned char B1);
void Write_Tuner_LCD(void);
void Write_VCD_LCD(void);
#if LCD1621
void LCD_objectSendByte(unsigned int BC1);
void process_send_addr(unsigned char B1);
void process_iddata(unsigned char B1);
void LCD1621init(void);
#endif
#if PT6523
void Pt6523_Control_Data(unsigned char B1);
#endif
#if PT6524
void Send_COM_Data(unsigned char B);
void SendRamData(void);
void Pt6524_Control_Data(unsigned int BC);
#endif
#define    COM1     0x00
#define    COM2     0x02
#define    COM3     0x01
#define    COM4     0x03
#define  LCD_Delay()   { NOP();}
#if LCD1621
#define LCD_SYSCLK   0x0002
#define LCD_OFF      0x0004
#define LCD_ON       0x0006
#define LCD_DITIMER  0x0008
#define LCD_DIWDT    0x000a
#define LCD_DITONE   0x0010
#define LCD_CLRTIMER 0x001a
#define LCD_RCCLK    0x0030
#define LCD_DIRQ     0x0100
#define LCD_NORMAL   0x01c6

const unsigned int lcd_init_tbl[]={
   /*0x030,0x002,0x008,0x00a,0x100,0x010,0x01a,0x006,0x1c6,*/
   0x030,0x002,0x052,0x008,0x00a,0x100,0x010,0x012,0x006,0x1c6,
};
#endif
/* ********************************************** */
void LCD_state_init(unsigned char C1)
{
#if  LCD1621
         LCD_CE =0;
         Delay1ms(30);
         LCD_CE =1;
         Delay1ms(30);
       /* init  HT1621 */
         LCD_CE =0;
         process_iddata(0x04);
        for(i=0;i<10;++i) {
          LCD_objectSendByte(lcd_init_tbl[i]);/* on-chip RC oscillator */
        }
        LCD_CE =1;

#endif
#if PT6523
    if (C1 == 0) {
       control_data = 0x01;       /* normal  */
    } else {
       control_data = 0x03;       /* power save mode */
    }
    LCD_CE  = 0;
    LCD_CLK = 1;
    LCD_DO  = 1;
#endif
#if PT6524
    if (C1 == 0) {
        control_data = 0x0000;       /* normal  */
    } else {
        control_data = 0x0200;       /* power save mode */
    }
    LCD_CE  = 0;
    LCD_CLK = 1;
    LCD_DO  = 1;
#endif
    return;
}
#if  LCD1621
void LCD1621init(void)
{
         LCD_CE =0;
         NOP();
         process_iddata(0x04);
     for(i=0;i<10;++i) {
         LCD_objectSendByte(lcd_init_tbl[i]);/* on-chip RC oscillator */
     }
         LCD_CE =1;
return;
}
void LCD_objectSendByte(unsigned int BC1)
{
unsigned char E1;
    for (E1 = 0;E1 <9;++E1) {
         LCD_CLK =0;
        if(BC1 & 0x100) {
            LCD_DO=1;
        } else {
            LCD_DO=0;
        }
         LCD_CLK =1;
         BC1 <<= 1;
    }
  return;
}
void process_send_addr(unsigned char B1)
{
unsigned char E1;
for (E1 = 0;E1 < 6;++E1) {  /* addr*/
 /* Transmit most significant bit first */
        LCD_CLK =0;
       if(B1 & 0x20) {        /* 5 4 3 2 1 0*/
            LCD_DO =1;
        } else {
            LCD_DO =0;
        }
         LCD_Delay();
         LCD_CLK =1;
         LCD_Delay();
        B1 <<= 1;
    }

return;
}
void process_iddata(unsigned char B1)
{
unsigned char E1;
for(E1=0;E1<3;++E1){
     LCD_CLK = 0;       /* WRITE DATA */
     if( B1 & 0x04)
     LCD_DO = 1;
     else
     LCD_DO = 0;
     LCD_Delay();
     LCD_CLK = 1;       /* WRITE DATA */
     LCD_Delay();
     B1 <<= 1;
}
  return;
}
#endif
#if (PT6523 | PT6524)
void Process_Send_Addr(unsigned char B1)
{
unsigned char i;
    LCD_CE = 0;
    LCD_CLK = 1;
    for(i=0;i<8;++i){
       LCD_CLK = 0;
       if(B1 & 0x01) LCD_DO = 1;
       else LCD_DO = 0;
       LCD_CLK = 1;
       B1 >>=1;
    }
    LCD_CE = 1;
    return;
}
#endif
#if PT6523
void Pt6523_Control_Data(unsigned char B1)
{
unsigned char i;
    for(i=0; i<4;++i) {
       LCD_CLK = 0;
       if(B1 & 0x01) LCD_DO = 1;
       else LCD_DO = 0;
       LCD_CLK = 1;
       B1 >>=1;
    }
    return;
}
#endif
void Process_Ram_Data(unsigned char *DE1)
{
unsigned char B1 = 0;
unsigned char i;
unsigned char j;
   temp_ptr = DE1;
#if  LCD1621
   for(j=0;j<LCD_MAX_BUF;++j) {
      B1 = *temp_ptr;
      for(i=0; i<8;++i) {
         LCD_CLK = 0;
         if(B1 & 0x01) LCD_DO = 1;
         else LCD_DO = 0;
         LCD_CLK = 1;
         B1 >>=1;
      }
      ++temp_ptr;
   }
#endif
#if PT6523
   for(j=0;j<19;++j) {
      B1 = *temp_ptr;
      for(i=0; i<8;++i) {
         LCD_CLK = 0;
         if(B1 & 0x01) LCD_DO = 1;
         else LCD_DO = 0;
         LCD_CLK = 1;
         B1 >>=1;
      }
      ++temp_ptr;
   }
/* ************************************** */
   B1 = *temp_ptr;
   for(i=0;i<4;++i) {
     LCD_CLK = 0;
     if(B1 & 0x01) LCD_DO = 1;
     else LCD_DO = 0;
     LCD_CLK = 1;
     B1 >>=1;
   }

/* ************************************** */
#endif
#if PT6524
     lcd_data = *temp_ptr;
     lcdpos   = 0;
     Process_Send_Addr(0x41);
     SendRamData();
     Pt6524_Control_Data(control_data);
     Send_COM_Data(COM1);
     LCD_CLK = 1;
     LCD_CE  = 0;
     Process_Send_Addr(0x41);
     SendRamData();
     Pt6524_Control_Data(0x0000);
     Send_COM_Data(COM2);
     LCD_CLK = 1;
     LCD_CE  = 0;
     Process_Send_Addr(0x41);
     SendRamData();
     Pt6524_Control_Data(0x0000);
     Send_COM_Data(COM3);
     LCD_CLK = 1;
     LCD_CE  = 0;
     Process_Send_Addr(0x41);
     SendRamData();
     Pt6524_Control_Data(0x0000);
     Send_COM_Data(COM4);
     LCD_CLK = 1;
     LCD_CE  = 0;
#endif
   return;
}
#if PT6524
void Send_COM_Data(unsigned char B)
{
     for(i=0;i<2;++i) {
        LCD_CLK = 0;
        if (B & 0x01) LCD_DO = 1;
        else LCD_DO = 0;
        LCD_CLK = 1;
        B >>= 1;
     }
     return;
}

void SendRamData(void)
{
     for(i=0;i<52;++i) {
        LCD_CLK = 0;
        if (lcd_data & 0x01) LCD_DO = 1;
        else LCD_DO = 0;
        LCD_CLK = 1;
        ++lcdpos;
        lcd_data >>= 1;
        if (lcdpos == 8) {
           ++temp_ptr;
           lcd_data = *temp_ptr;
           lcdpos = 0;
        }
     }
    return;
}
void Pt6524_Control_Data(unsigned int BC)
{
    for(i=0; i<10;++i) {
       LCD_CLK = 0;
       if(BC & 0x0001) LCD_DO = 1;
       else LCD_DO = 0;
       LCD_CLK = 1;
       BC >>=1;
    }
    return;
}
#endif
void Write_Tuner_LCD(void)
{
#if  LCD1621
     if (Ht1621FlashTimer == 0) {
        Ht1621FlashTimer = 10;/*1s*/
        LCD1621init();
     }
      LCD_CE =0;
      LCD_Delay();
      process_iddata(0x05);
      process_send_addr(0x00);
      Process_Ram_Data(ShadowRam);
      LCD_CE =1;
#endif
#if PT6523
   Process_Send_Addr(0x41);
   Process_Ram_Data(ShadowRam);
   Pt6523_Control_Data(control_data);
   LCD_CE = 0;
   LCD_CLK = 1;
#endif
#if PT6524
   Process_Ram_Data(ShadowRam);
#endif
   Refresh_Lcd = 0;
   return;
}

void Write_VCD_LCD(void)
{
#if  LCD1621
     if (Ht1621FlashTimer == 0) {
        Ht1621FlashTimer = 10;/*1s*/
        LCD1621init();
     }
      LCD_CE =0;
      LCD_Delay();
      process_iddata(0x05);
      process_send_addr(0x00);
      Process_Ram_Data(vcd_lcdbuff);
      LCD_CE =1;
#endif
#if PT6523
   Process_Send_Addr(0x41);
   Process_Ram_Data(vcd_lcdbuff);
   Pt6523_Control_Data(control_data);
   LCD_CE = 0;
   LCD_CLK = 1;
#endif
#if PT6524
   Process_Ram_Data(vcd_lcdbuff);
#endif
   Refresh_Lcd = 0;
   return;
}

⌨️ 快捷键说明

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