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

📄 lcd1602c.lst

📁 最近开发的51单片机多功能 实验板
💻 LST
字号:
C51 COMPILER V8.02   LCD1602C                                                              11/21/2006 19:09:46 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 <reg51.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 path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号:横1*/
  14          char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号:横2*/
  15          char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号:竖1*/
  16          char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号:竖2*/
  17          void soft_nop(){}
  18          void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
  19          {       register unsigned int i;
  20   1              //for(i=0;i<711;i++); // 12M
  21   1              for(i=0;i<1422;i++);  // 24M
  22   1      }
  23          void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
  24          {       soft_10ms();
  25   1              soft_10ms();
  26   1      }
  27          
  28          void delay2()
  29          { int i;
  30   1        i=3000;
  31   1        while(i--) soft_10ms();
  32   1      }
  33          void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
  34          {       sys10mscounter=delaytime;
  35   1              //while(sys10mscounter);
  36   1              while(sys10mscounter--) soft_10ms();
  37   1      }
  38          unsigned char data lcdcounter;
  39          bit lcdusing1,lcdusing2;
  40          bit lcd_checkbusy()/*检查LCD 忙*/
  41          {       register lcdstate;
  42   1              dc=0; /*dc=1为数据,=0为命令.*/
  43   1              rw=1; /*rw=1为读,=0为写.*/
  44   1              cs=1; /*cs=1选通.*/
  45   1              soft_nop();
  46   1              //lcdbus = 0xff;
  47   1              lcdstate=lcdbus;
  48   1              cs=0;
  49   1              return((bit)(lcdstate&0x80));
  50   1      }
  51          void lcd_wrcmd(unsigned char lcdcmd) /*写LCD 命令*/
  52          {       lcdusing1=1;
  53   1              while(lcd_checkbusy());
  54   1              lcdbus=lcdcmd;
  55   1              dc=0; /*dc=1为数据,=0为命令.*/
C51 COMPILER V8.02   LCD1602C                                                              11/21/2006 19:09:46 PAGE 2   

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

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

 180   1              TR0=1;  ET0=1;  EA=1; TI=0;
 181   1              lcd_init(); /*全黑*/
 182   1              for(j=0;j<32;j++){lcd_wrdata(0xff);}    
 183   1      
 184   1              ZW = 0xff;   ZX = 0x80;  //3
 185   1              
 186   1      
 187   1              while(1)
 188   1              {
 189   2              /*全黑、横一、横二、竖一、竖二、U、Q、ABCD...,*/
 190   2                      lcd_init(); /*全黑*/
 191   2                      for(j=0;j<80;j++){lcd_wrdata(0xf0);}
 192   2                      //ZX = 0xb0;
 193   2                      //while(1);             
 194   2                      hard_10ms(50);
 195   2                      lcd_init(); /*横一,可参考自行设计符号*/
 196   2                      lcd_wrcmd(0x40);
 197   2                      for(j=0;j<8;j++)lcd_wrdata(path1[j]);
 198   2                      for(j=0;j<100;j++)lcd_wrdata(0);
 199   2                      hard_10ms(50);
 200   2                      lcd_init(); /*横二*/
 201   2                      lcd_wrcmd(0x40);
 202   2                      for(j=0;j<8;j++)lcd_wrdata(path2[j]);
 203   2                      for(j=0;j<100;j++)lcd_wrdata(0);
 204   2                      hard_10ms(50);
 205   2                      lcd_init(); /*竖一*/
 206   2                      lcd_wrcmd(0x40);
 207   2                      for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
 208   2                      for(j=0;j<100;j++)lcd_wrdata(0);
 209   2                      hard_10ms(50);
 210   2                      lcd_init(); /*竖二*/
 211   2                      lcd_wrcmd(0x40);
 212   2                      for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
 213   2                      for(j=0;j<100;j++)lcd_wrdata(0);
 214   2                      hard_10ms(50);
 215   2                      lcd_init();
 216   2                      lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
 217   2                      hard_10ms(50);
 218   2                      lcd_init();
 219   2                      lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
 220   2                      hard_10ms(50);
 221   2                      lcd_init();
 222   2                      lcd_string("You are wellcome!   LCD Driver for51");
 223   2                      hard_10ms(500);
 224   2              }
 225   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    740    ----
   CONSTANT SIZE    =    199    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36       6
   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 + -