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

📄 lcddisp_drv.c

📁 在ARM7和UC/OSII的平台上实现了GPS自动报站的功能,涉及GPS模块LEA_4S的驱动,位置速寻算法,语音芯片ISD4004的录放音驱动,LED页面管理等等.从启动代码到操作系统的移植以及到业
💻 C
字号:
/*
******************************************************************
* FileName     :  Lcddisp_drv.C
* Programmer(s):  Cyb
* Description  :  DRIVE THE LCD CHIP:ST7920
******************************************************************
*/

/*
*****************************************************************
                  REVISION HISTORY
*****************************************************************
*/
#define   LCDDRV_GLOBALS
#define   FONTSLIB_GLOBALS
#include "Lcddisp_drv.h"
#include "includes.h"
#include "public.H"
#include "Lcd.h"
#include "UART_Drv.h"
#include "SWconfig.h"

void DplyOffLCD(void)
{
     Send_Command(EXTFUNC);
     Send_Command(GRAPDISP_CLOSE);
     Send_Command(BASICFUNC);
     Send_Command(DPLYOFF);
}

void DplyOnLCD(void)
{
     Send_Command(EXTFUNC);
     Send_Command(GRAPDISP_ON);
     Send_Command(BASICFUNC);
     Send_Command(DPLYON);
}

void Delay_ms(INT8U time)
{
     INT8U i;
     INT8U j;
     
     for(i=0;i<time;i++)
     {
        for(j=0;j<10;j++)
        {
        }
     }
     
}


void LCDWriteChinese(INT8U addr,INT8U *ptr)
{
     Send_Command(BASICFUNC);
     Send_Command(CLEAR);
     Send_Command(DDRAM_ADDR|addr);
     
     while(*ptr != 0)
     {
         Send_Data(*ptr++);
         Send_Data(*ptr++);
     }
}

void LCDWriteCharacter(INT8U addr,INT8U *ptr)
{
      Send_Command(BASICFUNC);
      Send_Command(CLEAR);
      Send_Command(DDRAM_ADDR|addr);
      
      while(*ptr !=0)
      {
         Send_Data(*ptr++);
      }
}

void LCDWriteGraphicData(INT8U data1,INT8U data2)
{
      Send_Data(data1);
      Send_Data(data2);
}

void Print_LCD(INT8U line,INT8U charpos,INT8U *str, INT8U len)
{
      INT8U i;
      INT8U offset;
      INT8U addr;
        
      offset = (line-1)*8;
      addr   = offset + charpos;
      
      Send_Command(BASICFUNC);
      Send_Command(CLEAR);
      Send_Command(DDRAM_ADDR|addr);
      
      for(i=0;i<len;)
      {  
        if((*str >= 0x02) && (*str <= 0x7f))
        {
             Send_Data(*str++);
             i++;
        }
        else
        {
             Send_Data(*str++);
             i++;
             Send_Data(*str++);
             i++;
        }
     }
     
            
}

void InitLcd(void)
{
       Delay_ms(100);
       Send_Command(BASICFUNC);
       Send_Command(ENTRY_MOD | 0x02);
       Send_Command(DPLYON | CUSORSHOW | BLINKOPEN);
       Send_Command(CLEAR);
       Send_Command(HOME);
       Send_Command(DDRAM_ADDR | 0x00);
       
       DplyOnLCD();
       ClearLcd();
}

    

//写全屏0来清屏
void ClearLcd(void)
{
    INT8U i;
    INT8U j;
   
           
    Send_Command(BASICFUNC);
    Send_Command(CLEAR);
    
    Send_Command(EXTFUNC);
    Send_Command(GRAPDISP_CLOSE);
    
       
    for(i = 0; i < DOTSIZEY; i++) 
    {
        Send_Command(Y_ADDR|i);
        Send_Command(X_ADDR|0);
        
        for (j = 0; j < COLSIZE/2; j++)
        {
            LCDWriteGraphicData(0,0);
        }
        
    }
    
    Send_Command(GRAPDISP_ON);
}

BOOLEAN CheckPixelValid(INT8U row_dot,INT8U col_dot)
{
    if ((row_dot >= DOTSIZEY) || (col_dot >= DOTSIZEX)) 
    {
        return FALSE;
    }
    else 
    {
        return TRUE;
    }
}


void LcdUpdate_dots(INT8U row1,INT8U col1, INT8U rowlen, INT8U collen)
{
    INT8U i;
    INT8U j;
    INT8U byte1;
    INT8U byte2;
    INT8U leftcol;
    INT8U rightcol;
    
    leftcol  = col1/16;                                                        // col1 / 16;
    rightcol = (col1 + collen - 1)/16;                                         // (col1 + collen - 1) / 16;
    
    Send_Command(EXTFUNC);
    Send_Command(GRAPDISP_CLOSE);
    
    for(i = row1; i < row1 + rowlen; i++) 
    {
         Send_Command(Y_ADDR|i);                              
	     Send_Command(X_ADDR|leftcol);
	    
         for (j = leftcol; j <= rightcol; j++)
         {
              byte1 = i*COLSIZE + 2*j;
              byte2 = i*COLSIZE + 2*j + 1;
              
              LCDWriteGraphicData(DplyImagMem[byte1],DplyImagMem[byte2]);
         }
    }
    
    Send_Command(GRAPDISP_ON);
}

void LcdUpdate_Block(INT8U row_dot,INT8U col_dot,INT8U lenrow_dot,INT8U lencol)
{
       LcdUpdate_dots(row_dot,col_dot,lenrow_dot,lencol << 3);
}


void LcdUpdate_Full(void)
{
       LcdUpdate_dots(0, 0, DOTSIZEY, DOTSIZEX);
}


⌨️ 快捷键说明

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