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

📄 main.lst

📁 通过实例实践LCD 驱动显示(以128DI0 为例)
💻 LST
字号:
C51 COMPILER V7.50   MAIN                                                                  03/09/2005 12:43:37 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "reg51.h"
   2          /*****************************************************************************
   3          * 文件说明
   4          ******************************************************************************
   5          创 建 人:杨宏伟
   6          修 改 人:杨宏伟
   7          创建日期:2003-10-19
   8          最后更新:2004-01-01
   9          描    述:FOR 128DI0,EM65565,8080,并行
  10          *****************************************************************************/
  11          #define  DELAY_TIME  1000   // 定义每幅显示画面切换的时间常数,可根据需要更改
  12          
  13          
  14          /*****************************************************************************
  15          * 接口定义
  16          ******************************************************************************/
  17          sbit  CS1 = P3^5;         // SELECT CHIP
  18          sbit  RES = P3^4;
  19          sbit  DC1 = P3^3;
  20          sbit  WR1 = P3^1;         // 8080:/WR;  6800:R/W 
  21          sbit  RD1 = P3^0;         // 8080:/RD;  6800:E
  22          sbit  MI =  P3^7;         // SELECT 8080 OR 6800
  23          
  24          
  25          /******************************************************************************
  26          * 函数声明及实现
  27          *******************************************************************************/
  28          void delay(unsigned int n)             
  29          {
  30   1        unsigned int i,j;
  31   1      
  32   1        for (i=0;i<n;i++)
  33   1          for (j=0;j<350;j++)
  34   1      
  35   1          {;}
  36   1      }
  37          
  38          void data_out(unsigned char i)
  39          {
  40   1          //8080 interface
  41   1      
  42   1          CS1  = 0;
  43   1          WR1 = 0;
  44   1              DC1   = 1;
  45   1              P1  = i;
  46   1              WR1 = 1;
  47   1              CS1 = 1;
  48   1      
  49   1      }
  50          void comm_out(unsigned char i)
  51          {
  52   1      
  53   1          //8080 interface
  54   1      
  55   1          CS1  = 0;
C51 COMPILER V7.50   MAIN                                                                  03/09/2005 12:43:37 PAGE 2   

  56   1              DC1 =0;
  57   1          WR1 = 0;
  58   1              P1  = i;
  59   1              WR1 = 1;
  60   1              CS1 = 1;
  61   1      
  62   1      }
  63          
  64          
  65          void selectSeries(unsigned char i)
  66          {
  67   1      
  68   1         switch(i)
  69   1         {
  70   2            case 0:
  71   2                  MI   = 0;//SELECT  8080
  72   2                  RD1  = 1;
  73   2                  WR1  = 1;
  74   2                  break;
  75   2            case 1:
  76   2                  MI   = 1;  //SELECT  6800
  77   2                  RD1  = 0;
  78   2                  WR1  = 0;
  79   2                  break;
  80   2            default:
  81   2                  ;
  82   2      
  83   2         }
  84   1      }
  85          
  86          void reset(void)
  87          {
  88   1      
  89   1          RES  = 0;
  90   1          delay(100);
  91   1          RES  = 1;
  92   1          delay(100);
  93   1      
  94   1      }
  95          
  96          
  97          
  98          void ini_lcd(void)
  99          {
 100   1          comm_out(0xA0);// ADC select
 101   1          comm_out(0xA6);// Sets the LCD display normal/reverse
 102   1          comm_out(0xA2);// Sets the LCD drive voltage bias ratio  1/9
 103   1          comm_out(0x2F);// Power control set
 104   1          comm_out(0x24);// V0 Voltage Regulator Internal Resistor Ratio Set  
 105   1          comm_out(0x81);// Electronic volume mode set
 106   1          comm_out(0x29);// 3F
 107   1          comm_out(0xAF);// display on
 108   1      }
 109          
 110          
 111          
 112          
 113          void setPageAddress(unsigned char i)
 114          {
 115   1          comm_out(0xb0+i);
 116   1      }
 117          
C51 COMPILER V7.50   MAIN                                                                  03/09/2005 12:43:37 PAGE 3   

 118          
 119          void setColAddress(unsigned char i)
 120          {
 121   1      
 122   1      
 123   1          if(i<=16)
 124   1          {
 125   2               comm_out(0x00+i);
 126   2               comm_out(0x10);
 127   2          }
 128   1          else
 129   1          {
 130   2               comm_out(0x00+i%16);
 131   2               comm_out(0x10+i/16);
 132   2          }
 133   1      
 134   1      }
 135          
 136          
 137          void dispData(unsigned char s_page,e_page,s_col,e_col,unsigned char dispdata,unsigned char dly)
 138          {
 139   1              unsigned char  i,j,page_num,col_num;
 140   1              page_num = e_page - s_page+1;
 141   1              col_num  = e_col  - s_col+1;
 142   1              
 143   1              for (i=s_page;i<(s_page+page_num);i++ )
 144   1              {
 145   2                  setPageAddress(i);
 146   2                  setColAddress(s_col);
 147   2      
 148   2                      for(j=0;j<col_num;j++)
 149   2                  {
 150   3                          data_out(dispdata);
 151   3                              delay(dly);
 152   3                  }
 153   2              }
 154   1      
 155   1      }
 156          
 157          
 158          
 159          /*******************************************************************************
 160          * 主程序
 161          *******************************************************************************/
 162          void main(void)
 163          {
 164   1      
 165   1      
 166   1                selectSeries(0);   // 选择8080时序
 167   1                reset();          
 168   1      
 169   1                CS1   = 0;         // 片选有效
 170   1              
 171   1                ini_lcd();        
 172   1                while(1)
 173   1                {
 174   2      
 175   2                      
 176   2                        
 177   2                         dispData(0,8,0,127,0xff,0);  //全显
 178   2                         delay(DELAY_TIME);
 179   2                      
C51 COMPILER V7.50   MAIN                                                                  03/09/2005 12:43:37 PAGE 4   

 180   2                         dispData(0,7,0,127,0xaa,0);  //隔行
 181   2                         delay(DELAY_TIME);
 182   2      
 183   2                         dispData(0,8,0,127,0x00,0);  //清屏
 184   2                         delay(DELAY_TIME);
 185   2      
 186   2                      
 187   2                }
 188   1      
 189   1      }
 190          
 191          
 192          
 193          /******************************************************************************
 194          **                            文件结束
 195          *******************************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    455    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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