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

📄 lcd.lst

📁 基于c8051f020的应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   LCD                                                                   06/25/2008 15:44:08 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe LCD.C DB OE

stmt level    source

   1          //********************************************************************************************************
             -******************
   2          #include <c8051F020.h>
   3          #include <intrins.h>
   4          #include <string.h>
   5          #include <stdio.h>
   6          #include <math.h>
   7          #include "HEAD.H"
   8          //********************************************************************************************************
             -******************
   9          void LCD_C_D(bit flag,unsigned char ldata)
  10          {
  11   1          A0 = !flag;
  12   1              RD = 1;
  13   1              WR = 1;
  14   1              CS_LCD = 1;
  15   1              P3 = LcdDataChange(ldata);      // 由于硬件数据线相反
  16   1              CS_LCD = 0;
  17   1              WR = 0;
  18   1          CS_LCD = 1;
  19   1              WR = 1;
  20   1      }
  21          //********************************************************************************************************
             -******************
  22          void ChangeV(unsigned char changevol)
  23          {       
  24   1              LCD_C_D(1,0x81);                        // 设置电量值寄存器     
  25   1              LCD_C_D(1,changevol);           // V5 as 1/7
  26   1      }
  27          //********************************************************************************************************
             -******************
  28          void LCD_INIT(void)
  29          {
  30   1              xdata unsigned char i,j,st_data;
  31   1      
  32   1              Delay_ms(200);
  33   1              LCD_CLEAR();
  34   1              LCD_C_D(1,0xA1);                        // Display ON(1)/OFF(0) 设置reverse的显示模式,seg132->seg1/
  35   1              LCD_C_D(1,0x40);                        // 8.4ADD       //0x20   //Display Start Line Address
  36   1              for(i=0;i<8;i++)                        // 设置各page地址的column地址从0开始
  37   1              {
  38   2                      st_data = i|0xB0;
  39   2                      LCD_C_D(1,st_data);             
  40   2                      LCD_C_D(1,0x10);                
  41   2                      LCD_C_D(1,0);           
  42   2                      for (j=0;j<130;j++)             // 清空显示RAM
  43   2                      {
  44   3                      LCD_C_D(0,0);
  45   3                      }
  46   2              }
  47   1              ChangeV(90);
  48   1      
  49   1              LCD_C_D(1,0xA4);                // 显示所有点
  50   1              LCD_C_D(1,0xA6);                // 正常显示
  51   1              LCD_C_D(1,0xA3);                // 设置电压基准比例1/7,a2
C51 COMPILER V7.06   LCD                                                                   06/25/2008 15:44:08 PAGE 2   

  52   1              LCD_C_D(1,0xC8);                // 设置列扫描方向反转,c0
  53   1              LCD_C_D(1,0x2F);                // 电源供电操作模式boosting on/ regulator on/follower ON
  54   1              LCD_C_D(1,0x81);                // 设置电量值寄存器
  55   1              LCD_C_D(1,0x64);                // V5 as 1/7
  56   1              LCD_C_D(1,0x23);                // 内部电阻比例模式23,27
  57   1              LCD_C_D(1,0xAD);                // 静态指示常亮模式//cancle
  58   1              LCD_C_D(1,0x03);                // cancle
  59   1              LCD_C_D(1,0xAF);                // 设置显示模式ON
  60   1      
  61   1              //LCD_DispStr("RotateSpeed",MainShowAddr,30);
  62   1              disp_chn_str("抽油机转速仪",5,20,16,1);
  63   1              //LCD_DispStr("Beijing Goldentime",MainShowAddr+30,10);
  64   1              disp_chn_str("北京金时",40,35,16,1);
  65   1              Display_Data();
  66   1              Delay_ms(3000);
  67   1      }
  68          //********************************************************************************************************
             -******************
  69          void LCD_CLEAR(void)
  70          {
  71   1              xdata unsigned char i,j; 
  72   1              
  73   1              for (j = 0 ; j < 8 ; j ++)
  74   1               {
  75   2                  for (i = 0 ;  i< 128 ; i ++)
  76   2                      {       
  77   3                          disp_ram[j][i] = 0x00;
  78   3                      }
  79   2               }
  80   1      
  81   1               Display_Data();
  82   1      }
  83          //********************************************************************************************************
             -******************
  84          void LCD_Cursor_Show(unsigned char lay_y,unsigned char lay_x)
  85          {
  86   1              draw_line(lay_x-2,lay_y+8,lay_x+4,lay_y+8);
  87   1              Display_Data();
  88   1      }
  89          //********************************************************************************************************
             -******************
  90          //送显示缓冲区到显示屏 此液晶屏分左右半屏送显示缓冲区到显示屏是要分别写LCS2选通左半屏LCS1选通右半屏
  91          void Display_Data(void)
  92          {
  93   1              xdata unsigned char i,j,disp_page;
  94   1      
  95   1          disp_page = 0xB4;
  96   1              for(i =0 ; i < 8; i++)  
  97   1              {
  98   2                      LCD_C_D(1,disp_page);           
  99   2                      LCD_C_D(1,0x10);                // 设置列地址高位
 100   2                      LCD_C_D(1,0x02);                // 设置列地址低位0              
 101   2                      for (j = 0;j < 128; j++)
 102   2                      {                       
 103   3                              LCD_C_D(0,disp_ram[i][j]) ;
 104   3                      }
 105   2                      disp_page ++;
 106   2                      if(disp_page > 0xB7)
 107   2                              disp_page = 0xB0;
 108   2              }
 109   1      
 110   1              ChangeV(RTUaddress4[33]);
C51 COMPILER V7.06   LCD                                                                   06/25/2008 15:44:08 PAGE 3   

 111   1      }
 112          //********************************************************************************************************
             -******************
 113          unsigned char LcdDataChange(unsigned char datas)
 114          {
 115   1              xdata unsigned char i,tempd;
 116   1              xdata unsigned char bb[8];
 117   1      
 118   1              tempd=datas;
 119   1              for(i=0;i<8;i++)
 120   1              {
 121   2                      if((tempd & 0x01)==0x01)
 122   2                              bb[i]=1;
 123   2                      else
 124   2                              bb[i]=0;
 125   2                      tempd>>=1;
 126   2              }
 127   1              tempd=bb[0]*0x80+bb[1]*0x40+bb[2]*0x20+bb[3]*0x10+bb[4]*0x08+bb[5]*0x04+bb[6]*0x02+bb[7]*0x01;
 128   1      
 129   1              return tempd;
 130   1      }
 131          //********************************************************************************************************
             -******************
 132          void draw_line(unsigned char x1, unsigned char y1,unsigned char x2, unsigned char y2)
 133          {
 134   1              xdata unsigned char i,line,page;
 135   1              xdata float add_step,temp_step;
 136   1      
 137   1              if(x1 > 126){x1 = x1 - 114;}
 138   1              if(x2 > 126){x2 = x2 - 114;}
 139   1              if(y1 > 64){y1 = y1 - 64;}
 140   1              if(y2 > 64){y2 = y2 - 64;}
 141   1              if((x1 == x2) && (y1 == y2))
 142   1              {
 143   2                  line = y1 & 0x07;  page = y1 >> 3;
 144   2                      disp_ram[page][x1] |= (0x01 << line);
 145   2              }
 146   1              else if(x1 == x2 )
 147   1              {
 148   2                if( y1 > y2 ) {i = y2; y2 = y1; y1 = i;}      
 149   2                for(i = y1; i <= y2 ;i++ )            
 150   2                {
 151   3                  line = i & 0x07;  page = i >> 3;
 152   3                      disp_ram[page][x1] |= (0x01 << line);
 153   3                }
 154   2              }
 155   1      
 156   1              else if(y1 == y2 )
 157   1              {
 158   2                if( x1 > x2 ) {i = x2; x2 = x1; x1 = i;}      
 159   2                line = 0x01 << (y1 & 0x07);  page = y1 >> 3;
 160   2                for(i = x1; i <= x2 ;i++ )            
 161   2                {
 162   3                      disp_ram[page][i] |= line;
 163   3                }
 164   2              }
 165   1              else 
 166   1              {
 167   2                      if((abs)(y2-y1) >= abs(x2-x1))
 168   2                      {
 169   3                      temp_step = x1;
 170   3                      add_step = ((float)x2-(float)x1)/abs((float)y2-(float)y1);
C51 COMPILER V7.06   LCD                                                                   06/25/2008 15:44:08 PAGE 4   

 171   3                              if(y1 > y2) i = 1; else i = 0;
 172   3                              do              
 173   3                              {
 174   4                                      x1 = temp_step;

⌨️ 快捷键说明

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