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

📄 lcd.lst

📁 课程设计做得一个基于51单片机的声光报警电路
💻 LST
字号:
C51 COMPILER V8.02   LCD                                                                   06/03/2008 22:12:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"reg52.h"
   2          #include"intrins.h"
   3          #include"ziku.h"
   4          
   5          #include"def.h"
   6          
   7          sbit rs = P3^4;
   8          sbit rw = P3^5;
   9          sbit ep = P3^6;
  10          
  11          uchar code AD_TABLE[]={
  12          0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
  13          0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
  14          0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,      //第三行汉字位置
  15          0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,      //第四行汉字位置
  16          };
  17          
  18          uchar value[];
  19          
  20          void delay(uint ms)
  21          {  
  22   1         uchar i;
  23   1         while(ms--)
  24   1           {
  25   2                 for(i=0;i<250;i++)
  26   2                   {
  27   3                          _nop_();
  28   3                          _nop_();
  29   3                              _nop_();
  30   3                              _nop_();
  31   3                       }
  32   2           }
  33   1      }
  34          
  35          bit lcd_busy()
  36          {
  37   1         bit result;
  38   1         rs=0;
  39   1         rw=1;
  40   1         ep=1;
  41   1         _nop_();
  42   1         _nop_(); 
  43   1         _nop_();
  44   1         _nop_();
  45   1         result=(bit)(P1&0x80);
  46   1         ep=0;
  47   1         return result;
  48   1      }
  49          
  50          void wcmd(uchar cmd)
  51          {
  52   1        while(lcd_busy());
  53   1         rs=0;
  54   1         rw=0;
  55   1         ep=0;
C51 COMPILER V8.02   LCD                                                                   06/03/2008 22:12:57 PAGE 2   

  56   1         _nop_();
  57   1         _nop_();
  58   1         P1=cmd;
  59   1         _nop_();
  60   1         _nop_();
  61   1         _nop_();
  62   1         _nop_();
  63   1         ep=1;
  64   1         _nop_();
  65   1         _nop_();
  66   1         _nop_();
  67   1         _nop_();
  68   1         ep=0;
  69   1      }
  70          
  71          void wdat(uchar dat)
  72          {
  73   1         while(lcd_busy());
  74   1         rs=1;
  75   1         rw=0;
  76   1         ep=0;
  77   1         P1=dat;
  78   1         _nop_();
  79   1         _nop_();
  80   1         _nop_();
  81   1         _nop_();
  82   1         ep=1;
  83   1         _nop_();
  84   1         _nop_();
  85   1         _nop_();
  86   1         _nop_();
  87   1         ep=0;
  88   1      }
  89          
  90          void lcd_init()
  91          {
  92   1        delay(10);
  93   1        wcmd(0x30); //功能设置,一次送8位数据,基本指令集
  94   1        wcmd(0x0C); //0000,1100  整体显示,游标off,游标位置off
  95   1        wcmd(0x01); //0000,0001 清DDRAM
  96   1        wcmd(0x02); //0000,0010 DDRAM地址归位
  97   1        wcmd(0x80); //1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC//     
  98   1        wcmd(0x04); //点设定,显示字符/光标从左到右移位,DDRAM地址加 一//   
  99   1        wcmd(0x0C); //显示设定,开显示,显示光标,当前显示位反白闪动
 100   1      
 101   1      }
 102          
 103          void cleartext()
 104          {
 105   1          wcmd(0x30);      //8BitMCU,基本指令集合
 106   1              wcmd(0x01);
 107   1      }
 108          
 109          void putstr(uchar row,uchar col,uchar *puts)
 110          {
 111   1         wcmd(0x30);      //8BitMCU,基本指令集合
 112   1         wcmd(AD_TABLE[8*row+col]);      //起始位置
 113   1           while(*puts != '\0')      //判断字符串是否显示完毕
 114   1           {
 115   2                 
 116   2                 wcmd(AD_TABLE[8*row+col]);
 117   2                 wdat(*puts);      //一个汉字要写两次
C51 COMPILER V8.02   LCD                                                                   06/03/2008 22:12:57 PAGE 3   

 118   2                 puts++;
 119   2                 wdat(*puts);
 120   2                 puts++;
 121   2                 col++;
 122   2                        if(col==8)            //判断换行
 123   2                   {            //若不判断,则自动从第一行到第三行
 124   3                       col=0;
 125   3                       row++;
 126   3                    }
 127   2                if(row==4) row=0;      //一屏显示完,回到屏左上角
 128   2           }
 129   1      }
 130          
 131          void hanzi(uchar row,uchar col,uchar *puts)
 132          {
 133   1         wcmd(0x30);      //8BitMCU,基本指令集合
 134   1         wcmd(AD_TABLE[8*row+col]);      //起始位置 
 135   1         wcmd(AD_TABLE[8*row+col]);
 136   1         wdat(*puts);       //一个汉字要写两次        
 137   1      }
 138          
 139          void putbmp(uchar *put)
 140          {
 141   1         uchar x,y;
 142   1         for(y=0;y<32;y++)
 143   1           for(x=0;x<8;x++)
 144   1                 {
 145   2                    wcmd(0x80+y);
 146   2                        wcmd(0x80+x);
 147   2                        wdat(*put);
 148   2                        put++;
 149   2                        wdat(*put);
 150   2                        put++;
 151   2                 }
 152   1              for(y=0;y<32;y++)
 153   1                 for(x=8;x<16;x++)
 154   1                   {
 155   2                          wcmd(0x80+y);
 156   2                              wcmd(0x80+x);
 157   2                              wdat(*put);
 158   2                              put++;
 159   2                              wdat(*put);
 160   2                              put++;
 161   2                       }
 162   1      }
 163          
 164          void clearbmp()
 165          {   
 166   1         uchar x,y;
 167   1         lcd_init();
 168   1         wcmd(0x34);
 169   1         wcmd(0x3e);
 170   1         for(y=0;y<32;y++)
 171   1           for(x=0;x<8;x++)
 172   1                 {
 173   2                    wcmd(0x80+y);
 174   2                        wcmd(0x80+x);
 175   2                        wdat(0x00);
 176   2                        wdat(0x00);
 177   2                        
 178   2                 }
 179   1              for(y=0;y<32;y++)
C51 COMPILER V8.02   LCD                                                                   06/03/2008 22:12:57 PAGE 4   

 180   1                 for(x=8;x<16;x++)
 181   1                   {
 182   2                          wcmd(0x80+y);
 183   2                              wcmd(0x80+x);
 184   2                              wdat(0x00);
 185   2                              wdat(0x00);
 186   2                       }
 187   1      }
 188          
 189          void put_5_7(uchar row,uchar col,uchar dat)
 190          {
 191   1              uchar i;
 192   1              uint a;
 193   1              a = 2550/dat-10;
 194   1              for(i=0;i<4;i++)
 195   1              {
 196   2                      value[i] = a%10;
 197   2                      a = a/10;
 198   2              }
 199   1      
 200   1              if(value[3] != 0)       {
 201   2                      for(i=0;i<16;i++)
 202   2                      {       
 203   3                              wcmd(0x80+row*16+i);
 204   3                              wcmd(0x80+col);
 205   3                              wdat(ziku[value[3]*16+i]);      
 206   3                              wdat(ziku[value[2]*16+i]);       
 207   3                      }
 208   2                      for(i=0;i<16;i++)
 209   2                      {
 210   3                              wcmd(0x80+row*16+i);
 211   3                              wcmd(0x80+col+1);
 212   3                              wdat(ziku[value[1]*16+i]);
 213   3                              wdat(ziku[160+i]);
 214   3                      
 215   3                      }
 216   2                      for(i=0;i<16;i++)
 217   2                      {
 218   3                              wcmd(0x80+row*16+i);
 219   3                              wcmd(0x80+col+2);
 220   3                              wdat(ziku[value[0]*16+i]);
 221   3                              wdat(ziku[176+i]);      
 222   3                      }
 223   2              }
 224   1              else
 225   1              {
 226   2                      if(value[2] != 0)
 227   2                      {
 228   3                              for(i=0;i<16;i++)
 229   3                              {
 230   4                                      wcmd(0x80+row*16+i);
 231   4                                      wcmd(0x80+col);
 232   4                                      wdat(ziku[value[2]*16+i]);
 233   4                                      wdat(ziku[value[1]*16+i]);              
 234   4                              }
 235   3              
 236   3                              for(i=0;i<16;i++)
 237   3                              {
 238   4                                      wcmd(0x80+row*16+i);
 239   4                                      wcmd(0x80+col+1);
 240   4                                      wdat(ziku[160+i]);
 241   4                                      wdat(ziku[value[0]*16+i]);      
C51 COMPILER V8.02   LCD                                                                   06/03/2008 22:12:57 PAGE 5   

 242   4                              }
 243   3                              for(i=0;i<16;i++)
 244   3                              {
 245   4                                      wcmd(0x80+row*16+i);
 246   4                                      wcmd(0x80+col+2);
 247   4                                      wdat(ziku[176+i]);      
 248   4                              }
 249   3                      }
 250   2                      else
 251   2                      {
 252   3                              for(i=0;i<16;i++)
 253   3                              {
 254   4                                      wcmd(0x80+row*16+i);
 255   4                                      wcmd(0x80+col);
 256   4                                      wdat(ziku[value[1]*16+i]);
 257   4                                      wdat(ziku[160+i]);              
 258   4                              }
 259   3      
 260   3                              for(i=0;i<16;i++)
 261   3                              {
 262   4                                      wcmd(0x80+row*16+i);
 263   4                                      wcmd(0x80+col+1);
 264   4                                      wdat(ziku[value[0]*16+i]);
 265   4                                      wdat(ziku[176+i]);      
 266   4                              }               
 267   3                      }       
 268   2                                      
 269   2              }
 270   1      } 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    862    ----
   CONSTANT SIZE    =    224    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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