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

📄 时钟over.lst

📁 基于8051的单片机时钟源代码
💻 LST
字号:
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE 蔩钟OVER
OBJECT MODULE PLACED IN 时钟OVER.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 时钟OVER.C DB SB OE

stmt level    source

   1          //////////////////////////////////////////////////
   2          //                                              //           
   3          //              AT89C51时钟程序                 //
   4          //                                              //
   5          //                    作者: 吴鹏                //
   6          //                    时间;2006年2月3日        //
   7          //                              大年初六  完成  //
   8          //////////////////////////////////////////////////    
   9          #include <reg52.H>
  10          #define uchar unsigned char
  11          sbit P3_6=P3^6;
  12          sbit P3_7=P3^7;
  13          sbit P2_6=P2^6;
  14          sbit P2_7=P2^7;
  15          
  16          uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//  0-9 十个数字显示
  17          uchar code dispbit[]={0x7f,0xbf,0xf7,0xfb,0xfd,0xfe};//   点亮 数码管
  18          uchar code rjg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//   点亮  跑马灯
  19          uchar buffer[]={0,0,0,0,0,0};//   时钟and定时显示置
  20          uchar hour,minute,second,count;
  21          uchar dhour=0,dminute=0,dsecond=0;
  22          uchar j=0,R,T;                  
  23          
  24          void ding(void) ;                 //定时程序
  25          
  26          void delay(uchar c,uchar d)       //延时程序
  27          {uchar x,y;
  28   1       for(x=c;x>0;x--)
  29   1        for(y=d;y>0;y--);
  30   1      }
  31          
  32          void warning(void)               //闹钟报警程序
  33          {
  34   1         uchar p=2;
  35   1         while(p--!=0)
  36   1          { P1=0;
  37   2            P0=0;
  38   2            delay(100,100);
  39   2            P1=0xff;
  40   2            P0=0xff;
  41   2            delay(100,100);
  42   2            }   
  43   1      } 
  44          
  45          
  46          void main(void)
  47          {
  48   1        TMOD=0x11;//选择定时器的模式
  49   1        TH0=0xd8; //定的时间高8位     
  50   1        TL0=0xf0; //定的时间低8位
  51   1        IE=0x82;  //中断触发的设定
  52   1        TR0=1;    //TIMER0开始计时
  53   1        count=0;
  54   1        second=0;
  55   1        minute=0;
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 2   

  56   1        hour=0;
  57   1       while(1)
  58   1        {if(P3_7==0)     //按下P3_7?
  59   2          {delay(1,100); //延时
  60   3            hour++;
  61   3             if(hour==24)
  62   3               hour=0;
  63   3              while(P3_7==0);//判断是否被按下
  64   3           }
  65   2         if(P2_7==0)
  66   2           {delay(1,100);
  67   3              minute++;
  68   3               if(minute==60)
  69   3                 {minute=0;}
  70   3               while(P2_7==0);
  71   3            }
  72   2          if(P2_6==0)
  73   2            {delay(1,100);
  74   3                second++;
  75   3                if(second==60)
  76   3                   {second=0;}
  77   3                while(P2_6==0);
  78   3             }
  79   2      
  80   2               if(P3_6==0)    
  81   2           {delay(1,100);
  82   3      //       TR0=0;   //???   //注意: 在做显示时,要慎用全局变量,如在做本程序的两个显示部分时,
  83   3                                //    原来都统一用的是一个全局变量,那么这就会出现冲突,后来两部分
  84   3                                //    分别改为局部变量,这就OK了!!!!
  85   3            while(P3_6==0);
  86   3              T=1;              //作标志,使其进入"ding()"
  87   3              R=1;              //作标志,因为两部分显示都存在"buffer[]"里,所以加以区分,否则会出现冲突
  88   3            }
  89   2           if(T==1)             //检测T值
  90   2            ding(); 
  91   2         }
  92   1      }
  93          
  94          
  95          void tim(void) interrupt 1 //int0    t0  int1  t1   rs
  96          { 
  97   1                                 //  0     1    2     3    4
  98   1       uchar   a1,b1,i1;         //这里我使用局部变量               
  99   1       TH0=0xd8;                 
 100   1       TL0=0xf0;
 101   1       count++;        //由于其是全局函数,当程序运行100次后,秒加1
 102   1       R=0;
 103   1      
 104   1       if (count==100)
 105   1         {
 106   2           count=0;
 107   2           second++;
 108   2           j++;
 109   2           P1=rjg[j%8];  //由于有8个LED所以对8取余,使其逐个且有序的亮起来,很巧吧!!
 110   2          if(second>=60)
 111   2            {
 112   3                  second=0;
 113   3              minute++;
 114   3             if (minute>=60)
 115   3               {
 116   4                         minute=0;
 117   4                 hour++;
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 3   

 118   4                if (hour>=24)
 119   4                    {
 120   5                                 second=0;
 121   5                     hour=0;
 122   5                     minute=0;
 123   5                     }
 124   4                }
 125   3             }
 126   2      
 127   2          if(R==0)                  //检测R值
 128   2           {
 129   3            buffer[0]=second%10;
 130   3            buffer[1]=second/10;
 131   3            buffer[2]=minute%10;
 132   3            buffer[3]=minute/10;
 133   3            buffer[4]=hour%10;
 134   3            buffer[5]=hour/10;
 135   3               }
 136   2         }
 137   1          if(R==0)                  //检测R值
 138   1           {for(i1=0;i1<6;i1++)
 139   2             {
 140   3              P2=dispbit[i1];
 141   3              P0=table[buffer[i1]];
 142   3               for(a1=4;a1>0;a1--)
 143   3                for(b1=248;b1>0;b1--);
 144   3              }
 145   2            }     
 146   1      if((hour==dhour && minute==dminute && second==dsecond)&&(hour!=0||minute!=0||second!=0))
 147   1         {warning();}            //闹钟报警部分
 148   1      }
 149          
 150          
 151          void ding(void) //interrupt 3 //int0    t0  int1  t1   rs
 152          {                             //  0     1    2     3    4
 153   1        int i2,a2,b2;                       
 154   1        P2=0xff;
 155   1        while(1)                //闹钟调时
 156   1        {
 157   2           if(P3_7==0)
 158   2            {delay(1,100);
 159   3               dhour++;
 160   3                if(dhour==24)
 161   3                {dhour=0;}
 162   3               while(P3_7==0);
 163   3             }
 164   2           if(P2_7==0)
 165   2             {delay(1,100);
 166   3                dminute++;
 167   3                 if(dminute==60)
 168   3                 {dminute=0;}
 169   3                while(P2_7==0);
 170   3              }
 171   2            if(P2_6==0)
 172   2              {delay(1,100);
 173   3                 dsecond++;
 174   3                if(dsecond==60)
 175   3                 {dsecond=0;}
 176   3                while(P2_6==0);
 177   3               }
 178   2          if(R==1)                   //检测R值
 179   2           {
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 4   

 180   3             buffer[0]=dsecond%10;
 181   3             buffer[1]=dsecond/10;
 182   3             buffer[2]=dminute%10;
 183   3             buffer[3]=dminute/10;
 184   3             buffer[4]=dhour%10;
 185   3             buffer[5]=dhour/10;
 186   3            }
 187   2          for(i2=0;i2<6;i2++)
 188   2            {
 189   3             P2=dispbit[i2];
 190   3             P0=table[buffer[i2]];
 191   3             for(a2=4;a2>0;a2--)
 192   3               for(b2=248;b2>0;b2--);
 193   3             }
 194   2            
 195   2        if (P3_6==0)           //定时退出部分
 196   2          {delay(1,100);
 197   3           while (P3_6==0);
 198   3               T=0;                //使T归0 
 199   3           R=0;                //使R归0 
 200   3           break;              //从while(1)循环中跳出
 201   3          }
 202   2        }   
 203   1      }
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


second . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0000H  1
P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P2 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A0H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
table. . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0000H  10
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
minute . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0001H  1
P2_6 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A6H  1
P2_7 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00A7H  1
P3_6 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B6H  1
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
P3_7 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B7H  1
ding . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i2 . . . . . . . . . . . . . . . . .  * REG *  DATA   INT      0006H  2
  a2 . . . . . . . . . . . . . . . . .  * REG *  DATA   INT      0004H  2
  b2 . . . . . . . . . . . . . . . . .  * REG *  DATA   INT      0002H  2
dhour. . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0002H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
count. . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0003H  1
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TMOD . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0089H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
hour . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0004H  1
rjg. . . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0010H  8
tim. . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  a1 . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
  b1 . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  i1 . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
TH0. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008CH  1
TL0. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   008AH  1
R. . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0005H  1
T. . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0006H  1
TR0. . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      008CH  1
dsecond. . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0007H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
j. . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0008H  1
_delay . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0004H  -----
  c. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  d. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  x. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  y. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
dispbit. . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    000AH  6
warning. . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  p. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0004H  1
dminute. . . . . . . . . . . . . . . .  PUBLIC   DATA   U_CHAR   0009H  1
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1
buffer . . . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    000AH  6


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    592    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V7.02b   蔩钟OVER                                                             02/27/2006 17:06:07 PAGE 6   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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