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

📄 fhy.lst

📁 单片机课程设计 电子钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   FHY                                                                   03/01/2009 08:55:07 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE FHY
OBJECT MODULE PLACED IN fhy.OBJ
COMPILER INVOKED BY: D:\software\keil\C51\BIN\C51.EXE fhy.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<AT89X52.h>
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          char DATA_7SEG[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};/*0~9的数码管段码*/
   5          char DATA_P3[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
   6          uchar hour=0,min=0,sec=0;                       /*时、分、秒单元清零*/
   7          uint deda=0;                                /*2.5mS计数单元清零*/ 
   8          uchar t_hour=0,t_min=0,t_sec=0;         /*闹时时、分、秒单元清零*/
   9          uchar d_hour=0,d_min=0,d_sec=0;         /*倒计时时、分、秒单元清零*/
  10          bit o_f=0;                                      /*闹时启/停标志*/
  11          uchar set=0;
  12          uint t=0;                               /*模式设定标志*/
  13          uchar m=0,a=0;
  14          uint time_counter1 = 0;
  15          uint time_counter2 = 0;
  16          uint time_counter3 = 0;
  17          void delay(uint k);                 //延时子函数
  18          void conv();                                    /*走时单元转换*/
  19          void d_conv();
  20          void p_out();                                   /*判别闹时到否子函数*/
  21          void dirve();                                   /*走时时间输出驱动子函数*/
  22          void t_dirve();                                 /*闹时时间输出驱动子函数*/
  23          void d_dirve();                                         /*倒计时时间输出驱动子函数*/
  24          uint almflag1=0;                                        /*闹铃1提示标志*/
  25          uint almflag2=0;                                    /*闹铃2提示标志*/
  26          uchar dflag=0;
  27          unsigned char dis_buff1[6];             /* 走时显示缓冲区,存放要显示的6个字符的段码值*/
  28          unsigned char dis_buff2[4];             /* 闹钟显示缓冲区,存放要显示的6个字符的段码值*/
  29          unsigned char dis_buff3[6];             /* 倒计时显示缓冲区,存放要显示的6个字符的段码值*/
  30          unsigned char   posit1=0;          
  31          unsigned char   posit2=0;
  32          unsigned char   posit3=0;
  33          
  34          
  35          
  36          /*闹时启/停子函数*/
  37          
  38          
  39          void time1_of()
  40          {   if(P2_1==0) 
  41   1              { delay(1);
  42   2               o_f=1;
  43   2               }
  44   1      
  45   1              if(P2_2==0)     
  46   1               {delay(1);
  47   2                o_f=0;
  48   2                }
  49   1               if(o_f==1)
  50   1                 {
  51   2                  P1=0xc0;
  52   2                  P3=0xdf;
  53   2                      }
  54   1                if(o_f==0)
  55   1                  {
C51 COMPILER V8.02   FHY                                                                   03/01/2009 08:55:07 PAGE 2   

  56   2                       P1=0x8e;
  57   2                       P3=0xdf;
  58   2                       }
  59   1                 
  60   1      }
  61                     
  62          
  63          /*走时函数*/
  64          
  65          
  66          void time()
  67          
  68                    
  69          {dirve();
  70   1       p_out();
  71   1       if(almflag2==1)
  72   1                 { if(time_counter3==1)
  73   2                          {P2_4=~P2_4;
  74   3                                time_counter3=0;
  75   3                                a++;
  76   3                                if(a==60)
  77   3                                {
  78   4                                  a=0;
  79   4                                  almflag2=0;
  80   4                                 }
  81   3                              }
  82   2                       }
  83   1              if(almflag2==0)
  84   1              P2_4=1;         
  85   1       }
  86          
  87          
  88          /*定时器T0  2.5mS初始化*/
  89          
  90          
  91          void timer_init(void)
  92                                                                                                     
  93          {
  94   1          TMOD=0x01;//定时器1模式
  95   1              TH0=0xf7;//计数初值
  96   1          TL0=0x00;
  97   1              TR0=1;//开始计数
  98   1              ET0=1;//中断使能
  99   1      }
 100          
 101          
 102          
 103          /*2.5mS定时中断服务子函数*/
 104                                                                                                   
 105          
 106          timer() interrupt 1
 107          
 108          
 109          {
 110   1       TH0=0xf7;
 111   1       TL0=0x00;
 112   1       if(++deda>=400)
 113   1           {  deda=0;
 114   2                  time_counter1=1;     //1秒到
 115   2                      time_counter2=1;
 116   2                      time_counter3=1;
 117   2                }
C51 COMPILER V8.02   FHY                                                                   03/01/2009 08:55:07 PAGE 3   

 118   1       }
 119          
 120          
 121          
 122          /*延时子函数*/
 123          
 124          
 125          
 126          void delay(uint k)
 127          
 128          
 129          {
 130   1      
 131   1      uint i,j;
 132   1      
 133   1      for(i=0;i<k;i++)
 134   1      
 135   1      for(j=0;j<121;j++)
 136   1      
 137   1      {;}
 138   1      
 139   1      }
 140          
 141          
 142          /*扫描按键子函数*/
 143          
 144          
 145          void scan_key()
 146          
 147          {    delay(1);
 148   1               if(P2_3==0) set++;
 149   1               if(set>=5) set=0;
 150   1       F0:if(P2_3==0) goto F0; 
 151   1      
 152   1      }
 153          
 154          
 155          
 156           /*时、分、秒单元及走时单元转换*/
 157          
 158          
 159          void conv()
 160          { 
 161   1        if(time_counter1==1)
 162   1              {sec++;time_counter1=0;}
 163   1        if(sec==60)
 164   1              {min++;sec=0;}
 165   1        if(min==60)
 166   1              {hour++;min=0;}
 167   1        if(hour==24)
 168   1              {hour=0;}  
 169   1         
 170   1      }
 171          
 172          
 173          
 174          
 175          /*倒计时单元及走时单元转换*/
 176          
 177          
 178          void d_conv()
 179          
C51 COMPILER V8.02   FHY                                                                   03/01/2009 08:55:07 PAGE 4   

 180          { t=3600*d_hour+60*d_min+d_sec;                 
 181   1                      if(time_counter2==1) 
 182   1                      {
 183   2                       t--;
 184   2                       time_counter2=0;
 185   2                      }
 186   1                      d_hour=t/3600;
 187   1                      d_min=t%3600/60;
 188   1                      d_sec=t%60;
 189   1                  
 190   1        if(d_hour==0&&d_min==15&&d_sec==0)
 191   1              {almflag1=1;}
 192   1              
 193   1         if(d_hour==0&&d_min==0&&d_sec==0)
 194   1              {
 195   2               almflag1=1;
 196   2               dflag=0;
 197   2              }  
 198   1      }
 199          
 200          
 201          
 202          /*调整走时时间*/
 203          
 204          
 205          
 206          void time_adj()
 207          {       if(P2_2==0) delay(1);   //按键消抖
 208   1              if(P2_2==0)  hour++;
 209   1              if(hour==24) hour=0;
 210   1              
 211   1              if(P2_1==0)      delay(1); 
 212   1              if(P2_1==0)      min++;
 213   1          if(min==60)  min=0;  
 214   1               
 215   1              if(P2_0==0)  delay(1);
 216   1              if(P2_0==0)      sec=0;
 217   1              for(m=0;m<30;m++)

⌨️ 快捷键说明

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