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

📄 main.lst

📁 驱动15X20D液晶屏
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   MAIN                                                                  04/03/2008 10:40:57 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\setup\keil\C51\BIN\C51.EXE main.c LARGE DEBUG OBJECTEXTEND

line level    source

   1          /************************** ************************************************
   2          Copyright (c) HUST ESRI 1999-2007. All Rights Reserved.
   3          文件名:        main.c
   4          
   5          摘要:LCD测试程序(RTX51 FULL)
   6          作者:  turtle
   7          完成日期:      2008.03.28
   8          
   9          源版本:        
  10          **************************************************************************/
  11          
  12          #include "inc\ConstDef.h"       //硬件相关常数定义
  13          #include "inc\main.h"   //硬件相关常数定义
  14          //X向中断模式测量命令字,0x90
  15          #define CODE_INT_X      0x90
  16          //Y向中断模式测量命令字
  17          #define CODE_INT_Y      0xd0
  18          uchar temp;
  19          long    Tx;
  20          long    Ty;
  21          void main (void)
  22          {
  23   1              long tempx,tempy;//注意类型和Tx,Ty保持一致
  24   1              int i,r,x[6],y[6],xmin,xmax,ymin,ymax;
  25   1              int SETX=0,SETY=0,X_temp[2],Y_temp[2];
  26   1       //通过多次读数据取平均来提高精 
  27   1      //=========系统初始化
  28   1          WDTCN     = 0xDE;
  29   1          WDTCN     = 0xAD;   //关闭看门狗
  30   1      
  31   1              SysClkInit();           //初始化系统时钟
  32   1              PortInit();                     //初始化GPIO和交叉开关
  33   1              DelayL(10);
  34   1      //=========外设与变量初始化
  35   1      
  36   1              P7 = 0x00;                      //打开指示灯
  37   1              
  38   1              LCD_Reset();
  39   1              lcd_initial();
  40   1              lcd_clear();
  41   1              lcd_regwrite(0x00,0xcD);//打开屏
  42   1              temp=lcd_regread(0x00);
  43   1              SetXY(4,24);
  44   1              lcd_datawrite(0xD1);
  45   1              lcd_datawrite(0xEE);
  46   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  47   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  48   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  49   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  50   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  51   1              _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  52   1              SetXY(8,24);
  53   1              lcd_datawrite(0xD1);
  54   1              lcd_datawrite(0xEE);
  55   1      
C51 COMPILER V7.20   MAIN                                                                  04/03/2008 10:40:57 PAGE 2   

  56   1      
  57   1      
  58   1      /*      lcd_regwrite(0x00,0xc5);
  59   1              DelayS(1);
  60   1              lcd_photo(tab2);
  61   1      */       
  62   1              while(1)
  63   1              {
  64   2                       if(INT2==0)
  65   2                 {
  66   3                         DelayS(200);
  67   3                         DelayS(200);
  68   3                         if(INT2==0)
  69   3                         {
  70   4                         while(INT2==0);
  71   4                      CS=0;
  72   4                      for(i=0;i<2;i++)
  73   4                      {
  74   5                      for(r=0;r<6;r++)//X,Y的坐标读取六次
  75   5                              {
  76   6                              WriteCharTo7843(CODE_INT_X);
  77   6                    //Step2. Receive X-dir locating information
  78   6                      x[r] = ReadFromCharFrom7843();
  79   6                    //Step3. Send out Y-dir locating command
  80   6                              WriteCharTo7843(CODE_INT_Y);
  81   6                    //Step4. Receive Y-dir locating information
  82   6                    y[r] = ReadFromCharFrom7843();//读Y轴坐标
  83   6                      }
  84   5                      xmin=x[0];xmax=x[0];ymin=y[0];ymax=y[0];
  85   5                      for(r=1;r<6;r++)
  86   5                      {  
  87   6                              if(x[r]<xmin)
  88   6                                      xmin=x[r];
  89   6                              if(x[r]>xmax)
  90   6                                      xmax=x[r];
  91   6                              if(y[r]<ymin)
  92   6                                      ymin=y[r];
  93   6                              if(y[r]>ymax)
  94   6                                      ymax=y[r];
  95   6                      }
  96   5          //坐标中去掉最大的和最小的
  97   5              X_temp[i]=(x[0]+x[1]+x[2]+x[3]+x[4]+x[5]-xmin-xmax)/4;
  98   5              Y_temp[i]=(y[0]+y[1]+y[2]+y[3]+y[4]+y[5]-ymin-ymax)/4;
  99   5      
 100   5              }
 101   4              //将处理后的触摸屏坐标取平均,得到较准确的触摸屏坐标X,Y
 102   4              SETX=(X_temp[0]+X_temp[1])/2;
 103   4              SETY=(Y_temp[0]+Y_temp[1])/2;   
 104   4      
 105   4      //           tempx=TS_X-385;//这里TS_X,TS_Y是获取的触摸屏坐标  
 106   4                   tempx=SETX-375;//这里X,Y是经过处理的触摸屏的坐标           
 107   4                              if(tempx<0)
 108   4                              tempx=0;
 109   4                              else
 110   4                      Tx=(tempx*320)/(1800-375);
 111   4                              tempy=SETY-500;
 112   4                              if(tempy<0)
 113   4                              tempy=0;
 114   4                              else
 115   4                              Ty=tempy*240/(1800-590);
 116   4                      }
 117   3                      SETX=0;
C51 COMPILER V7.20   MAIN                                                                  04/03/2008 10:40:57 PAGE 3   

 118   3                      }
 119   2                        
 120   2              }
 121   1      }
 122          
 123          
 124          
 125          
 126          
 127          
 128          // ===============================================================
 129          //                      子函数
 130          // ===============================================================
 131          /*-------------------------------------------------------------------
 132          * 功能: 长时间延时
 133          * 调用: NULL
 134          * 输入: NULL
 135          * 返回: NULL
 136          * 说明: 长时间延时,工作在11.0592M时,此函数近似延时28ms
 137          -------------------------------------------------------------------*/
 138          void DelayL(uchar Time)
 139          {
 140   1              uchar i,j,k;
 141   1              while(Time--)
 142   1              {
 143   2                      for(k=0; k<CLK_BASE; k++)
 144   2                              for(j=0; j<100; j++)
 145   2                                      for(i=0; i<100; i++)
 146   2                                              _nop_();
 147   2              }
 148   1      }
 149           
 150          /*-------------------------------------------------------------------
 151          * 功能: 短时间延时
 152          * 调用: NULL
 153          * 输入: NULL
 154          * 返回: NULL
 155          * 说明: 工作在11.0592M时,此函数近似延时0.11ms
 156          -------------------------------------------------------------------*/
 157          void DelayS(uchar Time)
 158          {
 159   1              uchar i;
 160   1              while(Time--)
 161   1              {
 162   2                      for(i=0; i<250; i++)
 163   2                              {_nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
 164   2              }
 165   1      }
 166          
 167          /*-------------------------------------------------------------------
 168          * 功能: 系统时钟初始化
 169          * 调用: NULL
 170          * 输入: NULL
 171          * 返回: NULL
 172          * 说明: 切换至11.0592M外部晶振
 173          -------------------------------------------------------------------*/
 174          void SysClkInit (void)
 175          {
 176   1              int i;
 177   1              OSCXCN = 0x67;                          // 使用22MHz的外部晶振
 178   1              for(i=0; i<3000; i++);          // 延时,等待外部晶振起振
 179   1              while(!(OSCXCN&0x80));          // 等待外部晶振起振完成
C51 COMPILER V7.20   MAIN                                                                  04/03/2008 10:40:57 PAGE 4   

 180   1              OSCICN = 0x08;                          // 启用外部晶振,启用时钟丢失检测器
 181   1      }
 182          
 183          /*-------------------------------------------------------------------
 184          * 功能: C8051端口初始化
 185          * 调用: NULL
 186          * 输入: NULL
 187          * 返回: NULL
 188          * 说明: 配置各端口输入输出状态。如非必要,关闭不相关端口的弱上拉
 189          -------------------------------------------------------------------*/
 190          void PortInit (void)
 191          {
 192   1              XBR0 = 0x07;            //允许SMBus、UART0、SPI0
 193   1              XBR2 = 0x46;            //允许交叉开关和弱上拉,允许UART1
 194   1      
 195   1          P0MDOUT = 0x1D; // Output configuration for P0 
 196   1          P1MDOUT = 0xF9; // Output configuration for P1 
 197   1          P2MDOUT = 0x0D; // Output configuration for P2 

⌨️ 快捷键说明

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