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

📄 lcd_driver.c

📁 TG19264(点阵式无字库192*64)LED驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
            LCD Driver For TG19264A-02
            arkuo Write at 2008/08/25
*/

#include "KeyDisplay.h"

signed char CharDisplay(unsigned char,unsigned char,unsigned char __flash *,unsigned char,unsigned char);

signed char lcd_display(unsigned char,unsigned char,unsigned char);

void DisplayClear(void);

void write_instruction_cs1(unsigned char data);
void write_data_cs1(unsigned char data);
void X_write_data_cs1(unsigned char data);

void write_instruction_cs2(unsigned char data);
void write_data_cs2(unsigned char data);
void X_write_data_cs2(unsigned char data);

void write_instruction_cs3(unsigned char data);
void write_data_cs3(unsigned char data);
void X_write_data_cs3(unsigned char data);

void busy_check(unsigned char);

extern void Watchdog(void);

/******************************LCD显示清屏子程序**********************************/

void DisplayClear(void)
 {
  unsigned char page;
  unsigned char line;

  for(page = 0;page < 8;page ++)
    for(line = 0;line < 192;line ++)
      lcd_display(line,page,0x00);
 }
void DisplayClear2(void)
 {
  unsigned char page;
  unsigned char line;

  for(page = 2;page < 8;page ++)
    for(line = 0;line < 192;line ++)
      lcd_display(line,page,0x00);
 }
/***************************字符显示子程序***************************/
/*
  调用格式:Page为显示Y页坐标,Line为显示X行坐标,*TableAddress为查表首地址,BCase为0时表示半角显示,非0时表示全角显示,
Size表示所显示的字符个数,按顺序排列。
*/
signed char CharDisplay(unsigned char Page,unsigned char Line,unsigned char __flash *TableAddress,unsigned char BCase,unsigned char Size)
 {
  unsigned char LineTotal;
  unsigned char LineTemp,CountTemp;

  if(BCase)
    BCase = 16;                             /*全角显示                                */
  else
    BCase = 8;                              /*半角显示                                */

  LineTotal = BCase;
  CountTemp = 0;

  if(Line >= 192 || Page > 7)               /*地址超出允许范围                        */
    return(-1);
  else
    ;

  do
    {
     if(LineTotal == BCase)
        LineTemp = Line;
     else
        ;

     if(Line < 64)                          /*Chip1                                   */
       {
        write_instruction_cs1(Page | 0x0b8);/*页面地址设定,Page = 1011 1XXX          */
        write_instruction_cs1(Line | 0x40); /*X列地址设定,01XX XXXX                  */

        for(;Line<64 && LineTotal>0;Line++,LineTotal--)
           write_data_cs1(*(TableAddress++));
       }
     else if(Line >= 64 && Line < 128)      /*Chip2                                   */
       {
        write_instruction_cs2(Page | 0x0b8);/*页面地址设定,Page = 1011 1XXX          */
        write_instruction_cs2((Line-64) | 0x40); /*X列地址设定,01XX XXXX             */

        for(;Line<128 && LineTotal>0;Line++,LineTotal--)
           write_data_cs2(*(TableAddress++));
       }
     else if(Line >= 128 && Line+LineTotal <= 192) /*Chip3                            */
       {
        write_instruction_cs3(Page | 0x0b8);  /*页面地址设定,Page = 1011 1XXX        */
        write_instruction_cs3((Line-128) | 0x40);  /*X列地址设定,01XX XXXX           */

        for(;Line<192 && LineTotal>0;Line++,LineTotal--)
           write_data_cs3(*(TableAddress++));
       }
     else
        ;

     if(LineTotal == 0 && CountTemp == 0 && Page < 7)    /*写下半行                   */
       {

  Watchdog();

        Page++;
        CountTemp++;
        LineTotal = BCase;
        Line = LineTemp;
       }
     else if(LineTotal == 0 && CountTemp == 0 && Page == 7 && Line+BCase <= 192) /*行数不够,只写上半行*/
       {
        TableAddress += BCase;
        LineTotal = BCase;
        Size--;
       }
     else if(LineTotal == 0 && CountTemp > 0 && Line+BCase <= 192)   /*返回写上半行   */
       {

  Watchdog();

        Page--;
        CountTemp = 0;
        LineTotal = BCase;
        Size--;
       }
     else if(LineTotal == 0 && CountTemp > 0 && Line+BCase > 192 && Page < 7) /*写下一行字符*/
       {

  Watchdog();

        Page++;
        LineTotal = BCase;
        CountTemp = 0;
        Line = 0;
        Size--;
       }
     else if(Line+BCase >= 192 && Page >= 7)  /*显示溢出                              */
        break;
     else
        ;
    }while(Size > 0);

  return(1);
 }
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
signed char X_CharDisplay(unsigned char X_Page,unsigned char X_Line,unsigned char __flash *X_TableAddress,unsigned char X_BCase,unsigned char X_Size)
 {
  unsigned char X_LineTotal;
  unsigned char X_LineTemp,CountTemp;

  if(X_BCase)
    X_BCase = 16;                             /*全角显示                                */
  else
    X_BCase = 8;                              /*半角显示                                */

  X_LineTotal = X_BCase;
  CountTemp = 0;

  if(X_Line >= 192 || X_Page > 7)               /*地址超出允许范围                        */
    return(-1);
  else
    ;

  do
    {
     if(X_LineTotal == X_BCase)
        X_LineTemp = X_Line;
     else
        ;

     if(X_Line < 64)                          /*Chip1                                   */
       {
        write_instruction_cs1(X_Page | 0x0b8);/*页面地址设定,X_Page = 1011 1XXX          */
        write_instruction_cs1(X_Line | 0x40); /*X列地址设定,01XX XXXX                  */

        for(;X_Line<64 && X_LineTotal>0;X_Line++,X_LineTotal--)
           X_write_data_cs1(*(X_TableAddress++));
       }
     else if(X_Line >= 64 && X_Line < 128)      /*Chip2                                   */
       {
        write_instruction_cs2(X_Page | 0x0b8);/*页面地址设定,X_Page = 1011 1XXX          */
        write_instruction_cs2((X_Line-64) | 0x40); /*X列地址设定,01XX XXXX             */

        for(;X_Line<128 && X_LineTotal>0;X_Line++,X_LineTotal--)
           X_write_data_cs2(*(X_TableAddress++));
       }
     else if(X_Line >= 128 && X_Line+X_LineTotal <= 192) /*Chip3                            */
       {
        write_instruction_cs3(X_Page | 0x0b8);  /*页面地址设定,X_Page = 1011 1XXX        */
        write_instruction_cs3((X_Line-128) | 0x40);  /*X列地址设定,01XX XXXX           */

        for(;X_Line<192 && X_LineTotal>0;X_Line++,X_LineTotal--)
           X_write_data_cs3(*(X_TableAddress++));
       }
     else
        ;

     if(X_LineTotal == 0 && CountTemp == 0 && X_Page < 7)    /*写下半行                   */
       {

  Watchdog();

        X_Page++;
        CountTemp++;
        X_LineTotal = X_BCase;
        X_Line = X_LineTemp;
       }
     else if(X_LineTotal == 0 && CountTemp == 0 && X_Page == 7 && X_Line+X_BCase <= 192) /*行数不够,只写上半行*/
       {
        X_TableAddress += X_BCase;
        X_LineTotal = X_BCase;
        X_Size--;
       }
     else if(X_LineTotal == 0 && CountTemp > 0 && X_Line+X_BCase <= 192)   /*返回写上半行   */
       {

  Watchdog();

        X_Page--;
        CountTemp = 0;
        X_LineTotal = X_BCase;
        X_Size--;
       }
     else if(X_LineTotal == 0 && CountTemp > 0 && X_Line+X_BCase > 192 && X_Page < 7) /*写下一行字符*/
       {

  Watchdog();

        X_Page++;
        X_LineTotal = X_BCase;
        CountTemp = 0;
        X_Line = 0;
        X_Size--;
       }
     else if(X_Line+X_BCase >= 192 && X_Page >= 7)  /*显示溢出                              */
        break;
     else
        ;
    }while(X_Size > 0);

  return(1);
 }

/*********************LCD显示数据写入子程序(非查表字符)***************************/

⌨️ 快捷键说明

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