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

📄 opm-main.lst

📁 用C8051F060开发的光功率计 由C51编写的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE OPM_MAIN
OBJECT MODULE PLACED IN OPM-MAIN.OBJ
COMPILER INVOKED BY: D:\Electron\Keil707\C51\BIN\c51.exe OPM-MAIN.c DB OE

stmt level    source

   1          
   2          /*****************************************************************
   3          
   4          应    用:光功率计(LCD版)                             作    者:姚虹
   5          文 件 名:OPM-LCD.c                                             编译系统:Keil C51
   6          起止时间:2008.7.22                                             版    本:V1.00
   7          
   8          基本功能:
   9          1、通道采样,平滑滤波
  10          2、数据转换
  11          3、本地显示-送LCD显示
  12          4、数据传送-送串口
  13          
  14          *****************************************************************/
  15          
  16                  #include "c8051F060.h"
  17                  #include <intrins.h>
  18                  #include <math.h>
  19          
  20                  #define uchar unsigned char
  21                  #define uint unsigned int
  22                  #define ulong unsigned long
  23          
  24          //---------------------------数据采集与处理
  25                  uint idata ADC0G[20];                   //采样数组
  26                  uint idata ADC1G[20];
  27          
  28                  ulong idata ADC0_S;                             //和
  29                  ulong idata ADC1_S;
  30          
  31                  uint idata ADC0_M;                              //均值-积分项
  32                  uint idata ADC1_M;
  33          
  34                  float idata ADC0_MP;
  35                  float idata ADC1_MP;
  36          
  37                  float idata ADC0_M1;
  38                  float idata ADC0_M2;
  39                  float idata ADC1_M1;
  40                  float idata ADC1_M2;
  41          
  42                  uchar idata N;
  43          
  44                  float idata ADC0_F;
  45                  float idata ADC1_F;
  46          
  47                  float * ip;
  48          
  49                  float idata FloatDec;
  50          
  51                  uint idata F_Int;
  52                  uint idata F_Dec;
  53          
  54                  #define Vref 2.45
  55          
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 2   

  56          //--------------------------数据传送与处理
  57                  uchar idata Command;
  58                  bit CommSign = 0;
  59          
  60                  uchar xdata HoldData[16];               //非易失数据保存包:1-、2-、
  61          
  62          //--------------------------数据显示与处理
  63                  sbit CS1 = P1 ^ 0;
  64                  sbit CS2 = P1 ^ 1;
  65                  sbit RES = P1 ^ 2;
  66                  sbit RW  = P1 ^ 3;
  67                  sbit DI  = P1 ^ 4;
  68                  sbit EE  = P1 ^ 5; 
  69          
  70                  uchar idata Bcd[6];                             //二进制转BCD码组
  71          
  72                  uchar xdata ShowPage1[256];     //开机页面
  73                  uchar xdata ShowPage2[256];
  74                  uchar xdata ShowPage3[256];
  75                  uchar xdata ShowPage4[256];
  76          
  77                  uchar xdata ShowPage5[256];     //仪表页面
  78                  uchar xdata ShowPage6[256];
  79                  uchar xdata ShowPage7[256];
  80                  uchar xdata ShowPage8[256];
  81          
  82                  uint TT = 5000;
  83          
  84                  bit Ty;
  85          
  86          //--------------------------键盘数据处理
  87                  sbit KEY1 = P0 ^ 4;                             //键盘中断检测线
  88                  sbit KEY2 = P0 ^ 5;
  89                  sbit KEY3 = P0 ^ 6;                     
  90                  sbit KEY4 = P0 ^ 7;
  91          
  92                  bit DataCapture = 1;
  93                  bit Instrument = 1;
  94          
  95          /*======================================================*/
  96          
  97                  void Init_Device(void);
  98                  char code BS_Pape[];
  99                  char code Meter_Pape[];
 100          
 101                  char code Asc_Z[];
 102          
 103          
 104          /*======================================================*/
 105          /*------------------------------------延时*/
 106          Delay(uchar Cyc)
 107          {
 108   1              uchar i;
 109   1              for (i = 0;i < Cyc;i ++)
 110   1              {
 111   2                      _nop_();
 112   2              }
 113   1      }
 114          /*------------------------------------二进制-BCD转换*/
 115          Hex_Asc(uint value)     
 116          {
 117   1              Bcd[1] = (value / 10000);
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 3   

 118   1              Bcd[2] = ((value % 10000) / 1000);
 119   1              Bcd[3] = ((value % 1000) / 100);
 120   1              Bcd[4] = ((value % 100) / 10);
 121   1              Bcd[5] = (value % 10);
 122   1      }
 123          /*------------------------------------写flash*****/
 124          WRflash()
 125          {
 126   1              uchar i;
 127   1              uchar xdata * pwrite;                           //程序存储器空间的指针(FLASH),指向待写地址
 128   1      
 129   1              SFRPAGE = LEGACY_PAGE;
 130   1              pwrite = 0x0000;                                        //初始化CODE读指针
 131   1              FLSCL = 0x21;                                           //置位FLWE
 132   1              PSCTL = 0x07;                                           //置位SFLE,PSEE,PSWE
 133   1              * pwrite = 0;                                           //启动擦除过程
 134   1              PSCTL = 0x05;                                           //清除PSEE
 135   1              pwrite = 0x0000;
 136   1      
 137   1              for (i = 0;i < 16;i ++)
 138   1                      * pwrite ++ = HoldData[i];
 139   1      
 140   1              PSCTL = 0x00;                                           //复位SFLE,PSEE,PSWE
 141   1      }
 142          /*------------------------------------读flash*****/
 143          RDflash()       
 144          {
 145   1              uchar i;
 146   1              uchar code * pread;                                     //程序存储器空间的指针(FLASH),指向待读地址
 147   1      
 148   1              SFRPAGE = LEGACY_PAGE;
 149   1              PSCTL = 0x04;                                           //访问FLASH时将访问128B的临时存储器扇区
 150   1              pread = 0x0000;                                         //初始化CODE读指针
 151   1      
 152   1              for (i = 0;i < 16;i ++)
 153   1                      HoldData[i] = * pread ++;
 154   1      
 155   1              PSCTL = 0x00;
 156   1      }
 157          /*------------------------------------通讯数据发送*/
 158          Data_PC(uint A0,A1)
 159          {
 160   1              uchar ADC0_L,ADC0_H,ADC1_L,ADC1_H;
 161   1      
 162   1              ADC0_L = A0;
 163   1              ADC0_H = A0 >> 8;
 164   1      
 165   1              ADC1_L = A1;
 166   1              ADC1_H = A1 >> 8;
 167   1      
 168   1          SFRPAGE   = UART0_PAGE;
 169   1              TI0 = 0;
 170   1              SBUF0 = ADC0_H;
 171   1              while (TI0 == 0);
 172   1              TI0 = 0;
 173   1              SBUF0 = ADC0_L;
 174   1              while (TI0 == 0);
 175   1              TI0 = 0;
 176   1              SBUF0 = ADC1_H;
 177   1              while (TI0 == 0);
 178   1              TI0 = 0;
 179   1              SBUF0 = ADC1_L;
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 4   

 180   1              while (TI0 == 0);
 181   1      }
 182          /*------------------------------------写LCD命令*/
 183          LCD_Command(uchar SW)
 184          {
 185   1              DI = 0;
 186   1              EE = 1;
 187   1              P2 = SW;
 188   1              Delay(15);
 189   1              EE = 0;
 190   1      }
 191          /*------------------------------------刷新LCD-开始页*/
 192          LCD_DataRefurbish1()
 193          {
 194   1              uint i;uchar j;
 195   1      
 196   1              CS1 = 1;
 197   1              CS2 = 0;
 198   1              LCD_Command(0x40);
 199   1      
 200   1              for (j = 0;j < 4;j ++)
 201   1              {
 202   2                      LCD_Command(0xb8 + j);
 203   2                      DI = 1;
 204   2                      for (i = 0;i < 64;i ++)
 205   2                      {
 206   3                              EE = 1;
 207   3                              P2 = ShowPage1[i + (j * 64)];
 208   3                              Delay(15);
 209   3                              EE = 0;
 210   3                      }
 211   2              }
 212   1              for (j = 0;j < 4;j ++)
 213   1              {
 214   2                      LCD_Command(0xb8 + j + 4);
 215   2                      DI = 1;
 216   2                      for (i = 0;i < 64;i ++)
 217   2                      {
 218   3                              EE = 1;
 219   3                              P2 = ShowPage2[i + (j * 64)];
 220   3                              Delay(15);
 221   3                              EE = 0;
 222   3                      }
 223   2              }
 224   1      
 225   1              CS1 = 0;
 226   1              CS2 = 1;
 227   1              LCD_Command(0x40);
 228   1      
 229   1              for (j = 0;j < 4;j ++)
 230   1              {
 231   2                      LCD_Command(0xb8 + j);
 232   2                      DI = 1;
 233   2                      for (i = 0;i < 64;i ++)
 234   2                      {
 235   3                              EE = 1;
 236   3                              P2 = ShowPage3[i + (j * 64)];
 237   3                              Delay(15);
 238   3                              EE = 0;
 239   3                      }
 240   2              }
 241   1              for (j = 0;j < 4;j ++)
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 5   

 242   1              {
 243   2                      LCD_Command(0xb8 + j + 4);
 244   2                      DI = 1;
 245   2                      for (i = 0;i < 64;i ++)
 246   2                      {
 247   3                              EE = 1;
 248   3                              P2 = ShowPage4[i + (j * 64)];
 249   3                              Delay(15);
 250   3                              EE = 0;
 251   3                      }
 252   2              }
 253   1      }
 254          /*------------------------------------刷新LCD-仪表面页*/
 255          LCD_DataRefurbish2()
 256          {
 257   1              uint i;uchar j;
 258   1      
 259   1              CS1 = 1;
 260   1              CS2 = 0;
 261   1              LCD_Command(0x40);
 262   1      
 263   1              for (j = 0;j < 4;j ++)
 264   1              {
 265   2                      LCD_Command(0xb8 + j);
 266   2                      DI = 1;
 267   2                      for (i = 0;i < 64;i ++)
 268   2                      {
 269   3                              EE = 1;
 270   3                              P2 = ShowPage5[i + (j * 64)];
 271   3                              Delay(15);
 272   3                              EE = 0;
 273   3                      }
 274   2              }
 275   1              for (j = 0;j < 4;j ++)
 276   1              {
 277   2                      LCD_Command(0xb8 + j + 4);
 278   2                      DI = 1;
 279   2                      for (i = 0;i < 64;i ++)
 280   2                      {
 281   3                              EE = 1;
 282   3                              P2 = ShowPage6[i + (j * 64)];
 283   3                              Delay(15);
 284   3                              EE = 0;
 285   3                      }
 286   2              }
 287   1      
 288   1              CS1 = 0;
 289   1              CS2 = 1;
 290   1              LCD_Command(0x40);
 291   1      
 292   1              for (j = 0;j < 4;j ++)
 293   1              {
 294   2                      LCD_Command(0xb8 + j);
 295   2                      DI = 1;
 296   2                      for (i = 0;i < 64;i ++)
 297   2                      {
 298   3                              EE = 1;
 299   3                              P2 = ShowPage7[i + (j * 64)];
 300   3                              Delay(15);
 301   3                              EE = 0;
 302   3                      }
 303   2              }
C51 COMPILER V7.07   OPM_MAIN                                                              09/11/2008 15:25:32 PAGE 6   

 304   1              for (j = 0;j < 4;j ++)
 305   1              {
 306   2                      LCD_Command(0xb8 + j + 4);
 307   2                      DI = 1;
 308   2                      for (i = 0;i < 64;i ++)
 309   2                      {
 310   3                              EE = 1;
 311   3                              P2 = ShowPage8[i + (j * 64)];
 312   3                              Delay(15);
 313   3                              EE = 0;
 314   3                      }
 315   2              }
 316   1      }
 317          /*------------------------------------LCD初始化*/
 318          LCD_initialize()
 319          {
 320   1              uint i;
 321   1      
 322   1              RES = 0;
 323   1      //      Delay(1);
 324   1      
 325   1              RES = 1;
 326   1      
 327   1              EE = 0;
 328   1              RW = 0;
 329   1              CS1 = 0;
 330   1              CS2 = 0;
 331   1      
 332   1              for (i = 0;i < 256;i ++)

⌨️ 快捷键说明

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