C51 COMPILER V7.06   MAIN                                                                  04/25/2016 22:03:28 PAGE 1   


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

stmt level    source

   1          /*--------------------------------------------------------------------------------------
   2          程序功能：99秒计数器，数据掉电后不丢失。
   3          
   4          注：全新的AT24C02芯片或已被写入过数据时，程序中读出来的数据可能会是一个255或是其它数字，
   5          因此开发板第一次显示的数字是不确实的，当计数加到100之后，它就会归零，重新计数。
   6          ----------------------------------------------------------------------------------------*/
   7          
   8          #include <reg52.h>
   9          #include "i2c.h"
  10          #define uchar unsigned char
  11          #define uint unsigned int
  12          sbit dula=P2^6;
  13          sbit wela=P2^7;
  14          uint num,disnum,t;
  15          uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  16          0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};  //数码管段选编码
  17          
  18          delay1(uchar x)   //延时函数
  19          {
  20   1              uchar a,b;
  21   1              for(a=x;a>0;a--)
  22   1                      for(b=200;b>0;b--);
  23   1      }
  24          
  25          display(uint disnum)   //数码管显示函数
  26          {
  27   1              P0=table_du[disnum/10];    //十位上的数
  28   1              dula=1;
  29   1              dula=0;
  30   1              P0=0xfe;   //第1个数码管位选值
  31   1              wela=1;
  32   1              wela=0;
  33   1              delay1(10);  
  34   1      
  35   1              P0=table_du[disnum%10];   //个位上的数
  36   1              dula=1;
  37   1              dula=0;
  38   1              P0=0xfd;    //第2个数码管位选值
  39   1              wela=1;
  40   1              wela=0;
  41   1              delay1(10);
  42   1      }
  43          
  44          init_time0()  //定时器0初始化
  45          {
  46   1              EA=1;
  47   1              ET0=1;
  48   1              TMOD=0X01;
  49   1              TH0=(65536-50000)/256;  //给定时器0装初值，12M晶振定时时间为50ms
  50   1              TL0=(65536-50000)%256;
  51   1              TR0=1;
  52   1      }
  53          
  54          void main()
  55          {
C51 COMPILER V7.06   MAIN                                                                  04/25/2016 22:03:28 PAGE 2   

  56   1              start();     //单片机给24C02芯片发送一个始起信号   
  57   1              disnum=read_at24c02(10);   //在24C02的地址10中读出保存的数据赋给disnum
  58   1              init_time0();
  59   1              while(1)
  60   1              {
  61   2                      display(disnum);   //数码管显示
  62   2                      if(t==1)
  63   2                      {
  64   3                              t=0;   //清零
  65   3                              write_at24c02(10,disnum);  //在24C02的地址10中写入数据disnum
  66   3                      }
  67   2              }
  68   1      }
  69          
  70          void time0() interrupt 1     
  71          {
  72   1              TH0=(65536-50000)/256;   //重装初值，12M晶振隔间50ms重装一次
  73   1              TL0=(65536-50000)%256;
  74   1              num++;    //每中断一次，num的值加1
  75   1              if(num==20)  //如果到了20次，说明1秒时间到了
  76   1              {
  77   2          num=0;     //然后把num的值清0，让它重新再计20次
  78   2          disnum++;   //每到1秒钟，disnum的值加1
  79   2          t=1;     //1秒写一次24C02
  80   2          if(disnum==100) //定时100秒，在从零开始计时
  81   2            {disnum=0;}
  82   2              }       
  83   1      }
  84          
  85          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    209    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
