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

📄 timer.lst

📁 8051单片机对八位LED显示芯片以及温度传感器芯片DS1620的驱动程序。
💻 LST
字号:
C51 COMPILER V7.06   TIMER                                                                 08/04/2008 00:24:37 PAGE 1   


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

stmt level    source

   1          /**********************************************
   2          *   File: Timer.C
   3          *   Description: Timer Function  
   4          *   Created Date:  2007-10-01
   5          *   Last Modified: 2007-10-01
   6          *   Author: Jeffrey - Schicksal@126.com
   7          *   Notes: None
   8          **********************************************/
   9          //#include "Atmel/AT89X51.h"
  10          #include "SST/SST89x5x4.H"
  11          #include "INTRINS.H"
  12          #include "timer.h"
  13          #include "MAX7219.h"
  14          #include "DS1620.h"
  15          #include "keys.h"
  16          
  17          #define TH0_VALUE 0x06
  18          #define TL0_VALUE 0x00
  19          
  20          unsigned int timer_tick;
  21          unsigned int timer_tick_500ms;
  22          
  23          /**********************************************
  24          *   Function: TIMER_Init
  25          *   Input Variables: None
  26          *   Return Variables: None
  27          *   Usage: T0 Initialization
  28          *********************************************/
  29          void TIMER_Init(void)
  30          {
  31   1              
  32   1              ET0 = 0;                                        // 关闭T0的中断
  33   1              TMOD = 0x00;                    // T0工作在模式0
  34   1              TCON = 0x00;                    // 暂时未启动T0
  35   1              TL0 = TL0_VALUE;
  36   1              TH0 = TH0_VALUE;        // 产生2ms中断 |24 MHz 晶振
  37   1              ET0 = 1;                                  // 打开T2的中断
  38   1      
  39   1              timer_tick = 0;
  40   1              timer_tick_500ms = 0;
  41   1      }
  42          
  43          /**********************************************
  44          *               Function: timer0_interrupt
  45          *         Input Variables: None
  46          *   Return Variables: None
  47          *   Usage: TIMER_Interrupt Service Routine 
  48          *********************************************/
  49          void timer0_interrupt(void) interrupt 5 using 1 
  50          {                 
  51   1              EA = 0;                                                                                           // 关全局中断
  52   1              TF0 = 0;                                                                                                // 清中断标志
  53   1              
  54   1              timer_tick++;                                                                           // 2ms
  55   1      
C51 COMPILER V7.06   TIMER                                                                 08/04/2008 00:24:37 PAGE 2   

  56   1              if ( timer_tick == 250 )                        // 1s = 2ms X 500
  57   1              {
  58   2                              timer_tick_500ms += 1;                                  // 秒计数增1
  59   2                              timer_tick = 0;                                                 // 2ms计数清零
  60   2              }
  61   1              
  62   1              TL0 = TL0_VALUE;                                                                // T0初值装载
  63   1              TH0 = TH0_VALUE;                                                                // 产生2ms中断 |24 MHz 晶振
  64   1        EA = 1;                                                                                                       // 开中断
  65   1      }
  66          
  67          /**********************************************
  68          *               Function: TIMER_Start
  69          *         Input Variables: None
  70          *   Return Variables: None
  71          *   Usage: Start T0 
  72          *********************************************/
  73          void TIMER_Start()
  74          {
  75   1              TR0 = 1;                                // 启动T0
  76   1      }
  77          
  78          
  79          volatile unsigned char time[4]={12,0,0,0};
  80          volatile unsigned char alarm[2]={7,0};
  81          
  82          extern volatile unsigned char flag;
  83          extern volatile unsigned char alarm_flag;
  84          extern volatile unsigned char change_timeflag;
  85          extern volatile unsigned char change_adjustflag;
  86          
  87          /**********************************************
  88          *Function: void Display_Time()
  89          * Input Variables: None
  90          *   Return Variables: None
  91          *   Usage: Display Time
  92          *********************************************/
  93          void Display_Time()
  94          {
  95   1              unsigned char data_dp[6]        ;
  96   1              unsigned char i;
  97   1              if(timer_tick_500ms>0)
  98   1              {
  99   2      
 100   2                        time[3]++;
 101   2                        
 102   2                        if (time[1]==0xff)
 103   2                        {
 104   3                          time[1]=59;
 105   3                        }
 106   2      
 107   2                        if (time[0]==0xff)
 108   2                        {
 109   3                          time[0]=23;
 110   3                        }
 111   2      
 112   2                        if (time[3]>1)
 113   2                        {
 114   3                          time[3]=0;
 115   3                          time[2]++;
 116   3                        }
 117   2      
C51 COMPILER V7.06   TIMER                                                                 08/04/2008 00:24:37 PAGE 3   

 118   2                        if (time[2]>=60)
 119   2                        { 
 120   3                          time[2]-=60;
 121   3                          time[1]++;
 122   3                        }
 123   2                        if (time[1]>=60)
 124   2                        { 
 125   3                          time[1]-=60;
 126   3                          time[0]++;
 127   3                        }
 128   2                        if (time[0]>=24)
 129   2                          time[0]-=24;  
 130   2      
 131   2                if (change_adjustflag==0)              // 显示时钟 
 132   2                {
 133   3                  for (i=0;i<4;i+=2)
 134   3                  {
 135   4                              data_dp[i]=time[i/2]/10;
 136   4                              data_dp[i+1]=time[i/2]%10;
 137   4                  }
 138   3                              data_dp[2]=data_dp[2]|(1<<7);
 139   3                              data_dp[3]=data_dp[3]|(1<<7);
 140   3                  if (change_timeflag==0) 
 141   3                  {
 142   4                    if (time[2]%2==1)
 143   4                    {
 144   5                      data_dp[2]=data_dp[2]-0x80;
 145   5                      data_dp[3]=data_dp[3]-0x80;
 146   5                     }
 147   4                  }
 148   3                  else
 149   3                  {
 150   4                    if (change_timeflag==1)
 151   4                    {
 152   5                      // 正在修改小时
 153   5                      if (time[3]==0)
 154   5                      {
 155   6                        data_dp[0]=0x0f;
 156   6                        data_dp[1]=0x0f;
 157   6                      }
 158   5                    }
 159   4                    else
 160   4                    {
 161   5                      // 正在修改分钟
 162   5                      if (time[3]==0)
 163   5                      {
 164   6                        data_dp[2]=0x8f;
 165   6                        data_dp[3]=0x8f;
 166   6                      }
 167   5                    }
 168   4                  }  
 169   3                }
 170   2                else                  // 修改闹表
 171   2                {
 172   3                  if (alarm_flag==0)  // 没有闹表
 173   3                  {
 174   4                    for (i=0;i<4;i++)
 175   4                      data_dp[i]=0x0a;
 176   4                    if (time[2]%2==0)
 177   4                    {
 178   5                      data_dp[2]=data_dp[2]|(1<<7);
 179   5                      data_dp[3]=data_dp[3]|(1<<7);
C51 COMPILER V7.06   TIMER                                                                 08/04/2008 00:24:37 PAGE 4   

 180   5                    }
 181   4                  }
 182   3                  else                // 有闹表
 183   3                  {
 184   4                    for (i=0;i<4;i+=2)
 185   4                    {
 186   5                      data_dp[i]=alarm[i/2]/10;
 187   5                      data_dp[i+1]=alarm[i/2]%10;
 188   5                    }
 189   4                    data_dp[2]=data_dp[2]|(1<<7);
 190   4                    data_dp[3]=data_dp[3]|(1<<7);
 191   4                    if (change_timeflag==0)
 192   4                    {
 193   5                      if (time[2]%2==1)
 194   5                      {
 195   6                        data_dp[2]=data_dp[2]-0x80;
 196   6                        data_dp[3]=data_dp[3]-0x80;
 197   6                       }
 198   5                    }
 199   4                    else
 200   4                    {
 201   5                      if (change_timeflag==1)
 202   5                      {
 203   6                        // 正在修改小时
 204   6                        if (time[3]==0)
 205   6                        {
 206   7                          data_dp[0]=0x0f;
 207   7                          data_dp[1]=0x0f;
 208   7                        }
 209   6                      }
 210   5                      else
 211   5                      {
 212   6                        // 正在修改分钟
 213   6                        if (time[3]==0)
 214   6                        {
 215   7                          data_dp[2]=0x8f;
 216   7                          data_dp[3]=0x8f;
 217   7                        }
 218   6                      }
 219   5                    }
 220   4                  }
 221   3                }
 222   2                for (i=0;i<4;i++)
 223   2                  write_7219(i+1,data_dp[i]);
 224   2              
 225   2                      timer_tick_500ms=0;                                     // 清500ms计数
 226   2              }
 227   1      }
 228          
 229          
 230          /**********************************************
 231          *Function: void Check_Alarm()
 232          * Input Variables: None
 233          *   Return Variables: None
 234          *   Usage: Display Time
 235          *********************************************/
 236          void Check_Alarm()
 237          {
 238   1        if ((time[0]==alarm[0]) && (time[1]==alarm[1]) && (alarm_flag==1) && (change_adjustflag==0))
 239   1        { 
 240   2          SetBuzzer(0x00);   // 闹铃响
 241   2        }
C51 COMPILER V7.06   TIMER                                                                 08/04/2008 00:24:37 PAGE 5   

 242   1      }
 243          
 244          
 245          
 246          
 247          


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