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

📄 lcd12864.lst

📁 自己单片机板c程序
💻 LST
字号:
C51 COMPILER V7.02a   LCD12864                                                             12/09/2008 21:38:29 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE lcd12864.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          sbit PSB =P3^6;         //PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
   9          #define LCD_Data P2
  10          #define Busy    0x80 //用于检测LCD状态字中的Busy标识
  11          
  12          
  13          
  14          void WriteDataLCD(unsigned char WDLCD);
  15          void WriteCommandLCD(unsigned char WCLCD,BuysC);
  16          unsigned char ReadDataLCD(void);
  17          unsigned char ReadStatusLCD(void);
  18          void LCDInit(void);
  19          void LCDClear(void);
  20          void LCDFlash(void);
  21          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  22          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  23          void Delay5Ms(void);
  24          void Delay400Ms(void);
  25          
  26          code unsigned char  uctech[] = {"5 1 单片机实验板"};
  27          code unsigned char  net[] = {" www.lydz8.com  "};
  28          code unsigned char  mcu[] = {"自学单片机的首选"};
  29          code unsigned char  qq[] = {"  QQ: 52927029  "};
  30          
  31          void main(void)
  32          {
  33   1       Delay400Ms(); //启动等待,等LCD讲入工作状态
  34   1       LCDInit(); //LCM初始化
  35   1       Delay5Ms(); //延时片刻(可不要)
  36   1       while(1){
  37   2                      LCDClear();
  38   2                      DisplayListChar(0,1,uctech);    //显示字库中的中文数字
  39   2                      DisplayListChar(0,2,net);               //显示字库中的中文数字
  40   2                      DisplayListChar(0,3,mcu);               //显示字库中的中文
  41   2                      DisplayListChar(0,4,qq);                //显示字库中的中文数字
  42   2                      Delay400Ms();
  43   2                      Delay400Ms();
  44   2                      Delay400Ms();
  45   2                      Delay400Ms();
  46   2                      LCDFlash();     //闪烁效果
  47   2                      //}
  48   2              }
  49   1      }
  50          
  51          //写数据
  52          void WriteDataLCD(unsigned char WDLCD)
  53          {
  54   1       ReadStatusLCD(); //检测忙 
  55   1       LCD_RS = 1;
C51 COMPILER V7.02a   LCD12864                                                             12/09/2008 21:38:29 PAGE 2   

  56   1       LCD_RW = 0;
  57   1       LCD_Data = WDLCD;
  58   1       LCD_E = 1;
  59   1       LCD_E = 1;
  60   1       LCD_E = 1;
  61   1       LCD_E = 0;
  62   1      }
  63          
  64          //写指令
  65          void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
  66          {
  67   1       if (BuysC) ReadStatusLCD(); //根据需要检测忙 
  68   1       LCD_RS = 0;
  69   1       LCD_RW = 0; 
  70   1       LCD_Data = WCLCD;
  71   1       LCD_E = 1; 
  72   1       LCD_E = 1;
  73   1       LCD_E = 1;
  74   1       LCD_E = 0;  
  75   1      }
  76          
  77          //读数据
  78          unsigned char ReadDataLCD(void)
  79          {
  80   1       LCD_RS = 1; 
  81   1       LCD_RW = 1;
  82   1       LCD_E = 0;
  83   1       LCD_E = 0;
  84   1       LCD_E = 1;
  85   1       return(LCD_Data);
  86   1      }
  87          
  88          //读状态
  89          unsigned char ReadStatusLCD(void)
  90          {
  91   1       LCD_Data = 0xFF; 
  92   1       LCD_RS = 0;
  93   1       LCD_RW = 1; 
  94   1       LCD_E = 1;
  95   1       while (LCD_Data & Busy); //检测忙信号
  96   1       LCD_E = 0;
  97   1       return(LCD_Data);
  98   1      }
  99          
 100          void LCDInit(void) //LCM初始化
 101          {
 102   1       WriteCommandLCD(0x30,1); //显示模式设置,开始要求每次检测忙信号
 103   1       WriteCommandLCD(0x01,1); //显示清屏
 104   1       WriteCommandLCD(0x06,1); // 显示光标移动设置
 105   1       WriteCommandLCD(0x0C,1); // 显示开及光标设置
 106   1      }
 107          void LCDClear(void) //清屏
 108          {
 109   1       WriteCommandLCD(0x01,1); //显示清屏
 110   1       WriteCommandLCD(0x34,1); // 显示光标移动设置
 111   1       WriteCommandLCD(0x30,1); // 显示开及光标设置
 112   1      }
 113          void LCDFlash(void)     //闪烁效果
 114          {
 115   1       WriteCommandLCD(0x08,1); //显示清屏
 116   1       Delay400Ms();
 117   1       WriteCommandLCD(0x0c,1); // 显示开及光标设置
C51 COMPILER V7.02a   LCD12864                                                             12/09/2008 21:38:29 PAGE 3   

 118   1       Delay400Ms();
 119   1       WriteCommandLCD(0x08,1); //显示清屏
 120   1       Delay400Ms();
 121   1       WriteCommandLCD(0x0c,1); // 显示开及光标设置
 122   1       Delay400Ms();
 123   1       WriteCommandLCD(0x08,1); //显示清屏
 124   1       Delay400Ms();
 125   1      }
 126          //按指定位置显示一个字符
 127          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 128          {
 129   1       if(Y<1)
 130   1              Y=1;
 131   1       if(Y>4)
 132   1              Y=4;
 133   1       X &= 0x0F; //限制X不能大于16,Y不能大于1
 134   1       switch(Y){
 135   2              case 1:X|=0X80;break;
 136   2              case 2:X|=0X90;break;
 137   2              case 3:X|=0X88;break;
 138   2              case 4:X|=0X98;break;
 139   2              }
 140   1       WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
 141   1       WriteDataLCD(DData);
 142   1      }
 143          
 144          //按指定位置显示一串字符
 145          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 146          {
 147   1       unsigned char ListLength,X2;
 148   1        ListLength = 0;
 149   1        X2=X;
 150   1       if(Y<1)
 151   1              Y=1;
 152   1       if(Y>4)
 153   1              Y=4;
 154   1       X &= 0x0F; //限制X不能大于16,Y在1-4之内
 155   1       switch(Y){
 156   2              case 1:X2|=0X80;break;  //根据行数来选择相应地址
 157   2              case 2:X2|=0X90;break;
 158   2              case 3:X2|=0X88;break;
 159   2              case 4:X2|=0X98;break;
 160   2              }
 161   1       WriteCommandLCD(X2, 1); //发送地址码
 162   1        while (DData[ListLength]>=0x20) //若到达字串尾则退出
 163   1        {
 164   2         if (X <= 0x0F) //X坐标应小于0xF
 165   2          {
 166   3           WriteDataLCD(DData[ListLength]); //
 167   3           ListLength++;
 168   3               X++;
 169   3               Delay5Ms();
 170   3          }
 171   2        }
 172   1      }
 173          
 174          //5ms延时
 175          void Delay5Ms(void)
 176          {
 177   1       unsigned int TempCyc = 5552;
 178   1       while(TempCyc--);
 179   1      }
C51 COMPILER V7.02a   LCD12864                                                             12/09/2008 21:38:29 PAGE 4   

 180          
 181          //400ms延时
 182          void Delay400Ms(void)
 183          {
 184   1       unsigned char TempCycA = 5;
 185   1       unsigned int TempCycB;
 186   1       while(TempCycA--)
 187   1       {
 188   2        TempCycB=7269;
 189   2        while(TempCycB--);
 190   2       };
 191   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    474    ----
   CONSTANT SIZE    =     68    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   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 + -