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

📄 lcd.lst

📁 单片机实现计算器程序
💻 LST
字号:
C51 COMPILER V8.02   LCD                                                                   02/26/2008 11:39:05 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 <reg51.h>
   2          #include <intrins.h>
   3          sbit dc=0xa0;           /*P2.0  LCD的RS  21*/
   4          sbit rw=0xa1;           /*P2.1  LCD的R/W 22*/
   5          sbit cs=0xa4;           /*P2.4  LCD的E   25*/
   6          sfr  lcdbus=0x80;       /*p0    LCD数据 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          void hard_10ms(unsigned int delaytime) /*基于10MS的硬件延时*/
  23          {       sys10mscounter=delaytime;
  24   1              while(sys10mscounter);
  25   1      }
  26          unsigned char data lcdcounter;
  27          bit lcdusing1,lcdusing2;
  28          bit lcd_checkbusy()/*检查LCD忙*/
  29          {       register lcdstate;
  30   1              dc=0;                           /*dc=1为数据,=0为命令.*/
  31   1              rw=1;                           /*rw=1为读,=0为写.*/
  32   1              cs=1;                           /*cs=1选通.*/
  33   1              soft_nop();
  34   1              lcdstate=lcdbus;
  35   1              cs=0;
  36   1              return((bit)(lcdstate&0x80));
  37   1      }
  38          void lcd_wrcmd(unsigned char lcdcmd) /*写LCD命令*/
  39          {       lcdusing1=1;
  40   1              while(lcd_checkbusy());
  41   1              lcdbus=lcdcmd;
  42   1              dc=0;                           /*dc=1为数据,=0为命令.*/
  43   1              rw=0;                           /*rw=1为读,=0为写.*/
  44   1              cs=1;                           /*cs=1选通.*/
  45   1              soft_nop();
  46   1              cs=0;
  47   1              lcdbus=0xff;
  48   1              lcdusing1=0;
  49   1      }
  50          void lcd_moveto(char position) /*移动光标到指定位.0-79*/
  51          {       register cmd=0x80;
  52   1              lcdcounter=position;
  53   1              if (position > 59)
  54   1                  position += 0x18;
  55   1              else
C51 COMPILER V8.02   LCD                                                                   02/26/2008 11:39:05 PAGE 2   

  56   1              {   if (position > 39)position -= 0x14;
  57   2                  else
  58   2                  {       if (position > 19)position += 0x2c; 
  59   3                  }       
  60   2              }   
  61   1              cmd=cmd|position;
  62   1              lcd_wrcmd(cmd);
  63   1      }
  64          void lcd_wrdata(char lcddata) /*在当前显示位置显示数据*/
  65          {       char i;
  66   1              lcdusing2=1;
  67   1              while(lcd_checkbusy()); 
  68   1              if(lcdcounter==8){
  69   2      //              lcd_moveto(20);
  70   2                      lcd_wrcmd(0x80);
  71   2                      while(lcd_checkbusy()); 
  72   2                      }
  73   1      //      if(lcdcounter==40){
  74   1      //              lcd_moveto(40);
  75   1      //              while(lcd_checkbusy()); 
  76   1      //              }
  77   1      //      if(lcdcounter==60){
  78   1      //              lcd_moveto(60);
  79   1      //              while(lcd_checkbusy()); 
  80   1      //              }
  81   1              if(lcdcounter==16){
  82   2      //              lcd_moveto(0);
  83   2                      lcd_wrcmd(0xC0);
  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 65 OF LCD.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 V8.02   LCD                                                                   02/26/2008 11:39:05 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          
 123          void lcd_wr(char a )
 124          {
 125   1      unsigned char j;
 126   1      //IE=0;P0=0xff;P1=0xff;P2=0xff;P3=0xff; /*初始化T*/
 127   1      //lcd_init();soft_20ms();
 128   1      //TMOD=0x51;
 129   1      //TH0=0xd8;                     /*12M,10ms*/
 130   1      //TL0=0xf6;
 131   1      //TR0=1;ET0=1;EA=1;
 132   1      //      while(1)
 133   1      //      {
 134   1              /*全黑、横一、横二、竖一、竖二、U、Q、ABCD...,*/
 135   1              lcd_init();     /*全黑*/
 136   1              for(j=0;j<80;j++){lcd_wrdata(0xff);}
 137   1              hard_10ms(50);
 138   1              lcd_init();     /*横一,可参考自行设计符号*/
 139   1              lcd_wrcmd(0x40);
 140   1              for(j=0;j<8;j++)lcd_wrdata(path1[j]);
 141   1              for(j=0;j<100;j++)lcd_wrdata(0);
 142   1              hard_10ms(50);
 143   1              lcd_init();     /*横二*/
 144   1              lcd_wrcmd(0x40);
 145   1              for(j=0;j<8;j++)lcd_wrdata(path2[j]);
 146   1              for(j=0;j<100;j++)lcd_wrdata(0);
 147   1              hard_10ms(50);
 148   1              lcd_init();     /*竖一*/
 149   1              lcd_wrcmd(0x40);
 150   1              for(j=0;j<8;j++)lcd_wrdata(pats1[j]);
 151   1              for(j=0;j<100;j++)lcd_wrdata(0);
 152   1              hard_10ms(50);
 153   1              lcd_init();     /*竖二*/
 154   1              lcd_wrcmd(0x40);
 155   1              for(j=0;j<8;j++)lcd_wrdata(pats2[j]);
 156   1              for(j=0;j<100;j++)lcd_wrdata(0);
 157   1              hard_10ms(50);
 158   1              lcd_init();
 159   1              lcd_string("123456789ABCDEFG");
 160   1              hard_10ms(50);
 161   1              lcd_init();
 162   1              lcd_string("QQQQQQQQQQQQQQQQ");
 163   1              hard_10ms(50);
 164   1              lcd_init();
 165   1              lcd_string("ABCDEFGHIJKLMNOP");
 166   1              hard_10ms(50);
 167   1      //      }
 168   1      }
*** WARNING C280 IN LINE 123 OF LCD.C: 'a': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    499    ----
   CONSTANT SIZE    =     51    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36       7
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.02   LCD                                                                   02/26/2008 11:39:05 PAGE 4   

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


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

⌨️ 快捷键说明

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