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

📄 lcd_driver.c

📁 TG19264(点阵式无字库192*64)LED驱动
💻 C
📖 第 1 页 / 共 2 页
字号:

signed char lcd_display(unsigned char x,unsigned char y,unsigned char data)
 {
  if(x >= 192 || y > 7)                 /*地址超出允许范围                            */
    return(-1);
  else
    ;

  y = y | 0x0b8;                        /*y = 1011 1XXX                               */

  if(x < 64)                            /*Chip1                                       */
    {
     write_instruction_cs1(y);          /*页面地址设定                                */
     write_instruction_cs1(x | 0x40);   /*X列地址设定,01XX XXXX                      */

     write_data_cs1(data);
    }
  else if(x >= 64 && x < 128)           /*Chip2                                       */
    {
     write_instruction_cs2(y);          /*页面地址设定                                */
     write_instruction_cs2((x-64) | 0x40);  /*X列地址设定,01XX XXXX                  */

     write_data_cs2(data);
    }
  else                                  /*Chip3                                       */
    {
     write_instruction_cs3(y);          /*页面地址设定                                */
     write_instruction_cs3((x-128) | 0x40);  /*X列地址设定,01XX XXXX                 */

     write_data_cs3(data);
    }

  return(1);
 }

/******************************LCD显示驱动子程序**********************************/

void write_instruction_cs1(unsigned char data)
 {
  busy_check(1);                            /*CS1忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 0;                               /*DI=0                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable1 = 1;                          /*CS1=1                                   */
 }

void write_instruction_cs2(unsigned char data)
 {
  busy_check(2);                            /*CS2忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 0;                               /*DI=0                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable2 = 1;                          /*CS2=1                                   */
 }

void write_instruction_cs3(unsigned char data)
 {
  busy_check(3);                            /*CS3忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 0;                               /*DI=0                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable3 = 1;                          /*CS3=1                                   */
 }

void write_data_cs1(unsigned char data)
 {
  busy_check(1);                            /*CS1忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable1 = 1;                          /*CS1=1                                   */
 }

void write_data_cs2(unsigned char data)
 {
  busy_check(2);                            /*CS2忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable2 = 1;                          /*CS2=1                                   */
 }

void write_data_cs3(unsigned char data)
 {
  busy_check(3);                            /*CS3忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  lcd_data = data;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable3 = 1;                          /*CS3=1                                   */
 }

void busy_check(unsigned char flag)
 {
  lcd_data_dir = 0x00;
  lcd_data = 0x0ff;                         /*lcd_data置成输入口并置位上拉电阻        */

  switch(flag)
    {
     case 1:
       do
         {
          lcd_rw = 1;                       /*RW=1                                    */
          lcd_enable1 = 0;                  /*CS1=0                                   */
          lcd_DI = 0;                       /*DI=0                                    */

          lcd_DataEnable = 1;               /*lcd_DataEnable = 1                      */
          Watchdog();
          lcd_DataEnable = 0;               /*lcd_DataEnable = 0                      */
         }while(busy);
       break;

     case 2:
       do
         {
          lcd_rw = 1;                       /*RW=1                                    */
          lcd_enable2 = 0;                  /*CS2=0                                   */
          lcd_DI = 0;                       /*DI=0                                    */

          lcd_DataEnable = 1;               /*lcd_DataEnable = 1                      */
          Watchdog();
          lcd_DataEnable = 0;               /*lcd_DataEnable = 0                      */
         }while(busy);
       break;

     case 3:
       do
         {
          lcd_rw = 1;                       /*RW=1                                    */
          lcd_enable3 = 0;                  /*CS3=0                                   */
          lcd_DI = 0;                       /*DI=0                                    */

          lcd_DataEnable = 1;               /*lcd_DataEnable = 1                      */
          Watchdog();
          lcd_DataEnable = 0;               /*lcd_DataEnable = 0                      */
         }while(busy);
       break;

     default:
       break;
    }

  lcd_data_dir = 0x0ff;                     /*lcd_data恢复为输出口                    */
 }

//***************************************************************************************
void X_write_data_cs1(unsigned char data)
 {
  unsigned char i;
  busy_check(1);                            /*CS1忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  i=data;
  lcd_data = ~i;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable1 = 1;                          /*CS1=1                                   */
 }

void X_write_data_cs2(unsigned char data)
 {
  unsigned char i;
  busy_check(2);                            /*CS2忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  i=data;
  lcd_data = ~i;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable2 = 1;                          /*CS2=1                                   */
 }

void X_write_data_cs3(unsigned char data)
 {
  unsigned char i;
  busy_check(3);                            /*CS3忙碌状态检查                         */

  lcd_rw = 0;                               /*RW=0                                    */
  lcd_DI = 1;                               /*DI=1                                    */

  i=data;
  lcd_data = ~i;

  lcd_DataEnable = 1;                       /*lcd_DataEnable = 1                      */
  Watchdog();
  lcd_DataEnable = 0;                       /*lcd_DataEnable = 0                      */

  lcd_rw = 1;                               /*RW=1                                    */
  lcd_enable3 = 1;                          /*CS3=1                                   */
 }

⌨️ 快捷键说明

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