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

📄 lcddisplay.lst

📁 LCD(1602).rar
💻 LST
字号:
C51 COMPILER V7.06   LCDDISPLAY                                                            07/11/2009 15:39:00 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCDDISPLAY
OBJECT MODULE PLACED IN LcdDisplay.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE LcdDisplay.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /**********************************Copyright (c)**************************************************
   2          **                               浙 江 师 范 大 学
   3          **   
   4          **--------------文件信息---------------------------------------------------------------------------
   5          功能:在LCD上显示汉字信息    
   6          作者:陈希
   7          时间:2008-08-20
   8          版本:V1.0
   9          注:
  10          
  11          **--------------当前版本修订-----------------------------------------------------------------------
  12          ** 修改人: 
  13          ** 日 期:
  14          ** 描 述:
  15          **
  16          **-------------------------------------------------------------------------------------------------
  17          ***************************************************************************************************/
  18          
  19          #include <c8051f020.h>                 // SFR declarations
  20          #include <intrins.h>
  21          #include <stdio.h>
  22          
  23          #define uchar unsigned char          
  24          #define uint  unsigned int 
  25          #define _Nop() _nop_()
  26          
  27          #define LCM_Data   P5
  28          #define SYSCLK       22118400          // SYSCLK frequency in Hz
  29          
  30          #define Busy 0x80 //用于检测LCM状态字中的Busy标识
  31          
  32          unsigned char code c8051info[] = "C8051F-Support";
  33          unsigned char code supportinfo[] = "QQ:45248052";
  34          
  35          //-----------------------------------------------------------------------------
  36          // 液晶接口定义
  37          //-----------------------------------------------------------------------------
  38          #define LCDRSLow  P6&=~0x80;
  39          #define LCDRSHigh P6|=0x80;     //DI
  40          
  41          #define LCDRWLow  P6&=~0x40;
  42          #define LCDRWHigh P6|=0x40;     //RW
  43          
  44          #define LCDELow  P6&=~0x20;
  45          #define LCDEHigh P6|=0x20;      //E
  46          
  47          //--------------------------------------------------------------------
  48          // 函数原型
  49          //--------------------------------------------------------------------
  50          void SYSCLK_Init (void);
  51          void PORT_Init (void);
  52          
  53          void WriteDataLCM(unsigned char WDLCM);
  54          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  55          unsigned char ReadDataLCM(void);
C51 COMPILER V7.06   LCDDISPLAY                                                            07/11/2009 15:39:00 PAGE 2   

  56          unsigned char ReadStatusLCM(void);
  57          void LCMInit(void);
  58          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  59          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  60          void DelayMs(uchar t);
  61          void Delay(uint k);
  62          
  63          //-----------------------------------------------------------------------------
  64          // 延时
  65          //-----------------------------------------------------------------------------
  66          void DelayMs(uchar t)
  67          {
  68   1       uchar  i,j;
  69   1       uchar Y=11;
  70   1       uchar X=200;
  71   1       do 
  72   1              {
  73   2           j=Y;
  74   2           do 
  75   2                      {
  76   3                      i=X;
  77   3                      do 
  78   3                              {
  79   4                              _Nop();_Nop();//n个NOP
  80   4                              }while(--i);
  81   3                      }while(--j);     
  82   2          }while( --t );  
  83   1      }
  84          //-----------------------------------------------------------------------------
  85          // 延时
  86          //-----------------------------------------------------------------------------
  87          void Delay(uint k)
  88          { 
  89   1       do 
  90   1              {   
  91   2          
  92   2          }while( --k ); 
  93   1      }
  94          
  95          //-----------------------------------------------------------------------------
  96          //写数据
  97          //-----------------------------------------------------------------------------
  98          
  99          void WriteDataLCM(unsigned char WDLCM)
 100          {
 101   1              ReadStatusLCM(); //检测忙
 102   1              LCM_Data = WDLCM;Delay(10);    
 103   1              LCDRSHigh;Delay(10);    
 104   1              LCDRWLow; Delay(10);    
 105   1              LCDELow;        //若晶振速度太高可以在这后加小的延时
 106   1              Delay(200);
 107   1              LCDEHigh; Delay(10);
 108   1      }
 109          //-----------------------------------------------------------------------------
 110          //写指令
 111          //-----------------------------------------------------------------------------
 112          
 113          void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
 114          {
 115   1              if (BuysC) ReadStatusLCM(); //根据需要检测忙
 116   1              LCM_Data = WCLCM;Delay(10); 
 117   1              LCDRSLow; Delay(10);    
C51 COMPILER V7.06   LCDDISPLAY                                                            07/11/2009 15:39:00 PAGE 3   

 118   1              LCDRWLow; Delay(10);    
 119   1              LCDELow; 
 120   1              Delay(200);
 121   1              LCDEHigh; Delay(10);
 122   1          
 123   1      }
 124          //-----------------------------------------------------------------------------
 125          //读数据
 126          //-----------------------------------------------------------------------------
 127          
 128          unsigned char ReadDataLCM(void)
 129          {
 130   1              LCDRSHigh; Delay(10);
 131   1              LCDRWHigh; Delay(10);
 132   1              LCDELow; 
 133   1              Delay(200);
 134   1              LCDEHigh;  Delay(10);
 135   1              return(LCM_Data);
 136   1      }
 137          //-----------------------------------------------------------------------------
 138          //读状态
 139          //-----------------------------------------------------------------------------
 140          
 141          unsigned char ReadStatusLCM(void)
 142          {
 143   1              LCM_Data = 0xFF; 
 144   1              LCDRSLow; Delay(10);
 145   1              LCDRWHigh;Delay(10);
 146   1              LCDELow; 
 147   1              Delay(200);
 148   1              LCDEHigh; Delay(10);
 149   1              while (LCM_Data & Busy); //检测忙信号
 150   1              return(LCM_Data);
 151   1      }
 152          //-----------------------------------------------------------------------------
 153          //LCM初始化
 154          //-----------------------------------------------------------------------------
 155          void LCMInit(void) 
 156          {
 157   1              LCM_Data = 0;
 158   1              WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 159   1              DelayMs(10); 
 160   1              WriteCommandLCM(0x38,0);
 161   1              DelayMs(10); 
 162   1              WriteCommandLCM(0x38,0);
 163   1              DelayMs(10);  
 164   1              WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
 165   1              WriteCommandLCM(0x08,1); //关闭显示
 166   1              WriteCommandLCM(0x01,1); //显示清屏
 167   1              WriteCommandLCM(0x06,1); // 显示光标移动设置
 168   1              WriteCommandLCM(0x0C,1); // 显示开及光标设置
 169   1      }
 170          //-----------------------------------------------------------------------------
 171          //按指定位置显示一个字符
 172          //-----------------------------------------------------------------------------
 173          
 174          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 175          {
 176   1              Y &= 0x1;
 177   1              X &= 0xF;                               //限制X不能大于15,Y不能大于1
 178   1              if (Y) X |= 0x40;       //当要显示第二行时地址码 0x40;
 179   1              X |= 0x80;                              // 算出指令码
C51 COMPILER V7.06   LCDDISPLAY                                                            07/11/2009 15:39:00 PAGE 4   

 180   1              WriteCommandLCM(X, 0);  //这里不检测忙信号,发送地址码
 181   1              WriteDataLCM(DData);
 182   1      }
 183          //-----------------------------------------------------------------------------
 184          //按指定位置显示一串字符
 185          //-----------------------------------------------------------------------------
 186          
 187          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 188          {
 189   1              unsigned char ListLength;
 190   1              ListLength = 0;
 191   1              Y &= 0x1;
 192   1              X &= 0xF;                                               //限制X不能大于15,Y不能大于1
 193   1              while (DData[ListLength]>0x20)  //若到达字串尾则退出
 194   1                      {
 195   2                      if (X <= 0xF)                           //X坐标应小于0xF
 196   2                              {
 197   3                              DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 198   3                              ListLength++;
 199   3                              X++;
 200   3                              }
 201   2                      }
 202   1      }
 203          
 204          //-----------------------------------------------------------------------------
 205          // 通用I/O口及交叉开关初始化
 206          //-----------------------------------------------------------------------------
 207          void PORT_Init (void)
 208          {            
 209   1      
 210   1        XBR2     = 0x40;          // 交叉开关使能                     
 211   1      
 212   1      }
 213          //-----------------------------------------------------------------------------
 214          // 系统时钟初始化
 215          //-----------------------------------------------------------------------------
 216          
 217          void SYSCLK_Init (void)
 218          {
 219   1         int i;                              // delay counter
 220   1      
 221   1         OSCXCN = 0x67;                      // start external oscillator with
 222   1                                             // 22.1184MHz crystal
 223   1         for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)
 224   1      
 225   1         while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
 226   1      
 227   1         OSCICN = 0x88;                      // select external oscillator as SYSCLK
 228   1                                             // source and enable missing clock
 229   1                                             // detector
 230   1      }
 231          //-----------------------------------------------------------------------------
 232          // 主程序
 233          //-----------------------------------------------------------------------------
 234          
 235          void main()
 236          { 
 237   1      
 238   1        WDTCN = 0xde;
 239   1        WDTCN = 0xad;                //禁止看门狗定时器  
 240   1      
 241   1        SYSCLK_Init ();       
C51 COMPILER V7.06   LCDDISPLAY                                                            07/11/2009 15:39:00 PAGE 5   

 242   1        PORT_Init();          
 243   1       
 244   1        LCMInit(); //LCM初始化 
 245   1        DisplayListChar(1, 0, c8051info);
 246   1        DisplayListChar(2, 1, supportinfo);
 247   1      
 248   1      
 249   1      
 250   1        while(1);
 251   1      
 252   1      }  


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