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

📄 lcd.c

📁 三星S3C44B0X的一个DEMO代码,实现LCD显示时钟运行.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*--  文字:  均  --*/
0x08,0x08,0xFF,0x88,0x90,0x0C,0x17,0xA4,0x84,0x04,0xFC,0x00,0x03,0x01,0x01,0x00,     //55
0x00,0x01,0x01,0x04,0x04,0x04,0x03,0x00,

/*--  文字:  每  --*/
0x28,0x24,0xFB,0x2A,0x2A,0xFA,0x2A,0x2A,0xFA,0x23,0x22,0x00,0x00,0x01,0x01,0x01,     //56
0x01,0x01,0x05,0x05,0x03,0x01,0x01,0x00,

/*--  文字:  内  --*/
0x00,0xFC,0x04,0x84,0x64,0x1F,0x24,0xC4,0x04,0xFC,0x00,0x00,0x00,0x07,0x01,0x00,    //57
0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,

/*--  文字:  证  --*/                                                               //58
0x11,0xF6,0x00,0x02,0xF2,0x02,0x02,0xFE,0x22,0x23,0x22,0x00,0x00,0x07,0x02,0x04,
0x07,0x04,0x04,0x07,0x04,0x04,0x04,0x00,

};

/* LCD Registers */
#define X_ADRESS	0xB8	/* Adress base for Page 0 */
#define Y_ADRESS	0x40	/* Adress base for Y0	  */
#define START_LINE	0xC0	/* Adress base for line 0 */
#define DISPLAY_ON	0x3F	/* Turn display on	  */
#define DISPLAY_OFF	0x3E	/* Turn display off	  */

/* General use definitions */
#define RIGHT		0
#define LEFT		1
#define BUSY		0x80

//***********************************************
void LcdDelay(U8 u32Duration)
{
	U8  u32Delay,i;
	for (u32Delay=0; u32Delay<u32Duration; u32Delay++)
      {
	   for (i=0; i<10; i++);
      }
}


//*****************************************************
void Set_LCD_DATA(U8 u8LcdData)
{
    rPDATC=(rPDATC & (~0xFF) ) | u8LcdData;
}


//*****************************************************
//  rPDATC GPC10 GPC9 GPC8
//         E2    E1   RS
//
//*****************************************************
void LcdInstructionWrite (U8 u8Instruction,U8 u8LcdSide)
{  
	if(u8LcdSide == LEFT)
	{  
       rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
       LcdDelay(1);
       rPDATC = (rPDATC | (2<<8));       //E2=0,E1=1,RS=0
       LcdDelay(1);
  	   Set_LCD_DATA(u8Instruction); 
   	   LcdDelay(2);
       rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
     }
     else
	{
       rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
       LcdDelay(1);
       rPDATC = (rPDATC | (4<<8));       //E2=1,E1=0,RS=0
       LcdDelay(1);
  	   Set_LCD_DATA(u8Instruction); 
   	   LcdDelay(2);
       rPDATC = (rPDATC & (~(0x7<<8)) ); //E2=0,E1=0,RS=0
     }
}


//*****************************************************
void LcdDataWrite (U8 u8Data,U8 u8LcdSide)
{
	if(u8LcdSide == LEFT)
	{  
       rPDATC = (rPDATC & (~(0x7<<8)) ) | (1<<8);   //E2=0,E1=0,RS=1
       LcdDelay(1);
       rPDATC = (rPDATC | (2<<8));                  //E2=0,E1=1,RS=1
       LcdDelay(1);
  	   Set_LCD_DATA(u8Data); 
   	   LcdDelay(2);
       rPDATC = (rPDATC & (~(2<<8)) );              //E2=0,E1=0,RS=1
     }
     else
	{
       rPDATC = (rPDATC & (~(0x7<<8)) ) | (1<<8);   //E2=0,E1=0,RS=1
       LcdDelay(1);
       rPDATC = (rPDATC | (4<<8));                  //E2=1,E1=0,RS=1
       LcdDelay(1);
  	   Set_LCD_DATA(u8Data); 
   	   LcdDelay(2);
       rPDATC = (rPDATC & (~(4<<8)) );              //E2=0,E1=0,RS=1
     }
}


//*****************************************************
void GLCD_LcdInit(void)
{
  	LcdInstructionWrite(DISPLAY_OFF,LEFT); /* Display OFF */
  	LcdInstructionWrite(START_LINE,LEFT);
  	LcdInstructionWrite(X_ADRESS,LEFT);
  	LcdInstructionWrite(Y_ADRESS,LEFT);
  	LcdInstructionWrite(DISPLAY_ON,LEFT); /* Display ON */

  	LcdInstructionWrite(DISPLAY_OFF,RIGHT); /* Display OFF */
  	LcdInstructionWrite(START_LINE,RIGHT);
  	LcdInstructionWrite(X_ADRESS,RIGHT);
  	LcdInstructionWrite(Y_ADRESS,RIGHT);
  	LcdInstructionWrite(DISPLAY_ON,RIGHT); /* Display ON */
}

void GLCD_ClearScreen (U8 value1)
{
  	U8 u8Page=0;
  	U8 u8Column=0;

    	/* process the 8 pages of the LCD */
  	for (u8Page = 0; u8Page < 8; u8Page++)
    	{
      		LcdInstructionWrite(X_ADRESS | u8Page,LEFT); /* Set the page number */
      		LcdInstructionWrite(Y_ADRESS,LEFT);		     /* Set column to 0 */

      		/* process a page on both sides */
      		for (u8Column = 0; u8Column < 128; u8Column++)
		    {
	  		  if (u8Column == 64)
            	  {
              		LcdInstructionWrite(X_ADRESS | u8Page,RIGHT); /* Set the page number */
              		LcdInstructionWrite(Y_ADRESS,RIGHT); /* Set column to 0 */
      		      }
      		   if (u8Column < 64)
          	 	 LcdDataWrite (value1,LEFT);		/* erase a column */
          	   else
          		 LcdDataWrite (value1,RIGHT);		/* erase a column */

            }
    	}
}

void Lcd_char(U8 x_addr,U8 y_addr,U8 offset)
{
     U8 i,temp;
     if(y_addr<64)
        temp = LEFT;
     else
        temp = RIGHT;

     LcdInstructionWrite(START_LINE,temp);
     LcdInstructionWrite(Y_ADRESS | y_addr,temp);
     LcdInstructionWrite(X_ADRESS | x_addr,temp);

     for(i=0;i<5;i++)
         LcdDataWrite (au8FontSystem5x8[offset*5+i],temp);
}
//******************************************************8

void Lcd_Chinese(U8 x_addr,U8 y_addr,U8 offset)
{
     U8 i,temp;
     if(y_addr<64)
        temp = LEFT;
     else
        temp = RIGHT;

     LcdInstructionWrite(START_LINE,temp);
     LcdInstructionWrite(Y_ADRESS | y_addr,temp);
     LcdInstructionWrite(X_ADRESS | x_addr,temp);

     for(i=0;i<12;i++)
         LcdDataWrite (au8FontSystem12x12[offset*24+i],temp);

     LcdInstructionWrite(START_LINE,temp);
     LcdInstructionWrite(Y_ADRESS | y_addr,temp);
     LcdInstructionWrite(X_ADRESS | (x_addr+1),temp);

     for(i=0;i<12;i++)
         LcdDataWrite (au8FontSystem12x12[12+offset*24+i],temp);

}

//***********************display************************

void set_date(U8 x_addr,U8 y_addr,U8 * buffer)
{
    //  for(i=0;i<8;i++)
      Lcd_char(x_addr,y_addr,  ((*buffer)>>4));     //(buff[high_addr+6]>>4));
      Lcd_char(x_addr,y_addr+5,((*buffer)&0x0f));
      Lcd_char(x_addr,y_addr+10,10);
      Lcd_char(x_addr,y_addr+14,((*(buffer+1))>>4));
      Lcd_char(x_addr,y_addr+19,((*(buffer+1))&0x0f));
      Lcd_char(x_addr,y_addr+24,10);
      Lcd_char(x_addr,y_addr+28,((*(buffer+2))>>4));
      Lcd_char(x_addr,y_addr+33,((*(buffer+2))&0x0f));
}

void set_time(U8 x_addr,U8 y_addr,U8 * buffer)    //bcd code
{
      Lcd_char(x_addr,y_addr,   ((*buffer)>>4));  //(buff[high_addr+9]>>4));
      Lcd_char(x_addr,y_addr+5, ((*buffer)&0x0f));
      Lcd_char(x_addr,y_addr+10,11);
      Lcd_char(x_addr,y_addr+15,((*(buffer+1))>>4));
      Lcd_char(x_addr,y_addr+20,((*(buffer+1))&0x0f));
      Lcd_char(x_addr,y_addr+25,11);                      //:11
      Lcd_char(x_addr,y_addr+30,((*(buffer+2))>>4));
      Lcd_char(x_addr,y_addr+35,((*(buffer+2))&0x0f));
}

void set_date_time(U8 x_addr,U8 y_addr,U8 * buffer)
{
      Lcd_char(x_addr,y_addr,  ((*buffer)>>4));     //(buff[high_addr+6]>>4));
      Lcd_char(x_addr,y_addr+5,((*buffer)&0x0f));
      Lcd_char(x_addr,y_addr+10,10);
      Lcd_char(x_addr,y_addr+15,((*(buffer+1))>>4));
      Lcd_char(x_addr,y_addr+20,((*(buffer+1))&0x0f));
      Lcd_char(x_addr,y_addr+25,10);
      Lcd_char(x_addr,y_addr+30,((*(buffer+2))>>4));
      Lcd_char(x_addr,y_addr+35,((*(buffer+2))&0x0f));

      //Lcd_char(x_addr,y_addr+40,10);
      Lcd_char(x_addr,y_addr+45,((*(buffer+3))>>4));
      Lcd_char(x_addr,y_addr+50,((*(buffer+3))&0x0f));
      Lcd_char(x_addr,y_addr+55,11);                     //:11
      Lcd_char(x_addr,y_addr+60,((*(buffer+4))>>4));
      Lcd_char(x_addr,y_addr+65,((*(buffer+4))&0x0f));

}

void set_menu(void)
{
     Lcd_Chinese(0,0,2);   //shi
     Lcd_Chinese(0,12,3);  //jian

     Lcd_Chinese(2,0,18);   //dai
     Lcd_Chinese(2,12,19);  //ma

     Lcd_Chinese(2,64,8);   //su
     Lcd_Chinese(2,76,9);  //du
     Lcd_char(2,107,12) ;  //k
     Lcd_char(2,112,13);//m
     Lcd_char(2,117,14);//"/"
     Lcd_char(2,122,15);//h

     Lcd_Chinese(4,0,4);   //ning
     Lcd_Chinese(4,12,10);  //lian
     Lcd_Chinese(4,24,11);   //xu
     Lcd_Chinese(4,36,12);   //xing
     Lcd_Chinese(4,48,13);   //shi

     Lcd_Chinese(4,103,14);   //fen
     Lcd_Chinese(4,115,15);  //zong

     Lcd_Chinese(6,0,39);   //zong
     Lcd_Chinese(6,12,40);  //li
     Lcd_Chinese(6,24,41);   //ceng

     Lcd_Chinese(6,103,42);   //gong
     Lcd_Chinese(6,115,40);  //li
}

void run_screen_time(U8 Disp_Choice)
{
 if (Disp_Choice==0)      //time
    {
      Get_Rtc();
      Lcd_char(2,8, date_t[3]/10);             //hour
      Lcd_char(2,16,date_t[3]%10);             //
      Lcd_char(2,24,11);                       //:
      Lcd_char(2,32,date_t[4]/10);             //minute
      Lcd_char(2,40,date_t[4]%10);             //
      Lcd_char(2,48,11);                       //:
      Lcd_char(2,56,date_t[5]/10);             //second
      Lcd_char(2,64,date_t[5]%10);             //
    }
}

void Display_Date(void)
{
      Lcd_char(6,8, 2);                        //2
      Lcd_char(6,16,0);                        //0
      Lcd_char(6,24,date_t[0]/10);             //year
      Lcd_char(6,32,date_t[0]%10);             //
      Lcd_char(6,40,14);                       //:
      Lcd_char(6,48,date_t[1]/10);             //month
      Lcd_char(6,56,date_t[1]%10);             //
      Lcd_char(6,64,14);                       //:
      Lcd_char(6,72,date_t[2]/10);             //day
      Lcd_char(6,80,date_t[2]%10);             //
}


⌨️ 快捷键说明

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