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

📄 lcd1.lst

📁 这是一段开始学单片机时写的LCD程序
💻 LST
字号:
C51 COMPILER V8.08   LCD1                                                                  11/22/2007 16:36:54 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LCD1
OBJECT MODULE PLACED IN LCD1.OBJ
COMPILER INVOKED BY: c:\SiLabs\MCU\IDEfiles\C51\BIN\C51.EXE LCD1.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>               //包含常用头文件
   2          #include<stdio.h>
   3          #include<intrins.h>
   4          #include<absacc.h>
   5          #define uchar unsigned char        //定义常用数据类型
   6          int cnt;
   7          void LCD_INIT(void);               //LCD的初始化函数
   8          void LCD_DISPLAY_STR(uchar x,uchar y,char *DATA);//在指定的位置显示字符串
   9          void LCD_CLR(uchar y);                                                   //清除LCD指定的行
  10          void LCD_SEND_COMMAND(uchar COMMAND);                    //向LCD发送命令
  11          void LCD_SEND_DATA(uchar DATA);                                  //向LCD发送数据
  12          void LCD_WAIT(void);                             //检查LCD空闲
  13          uchar LCD_GET_FLAG(void);                                                //检查LCD状态
  14          /*定义所要显示的数据*/
  15          char code PLAY_1[]="Finished time:";
  16          char code PLAY_2[]="2007.07.23.21:16";
  17          char code PLAY_3[]="desiger:";
  18          char code PLAY_4[]="Li Xijang";
  19          char code PLAY_5[]="When I finish it";
  20          char code PLAY_6[]="I very happy!";
  21          /*定义LCD控制字*/
  22          #define LCD_MODE 0x3C        /* 接口数据8位,显示2行,字体为1号 */          
  23          #define LCD_NO_FLASH 0x0C    /* 屏幕显示开,无光标 */        
  24          #define LCD_HIDE 0x08        /* 屏幕显示关 */       
  25          #define LCD_FLASH 0x0D       /* 屏幕显示开,并打开闪烁光标 */    
  26          #define LCD_SHIFT 0x07       /* 模块数据输入为增量方式,显示内容移动 */      
  27          #define LCD_NO_SHIFT 0x06    /* 模块数据输入为增量方式,显示光标移动 */     
  28          #define LCD_SH 0x14          /* 移动光标及整体显示 */ 
  29          #define LCD_LINE1  0x80          /*第一行DDRAM起始地址*/
  30          #define LCD_LINE2  0xc0          /*第二行DDRAM起始地址*/
  31          #define SEND_IN  XBYTE[0xff00] /*定义LCD的实际地址*/
  32          sbit LCD_RS=P3^4;                          //定义LCD的RS控制位
  33          sbit LCD_RW=P3^5;                          //定义LCD的RW控制位
  34          //*************************************************
  35          //LCD显示字符串的主程序
  36          //利用中断间隔循环显示
  37          //
  38          //*************************************************  
  39          main()
  40          {
  41   1      TMOD=0x02;                                        //设置中断T0工作于方式2(自动装载)
  42   1      TH0=0x06;
  43   1      TL0=0X06;
  44   1      TR0=1;
  45   1      ET0=1;
  46   1      EA=1;
  47   1      LCD_INIT();                                       //初始化LCD
  48   1      LCD_DISPLAY_STR(1,1,PLAY_1);  //在第一行显示第一行字符串
  49   1      LCD_DISPLAY_STR(1,2,PLAY_2);  //在第二行显示第一行字符串
  50   1      while(1);                                         //等待中断
  51   1      }
  52          void timer0(void) interrupt 1 using 0  //进入中断T0函数
  53          {
  54   1      cnt++;
  55   1      if(cnt==4000)                                      //使蟒显示停留1S
C51 COMPILER V8.08   LCD1                                                                  11/22/2007 16:36:54 PAGE 2   

  56   1         {                                                       //清除LCD第一行
  57   2           LCD_CLR(1);                                   //清除LCD第二行
  58   2               LCD_CLR(2);
  59   2               LCD_DISPLAY_STR(1,1,PLAY_3);   //在第一行显示第三行字符串
  60   2               LCD_DISPLAY_STR(1,2,PLAY_4);   //在第一行显示第四行字符串
  61   2         }
  62   1      if(cnt==8000)
  63   1         {
  64   2           LCD_CLR(1);                                   //清除LCD第一行
  65   2               LCD_CLR(2);                               //清除LCD第二行
  66   2               LCD_DISPLAY_STR(1,1,PLAY_5);  //在第一行显示第五行字符串
  67   2               LCD_DISPLAY_STR(1,2,PLAY_6);  //在第一行显示第六行字符串
  68   2         }
  69   1      if(cnt==12000)
  70   1         {
  71   2           cnt=0;
  72   2           LCD_CLR(1);                                        //清除LCD第一行
  73   2               LCD_CLR(2);                                    //清除LCD第二行
  74   2               LCD_DISPLAY_STR(1,1,PLAY_1);
  75   2               LCD_DISPLAY_STR(1,2,PLAY_2); 
  76   2         }
  77   1      }
  78          //*************************************************
  79          //函数功能:LCD初始化
  80          //输入变量:无
  81          //输出变量:无
  82          //调用模块:LCD_SEND_COMMAND(),LCD_CLR()
  83          //*************************************************
  84          void LCD_INIT(void)
  85            {                                                                
  86   1         LCD_SEND_COMMAND(LCD_MODE);     //设置工作方式
  87   1         LCD_SEND_COMMAND(LCD_NO_FLASH); //设置显示方式
  88   1         LCD_SEND_COMMAND(LCD_NO_SHIFT); //设置光标画面滚动方式
  89   1         LCD_SEND_COMMAND(LCD_SH);       //设置输入方式
  90   1         LCD_CLR(1);                                     //清除LCD第一行
  91   1         LCD_CLR(2);                                     //清除LCD第二行
  92   1          }
  93          //*************************************************
  94          //函数功能:清除LCD指定行
  95          //输入变量:y
  96          //输出变量:无
  97          //调用模块:LCD_SEND_COMMAND(),LCD_SEND_DATA()
  98          //************************************************* 
  99          void LCD_CLR(uchar y)
 100             {
 101   1          uchar i;
 102   1              i=0;
 103   1              if(y==1)
 104   1                  {
 105   2                       LCD_SEND_COMMAND(LCD_LINE1);  //发送命令使LCD指向第一行
 106   2                       i=16;
 107   2                       }
 108   1          if(y==2)
 109   1                  {
 110   2                       LCD_SEND_COMMAND(LCD_LINE2);  //发送命令使LCD指向第二行
 111   2                       i=16;
 112   2                       }
 113   1               if(i!=0)
 114   1                       {
 115   2                        do
 116   2                         {
 117   3                          LCD_SEND_DATA(' ');            //让LCD的相应位置显示空格
C51 COMPILER V8.08   LCD1                                                                  11/22/2007 16:36:54 PAGE 3   

 118   3                         }while(--i!=0);
 119   2           }
 120   1       }
 121          //*************************************************
 122          //函数功能:向LCD发送命令
 123          //输入变量:COMMAND
 124          //输出变量:无
 125          //调用模块:LCD_WAIT()
 126          //*************************************************
 127          void LCD_SEND_COMMAND(uchar COMMAND)
 128          {
 129   1        LCD_WAIT();    //等待空闲
 130   1        LCD_RS=0;              //命令方式
 131   1        LCD_RW=0;              //写方式
 132   1        SEND_IN=COMMAND;//写实际的命令到LCD
 133   1      }
 134          //*************************************************
 135          //函数功能:向LCD发送数据
 136          //输入变量:DATA
 137          //输出变量:无
 138          //调用模块:LCD_WAIT()
 139          //*************************************************
 140          void LCD_SEND_DATA(uchar DATA)
 141          {
 142   1        LCD_WAIT();  //等待空闲
 143   1        LCD_RS=1;        //数据方式
 144   1        LCD_RW=0;        //写方式
 145   1        SEND_IN=DATA;//写实际的数据到LCD
 146   1      }
 147          //*************************************************
 148          //函数功能:等待LCD空闲
 149          //输入变量:无
 150          //输出变量:无
 151          //调用模块:LCD_GET_FLAG()
 152          //*************************************************
 153          void LCD_WAIT(void)
 154          {
 155   1       uchar i;
 156   1       i=1000;  //定义等待时间,可以防止由于LCD损坏而使程序死循环
 157   1       do
 158   1         {
 159   2              if((LCD_GET_FLAG()&0x80)==0) //判断BF是否为0
 160   2             {
 161   3                  break; 
 162   3                       }
 163   2               }while(--i!=0); 
 164   1      
 165   1      }
 166          //*************************************************
 167          //函数功能:检查LCD状态
 168          //输入变量:无
 169          //输出变量:LCD显示的当前状态
 170          //调用模块:无
 171          //*************************************************
 172          uchar LCD_GET_FLAG(void)
 173          {
 174   1        LCD_RS=0;
 175   1        LCD_RW=1;
 176   1        return(SEND_IN);
 177   1      }
 178          //*************************************************
 179          //函数功能:检查LCD状态
C51 COMPILER V8.08   LCD1                                                                  11/22/2007 16:36:54 PAGE 4   

 180          //输入变量:无
 181          //输出变量:LCD显示的当前状态
 182          //调用模块:无
 183          //*************************************************
 184          void LCD_DISPLAY_STR(uchar x,uchar y,char *DATA)
 185          {
 186   1       if(y==1)
 187   1          {
 188   2               if(x<(16+1))              //判断显示位置是否超出第一行
 189   2                  {
 190   3                       LCD_SEND_COMMAND(LCD_LINE1-1+x);//发送显示位置命令
 191   3                       for(;x<(16+1)&&*DATA!='\0';x++)
 192   3                         {
 193   4                              LCD_SEND_DATA(*DATA++);          //发送数据
 194   4                          }
 195   3                       if(*DATA!='\0')                                 //判断是否发送完毕
 196   3                           {
 197   4                                x=1;
 198   4                                y=2;                                           //未完毕转到第二行显示
 199   4                                }
 200   3                       }
 201   2           }
 202   1       if(y==2)
 203   1          {
 204   2               LCD_SEND_COMMAND(LCD_LINE2-1+x);
 205   2               for(;x<(16+1)&&*DATA!='\0';x++)
 206   2                 {
 207   3                      LCD_SEND_DATA(*DATA++);
 208   3                  }
 209   2                }
 210   1      }
 211          
 212          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    469    ----
   CONSTANT SIZE    =     82    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      10
   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 + -