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

📄 text2.lst

📁 这是LCD 1602的一个液晶显示程序。在实验板上验证过的
💻 LST
字号:
C51 COMPILER V7.50   TEXT2                                                                 11/05/2008 16:24:44 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT2
OBJECT MODULE PLACED IN Text2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          sbit dc=P2^1; /*P2.0 LCD 的RS 21*/
   4          sbit rw=P2^0; /*P2.1 LCD 的R/W 22*/
   5          sbit cs=P2^2; /*P2.4 LCD 的E 25*/
   6          #define lcdbus P0/*p0LCD 数据 D0=P0.0*/
   7          unsigned int sys10mscounter;
   8          unsigned char syslimitcounter;
   9          char path1[8]={0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f};/*自定义符号横1*/
  10          char path2[8]={0x1f,0x00,0x1f,0x00,0x1f,0x00,0x1f,0x00};/*自定义符号横2*/
  11          char pats1[8]={0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15};/*自定义符号竖1*/
  12          char pats2[8]={0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a};/*自定义符号竖2*/
  13          void soft_nop(){}
  14          void soft_10ms()/***********12MHZ 提供10MS 软件延时************/
  15          { register int i;
  16   1      for(i=0;i<711;i++);
  17   1      }
  18          void soft_20ms()/***********12MHZ 提供20MS 软件延时************/
  19          { soft_10ms();
  20   1      soft_10ms();
  21   1      }
  22          
  23          void hard_10ms(unsigned int delaytime) /*基于10MS 的硬件延时*/
  24          { sys10mscounter=delaytime;
  25   1      while(sys10mscounter);
  26   1      }
  27          unsigned char data lcdcounter;
  28          bit lcdusing1,lcdusing2;
  29          bit lcd_checkbusy()/*检查LCD 忙*/
  30          { register lcdstate;
  31   1      dc=0; /*dc=1为数据,=0 为命令.*/
  32   1      rw=1; /*rw=1为读,=0为写.*/
  33   1      cs=1; /*cs=1选通.*/
  34   1      soft_nop();
  35   1      lcdstate=lcdbus;
  36   1      cs=0;
  37   1      return((bit)(lcdstate&0x80));
  38   1      }
  39          void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
  40          { lcdusing1=1;
  41   1      while(lcd_checkbusy());
  42   1      lcdbus=lcdcmd;
  43   1      dc=0; /*dc=1为数据,=0 为命令.*/
  44   1      rw=0; /*rw=1为读,=0为写.*/
  45   1      cs=1; /*cs=1选通.*/
  46   1      soft_nop();
  47   1      cs=0;
  48   1      lcdbus=0xff;
  49   1      lcdusing1=0;
  50   1      }
  51          void lcd_moveto(char position) /*移动光标到指定位.0-79*/
  52          { register cmd=0x80;
  53   1      lcdcounter=position;
  54   1      if (position > 59)
  55   1      position += 0x18;
C51 COMPILER V7.50   TEXT2                                                                 11/05/2008 16:24:44 PAGE 2   

  56   1      else
  57   1      { if (position > 39)position -= 0x14;
  58   2      else
  59   2      { if (position > 19)position += 0x2c;
  60   3      }
  61   2      }
  62   1      cmd=cmd|position;
  63   1      lcd_wrcmd(cmd);
  64   1      }
  65          void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
  66          { char i;
  67   1      lcdusing2=1;
  68   1      while(lcd_checkbusy());
  69   1      if(lcdcounter==20){
  70   2      lcd_moveto(20);
  71   2      while(lcd_checkbusy());
  72   2      }
  73   1      if(lcdcounter==40){
  74   2      lcd_moveto(40);
  75   2      while(lcd_checkbusy());
  76   2      
  77   2      }
  78   1      if(lcdcounter==60){
  79   2      lcd_moveto(60);
  80   2      while(lcd_checkbusy());
  81   2      }
  82   1      if(lcdcounter==80){
  83   2      lcd_moveto(0);
  84   2      while(lcd_checkbusy());
  85   2      lcdcounter=0;
  86   2      } /*为通用而如此*/
  87   1      lcdcounter++;
  88   1      lcdbus=lcddata;
  89   1      dc=1; /*dc=1为数据,=0 为命令.*/
  90   1      rw=0; /*rw=1为读,=0为写.*/
  91   1      cs=1; /*cs=1选通.*/
  92   1      soft_nop();
  93   1      cs=0;
  94   1      lcdbus=0xff;
  95   1      lcdusing2=0;
  96   1      }
*** WARNING C280 IN LINE 66 OF TEXT2.C: 'i': unreferenced local variable
  97          void lcd_string(char *strpoint) /*在当前显示位置显示LCD 字符串*/
  98          { register i=0;
  99   1      while(strpoint[i]!=0){
 100   2      lcd_wrdata(strpoint[i]);
 101   2      i++;
 102   2      }
 103   1      }
 104          void lcd_init()/*初始化*/
 105          { lcd_wrcmd(0x38); /*设置8 位格式,2行,5*7*/
 106   1      lcd_wrcmd(0x0c); /*整体显示,关光标,不闪烁*/
 107   1      lcd_wrcmd(0x06); /*设定输入方式,增量不移位*/
 108   1      lcd_wrcmd(0x01); /*清除显示*/
 109   1      lcdcounter=0;
 110   1      }
 111          void lcd_cls()/*清除显示*/
 112          { lcd_wrcmd(0x01);
 113   1      lcdcounter=0;
 114   1      }
 115          void timer0(void) interrupt 1 /*T0中断*/
 116          { TH0=0xd8; /*12M,10ms*/
C51 COMPILER V7.50   TEXT2                                                                 11/05/2008 16:24:44 PAGE 3   

 117   1      TL0=0xf6;
 118   1      TR0=1;
 119   1      if(sys10mscounter!=0)sys10mscounter--; /*定时器10ms*/
 120   1      if(syslimitcounter!=0)syslimitcounter--; /*定时器10ms*/
 121   1      }
 122          main()
 123          {
 124   1      unsigned char j;
 125   1      IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; /*初始化T*/
 126   1      lcd_init();soft_20ms();
 127   1      TMOD=0x51;
 128   1      TH0=0xd8; /*12M,10ms*/
 129   1      TL0=0xf6;
 130   1      
 131   1      TR0=1;ET0=1;EA=1;
 132   1      while(1)
 133   1      {
 134   2      /*全黑横一横二竖一竖二U Q ABCD... */
 135   2      lcd_init(); /*全黑*/
 136   2      for(j=0;j<80;j++){lcd_wrdata(0xff);}
 137   2      hard_10ms(50);
 138   2      lcd_init(); /*横一可参考自行设计符号*/
 139   2      lcd_wrcmd(0x40);
 140   2      for(j=0;j<8;j++)lcd_wrdata(path1[j]);
 141   2      for(j=0;j<100;j++)lcd_wrdata(0);
 142   2      hard_10ms(50);
 143   2      lcd_init(); /*横二*/
 144   2      lcd_wrcmd(0x40);
 145   2      for(j=0;j<8;j++)lcd_wrdata(path2[j]);
 146   2      for(j=0;j<100;j++)lcd_wrdata(0);
 147   2      hard_10ms(50);
 148   2      lcd_init(); /*竖一*/
 149   2      lcd_wrcmd(0x40);
 150   2      for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
 151   2      for(j=0;j<100;j++)lcd_wrdata(0);
 152   2      hard_10ms(50);
 153   2      lcd_init(); /*竖二*/
 154   2      lcd_wrcmd(0x40);
 155   2      for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
 156   2      for(j=0;j<100;j++)lcd_wrdata(0);
 157   2      hard_10ms(50);
 158   2      lcd_init();
 159   2      lcd_string("UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
 160   2      hard_10ms(50);
 161   2      lcd_init();
 162   2      lcd_string("QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ");
 163   2      hard_10ms(50);
 164   2      lcd_init();
 165   2      lcd_string("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz0123456789+-!#$%&?");
 166   2      hard_10ms(50);
 167   2      }
 168   1      }
 169          //*以上C51 程序仅为测试使用仅供参考请自行断定不同的驱动CPU 和不同的语言
 170          //参考时序图请自行编写程式


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    566    ----
   CONSTANT SIZE    =    243    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36       6
C51 COMPILER V7.50   TEXT2                                                                 11/05/2008 16:24:44 PAGE 4   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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