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

📄 lcd.c

📁 这是用W77E58编写的控制GSM模块
💻 C
字号:
/******** LCD driver controller: LC75853N(SANYO)*********/

#include "global.h"
#include "util.h"
#include "lcd.h"


#define SET_LCD_DOUT         LCD_DOUT = 1;
#define CLEAR_LCD_DOUT       LCD_DOUT = 0;
#define SET_LCD_CLK          LCD_CLK = 1;
#define CLEAR_LCD_CLK        LCD_CLK = 0;
#define SET_LCD_DATA         LCD_DATA = 1;
#define CLEAR_LCD_DATA       LCD_DATA = 0;
#define SET_LCD_STROBE       LCD_STROBE = 1;
#define CLEAR_LCD_STROBE     LCD_STROBE = 0;


unsigned char idata KeyData = 0;                     

unsigned char idata LCD_min_H;
unsigned char idata LCD_min_L;
unsigned char idata LCD_sec_H;
unsigned char idata LCD_sec_L;
unsigned char idata LCD_seg_8;


unsigned char   Old_key = 0;
extern  bit bdata  memory_flash;

extern  bit bdata  STEREO_FLAG;
extern  unsigned char  idata  volume_level;
extern  unsigned char  idata  _timer0;
extern  unsigned char  timer2;
extern  unsigned char  Chanel;
extern  unsigned long  Display_Char;


          /* 7 */               /*  c1     c2     c3     c4  */
unsigned int code turn_char[]  ={0x1A00,0x3800,0x3200,0x2A00};   
unsigned int code Band_cha_H[]  ={0x1F40,0x1A40};          /* NO.1 */
unsigned int code Band_cha_L[]  ={0x0018,0x0018};          /* NO.2 */
unsigned int code Col2_char[]  ={0,0x0020};           /* NO.5 */

 /* NO.2 */                                                                                            /*10     M       N      E     V*/
unsigned int code seg4_char[]  ={0x0FC0,0x0C00,0x2B40,0x2F00,0x2C80,0x2780,0x27C0,0x0D00,0x2FC0,0x2F80,0x0000,0x8DC0,0x5CC0,0x23C0,0x5C00};     

 /* NO.5 */                                                                                            /*10     D      Y      P      T */
unsigned int code seg8_char[]  ={0x0FC0,0x0C00,0x2B40,0x2F00,0x2C80,0x2780,0x27C0,0x0D00,0x2FC0,0x2F80,0x0000,0x5F00,0x2E80,0x29C0,0x5100};   

/* NO.3 */                                                                                             /*10     L      P      E      J      U */
unsigned int code seg5_char[]  ={0x03F0,0x0300,0x0AD0,0x0BC0,0x0B20,0x09E0,0x09F0,0x0340,0x0BF0,0x0BE0,0x0000,0x00B0,0x0A70,0x08F0,0x03D0,0x03B0};  

/* NO.3 */                                                                                               /*10     L      M      D      E      T */
unsigned int code seg6_char_H[]  ={0xE000,0x0000,0xA000,0x8000,0x4000,0xC000,0xE000,0x8000,0xE000,0xC000,0x0000,0x6000,0xE000,0x8000,0xE000,0x8000};  

/* NO.4 */                                                                                               /*10     L      M      D      E      T */
unsigned int code seg6_char_L[]  ={0x001C,0x0018,0x0054,0x005C,0x0058,0x004C,0x004C,0x0018,0x005C,0x005C,0x0000,0x0004,0x00B8,0x00BC,0x0044,0x00A0};  

/* NO.4*/                                                                                              /*10     A      C      E*/
unsigned int code seg7_char[]  ={0x3F00,0x3000,0xAD00,0xBC00,0xB200,0x9E00,0x9F00,0x3400,0xBF00,0xBE00,0x0000,0xB700,0x0F00,0x8F00};       


/* NO.6 */
unsigned int code seg9_char[]  ={0x03F0,0x0300,0x0AD0,0x0BC0,0x0BA0,0x09E0,0x09F0,0x0340,0x0BF0,0x0BE0,0x0000};

/* NO.6 */
unsigned int code seg10_char_H[]  ={0xE000,0x0000,0xA000,0x8000,0x4000,0xC000,0xE000,0x8000,0xE000,0xC000,0x0000};

/* NO.7 */
unsigned int code seg10_char_L[]  ={0x001C,0x0018,0x0054,0x005C,0x0058,0x004C,0x004C,0x0018,0x005C,0x005C,0x0000};


/* NO.8 */
unsigned int code vol_disp_char_H[]  ={0x0004,0x0024,0x0124,0x0924,0x4924};

/* NO.9 */
unsigned int code vol_disp_char_L[]  ={0x0008,0x0048,0x0248};


/* NO.7 */
unsigned int code vol_L_indicator_H[]  ={0x4000};

/* NO.8 */
unsigned int code vol_L_indicator_M[]  ={0x0008,0x0048,0x0248,0x1248,0x9248};

/* NO.9 */
unsigned int code vol_L_indicator_L[]  ={0x0010,0x0090};

/* NO.7 */
unsigned int code vol_R_indicator_H[]  ={0x8000};

/* NO.8 */
unsigned int code vol_R_indicator_M[]  ={0x0010,0x0090,0x0490,0x2490};

/* NO.9 */
unsigned int code vol_R_indicator_L[]  ={0x0020,0x0120};



#define  ICON_in               0x0400           /* seven */
#define  ICON_clsc             0x0004           /* one */
#define  ICON_pop              0x0008           /* one */
#define  ICON_rock             0x0010           /* one */
#define  ICON_double_loop      0x0004           /* three */
#define  ICON_st               0x0004           /* two */
#define  ICON_loc              0x0020           /* two */
#define  ICON_disc_UP          0x0008           /* six */
#define  ICON_lou              0x0008           /* three */
#define  ICON_scn              0x1000           /* six */
#define  ICON_disc_DN          0x0004           /* six */
#define  ICON_rpt              0x0100           /* seven */
#define  ICON_rdm              0x0400           /* six */
#define  ICON_swf              0x0008           /* five */
#define  ICON_track            0x0020           /* seven */
#define  ICON_CH               0x0080           /* seven */



void updateLCDtime(void)
{
         unsigned int  temp;
         unsigned char LCD_temp;
         LCD_temp = 0;

         if(Band==FM_IN){
            LCD_min_H = 0;
            LCD_min_L = 0;
            LCD_sec_H = 0;
            LCD_sec_L = 0;
            if(Divisor > 99999){
               LCD_min_H = Divisor/100000;
               temp = Divisor%100000;                  
               LCD_min_L = temp/10000;             
               temp = temp%10000;                  
               LCD_sec_H = temp/1000;                
               temp = temp%1000;                  
               LCD_sec_L = temp/100;                 
               if(temp%100 == 50){
                  LCD_seg_8 = 5;
               } else {
                  LCD_seg_8 = 10;          /*0x0000*/
               }
            } else {
               LCD_min_H = 10;
               LCD_min_L = Divisor/10000;
               temp = Divisor%10000;                  
               LCD_sec_H = temp/1000;                
               temp = temp%1000;                  
               LCD_sec_L = temp/100;                 
               if(temp%100 == 50){
                  LCD_seg_8 = 5;
               } else {
                  LCD_seg_8 = 10;          /*0x0000*/
               }
            }
         }else{
            LCD_min_H = 0;
            LCD_min_L = 0;
            LCD_sec_H = 0;
            LCD_sec_L = 0;
            LCD_seg_8 = 10;
            if(Divisor > 999){
               LCD_min_H = Divisor/1000;       
               temp = Divisor%1000;                  
               LCD_min_L = temp/100;
               temp = temp%100;                  
               LCD_sec_H = temp/10;
               temp = temp%10;                  
               LCD_sec_L = temp;
            } else {
               LCD_min_H = 10;
               LCD_min_L = Divisor/100;
               temp = Divisor%100;                  
               LCD_sec_H = temp/10;
               temp = temp%10;                  
               LCD_sec_L = temp;
            }
         }

            CLEAR_LCD_STROBE;                 /* CE  */
            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */

            LCD_objectSendByte4(Band_cha_H[Band]);
            LCD_objectSendByte4(Band_cha_L[Band] | seg4_char[LCD_min_H]);                      /*7seg4_char[Min_H]*/
            LCD_objectSendByte4(seg5_char[LCD_min_L] | seg6_char_H[LCD_sec_H]);   /*LCD_sec_H*/       
            LCD_objectSendByte4(0);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */
                                
            LCD_objectSendByte4(seg6_char_L[LCD_sec_H] | seg7_char[LCD_sec_L]);                 /*Sec_H_L | Sec_L*/
            LCD_objectSendByte4(Col2_char[Band] | seg8_char[LCD_seg_8]);      
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x8000);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */

            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x4000);
            CLEAR_LCD_STROBE;
            CLEAR_LCD_DATA;

}


void LCD_state_init(void)
{

            SET_LCD_DOUT;                     /* DO */
            CLEAR_LCD_STROBE;                 /* CE  */
            CLEAR_LCD_DATA;                   /* DI  */
            SET_LCD_CLK;                      /* CLK */


            CLEAR_LCD_STROBE;                 /* CE  */
            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */

            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x2CC0);
            LCD_objectSendByte4(0x68F0);
            LCD_objectSendByte4(0);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */
                                
            LCD_objectSendByte4(0x0B04); 
            LCD_objectSendByte4(0x0FC0);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x8000);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        /* Address */
            SET_LCD_STROBE;                   /* CE  */

            LCD_objectSendByte4(0xFA00);
            LCD_objectSendByte4(0x04DC);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x4000);
            CLEAR_LCD_STROBE;
            CLEAR_LCD_DATA;

}


void updateDisplay_Char(void)
{
        unsigned char Char_4 = 0;
        unsigned char Char_5 = 0;
        unsigned char Char_6 = 0;
        unsigned char Char_7 = 0;
        unsigned char Char_8 = 0;
        unsigned char Char_9 = 0;
        unsigned char Char_10 = 0;

        if(Display_Char == 0xBDCAA){         /*MEMORY*/
           Char_9 = Chanel/10;
           Char_10 = Chanel%10;
        } else {
           Char_9 = 10;
           Char_10 = 10;
        }

        if(Display_Char == 0xE0BAA){         /*VOLUME*/
           Char_9 = volume_level/10;
           Char_10 = volume_level%10;
        } else {
           Char_9 = 10;
           Char_10 = 10;
        }

        Char_8 = Display_Char & 0x0F;
        Display_Char >>=4;
        Char_7 = Display_Char & 0x0F;
        Display_Char >>=4;
        Char_6 = Display_Char & 0x0F;
        Display_Char >>=4;
        Char_5 = Display_Char & 0x0F;
        Display_Char >>=4;
        Char_4 = Display_Char & 0x0F;
        Display_Char >>=4;


            SET_LCD_DOUT;
            CLEAR_LCD_STROBE;                 
            CLEAR_LCD_DATA;                   
            SET_LCD_CLK;                      


            CLEAR_LCD_STROBE;                 
            LCD_objectSendByte1(0x42);        
            SET_LCD_STROBE;                   

            LCD_objectSendByte4(0);
            LCD_objectSendByte4(seg4_char[Char_4]);        
            LCD_objectSendByte4(seg5_char[Char_5] | seg6_char_H[Char_6]);     
            LCD_objectSendByte4(0);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        
            SET_LCD_STROBE;                   
                                
            LCD_objectSendByte4(seg6_char_L[Char_6] | seg7_char[Char_7]); 
            LCD_objectSendByte4(seg8_char[Char_8]);
            LCD_objectSendByte4(seg9_char[Char_9] | seg10_char_H[Char_10]);
            LCD_objectSendByte4(0x8000);
            CLEAR_LCD_STROBE;

            LCD_objectSendByte1(0x42);        
            SET_LCD_STROBE;                   

            LCD_objectSendByte4(seg10_char_L[Char_10]);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0);
            LCD_objectSendByte4(0x4000);
            CLEAR_LCD_STROBE;
            CLEAR_LCD_DATA;

}



void LCD_objectSendByte1(unsigned char SendByte)
{
    unsigned char i;

    for (i = 0; i < 8; i++) {
         if (SendByte & 0x01) {
             SET_LCD_DATA;
         } else {
            CLEAR_LCD_DATA;
         }

        CLEAR_LCD_CLK;
        CLEAR_LCD_CLK;
        SendByte >>= 1;
        SET_LCD_CLK;

    }
}



void  LCD_objectSendByte4(unsigned int dispdata)
{
         unsigned int i;

         dispdata >>= 2;
         for (i = 0; i < 14; i++){
              if (dispdata & 0x01) {
                  SET_LCD_DATA;
              } else {
                  CLEAR_LCD_DATA;
              }

              CLEAR_LCD_CLK;
              dispdata >>= 1;
              SET_LCD_CLK;
         }

}




unsigned char Read_key(void)
{
       unsigned char i;
       unsigned long key_value = 0;

       if(LCD_DOUT) return 0;

       CLEAR_LCD_STROBE;
       LCD_objectSendByte1(0x43);        /* Address */

       SET_LCD_STROBE;
       CLEAR_LCD_CLK;

       for (i = 0; i < 32; i++)
       {
            key_value >>=1;

            SET_LCD_CLK;
            if(LCD_DOUT){
               key_value |= 0x80000000;
            } 

            CLEAR_LCD_CLK;
       }

       CLEAR_LCD_STROBE;
       SET_LCD_DOUT;


       key_value |= 0x302013;

       if((key_value & 0x0000FF) != 0x000013){       
           KeyData = key_value & 0xFF;

       } else if((key_value & 0x00FF00) != 0x002000){
                  key_value >>= 8;
                  KeyData = key_value & 0xFF;

       } else if((key_value & 0xFF0000) != 0x300000){
                  key_value >>= 16;
                  KeyData = key_value & 0xFF;      /* jy add & chang */
       }


       if(timer2 == 0) Old_key = 0;

       if(KeyData == Old_key){
          return 0;
       } else {
          Old_key = KeyData; 
          return KeyData;
       }

}


#if 0
void  LCD_Turn_char(void)
{             
                  CLEAR_LCD_STROBE;                 /* CE  */
                  LCD_objectSendByte1(0x42);        /* Address */
                  SET_LCD_STROBE;                   /* CE  */

                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  CLEAR_LCD_STROBE;

                  LCD_objectSendByte1(0x42);        /* Address */
                  SET_LCD_STROBE;                   /* CE  */

                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0x8000);
                  CLEAR_LCD_STROBE;

                  LCD_objectSendByte1(0x42);        /* Address */
                  SET_LCD_STROBE;                   /* CE  */

                  LCD_objectSendByte4(turn_char[_timer0]);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0);
                  LCD_objectSendByte4(0x4000);
                  CLEAR_LCD_STROBE;
                  //CLEAR_LCD_DOUT;
}
#endif

⌨️ 快捷键说明

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