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

📄 main.lst

📁 Keil写的320*240的液晶显示程序。很有参考意义。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   MAIN                                                                  09/25/2008 09:34:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "reg52.h"
   2          #include "lcd.h"
   3          #include <stdio.h>                //输入输出标准库
   4          #include <intrins.h>       //内部函数
   5          #include "Chinese_Code.h"
   6          uchar    code   SYSTAB[8] = {0x30,0x87,0x07,0x27,0x42,0xf0,0x28,0x00};
   7          uchar    code   SCRTAB[10] = {0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
   8          uchar    data   DAT1, COM, COUNT1;                           // 数据单元,指令单元
   9          
  10          /***********************/
  11          /*    写指令代码函数   */
  12          /***********************/
  13          void Writecode( uchar x )
  14          {
  15   1       // SFRPAGE=CONFIG_PAGE;
  16   1        
  17   1        COM = x;
  18   1        DATBUS = COM;             //置指令代码
  19   1        A0 = 1;                   //设置RS=1
  20   1        CS1 = 0;
  21   1        _nop_();
  22   1        Write = 0;                //WR=0
  23   1        _nop_();
  24   1        _nop_();
  25   1        _nop_();
  26   1        Write = 1;                //WR=1
  27   1        _nop_();
  28   1        _nop_();
  29   1        _nop_();
  30   1        CS1 = 1;
  31   1      }
  32          /***********************/
  33          /* 写参数及显示数据函数*/
  34          /***********************/
  35          void Writedata( uchar x )
  36          {
  37   1         
  38   1         DAT1 = x;
  39   1         DATBUS = DAT1;              //置显示数据
  40   1         A0 = 0;                     //设置RS=0
  41   1         CS1 = 0;
  42   1         _nop_();                  //地址保持时间最小 10ns
  43   1         Write = 0;                  //WR=0
  44   1         _nop_();                  //读写脉冲宽度 最小120ns
  45   1         _nop_();
  46   1         _nop_();
  47   1         Write = 1;                  //WR=1
  48   1         _nop_();                  //写数据保持时间最小 120ns
  49   1         _nop_();
  50   1         _nop_(); 
  51   1         CS1 = 1;
  52   1      }                                                
  53          /***********************/
  54          /*读参数及显示数据函数 */
  55          /***********************/
C51 COMPILER V8.02   MAIN                                                                  09/25/2008 09:34:57 PAGE 2   

  56          uchar Readdata(void)
  57          {
  58   1         A0 = 1;                     //设置RS=1
  59   1         CS1 = 0;
  60   1         _nop_();
  61   1         DATBUS = 0xff;              //使能输入
  62   1         Read = 0;                   //RD=0
  63   1         _nop_();  
  64   1         _nop_();
  65   1         _nop_();
  66   1         DAT1 = DATBUS;             //读取数据
  67   1         _nop_();  
  68   1         _nop_();
  69   1         _nop_();
  70   1         Read = 1;                   //RD=1
  71   1         _nop_();
  72   1         _nop_();
  73   1         CS1 = 1;
  74   1         return DAT1;
  75   1      }     
  76          /***********************/
  77          /*      初始化函数     */
  78          /***********************/
  79          void Init_LCD()
  80          {
  81   1         uchar i;
  82   1         Writecode( 0x40 );         //SYSTEM SET 代码
  83   1         for(i = 0;i < 8;i++)
  84   1           Writedata(SYSTAB[i]);    //写入参数
  85   1         Writecode(0x44);           //SCROLL代码
  86   1         for(i = 0;i < 10;i++)
  87   1           Writedata(SCRTAB[i]);    //写入参数
  88   1         Writecode( 0x5a );           //HDOT SCR 代码
  89   1         Writedata( 0x00 );            //设置参数P1
  90   1         Writecode( 0x5b );           //OVLAY 代码
  91   1         Writedata( 0x00 );            //设置参数:显示一,三区为文本方式,二重或合成
  92   1         Clear();                   //调清屏子程序
  93   1        // Writecode(0x56);           //显示状态设置
  94   1      // Writedata(0x56);           //设置参数:显示一~四区开显示,光标闪烁显示
  95   1      //   Writedata(0x54);           //设置参数:显示一~四区开显示,关光标
  96   1      //   Writecode(0x5d);           //光标形状设置
  97   1       //  Writedata(0x07);
  98   1       //  Writedata(0x01);
  99   1      }
 100           
 101          /***********************/
 102          /*    清显示RAM函数    */
 103          /***********************/
 104          void Clear( void )
 105          {
 106   1        uint i;
 107   1        Writecode( 0x4C );           //CSRDIR代码,光标地址自动增1
 108   1        Writecode( 0x46 );           //CSRW 代码,写光标地址
 109   1        Writedata( 0x00 );            //设置参数光标指针低8位
 110   1        Writedata( 0x00 );            //设置参数光标指针高8位
 111   1        Writecode( 0x42 );           //MWRITE 代码,连续写数据命令代码
 112   1        for(i = 0;i < 9600;i++)
 113   1          Writedata( 0x00 );          //写入数据0
 114   1      } 
 115          
 116          /***********************/
 117          /*      消点函数       */
C51 COMPILER V8.02   MAIN                                                                  09/25/2008 09:34:57 PAGE 3   

 118          /***********************/
 119          /*
 120          void cleardot(uint O_X,uint O_Y) 
 121          {
 122             uint i,k;
 123             uchar dat;
 124             i=O_X%8;                          //计算显示单元地址(X坐标),低位点坐标
 125             O_X=O_X/8;                        //高位,字节坐标,以8的整数为单位
 126             k=40*O_Y+O_X;                     //指针地址
 127             Writecode(0x4f);
 128             Writecode(0x46);                  //设置光标地址 
 129             Writedata(k%256);                 //计算光标地址 
 130             Writedata(k/256+0x40);
 131             if(i==0)                          //如果=0,则是第8位(第一点),即把第8位置1
 132              O_Y=0x80;
 133             else
 134             {
 135              O_Y=1;
 136              for(;i<7;i++)                   //计算显示位,最高位为1位
 137              {
 138               O_Y=O_Y*2;                     //左移1位
 139              }
 140             }
 141             O_Y=~O_Y;                        //按位取反
 142             Writecode(0x43);                 //MREAD代码 
 143             dat=Readdata();                  //读取当前显示数据,同时光标指针根据设置方式自动修改
 144             Writecode(0x46);                 //重新设置光标地址 
 145             Writedata(k%256);                //计算光标地址 
 146             Writedata(k/256+0x40);
 147             Writecode(0x42);                 //MWRITE 代码
 148             Writedata(dat&O_Y);              //写入合成数据,或合成显示点 
 149          }
 150          */
 151          
 152          /***********************/
 153          /*     清显示区函数    */
 154          /***********************/
 155          void clear_displayarea( void )
 156          {
 157   1         uint i, j;
 158   1         uchar a;
 159   1         j = 40 * 56 + 8;
 160   1         Writecode( 0x4f );           //CSRDIR 代码(下移)
 161   1         for(i = 0;i < 32;i++)          //32列
 162   1          {  
 163   2           Writecode( 0x46 );         //CSRW代码,设置光标地址
 164   2           a = j % 256;
 165   2           Writedata( a );            //设置光标地址CSR,低地址
 166   2           a = j / 256 + 0x40;
 167   2           Writedata( a );            //高地址  
 168   2           Writecode( 0x42 );         //MWRITE代码,连续显示数据             
 169   2           for(a = 0;a < 148;a++)       //148行  
 170   2            {    
 171   3             Writedata( 0x00 );        //写入数据  
 172   3            }  
 173   2           j = j + 1;
 174   2          }                         //清图形区
 175   1         j = 40 * 8 + 8;                  //第8行开始清
 176   1         for(a = 0;a < 18;a++)          //18行??????
 177   1         {
 178   2          Writecode( 0x46 );          //CSRW 代码
 179   2          Writedata( j%256 );         //设置光标地址CSR
C51 COMPILER V8.02   MAIN                                                                  09/25/2008 09:34:57 PAGE 4   

 180   2          Writedata( j/256 );
 181   2          Writecode( 0x4c );          //CSRDIR代码,光标地址自动左移
 182   2          Writecode( 0x42 );          //MWRITE代码,连续写
 183   2          for(i = 0;i < 32;i++)         //32列
 184   2          {
 185   3            Writedata( 0x20 );        //写入数据 
 186   3          }
 187   2          j = j + 40;
 188   2         }
 189   1         for(i = 0;i < 239;i++)         //竖线        
 190   1          Displaydot( 319,i );
 191   1      }
 192          /************************/
 193          /* 写汉字函数(图形方式) */

⌨️ 快捷键说明

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