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

📄 12864j.lst

📁 这是一个利用单片机来控制液晶显示屏显示字符的程序
💻 LST
字号:
C51 COMPILER V7.50   12864J                                                                05/09/2008 14:17:57 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 12864J
OBJECT MODULE PLACED IN 12864J.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 12864J.C COMPACT BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"reg51.h"
   2          /********************************************************               
   3          *               12864J液晶显示器
   4          *12864J:1.图形点阵液晶显示器,分辨率为128X64。可显示图形
   5          *          和8×4个(16×16点阵)汉字。
   6          *        2.采用8位数据总线并行输入输出和8条控制线。
   7          *        3.指令简单,7种指令
   8          ********************************************************/
   9          
  10          //xdata unsigned char WR_COM_AD_L       _at_ 0xF004;            //写左半屏指令地址
  11          //xdata unsigned char WR_COM_AD_R       _at_ 0xF000;            //写右半屏指令地址
  12          //xdata unsigned char WR_DATA_AD_L _at_ 0xF006;         //写左半屏数据地址      
  13          //xdata unsigned char WR_DATA_AD_R _at_ 0xF002;         //写右半屏数据地址
  14          //xdata unsigned char RD_BUSY_AD _at_ 0xF001;                   //查忙地址
  15          //xdata unsigned char RD_DATA_AD _at_ 0xF003;                   //读数据地址
  16          sbit DI=P1^0 ;
  17          sbit WRR= P1^1;
  18          sbit E= P1^2 ;
  19          sbit CS1= P1^3 ;
  20          sbit CS2= P1^4 ;
  21          sbit RST=P1^5  ;
  22          
  23          #define data P0
  24          
  25          #define X                       0xB8                                                    //起始显示行基址
  26          #define Y                       0x40                                                    //起始显示列基址
  27          #define FirstLine       0xC0                                                    //起始显示行
  28          
  29          void delay()
  30          {
  31   1      unsigned char i;
  32   1      for(i=0;i<50;i++) ;
  33   1      }               
  34          //***************************************
  35          //基本控制              
  36          //***************************************                                       
  37          //写左半屏控制指令
  38          void WRComL(unsigned char _data)
  39          {
  40   1              CS1=1;
  41   1              CS2=1;
  42   1              DI=0;
  43   1              WRR=0;
  44   1              data = _data;
  45   1              delay();
  46   1              CS1=0; 
  47   1              CS1=1;
  48   1              //while (RD_BUSY_AD & 0x80)     //检查液晶显示是否处于忙状态
  49   1              //{;}
  50   1      }
  51          
  52          //写右半屏控制指令
  53          void WRComR(unsigned char _data)
  54          {
  55   1              //WR_COM_AD_R = _data;
C51 COMPILER V7.50   12864J                                                                05/09/2008 14:17:57 PAGE 2   

  56   1              //while (RD_BUSY_AD & 0x80)     //检查液晶显示是否处于忙状态
  57   1              //{;}
  58   1              CS1=1;
  59   1              CS2=1;
  60   1              DI=0;
  61   1              WRR=0;
  62   1              data = _data;
  63   1              delay();
  64   1              CS2=0;  
  65   1              CS2=1;
  66   1      }
  67          
  68          //写左半屏数据
  69          void WRDataL(unsigned char _data)
  70          {
  71   1              CS1=1;
  72   1              CS2=1;
  73   1              DI=1;
  74   1              WRR=0;
  75   1              data = _data;
  76   1              delay();
  77   1              CS1=0;
  78   1              CS1=1;
  79   1      }
  80          
  81          //写右半屏数据
  82          void WRDataR(unsigned char _data)
  83          {
  84   1              //WR_DATA_AD_R = _data;
  85   1              //while (RD_BUSY_AD & 0x80)     //检查液晶显示是否处于忙状态
  86   1              //{;};
  87   1              CS1=1;
  88   1              CS2=1;
  89   1              DI=1;
  90   1              WRR=0;
  91   1              data = _data;
  92   1              delay();
  93   1              CS2=0;  
  94   1              CS2=1;
  95   1      }
  96          
  97          //显示左半屏数据,count-显示数据个数
  98          void DisplayL(unsigned char *pt, char count)
  99          {
 100   1              while (count--)
 101   1              {
 102   2                      WRDataL(*pt++);                 //写左半屏数据
 103   2              }
 104   1      }
 105          
 106          //显示右半屏数据,count-显示数据个数
 107          void DisplayR(unsigned char * pt, char count)
 108          {
 109   1              while (count--)
 110   1              {
 111   2                      WRDataR(*pt++);                 //写右半屏数据
 112   2              }
 113   1      }
 114          
 115          //设置左半屏起始显示行列地址,x-X起始行序数(0-7),y-Y起始列序数(0-63)
 116          void SETXYL(unsigned char x, unsigned char y)
 117          {
C51 COMPILER V7.50   12864J                                                                05/09/2008 14:17:57 PAGE 3   

 118   1              WRComL(x+X);                            //行地址=行序数+行基址
 119   1              WRComL(y+Y);                            //列地址=列序数+列基址
 120   1      }
 121          
 122          //设置右半屏起始显示行列地址,x:X起始行序数(0-7),y:Y起始列序数(0-63)
 123          void SETXYR(unsigned char x, unsigned char y)
 124          {
 125   1              WRComR(x+X);                            //行地址=行序数+行基址
 126   1              WRComR(y+Y);                            //列地址=列序数+列基址
 127   1      }
 128          
 129          //***************************************
 130          //显示图形              
 131          //***************************************
 132          //显示左半屏一行图形,A-X起始行序数(0-7),B-Y起始列地址序数(0-63)
 133          void LineDisL(unsigned char x, unsigned char y, unsigned char * pt)
 134          {
 135   1              SETXYL(x,y);                            //设置起始显示行列
 136   1              DisplayL(pt, 64);                       //显示数据
 137   1      }
 138          
 139          //显示右半屏一行图形,A-X起始行地址序数(0-7),B-Y起始列地址序数(0-63)
 140          void LineDisR(unsigned char x, unsigned char y, unsigned char * pt)
 141          {
 142   1              SETXYR(x,y);                            //设置起始显示行列
 143   1              DisplayR(pt, 64);                       //显示数据
 144   1      }
 145          
 146          //***************************************
 147          //显示字体,显示一个数据要占用X行两行位置
 148          //***************************************
 149          //右半屏显示一个字节/字:x-起始显示行序数X(0-7);y-起始显示列序数Y(0-63);pt-显示字数据首地址
 150          void ByteDisR(unsigned char x, unsigned char y,unsigned char * pt)
 151          {
 152   1              SETXYR(x,y);                    //设置起始显示行列地址
 153   1              DisplayR(pt, 8);                        //显示上半行数据
 154   1              SETXYR(x+1,y);                  //设置起始显示行列地址
 155   1              DisplayR(pt+8, 8);              //显示下半行数据
 156   1      }
 157          
 158          void WordDisR(unsigned char x, unsigned char y,unsigned char * pt)
 159          {
 160   1              SETXYR(x,y);                    //设置起始显示行列地址
 161   1              DisplayR(pt, 16);               //显示上半行数据
 162   1              SETXYR(x+1,y);                  //设置起始显示行列地址
 163   1              DisplayR(pt+16, 16);    //显示下半行数据
 164   1      }
 165          
 166          //左半屏显示一个字节/字:x-起始显示行序数X(0-7);y-起始显示列序数Y(0-63);pt-显示字数据首地址
 167          void ByteDisL(unsigned char x, unsigned char y,unsigned char * pt)
 168          {
 169   1              SETXYL(x,y);                    //设置起始显示行列地址
 170   1              DisplayL(pt, 8);                //显示上半行数据
 171   1              SETXYL(x+1,y);                  //设置起始显示行列地址
 172   1              DisplayL(pt+8, 8);              //显示下半行数据
 173   1      }
 174          
 175          void WordDisL(unsigned char x, unsigned char y,unsigned char * pt)
 176          {
 177   1              SETXYL(x,y);                    //设置起始显示行列地址
 178   1              DisplayL(pt, 16);               //显示上半行数据
 179   1              SETXYL(x+1,y);                  //设置起始显示行列地址
C51 COMPILER V7.50   12864J                                                                05/09/2008 14:17:57 PAGE 4   

 180   1              DisplayL(pt+16, 16);    //显示下半行数据
 181   1      }
 182          //清屏
 183          void LCDClear()
 184          {
 185   1      //清左半屏
 186   1              unsigned char x,y;
 187   1              char j;
 188   1              x = 0;                                          //起始行,第0行
 189   1              y = 0;                                          //起始列,第0列
 190   1              for (x = 0; x < 8; x++)         //共8行
 191   1              {
 192   2                      SETXYL(x,y);                    //设置起始显示行列地址
 193   2                      j = 64;
 194   2                      while (j--)
 195   2                              WRDataL(0);
 196   2              }
 197   1      //清右半屏
 198   1              x = 0;                                          //起始行,第0行
 199   1              y = 0;                                          //起始列,第0列
 200   1              for (x = 0; x < 8; x++)         //共8行
 201   1              {
 202   2                      SETXYR(x,y);                    //设置起始显示行列地址
 203   2                      j = 64;
 204   2                      while (j--)
 205   2                              WRDataR(0);
 206   2              }
 207   1      }
 208          
 209          //液晶初始化    
 210          void LCD_INIT()
 211          {
 212   1              WRComL(0x3e);                   //初始化左半屏,关显示
 213   1              WRComL(FirstLine);              //设置起始显示行,第0行
 214   1              WRComR(0x3e);                   //初始化右半屏,关显示
 215   1              WRComR(FirstLine);              //设置起始显示行,第0行
 216   1              LCDClear();                             //清屏
 217   1              WRComL(0x3f);                   //开显示
 218   1              WRComR(0x3f);                   //开显示
 219   1      }
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    486    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----      18
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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