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

📄 lcd.lst

📁 基于RC500射频卡读写模块的程序设计
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.06   LCD                                                                   04/02/2007 15:23:04 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\obj\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c LARGE OPTIMIZE(6,SPEED) BROWSE INCDIR(.\;.\c51) DEFINE(KEIL) DEBUG OB
                    -JECTEXTEND PRINT(.\lst\lcd.lst) OBJECT(.\obj\lcd.obj)

stmt level    source

   1          #include<math.h>
   2          #include<INTRINS.H>
   3          #include "lcd.h"
   4          #include "main.h"
   5          
   6          
   7          
   8          
   9          /****************全局变量定义*******************/
  10          uchar row=0,col=0,cbyte;                                /*行(页)x,列y,输出数据*/
  11          bit xy;                                                 /*画线方向标志:1水平,0垂直*/
  12          
  13          
  14          /*************************************液晶屏初始化**************************************/
  15          void Lcdinit(void)
  16                  {   Delay(40);
  17   1                      cbyte = DISPOFF;                        /*关闭显示屏*/
  18   1                      WrcmdL(cbyte);
  19   1                      WrcmdR(cbyte);
  20   1                      cbyte = DISPON;                 /*打开显示屏*/
  21   1                      WrcmdL(cbyte);
  22   1                      WrcmdR(cbyte);
  23   1                      cbyte = DISPFIRST;                      /*定义显示起始行为零*/
  24   1                      WrcmdL(cbyte);
  25   1                      WrcmdR(cbyte);
  26   1                      Lcdclr();                 /*清屏*/
  27   1                      Locatexy();
  28   1              }
  29          /*********************************制定坐标函数******************************************/
  30          void WR_rowcol(uchar x,uchar y) 
  31            {row=x;
  32   1         col=y;
  33   1         }
  34          /*********************************命令输出到左区控制口*********************************/
  35          void WrcmdL(uchar X)
  36                  {
  37   1                      lcdbusyL();                     /*确定分区,返回时保留分区状态不变*/
  38   1                      RS= 0;                          /*命令操作*/
  39   1                      RW = 0;                     /*写输出*/
  40   1                      Data= X;                        /*数据输出到数据口*/
  41   1                      E = 1;_nop_();E= 0;     /*读入到LCD*/
  42   1              }
  43          
  44          /*********************************命令输出到右区控制口********************************/
  45          void WrcmdR(uchar X)
  46                  {
  47   1                      lcdbusyR();                             /*确定分区,返回时保留分区状态不变*/
  48   1                      RS= 0;                       /*命令操作*/
  49   1                      RW= 0;                  /*写输出*/
  50   1                      Data = X;                       /*命令输出到数据口*/
  51   1                      E = 1;_nop_();E = 0;    /*读入到LCM*/
  52   1              }
  53          /************************分区操作允许等待,返回时保留分区选择状态*************************/
  54          void lcdbusyL(void)
C51 COMPILER V7.06   LCD                                                                   04/02/2007 15:23:04 PAGE 2   

  55                  {
  56   1              CS1 = 1; CS2 = 0;       /*置CS1为1,CS2为0,选择左区*/
  57   1                 wtcom();                             /*等待使能*/
  58   1              }
  59          void lcdbusyR(void)
  60                  {
  61   1              CS1= 0; CS2=1;  /*置CS1为0,CS2为1,选择右区*/
  62   1              wtcom();            /*等待使能*/
  63   1              }
  64          void wtcom(void)
  65                  {
  66   1                   RS= 0;                             /*清零RS*/
  67   1                   RW = 1;                    /*置RW为1*/
  68   1                Data = 0xFF;
  69   1                   E= 1;_nop_();      
  70   1              while(Data & Lcdbusy);
  71   1              E = 0;
  72   1              }
  73          /************************************清屏,全屏幕清零***********************************/
  74          void Lcdclr( void )
  75                  {
  76   1              for(row=0;row<8;row++)
  77   1                      for(col=0;col<LCDLIMIT;col++) Wrdata(0);
  78   1              }
  79          /******************根据设定的坐标数据,定位LCD上的下一个操作单元位置******************/
  80          void Locatexy(void)
  81                  {  uchar  x,y;
  82   1                 switch (col&0x40)                            /* col与0xC0*/
  83   1                      {                                               /*条件分支执行  */
  84   2      
  85   2      case 0: {lcdbusyL();break;}     /*左区*/
  86   2      case 0x40:      {lcdbusyR();break;}     /*右区*/
  87   2                      }
  88   1                      x = row&0x07|SETX;
  89   1      y = col&0x3F|SETY;
  90   1                  wtcom();                            /*等待使能*/
  91   1                  RS= 0;                                      /*清零rs        */
  92   1                      RW= 0;                              /*清零RW*/
  93   1                      Data = x;                       
  94   1                      E= 1;_nop_();E = 0;
  95   1                      wtcom();                                
  96   1              RS = 0;                                 
  97   1                      RW= 0;                          
  98   1                      Data= y;                        
  99   1                      E = 1;_nop_();E = 0;
 100   1              }
 101          /*************************************数据写输出/**************************************/
 102          void Wrdata(uchar X)
 103                  {
 104   1                  Locatexy();                 /*坐标定位,返回时保留分区状态不变*/
 105   1                      RS= 1;                          /*数据输出*/
 106   1                      RW = 0;                 /*写输出*/
 107   1                      Data = X;                       /*数据输出到数据口*/
 108   1                      E = 1;                          /*读入到LCD*/
 109   1                      _nop_();
 110   1                      E = 0;
 111   1              }
 112          /***********************画线,任意方向的斜线,不支持垂直的或水平线***********************/
 113          void Linexy(uchar posx,uchar posy,uchar endx,uchar endy)
 114          {   
 115   1          uchar t;
 116   1              int xerr=0,yerr=0,delta_x,delta_y,distance;
C51 COMPILER V7.06   LCD                                                                   04/02/2007 15:23:04 PAGE 3   

 117   1              uchar incx,incy;
 118   1              WR_rowcol(posx,posy) ;
 119   1              delta_x=endy-row;                       /*计算两个方向的距离*/
 120   1              delta_y=endx-col;
 121   1              if(delta_x>0) incx=1;                   /*计算增量方向,增量为0表示既不是垂直线也不是水平线*/
 122   1              else if( delta_x==0 ) incx=0;
 123   1                      else incx=-1;
 124   1              if(delta_y>0) incy=1;
 125   1              else if( delta_y==0 ) incy=0;
 126   1                      else incy=-1;
 127   1              delta_x = cabs( delta_x );              /* 判定哪个距离比较大*/
 128   1              delta_y = cabs( delta_y );
 129   1              if( delta_x > delta_y ) distance=delta_x;
 130   1              else distance=delta_y;
 131   1      /*开始画线*/
 132   1              for( t=0;t <= distance+1; t++ ) {
 133   2                      point(row,col);
 134   2                 xerr += delta_x ;
 135   2                      yerr += delta_y ;
 136   2                      if( xerr > distance ) {
 137   3                              xerr-=distance;
 138   3                          col+=incx;
 139   3                      }
 140   2                      if( yerr > distance ) {
 141   3                              yerr-=distance;
 142   3                          row+=incy;
 143   3                      }
 144   2              }
 145   1      }
 146          
 147          /***************************画线,只提供X或Y方向的,不支持斜线*************************/
 148          void Linehv(uchar posx,uchar posy,uchar length,uchar XY)
 149                  {   uchar xs,ys;
 150   1                  if(XY==0x00)
 151   1                    xy=0;
 152   1                      else xy=1;
 153   1                  WR_rowcol(posx,posy); 
 154   1                      if (xy)
 155   1                         {ys = col;
 156   2                              for (xs=0;xs<length;xs++)
 157   2                                 { col = ys + xs;
 158   3                                       point(row,col);}
 159   2                              }
 160   1                      else    {xs = row;
 161   2                              for (ys=0;ys<length;ys++)
 162   2      {
 163   3                                              row = xs + ys;
 164   3                                              point(row,col);}
 165   2                                       }
 166   1      }
 167          
 168          /*****************************************画点******************************************/
 169          void point(uchar posx,uchar posy)

⌨️ 快捷键说明

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