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

📄 lcd_display.lst

📁 LCD多级菜单显示程序!320*240的LCD显示器!全部调试通过的!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   LCD_DISPLAY                                                           10/31/2007 10:13:27 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE LCD_DISPLAY
OBJECT MODULE PLACED IN lcd_display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_display.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**************************************************************
   2          菜单调试程序
   3          *****************************************************/
   4          
   5          #include <stdio.h>              /* standard I/O .h-file */
   6          #include <reg51f.h>
   7          #include <absacc.h>
   8          #include "lcd.h"
   9          #include "x5045.h"
  10          sbit lcd_rs      = P1^5;
  11          sbit lcd_e       = P1^7;
  12          sbit lcd_rw      = P1^6;
  13          xdata struct TIME                       /* structure of the clock record  */
  14          {                                
  15                  unsigned char hour;             /* hour   */
  16                  unsigned char min;              /* minute */
  17                  unsigned char sec;              /* second */
  18          };
  19          
  20          xdata struct DATE 
  21          {
  22                  unsigned char year;
  23                  unsigned char mon;
  24                  unsigned char day;
  25                  unsigned char week;
  26          };
  27          
  28          
  29          /**********
  30          延时子程序
  31          **********/
  32          void Delay(void)
  33          {
  34   1              unsigned char i;        
  35   1              i = 8;
  36   1              while(--i);
  37   1      }
  38          /**********
  39          写指令子程序
  40          **********/
  41          void LcdCommand(unsigned char tt)
  42          {
  43   1              Delay();
  44   1              lcd_rs = 0;
  45   1              lcd_rw = 0;
  46   1              lcd_e = 1;
  47   1              Delay();
  48   1              LCD = tt;
  49   1              Delay();
  50   1              lcd_e = 0;
  51   1              Delay();
  52   1      }
  53          /**************
  54          写数据子程序
  55          **************/
C51 COMPILER V7.08   LCD_DISPLAY                                                           10/31/2007 10:13:27 PAGE 2   

  56          void  LcdData( unsigned char temp )
  57          {
  58   1              Delay();                                //以确保上一指令/数据模块已经接收处理完 
  59   1              lcd_rs = 1;
  60   1              lcd_rw = 0;
  61   1              lcd_e = 1;
  62   1              Delay();
  63   1              LCD = temp;
  64   1              Delay();
  65   1              lcd_e = 0;
  66   1              Delay();
  67   1      }
  68          
  69          
  70          /* 初始化LCD*/
  71          void InitLcd(void)
  72          {   unsigned char i;
  73   1              LcdCommand(0x30);               // 30---基本指令操作 //8 位控制接口,基本指令集动作
  74   1      //      Delay();
  75   1              LcdCommand(0x01);               // 指令#01H为:清除屏幕文字,把地址指针指向00H单元
  76   1              for(i=0;i<201;i++)
  77   1               Delay();
  78   1              PrintStr(0,0,"      ");
  79   1      //      Delay();
  80   1      //      LcdCommand(0x02);                       
  81   1      //      LcdCommand(0x06);               // 指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
  82   1        //    Delay();                
  83   1      //      LcdCommand(0x0C);
  84   1      }
  85          /**************************************************
  86          SEARCH ADDRESS
  87          目的是为了转换地址单元为DDRAM地址单元,以方便定义显示位置
  88          汉字显示DDRAM位置为:第一行:80H----87H
  89          第二行:90H----97H      
  90          *****************************************************/
  91          unsigned char ChangeAddr(first_lin, first_add)
  92          unsigned char first_lin, first_add;
  93          {
  94   1              unsigned char StarAddr;
  95   1              switch( first_lin )
  96   1              {
  97   2                      case 0:        //first line
  98   2                   StarAddr = 0x80;
  99   2                   break;
 100   2              case 1:       //second line
 101   2                   StarAddr = 0x90;
 102   2                   break;
 103   2              case 2:        //first line
 104   2                   StarAddr = 0x88;
 105   2                   break;
 106   2              case 3:       //second line
 107   2                   StarAddr = 0x98;
 108   2                   break;
 109   2              }       
 110   1              return( StarAddr + first_add );
 111   1      }
 112          
 113          /********************
 114          在指定位置显示汉字,字符
 115          y:  显示的纵坐标 0-3
 116          x:  显示的横坐标 0-7
 117          *********************/
C51 COMPILER V7.08   LCD_DISPLAY                                                           10/31/2007 10:13:27 PAGE 3   

 118          void PrintStr(y, x, p) 
 119          unsigned char y, x, *p;
 120          {
 121   1              unsigned char addr;
 122   1      
 123   1              while( *p )
 124   1              {
 125   2                      addr = ChangeAddr(y,x);                 //调用调整地址单元子程序
 126   2                      LcdCommand(addr);                               //设定DDRAM地址,显示位置地址
 127   2                      LcdData( *p );                                  //因为要连续输入机内码高位(区码)、低位(位码)
 128   2                      p++;
 129   2                      if ( !(*p) )                                    //如果是串尾则返回
 130   2                              return;
 131   2                      LcdData( *p );                          //所以要输入两次数据,如果是字符就是输入两个字符字符代码
 132   2                      p++;
 133   2                      x++;
 134   2                      if (x>7)
 135   2                              return;
 136   2              }
 137   1      }
 138          /**********************
 139                  清除图形显示
 140          ***********************/
 141          void ClearGraph(void)
 142          {
 143   1              unsigned char row,column,i,j;
 144   1              //watchdog();
 145   1              row = 0x80;                     //列
 146   1              column = 0x80;          //行
 147   1              for(j=0;j<=33;j++)
 148   1              {
 149   2                      for(i=0;i<=17;i++)
 150   2                      {
 151   3                              LcdCommand(0x34);                    //关闭绘图显示功能
 152   3                              LcdCommand(column+j);                            //起始行
 153   3                              LcdCommand(row+i);                                       //起始列
 154   3                              LcdCommand(0x30);                                        //基本指令集
 155   3                              LcdData(0);                                                      //输入显示数据(横向高8位数据)
 156   3                              LcdData(0);                                                      //输入显示数据(横向低8位数据)
 157   3                      }
 158   2              }
 159   1              LcdCommand(0x36);                           //打开绘图显示功能
 160   1              LcdCommand(0x30);
 161   1      }
 162          /*****************************************************************************************
 163          反白显示行line = 0~3
 164          第一、三行由一片IC控制
 165          第二、四行由一片IC控制
 166          第一行纵坐标80h-8fh(以点为单位),横坐标80H-87H(以字为单位);第三行纵坐标80h-8fh,横坐标88H-8FH
 167          第二行纵坐标80h-8fh(以点为单位),横坐标90H-97H(以字为单位);第四行纵坐标80h-8fh,横坐标98H-9FH
 168          ******************************************************************************************/
 169          void ReverseLine(unsigned char line)
 170          {
 171   1              unsigned char row,column,i,j;
 172   1              ClearGraph();
 173   1              switch(line)                                                    //选择行列的起始位置
 174   1              {
 175   2                      case 0:
 176   2                              column = 0x80;
 177   2                              row = 0x80;
 178   2                              break;
 179   2                      case 1:
C51 COMPILER V7.08   LCD_DISPLAY                                                           10/31/2007 10:13:27 PAGE 4   

 180   2                              column = 0x90;
 181   2                              row = 0x80;
 182   2                              break;
 183   2                      case 2:

⌨️ 快捷键说明

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