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

📄 111.lst

📁 基于AT89C51的数字钟(闹钟功能)
💻 LST
字号:
C51 COMPILER V9.00   111                                                                   01/02/2013 17:59:48 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 111
OBJECT MODULE PLACED IN 111.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 111.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #define uint unsigned int
   3          #define uchar unsigned char
   4          sbit f=P3^4;
   5          uint a,ge,shi,i,j,k=12,fg,fs,xg,xs,xingqi=1;
   6          uchar   hour=0,  minute=0,flag=0;
   7          void display(uint ge,uint shi,uint fg,uint fs,uint xg,uint xs);
   8          void fm();
   9          uchar code wm[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  10          uchar code dm[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  11          sbit ke1=P0^4;  // 正常调时
  12          sbit ke2=P0^5;   //正常调分
  13          sbit ke4=P0^7;    //正常调星期
  14          sbit k3=P0^6;//闹钟调时
  15          sbit k5=P0^3; // 闹钟调分
  16          sbit k6=P0^2;//切换闹钟模式
  17          void delay(uint s)
  18          {       
  19   1           uint x,y;
  20   1           for(x=s;x>0;x--)
  21   1           for(y=110;y>0;y--);
  22   1       }
  23          void timer()interrupt 1
  24          {
  25   1           TH0=(65536-50000)/256;
  26   1           TL0=(65536-50000)%256;
  27   1           a++;
  28   1       }
  29          void key()
  30          {
  31   1          P0=0xfe;
  32   1          if(ke1==0)
  33   1          {       
  34   2              k++;
  35   2              if(k==24)
  36   2                 k=0;
  37   2           while(!ke1);
  38   2      
  39   2                }
  40   1          if(ke2==0)
  41   1          {
  42   2              j++;
  43   2              if(j==60)
  44   2                 j=0;
  45   2              while(!ke2);
  46   2               }
  47   1      
  48   1      if(ke4==0)
  49   1       {       
  50   2           while(!ke4);
  51   2               xingqi++;
  52   2               if(xingqi==8)
  53   2               {       
  54   3                    xingqi=1;
  55   3                        
C51 COMPILER V9.00   111                                                                   01/02/2013 17:59:48 PAGE 2   

  56   3               }
  57   2       } 
  58   1      
  59   1      if(k6==0)
  60   1       {       
  61   2           while(!k6);
  62   2               flag=~flag;
  63   2               
  64   2       } }
  65          void setclock()  //闹钟键盘扫描
  66          {
  67   1                                    
  68   1                                    if(k3==0)
  69   1                                                      {
  70   2                                                              delay(10);                       
  71   2                                                       if(k3==0)       
  72   2                                                                  {     
  73   3                                                                        if(hour<23)
  74   3                                                                hour++;
  75   3                                                                        else hour=0;
  76   3                                                                      } 
  77   2                                                              while(!k3);      
  78   2                                                  }
  79   1                                                
  80   1                                      
  81   1                                                //模式——闹钟调分 
  82   1                                         {      
  83   2                                               if(k5==0)
  84   2                                                      {
  85   3                                                              delay(10);                                       
  86   3                                                      if(k5==0)       
  87   3                                                                  {     
  88   4                                                                        if(minute<59)
  89   4                                                                minute++;
  90   4                                                                        else minute=0;
  91   4                                                                      } 
  92   3                                                      while(!k5);
  93   3                                                      }
  94   2                                      
  95   2                                      }
  96   1       }
  97          
  98           void panduanmaozhong()//判断闹钟时间是否到来
  99           {
 100   1                       if( (j==minute)&(k==hour))
 101   1                       {
 102   2                           P3=0x00;
 103   2                       }
 104   1      
 105   1                        
 106   1       }
 107          
 108          
 109          void main()
 110          {
 111   1           TMOD=1;
 112   1           TH0=(65536-50000)/256;
 113   1           TL0=(65536-50000)%256;
 114   1           EA=1;
 115   1           ET0=1;
 116   1           TR0=1;
 117   1           P3=0x01;
C51 COMPILER V9.00   111                                                                   01/02/2013 17:59:48 PAGE 3   

 118   1      
 119   1           while(1)
 120   1           {
 121   2      
 122   2           if(a>=20)
 123   2          {
 124   3              a=0;
 125   3              i++;
 126   3              if(i==60)//秒
 127   3              {       
 128   4                j++;
 129   4                i=0;
 130   4                if(j==60)                //分
 131   4                {
 132   5                   k++;
 133   5                   j=0;
 134   5                   if(k==24)    //时
 135   5                   {
 136   6                                 xingqi++      ;
 137   6                             k=0;
 138   6                                 if(xingqi>7)    //星期
 139   6                                 {
 140   7                                      xingqi=1;
 141   7                                 }                                                                  
 142   6           }
 143   5           }       
 144   4        }
 145   3       }
 146   2                        
 147   2                     ge=i%10;
 148   2                     shi=i/10;
 149   2                     fg=j%10;
 150   2                     fs=j/10;
 151   2                     xg=k%10;
 152   2                     xs=k/10;
 153   2      
 154   2                                 if(flag==0)
 155   2                          display(ge,shi,fg,fs,xg,xs);
 156   2                                 else 
 157   2                                          display(ge,shi,(minute%10),(minute/10),(hour%10),(hour/10));
 158   2                                 
 159   2                                      if(fg==9&&fs==5&&shi==5&&(ge==1||ge==3||ge==5||ge==7||ge==9))
 160   2                         P3=0x00;
 161   2                         else P3=0x01;
 162   2                         key();
 163   2                                         setclock();   //闹钟键盘扫描
 164   2                      panduanmaozhong();//判断闹钟时间是否到来
 165   2                                         
 166   2                                        
 167   2          
 168   2            }
 169   1       }
 170          
 171          void display(uint ge,uint shi,uint fg,uint fs,uint xg,uint xs)
 172          {
 173   1                 P1=wm[0];
 174   1             P2=dm[xingqi];
 175   1             delay(1);
 176   1      
 177   1             P1=wm[2];
 178   1             P2=dm[xs];
 179   1             delay(1);
C51 COMPILER V9.00   111                                                                   01/02/2013 17:59:48 PAGE 4   

 180   1      
 181   1             P1=wm[3];
 182   1             P2=dm[xg];
 183   1             delay(1);
 184   1      
 185   1             P1=wm[4];
 186   1             P2=dm[fs];
 187   1             delay(1);
 188   1      
 189   1             P1=wm[5];
 190   1                 P2=dm[fg];
 191   1             delay(1);
 192   1      
 193   1             P1=wm[6];
 194   1             P2=dm[shi];
 195   1             delay(1);
 196   1      
 197   1             P1=wm[7];
 198   1             P2=dm[ge];
 199   1             delay(1);
 200   1                                 
 201   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    722    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25      12
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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