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

📄 lcd12232.lst

📁 自己单片机板c程序
💻 LST
字号:
C51 COMPILER V7.02a   LCD12232                                                             12/10/2008 20:34:03 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE LCD12232
OBJECT MODULE PLACED IN lcd12232.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE lcd12232.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          //#include <at89x51.h>
   4          
   5          sbit LCD_RS=P1^0;//定义引脚
   6          sbit LCD_RW=P1^1;
   7          sbit LCD_E=P1^2;
   8          #define LCD_Data P2
   9          #define Busy    0x80 //用于检测LCD状态字中的Busy标识
  10          
  11          
  12          
  13          void WriteDataLCD(unsigned char WDLCD);
  14          void WriteCommandLCD(unsigned char WCLCD,BuysC);
  15          unsigned char ReadDataLCD(void);
  16          unsigned char ReadStatusLCD(void);
  17          void LCDInit(void);
  18          void LCDClear(void);
  19          void LCDFlash(void);
  20          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  21          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  22          void DisplayImage (unsigned char code *DData);
  23          void Delay5Ms(void);
  24          void Delay400Ms(void);
  25          
  26          
  27          code unsigned char  uctech[] = {"51单片机学习网"};
  28          code unsigned char  net[] = {"www.lydz8.com"};
  29          //----------------------------------------------------------------------------
  30          code unsigned char tmp[]={//122*32点阵图形数据,林洋电子吧
  31          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0,
  32          0x80,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
  33          0x80,0x00,0x8F,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
  34          0x80,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
  35          0x80,0x01,0xFF,0xF8,0x00,0x10,0x80,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
  36          0x80,0x01,0xFF,0xF0,0x80,0x10,0x83,0x24,0x02,0x01,0xFE,0x03,0xF0,0x00,0x00,0x40,
  37          0x80,0x03,0xFF,0xF8,0x20,0x10,0x80,0x44,0x1F,0xE0,0x0C,0x3A,0x90,0x00,0x00,0x40,
  38          0x80,0x03,0xFF,0xFC,0xE0,0x3F,0xF0,0x3B,0x12,0x20,0x30,0x2A,0x90,0x00,0x00,0x40,
  39          0x80,0x0F,0xFF,0xFC,0x38,0x10,0xC2,0x08,0x12,0x20,0x20,0x2A,0x90,0x00,0x00,0x40,
  40          0x80,0x0F,0xFC,0xAF,0x9E,0x1D,0xC1,0x7F,0x1F,0xE3,0xFF,0x2B,0xF0,0x00,0x00,0x40,
  41          0x80,0x2F,0xF8,0x00,0x20,0x35,0xA0,0x08,0x12,0x20,0x20,0x2A,0x10,0x00,0x00,0x40,
  42          0x80,0x03,0xF0,0x00,0x20,0x32,0x91,0x08,0x1F,0xE0,0x20,0x3A,0x00,0x38,0x00,0x40,
  43          0x80,0x01,0xF0,0x01,0x00,0x16,0x91,0x7F,0x12,0x00,0x20,0x2A,0x00,0x30,0x00,0x40,
  44          0x80,0x00,0x38,0x0C,0x00,0x10,0x82,0x08,0x02,0x10,0x20,0x02,0x10,0x20,0x00,0x40,
  45          0x80,0x00,0x1F,0xE0,0x00,0x10,0x82,0x08,0x01,0xF0,0x60,0x01,0xF0,0x20,0x00,0x40,
  46          0x80,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x40,
  47          0x80,0x01,0xFB,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x60,0x40,
  48          0x80,0x03,0xFF,0xE8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0xF8,0x40,
  49          0x80,0x01,0xDF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x09,0xF8,0x40,
  50          0x80,0x01,0xFF,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0xF8,0x40,
  51          0x80,0x03,0xFD,0xFE,0x00,0x00,0x00,0x08,0x01,0x01,0x80,0x00,0x00,0x0D,0xF8,0x40,
  52          0x80,0x05,0xF7,0xFF,0x80,0x00,0x00,0x08,0x01,0x02,0x40,0x00,0x00,0x27,0xF8,0x40,
  53          0x80,0x07,0xFE,0xFE,0x83,0xDE,0xF0,0x09,0x27,0x3A,0x40,0x73,0x3E,0x61,0xF9,0x40,
  54          0x80,0x07,0xEF,0x7B,0x03,0xDE,0xF0,0x08,0xC9,0x19,0x80,0x84,0xAA,0xE3,0xF9,0xC0,
  55          0x80,0x0D,0xFF,0xBC,0x01,0x8C,0x60,0x08,0xC9,0x32,0x40,0x94,0xAA,0xE3,0xFC,0xC0,
C51 COMPILER V7.02a   LCD12232                                                             12/10/2008 20:34:03 PAGE 2   

  56          0x80,0x06,0xBF,0xF8,0x01,0x8C,0x62,0x08,0xC7,0x3B,0xC8,0x63,0x2A,0xE7,0xFD,0x40,
  57          0x80,0xFF,0xFF,0xFD,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0xC7,0xFE,0x40,
  58          0xDF,0xFF,0x7E,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC3,0xF8,0x40,
  59          0xFF,0xF8,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0xE0,0x40,
  60          0xFF,0xE1,0xFF,0xF7,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,
  61          0x80,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,
  62          0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xC0};
  63          //--------------------------------------------------------------------------
  64          
  65          void main(void)
  66          {
  67   1       Delay400Ms(); //启动等待,等LCD讲入工作状态
  68   1       LCDInit(); //LCM初始化
  69   1       Delay5Ms(); //延时片刻(可不要)
  70   1       while(1){
  71   2                      LCDClear();
  72   2                      DisplayImage(tmp);//显示图形
  73   2                      Delay400Ms();
  74   2                      Delay400Ms();
  75   2                      Delay400Ms();
  76   2                      Delay400Ms();
  77   2                      Delay400Ms();
  78   2                      Delay400Ms();
  79   2                      Delay400Ms();
  80   2                      LCDClear();
  81   2                      DisplayListChar(0, 0, uctech);  //显示字库中的中文数字
  82   2                      DisplayListChar(0, 5, net);             //显示字库中的中文数字
  83   2                      Delay400Ms();
  84   2                      Delay400Ms();
  85   2                      Delay400Ms();
  86   2                      Delay400Ms();
  87   2                      LCDFlash();     //闪烁效果
  88   2                      //}
  89   2              }
  90   1      }
  91          
  92          //写数据
  93          void WriteDataLCD(unsigned char WDLCD)
  94          {
  95   1       ReadStatusLCD(); //检测忙 
  96   1       LCD_RS = 1;
  97   1       LCD_RW = 0;
  98   1       LCD_Data = WDLCD;
  99   1       LCD_E = 1;
 100   1       LCD_E = 1;
 101   1       LCD_E = 1;
 102   1       LCD_E = 0;
 103   1      }
 104          
 105          //写指令
 106          void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
 107          {
 108   1       if (BuysC) ReadStatusLCD(); //根据需要检测忙 
 109   1       LCD_RS = 0;
 110   1       LCD_RW = 0; 
 111   1       LCD_Data = WCLCD;
 112   1       LCD_E = 1; 
 113   1       LCD_E = 1;
 114   1       LCD_E = 1;
 115   1       LCD_E = 0;  
 116   1      }
 117          
C51 COMPILER V7.02a   LCD12232                                                             12/10/2008 20:34:03 PAGE 3   

 118          //读数据
 119          unsigned char ReadDataLCD(void)
 120          {
 121   1       LCD_RS = 1; 
 122   1       LCD_RW = 1;
 123   1       LCD_E = 0;
 124   1       LCD_E = 0;
 125   1       LCD_E = 1;
 126   1       return(LCD_Data);
 127   1      }
 128          
 129          //读状态
 130          unsigned char ReadStatusLCD(void)
 131          {
 132   1       LCD_Data = 0xFF; 
 133   1       LCD_RS = 0;
 134   1       LCD_RW = 1; 
 135   1       LCD_E = 1;
 136   1       while (LCD_Data & Busy); //检测忙信号
 137   1       LCD_E = 0;
 138   1       return(LCD_Data);
 139   1      }
 140          
 141          void LCDInit(void) //LCM初始化
 142          {
 143   1       WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号
 144   1       WriteCommandLCD(0x01,1); //显示清屏
 145   1       WriteCommandLCD(0x06,1); // 显示光标移动设置
 146   1       WriteCommandLCD(0x0C,1); // 显示开及光标设置
 147   1      }
 148          void LCDClear(void) //清屏
 149          {
 150   1       WriteCommandLCD(0x01,1); //显示清屏
 151   1       WriteCommandLCD(0x34,1); // 显示光标移动设置
 152   1       WriteCommandLCD(0x30,1); // 显示开及光标设置
 153   1      }
 154          void LCDFlash(void)     //闪烁效果
 155          {
 156   1       WriteCommandLCD(0x08,1); //显示清屏
 157   1       Delay400Ms();
 158   1       WriteCommandLCD(0x0c,1); // 显示开及光标设置
 159   1       Delay400Ms();
 160   1       WriteCommandLCD(0x08,1); //显示清屏
 161   1       Delay400Ms();
 162   1       WriteCommandLCD(0x0c,1); // 显示开及光标设置
 163   1       Delay400Ms();
 164   1       WriteCommandLCD(0x08,1); //显示清屏
 165   1       Delay400Ms();
 166   1      }
 167          //按指定位置显示一个字符
 168          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 169          {
 170   1       Y &= 0x1;
 171   1       X &= 0xF; //限制X不能大于15,Y不能大于1
 172   1       if (Y) X |= 0x10; //当要显示第二行时地址码+0x10;
 173   1       X |= 0x80; // 算出指令码
 174   1       WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
 175   1       WriteDataLCD(DData);
 176   1      }
 177          
 178          //按指定位置显示一串字符
 179          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
C51 COMPILER V7.02a   LCD12232                                                             12/10/2008 20:34:03 PAGE 4   

 180          {
 181   1       unsigned char ListLength,X2;
 182   1        ListLength = 0;
 183   1        X2=X;
 184   1       Y &= 0x01;
 185   1       X &= 0x0F; //限制X不能大于15,Y不能大于1
 186   1       if (Y) X2 |= 0x10; //当要显示第二行时地址码+0x10;
 187   1       X2 |= 0x80; // 算出指令码
 188   1       WriteCommandLCD(X2, 1); //这里不检测忙信号,发送地址码
 189   1       while (DData[ListLength]>=0x20) //若到达字串尾则退出
 190   1        {
 191   2         if (X <= 0x0F) //X坐标应小于0xF
 192   2          {
 193   3           WriteDataLCD(DData[ListLength]); //
 194   3           ListLength++;
 195   3               X++;
 196   3               Delay5Ms();
 197   3          }
 198   2        }
 199   1      }
 200          
 201          //图形显示122*32
 202          void DisplayImage (unsigned char code *DData){
 203   1              unsigned char x,y;
 204   1              for(x=0;x<32;x++){                              //32行
 205   2                      WriteCommandLCD(0x34,1);
 206   2                      WriteCommandLCD((0x80+x),1);//列地址
 207   2                      WriteCommandLCD(0x80,1);        //行地址
 208   2                      WriteCommandLCD(0x30,1);
 209   2                      for(y=0;y<16;y++)                       
 210   2                              WriteDataLCD(DData[x*16+y]);//读取数据写入LCD           
 211   2              }
 212   1              WriteCommandLCD(0x36,1);        //扩充功能设定
 213   1              WriteCommandLCD(0x30,1);
 214   1      }
 215          
 216          //5ms延时
 217          void Delay5Ms(void)
 218          {
 219   1       unsigned int TempCyc = 5552;
 220   1       while(TempCyc--);
 221   1      }
 222          
 223          //400ms延时
 224          void Delay400Ms(void)
 225          {
 226   1       unsigned char TempCycA = 5;
 227   1       unsigned int TempCycB;
 228   1       while(TempCycA--)
 229   1       {
 230   2        TempCycB=7269;
 231   2        while(TempCycB--);
 232   2       };
 233   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    524    ----
   CONSTANT SIZE    =    541    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
C51 COMPILER V7.02a   LCD12232                                                             12/10/2008 20:34:03 PAGE 5   

   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 + -