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

📄 main.lst

📁 51单片机的时间程序
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  04/09/2008 21:08:30 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE 程序\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\main.lst) OBJEC
                    -T(main.obj)

line level    source

   1          #include<reg52.h>
   2          #include"LED_N.H"
   3          #include"KEY.H"
   4          #include"beeper.h"
   5          
   6          #define NORMAL 0                                  //预定义三种工作模式
   7          #define HOUR_STATE 1
   8          #define MINUTE_STATE 2
   9          
  10          void initial();                                   //函数声明
  11          void SetTime();
  12          void ModeJudge();
  13          
  14          unsigned char second;                     //变量声明
  15          unsigned char minute;
  16          unsigned char hour;
  17          unsigned int div;
  18          unsigned char menu_state;
  19          unsigned char SecondMask;
  20          unsigned char MinuteMask;
  21          unsigned char HourMask;
  22          unsigned char m=0;
  23          /*
  24          函数名:SYS_Init();
  25          入口参数:无
  26          出口参数:无
  27          说明: 定义T0工作方式1,约5ms产生一次中断
  28                     T1工作方式2,约200us产生一次中断
  29                     系统初始状态为NORMAL
  30                     初始时间为  08:55:00
  31          */
  32          void SYS_Init()
  33          {
  34   1       TMOD=0x21;
  35   1       TL0=(65536-5000)%256;             //5ms
  36   1       TH0=(65536-5000)/256;
  37   1       TH1=TL1=56;
  38   1       EA=1;
  39   1       ET0=1;
  40   1       ET1=1;
  41   1       TR0=1;
  42   1       TR1=1;
  43   1       PT0=0;
  44   1       PT1=1;
  45   1       hour=8;
  46   1       minute=55;
  47   1       second=0;
  48   1       menu_state=NORMAL;
  49   1      }
  50          main()
  51          {
  52   1       SYS_Init(); 
  53   1       while(1)
  54   1       {
C51 COMPILER V8.02   MAIN                                                                  04/09/2008 21:08:30 PAGE 2   

  55   2        if(div>2304)                                                                                   
  56   2        {
  57   3          switch(menu_state)
  58   3              {
  59   4               case NORMAL:      SecondMask=SECOND_BLINK;break;        //正常模式时,第四位数码管中间的位段闪烁
  60   4               case HOUR_STATE:  HourMask  =HOUR_BLINK;  break;        //调小时时,三、四位数码管闪烁
  61   4               case MINUTE_STATE:MinuteMask=MINIT_BLINK; break;        //调分钟时,一、二位数码管闪烁
  62   4               default: break;                 
  63   4              }   
  64   3        }
  65   2        else   
  66   2        {
  67   3         SecondMask=NO_BLINK2;
  68   3         HourMask=MinuteMask=NO_BLINK;
  69   3        }
  70   2      
  71   2        if(second>=60)                                                                                 //正常模式时,时间计算
  72   2          {
  73   3           second=0;
  74   3               minute++;
  75   3               if(minute>=60)
  76   3               {
  77   4                minute=0;
  78   4                hour++;
  79   4                if(hour>=12)
  80   4                hour=0;
  81   4               }
  82   3          }
  83   2        if(m>2)                                                                    //15ms执行一次的程序
  84   2        {
  85   3         m=0;
  86   3         ModeJudge();                                                                              //判断模式改变
  87   3         SetTime();                                                                                    //设定时间
  88   3         SplitNumber(hour*100+minute);                                                 //将时间送入缓存
  89   3        }
  90   2       };
  91   1      }
  92          void timer0() interrupt 1                                // T0中断程序
  93          { 
  94   1        TR0=0;
  95   1        TH0=(65536-5000)/256;                                      //5ms
  96   1        TL0=(65536-5000)%256;
  97   1        m++;
  98   1        Display_Scan(SecondMask,MinuteMask,HourMask);                  //将时间显示在数码管上
  99   1        TR0=1;                 
 100   1      }
 101          void timer1() interrupt 3                                                                //T1中断程序
 102          {
 103   1        div++;  
 104   1        if(div>4607)                                                                                   
 105   1        {
 106   2         div=0;
 107   2         second++;                                                                                     //时间记够1s,second加一
 108   2        }  
 109   1      }
 110          /*
 111          函数名:SetTime();
 112          入口参数:无
 113          出口参数:无
 114          说明:在NORMAL下,不做处理
 115                在HOUR_MODE下,按 KEY2 和 KEY3 对小时加减
 116                    在MINUTE_MODE下,按 KEY2 和 KEY3 对分钟加减
C51 COMPILER V8.02   MAIN                                                                  04/09/2008 21:08:30 PAGE 3   

 117          */                                                      
 118          void SetTime()
 119          {
 120   1        if(KEY2_JUDGE()!=NO_PRESS)
 121   1         {
 122   2              switch(menu_state)
 123   2              {
 124   3               case NORMAL:break;
 125   3               case HOUR_STATE:hour++;if(hour>=12)hour=11;div=0;break;
 126   3               case MINUTE_STATE:minute++;if(minute>=60)minute=59;second=0;div=0;break;
 127   3               default: break;                 
 128   3              }
 129   2         }
 130   1        if(KEY3_JUDGE()!=NO_PRESS)
 131   1         {
 132   2              switch(menu_state)
 133   2              {
 134   3               case NORMAL:break;
 135   3               case HOUR_STATE:hour--;if(hour<=1)hour=1;div=0;break;
 136   3               case MINUTE_STATE:if(minute<=0)minute=1;minute--;second=0;div=0;break;
 137   3               default: break;                 
 138   3              }
 139   2         }
 140   1      } 
 141          /*
 142          函数名称:ModeJudge();
 143          入口参数:无
 144          出口参数:无
 145          说明:按 KEY1,改变工作模式
 146          */
 147          void ModeJudge()
 148          {  
 149   1        if( KEY1_JUDGE()==SHORT_PRESS)
 150   1        {        
 151   2         menu_state++;
 152   2         if(menu_state>2)menu_state=0;
 153   2        }   
 154   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    388    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   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 + -