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

📄 led.lst

📁 本人写的STC单片机EEPROM功能程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE led.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <STC89C58.h>
   2          #include <intrins.h>
   3          #include <ctype.h>
   4          #include <string.h>
   5          #include <absacc.h>
   6          #include <stdlib.h>
   7          #include <stdio.h>
   8          #include <typedef.h>
   9          
  10          // define       XT0             221184
  11          #define XT1             110592
  12          
  13          #define STC89C58                1
  14          #define W77E58                  0
  15          
  16          #define STCSPD_1                0                                       // STC单片机用单倍速
  17          #define STCSPD_2                1                                       // STC单片机用双倍速
  18          
  19          #define vT01MS                          4
  20          #define vT010MS                         10
  21          #define vT01S                           100
  22          #define vLedFlashTimeVal        38
  23          
  24          #define vKeyVal_Null            0x00
  25          #define vKeyVal_Set                     0x01
  26          
  27          #define vKeyAct_Null            0
  28          #define vKeyAct_Push            1
  29          #define vKeyAct_Pop                     2
  30          #define vKeyAct_Keep            3
  31          
  32          #define vBtnVal_Null            0x00
  33          #define vBtnVal_ST                      0x08
  34          #define vBtnVal_Up                      0x10
  35          #define vBtnVal_Down            0x20
  36          #define vBtnVal_All                     0x30
  37          
  38          
  39          #define vBtnAct_Null                    0
  40          #define vBtnAct_Push            1
  41          #define vBtnAct_Pop                     2
  42          #define vBtnAct_Keep            3
  43          #define vBtnAct_All                     4
  44          #if STC89C58
  45          #include "STC89C58.h"
  46          #elif W77E58
              #include "W77E58.h"
              #endif
  49          
  50          #if     STC89C58
  51          #if     STCSPD_1
              #define vBaudTime               0xff                            // 0xfa对应9600Hz波特率,但若要查看信令解码数据,则要用57600Hz(0xff)
              #define vT0HVal                 0xfc
              #define vT0LVal                 0x76
              #elif STCSPD_2
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 2   

  56          #define vBaudTime               0xfa                            // 0xfa对应9600Hz波特率,但若要查看信令解码数据,则要用57600Hz(0xff)
  57          #define vT0HVal                 0xfe    //0xfc//0xfe//0xff
  58          #define vT0LVal                 0x0c    //0x76//0x43//0x19
  59          #endif
  60          
  61          #elif W77E58
              #define vBaudTime               0xff                            // 0xfa对应9600Hz波特率,但若要查看信令解码数据,则要用57600Hz(0xff)
              #define vT0HVal                 0xfc
              #define vT0LVal                 0x76
              #endif
  66          
  67          sbit    KS0                             =P2^3;
  68          sbit    KS1                             =P2^4;
  69          sbit    KS2                             =P2^5;
  70          
  71          sbit    LED                             =P2^7;
  72          sbit    RELAY                   =P2^2;
  73          
  74          uchar   data            cT01ms;                                         // 定时器0中的1ms,10ms,及1s的时基计数器
  75          uchar   data            cT010ms;
  76          uchar   data            cT01s;
  77          uint    data            iDY_Timer;                                      // 通用定时器计数值
  78          uchar   idata           cDY_LedFlash;                           // 指示灯闪烁时隔计数
  79          uchar   idata           cDY_KeyKeep;                            // 按键延时计时器
  80          uint                            iKeyVal;
  81          
  82          uchar                   cKeySetValue;                           // 键盘进行项目设置时的数值
  83          uchar                   cBtnVal;                                                // 按钮取值
  84          uchar                   cBtnValPre;                                     // 原按钮取值
  85          uchar                   vSecond;
  86          uchar                   vMinute;
  87          uchar                   vHour;
  88          
  89          uchar code Led_Data[28]={
  90              0x05,               //0
  91              0xDD,               //1
  92              0x46,               //2
  93              0x54,               //3
  94              0x9C,               //4
  95              0x34,               //5
  96              0x24,               //6
  97              0x5D,               //7
  98              0x04,               //8
  99              0x14,               //9
 100              0x0C,               //A
 101              0xA4,               //b
 102              0x27,               //C
 103              0xE6,               //c
 104              0xC4,               //d
 105              0x26,               //E
 106              0x2E,               //F
 107              0x8C,               //H
 108              0xAC,               //h
 109              0xA7,               //L
 110              0xEC,               //n
 111              0x0D,               //N
 112              0xE4,               //o
 113              0x0E,               //P
 114              0xEE,               //r
 115              0xA6,               //t
 116              0x85,               //U
 117              0xFE,               //-
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 3   

 118          };
 119          
 120          uchar vEEprom;
 121          bit b_Run;
 122          
 123          uchar digbit;                                   // 字位
 124          uchar wordbuf[4];                       // 字型码缓冲区
 125          uchar time[3];
 126          uint idata time0_tmp;                   // 临时变量,用于计算定时
 127          
 128          #define DIGPORT   P1                    // 定义字位口
 129          #define WORDPORT  P0                    // 定义字型口
 130          
 131          #define UseAddr                 0x9000  //0x8000~0xf3ff空间地址
 132          #define vSecondAddr             0x9001
 133          #define vMinuteAddr             0x9002
 134          #define vHourAddr               0x9003
 135          
 136          #define BaseAddr                0x8000  //起始地址
 137          #define EndSectoraddr   0xf200
 138          #define EndAddr                 0xf3ff  //末地址
 139          
 140          #define PerSector               512             //定义扇区大小
 141          
 142          #define RdCommand               0x01    /* 字节读       */
 143          #define PrgCommand              0x02    /* 字节写       */
 144          #define EraseCommand    0x03    /* 扇区擦除 */
 145          
 146          #define Error   1
 147          #define Ok      0
 148          
 149          /*
 150          sfr     ISP_DATA                =0xe2;                          // ISP/IAP FLASH数据寄存器
 151          sfr     ISP_ADDRH               =0xe3;                          // ISP/IAP FLASH地址高位
 152          sfr     ISP_ADDRL               =0xe4;                          // ISP/IAP FLASH地址低位
 153          sfr     ISP_CMD         =0xe5;                          // ISP/IAP FLASH指令寄存器
 154          sfr     ISP_TRIG                =0xe6;                          // ISP/IAP FLASH指令触发器
 155          sfr     ISP_CONTR               =0xe7;                          // ISP/IAP 控制寄存器
 156          /*
 157          sfr isp_data=0xe2;
 158          sfr isp_addrh=0xe3;
 159          sfr isp_addrl=0xe4;
 160          sfr isp_cmd=0xe5;
 161          sfr isp_trig=0xe6;
 162          sfr isp_contr=0xe7;
 163          */
 164          //uchar eeprom_read(uint addres);
 165          //void eeprom_write(uint address,uchar wdata);
 166          //void eeprom_eares(uint addres);//扇区擦除。
 167          
 168          //uchar getcode(uchar i);   // 根据共阴极字型编码表获取字型代码函数
 169          //void display(void);    // 显示函数
 170          /**************************************************************************
 171          *    函数原型: void eeprom_eares(uint addres)
 172          *    功    能: 扇区擦除
 173          **************************************************************************/
 174          void eeprom_eares(uint addres){
 175   1      //      uchar i;
 176   1              ISP_ADDRL=addres;     //低位地址
 177   1              ISP_ADDRH=addres>>8;  //高位地址
 178   1              ISP_CONTR=0x01;
 179   1              ISP_CONTR|=0x80; //设时间与充ISP操作。
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 4   

 180   1              ISP_CMD=0x03;         //扇区命命令
 181   1              ISP_TRIG=0x46;        //触发
 182   1              ISP_TRIG=0xb9;        //触发启动。
 183   1              _nop_();
 184   1      //      for(i=0;i<3;i++);
 185   1              ISP_ADDRL=0xff;
 186   1              ISP_ADDRH=0xff;
 187   1              ISP_CONTR=0x00;
 188   1              ISP_CMD=0x00;
 189   1              ISP_TRIG=0x00;
 190   1      }
 191          
 192          /**************************************************************************
 193          *    函数原型: void eeprom_write(uint addres,uchar write_data)
 194          *    功    能: 单字节写数据
 195          **************************************************************************/
 196          void eeprom_write(uint addres,uchar write_data){
 197   1      //      uchar i;
 198   1              ISP_DATA=write_data;   //要写入的数据。
 199   1              ISP_ADDRL=addres;     //低位地址
 200   1              ISP_ADDRH=addres>>8;  //高位地址
 201   1              ISP_CONTR=0x01;
 202   1              ISP_CONTR|=0x80; //设时间与充ISP操作。
 203   1              ISP_CMD=0x02;         //写命令
 204   1              ISP_TRIG=0x46;        //触发
 205   1              ISP_TRIG=0xb9;        //触发启动。
 206   1              _nop_();
 207   1      //      for(i=0;i<3;i++);
 208   1              ISP_ADDRL=0xff;
 209   1              ISP_ADDRH=0xff;
 210   1              ISP_CONTR=0x00;
 211   1              ISP_CMD=0x00;
 212   1              ISP_TRIG=0x00;
 213   1      }
 214          
 215          /**************************************************************************
 216          *    函数原型: void eeprom_read(uint addres)
 217          *    功    能: 单字节读数据
 218          **************************************************************************/
 219          uchar eeprom_read(uint addres){
 220   1      //      uchar i;
 221   1              uchar caData;
 222   1              ISP_ADDRL=addres;     //低位地址
 223   1              ISP_ADDRH=addres>>8;  //高位地址
 224   1              ISP_CONTR=0x01;
 225   1              ISP_CONTR|=0x80; //设时间与充ISP操作。
 226   1              ISP_CMD=0x01;         //写命令
 227   1              ISP_TRIG=0x46;        //触发
 228   1              ISP_TRIG=0xb9;        //触发启动。
 229   1              _nop_();
 230   1      //      for(i=0;i<3;i++);
 231   1              ISP_ADDRL=0xff;
 232   1              ISP_ADDRH=0xff;
 233   1              ISP_CONTR=0x00;
 234   1              ISP_CMD=0x00;
 235   1              ISP_TRIG=0x00;
 236   1              caData=ISP_DATA;
 237   1              return(caData);
 238   1      }
 239          
 240          /**************************************************************************
 241          *    函数原型: uchar ArrayWrite(uint begin_addr, uint len, uchar *array)
C51 COMPILER V7.10   LED                                                                   10/22/2007 09:39:59 PAGE 5   

 242          *    功    能: 数组写入并校验
 243          **************************************************************************/
 244          /*
 245          uchar ArrayWrite(uint begin_addr, uint len, uchar *array){
 246                  uint    i;
 247                  uint    in_addr;
 248          
 249                  if(len > PerSector){//判是否是有效范围,此函数不允许跨扇区操作
 250                          return Error;
 251                  }
 252                  in_addr = begin_addr & 0x01ff;   //扇区内偏移量
 253                  if((in_addr + len) > PerSector){
 254                          return Error;
 255                  }
 256          
 257                  in_addr = begin_addr;
 258                  //逐个写入并校对
 259                  ISP_CONTR=0x01;
 260                  ISP_CONTR|=0x80; //设时间与充ISP操作。
 261          
 262                  for(i = 0; i< len; i++){
 263                          // 写一个字节
 264                          ISP_ADDRH = (uchar)(in_addr >> 8);
 265                          ISP_ADDRL = (uchar)(in_addr & 0x00ff);
 266                          ISP_DATA  = array[i];                           // 取数据
 267                          ISP_CMD   = ISP_CMD & 0xf8;                     // 清低3位
 268                          ISP_CMD   = ISP_CMD | PrgCommand;       // 写命令2
 269          
 270                          ISP_TRIG  = 0x46;               // 触发ISP_IAP命令字节1
 271                          ISP_TRIG  = 0xb9;               // 触发ISP_IAP命令字节2
 272                          _nop_();
 273          
 274                          // 读回来
 275                          ISP_DATA        =       0x00;
 276          
 277                          ISP_CMD  = ISP_CMD & 0xf8;                      // 清低3位
 278                          ISP_CMD  = ISP_CMD | RdCommand;         // 读命令1
 279          
 280                          ISP_TRIG = 0x46;                // 触发ISP_IAP命令字节1
 281                          ISP_TRIG = 0xb9;                // 触发ISP_IAP命令字节2
 282                          _nop_();
 283          
 284                          //  比较对错
 285                          if(ISP_DATA != array[i]){
 286                                  ISP_CONTR=0x00;
 287                                  ISP_CMD=0x00;

⌨️ 快捷键说明

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