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

📄 lcd1602c.lst

📁 最近开发的51单片机多功能 实验板
💻 LST
字号:
C51 COMPILER V8.02   LCD1602C                                                              02/11/2007 10:15:12 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD1602C
OBJECT MODULE PLACED IN LCD1602C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602C.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //█使用举例(仅供参考)  
   2          #include <reg52.h>     
   3          //#include <intrins.h>
   4          //#define lcdbus P3
   5          sbit dc=P1^3; /*P1.3 LCD 的RS 21*/
   6          sbit rw=P1^4; /*P1.4 LCD 的R/W 22*/
   7          sbit cs=P1^5; /*P1.5 LCD 的E 25*/
   8          sfr lcdbus=0xB0; /*p3 LCD 数据D0=P3.0*/
   9          sfr ZW=0xA0; /*p2 LCD 数据D0=P3.0*/
  10          sfr ZX=0x80; /*p0 LCD 数据D0=P3.0*/
  11          unsigned int sys10mscounter;
  12          unsigned char syslimitcounter;
  13          char code path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
  14          char code  path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
  15          char code  pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
  16          char code  pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
  17          
  18          //extern void lcd_init(void);
  19          //extern void lcd_string(char *strpoint); /*在当前显示位置显示LCD 字符串*/
  20          //extern lcd();
  21          void soft_nop(){}
  22          void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
  23          {       register unsigned int i;
  24   1              //for(i=0;i<711;i++); // 12M
  25   1              for(i=0;i<1422;i++);  // 24M
  26   1      }
  27          void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
  28          {       soft_10ms();
  29   1              soft_10ms();
  30   1      }
  31          
  32          void delay2()
  33          { int i;
  34   1        i=3000;
  35   1        while(i--) soft_10ms();
  36   1      }
  37          void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
  38          {       sys10mscounter=delaytime;
  39   1              //while(sys10mscounter);
  40   1              while(sys10mscounter--) soft_10ms();
  41   1      }
  42          unsigned char data lcdcounter;
  43          bit lcdusing1,lcdusing2;
  44          bit lcd_checkbusy()/*检查LCD 忙*/
  45          {       register lcdstate;
  46   1              dc=0; /*dc=1为数据,=0为命令.*/
  47   1              rw=1; /*rw=1为读,=0为写.*/
  48   1              cs=1; /*cs=1选通.*/
  49   1              soft_nop();
  50   1              //lcdbus = 0xff;
  51   1              lcdstate=lcdbus;
  52   1              cs=0;
  53   1              return((bit)(lcdstate&0x80));
  54   1      }
  55          void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
C51 COMPILER V8.02   LCD1602C                                                              02/11/2007 10:15:12 PAGE 2   

  56          {       lcdusing1=1;
  57   1              while(lcd_checkbusy());
  58   1              lcdbus=lcdcmd;
  59   1              dc=0; /*dc=1为数据,=0为命令.*/
  60   1              rw=0; /*rw=1为读,=0为写.*/
  61   1              cs=1; /*cs=1选通.*/
  62   1              soft_nop();
  63   1              cs=0;
  64   1              lcdbus=0xff;
  65   1              lcdusing1=0;
  66   1      }
  67          void lcd_moveto(char position) /*移动光标到指定位.0-79*/
  68          {       register cmd=0x80;
  69   1              lcdcounter=position;
  70   1              if (position > 59)
  71   1                      position += 0x18;
  72   1              else
  73   1              {       if (position > 39)position -= 0x14;
  74   2                      else
  75   2                      { if (position > 19)position += 0x2c;
  76   3                      }
  77   2              }
  78   1              cmd=cmd|position;
  79   1              lcd_wrcmd(cmd);
  80   1      }
  81          void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
  82          {       //char i;
  83   1              lcdusing2=1;
  84   1              while(lcd_checkbusy());
  85   1              if(lcdcounter==20){
  86   2                      lcd_moveto(20);
  87   2                      while(lcd_checkbusy());
  88   2              }
  89   1              if(lcdcounter==40){
  90   2              lcd_moveto(40);
  91   2              while(lcd_checkbusy());
  92   2              }
  93   1              if(lcdcounter==60){
  94   2                      lcd_moveto(60);
  95   2                      while(lcd_checkbusy());
  96   2              }
  97   1              if(lcdcounter==80){
  98   2                      lcd_moveto(0);
  99   2                      while(lcd_checkbusy());
 100   2                      lcdcounter=0;
 101   2              } /*为通用而如此*/
 102   1              lcdcounter++;
 103   1              lcdbus=lcddata;
 104   1              dc=1; /*dc=1为数据,=0为命令.*/
 105   1              rw=0; /*rw=1为读,=0为写.*/
 106   1              cs=1; /*cs=1选通.*/
 107   1              soft_nop();
 108   1              cs=0;
 109   1              lcdbus=0xff;
 110   1              lcdusing2=0;
 111   1              cs=0;
 112   1      }
 113          
 114          void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
 115          {       register i=0;
 116   1              while(strpoint[i]!=0){
 117   2                      lcd_wrdata(strpoint[i]);
C51 COMPILER V8.02   LCD1602C                                                              02/11/2007 10:15:12 PAGE 3   

 118   2                      i++;
 119   2              }
 120   1              cs=0;
 121   1      }
 122          void lcd_init()/*初始化*/
 123          {       lcd_wrcmd(0x38); /*设置8 位格式,2 行,5*7*/
 124   1              lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
 125   1              lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
 126   1              lcd_wrcmd(0x01); /*清除显示*/
 127   1              lcdcounter=0;
 128   1      }
 129          void lcd_cls()/*清除显示*/
 130          {       lcd_wrcmd(0x01);
 131   1              lcdcounter=0;
 132   1      }
 133          void timer0(void) interrupt 1 /*T0 中断*/
 134          {       //TH0=0xd8; /*12M,10ms*/
 135   1              //TL0=0xf6;
 136   1              TH0=0xb1; /*24M,10ms*/
 137   1              TL0=0xe0;
 138   1      
 139   1              TR0=1;
 140   1              if(sys10mscounter!=0)sys10mscounter--; /*定时器10ms*/
 141   1              if(syslimitcounter!=0)syslimitcounter--; /*定时器10ms*/
 142   1      }
 143          
 144           
 145          void initUart2(void)
 146          {
 147   1       TMOD|=0x20;
 148   1       SCON=0x50;
 149   1       PCON|=0x80;
 150   1       TH1=0xf3;
 151   1       TL1=0xf3;
 152   1       TR1=1;
 153   1       ES=1;
 154   1      }
 155          void initTimer(void)
 156          {
 157   1       TMOD=0x1;
 158   1       TH0=0xb1;
 159   1       TL0=0xe0;
 160   1      }
 161          
 162          void rs232(void) //interrupt 4
 163          { unsigned char j;
 164   1         if(RI){
 165   2                 RI=0;
 166   2                 j=SBUF;
 167   2                 SBUF = j;       
 168   2         }
 169   1         if(TI) {
 170   2             TI=0;
 171   2         }
 172   1      }
 173          /*
 174          lcdiiiii()
 175          {
 176                  unsigned char j;
 177                  IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; 初始化T
 178                  ZW = 0x01;
 179                  ZX = 0x80;
C51 COMPILER V8.02   LCD1602C                                                              02/11/2007 10:15:12 PAGE 4   

 180          
 181                  initTimer();
 182                  initUart();
 183                  
 184                  lcd_init();soft_20ms();  
 185                  TR0=1;  ET0=1;  EA=1; TI=0;
 186                  lcd_init(); //全黑
 187                  for(j=0;j<32;j++){lcd_wrdata(0xff);}    
 188          
 189          }
 190          test()
 191          {
 192                  unsigned char j;
 193                  IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; //初始化T
 194                  ZW = 0x01;
 195                  ZX = 0x80;
 196          
 197                  initTimer();
 198                  initUart();
 199                  
 200                  lcd_init();soft_20ms();  
 201                  TR0=1;  ET0=1;  EA=1; TI=0;
 202                  lcd_init(); //全黑
 203                  for(j=0;j<32;j++){lcd_wrdata(0xff);}    
 204          
 205                  ZW = 0xff;   ZX = 0x80;  //3
 206                  
 207          
 208                  while(1)
 209                  {
 210                  
 211                          lcd_init(); 
 212                          for(j=0;j<80;j++){lcd_wrdata(0xf0);}
 213                          //ZX = 0xb0;
 214                          //while(1);             
 215                          hard_10ms(50);
 216                          lcd_init(); 
 217                          lcd_wrcmd(0x40);
 218                          for(j=0;j<8;j++)lcd_wrdata(path1[j]);
 219                          for(j=0;j<100;j++)lcd_wrdata(0);
 220                          hard_10ms(50);
 221                          lcd_init(); 
 222                          lcd_wrcmd(0x40);
 223                          for(j=0;j<8;j++)lcd_wrdata(path2[j]);
 224                          for(j=0;j<100;j++)lcd_wrdata(0);
 225                          hard_10ms(50);
 226                          lcd_init(); 
 227                          lcd_wrcmd(0x40);
 228                          for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
 229                          for(j=0;j<100;j++)lcd_wrdata(0);
 230                          hard_10ms(50);
 231                          lcd_init(); 
 232                          lcd_wrcmd(0x40);
 233                          for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
 234                          for(j=0;j<100;j++)lcd_wrdata(0);
 235                          hard_10ms(50);
 236                          lcd_init();
 237                          lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
 238                          hard_10ms(50);
 239                          lcd_init();
 240                          lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
 241                          hard_10ms(50);
C51 COMPILER V8.02   LCD1602C                                                              02/11/2007 10:15:12 PAGE 5   

 242                          lcd_init();
 243                          lcd_string("You are wellcome!   LCD Driver for51");
 244                          hard_10ms(500);
 245                  }
 246          }
 247          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    420    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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