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

📄 clk.lst

📁 基于51单片机的多功能数字钟。时间
💻 LST
字号:
C51 COMPILER V7.07   CLK                                                                   05/30/2006 18:51:26 PAGE 1   


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

stmt level    source

   1          #include<reg51.h>
   2          
   3          #define IIC_WRITE       0xa0                                    //24C04 EEPROM 写命令和读命令
   4          #define IIC_READ        0xa1
   5          
   6          sbit  P10=P1^0;
   7          sbit  P11=P1^1;
   8          sbit  P12=P1^2;
   9          sbit  P13=P1^3;
  10          sbit  P14=P1^4;
  11          sbit  P15=P1^5;
  12          
  13          sbit    SCL=P1^6;
  14          sbit    SDA=P1^7;
  15          
  16          sbit  key0=P0^0;
  17          sbit  key1=P0^1;
  18          sbit  key2=P0^2;
  19          sbit  key3=P0^3;
  20          sbit  key4=P0^4;
  21          
  22          unsigned char led_mask=0xff,mask_temp,led_num=0;
  23            //led_mask 用低六位作led标志位//led_num 闪烁间隔的中断次数       
  24          unsigned char   key0_mark=0,key1_mark=0,key2_mark=0,key3_mark=0;                //每个按键的标识
  25          unsigned int    key0_count=0,key1_count=0,key2_count=0,key3_count=0;    //每键按下 间隔的中断数
  26          unsigned int    temp_count0=0,music_count=0;
  27          
  28          bit  ph=1,flash=0,clk_begin=0,clk_off=0,agenda_begin=0;
  29          bit     wr_mark=0,clk_save=0;
  30          
  31          unsigned char error=0;
  32          
  33          unsigned int  n=0;
  34          unsigned char sec=0,min=0,h=0,year=06,mon=05,day=24;
  35          unsigned char idata led=0,led_buf[6],buf[6];                                                                                            
  36          unsigned char idata     clk1_h=12,clk1_m=00,clk1_num=1,clk1_music=1,            //闹钟和议程
  37                                          clk2_h=24,clk2_m=30,clk2_num=2,clk2_music=2,
  38                                          agenda_year=06,agenda_mon=01,agenda_day=0,agenda_h=8,agenda_num=3;
  39          unsigned char   music=0;
  40          
  41          code unsigned char led_map[]={0x3F,0x06,0x5B,0x4F,0x66,
  42             0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x73 };
  43          code unsigned char mon_day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};   //闰年与非闰年
  44          code unsigned char mon_day1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
  45          //延时,主要用于IIC程序
  46          void delay(unsigned int n)
  47          {
  48   1              unsigned int i;
  49   1              for (i=n;i>0;i--) {}
  50   1      }
  51           
  52          time0() interrupt 1        using 0
  53          {                                           //T0计时器中断程序    //对时分秒针计数
  54   1              n++;
  55   1              if(n>=5002)                                                             //5000次为1秒,5002为矫误差
C51 COMPILER V7.07   CLK                                                                   05/30/2006 18:51:26 PAGE 2   

  56   1          {   
  57   2                      sec++;
  58   2              n=0;
  59   2              }
  60   1          if(sec>=60)
  61   1          {
  62   2                      min++;
  63   2              sec=0;
  64   2                      clk_begin=0;                                            //闹铃最长1 分钟
  65   2                      clk_off=0;
  66   2                      wr_mark=1;
  67   2              }
  68   1      
  69   1          if(min>=60)
  70   1          {
  71   2                      h++;
  72   2              min=0;
  73   2                      agenda_begin=0;       //隔一小时查agenda;
  74   2              }
  75   1          if(h>=24)
  76   1          {
  77   2                      h=0;
  78   2              day++;
  79   2                      if(year%4==0)
  80   2                      {
  81   3                              if(day>mon_day1[mon])   
  82   3                              {
  83   4                                      day=1;
  84   4                                      mon++;
  85   4                                      if(mon>12)
  86   4                                      {
  87   5                                              mon=1;
  88   5                                              year++;
  89   5                                      }
  90   4                              }
  91   3                      }
  92   2                      else if (day>mon_day[mon])
  93   2                      {
  94   3                              day=1;
  95   3                              mon++;
  96   3                              if(mon>12)      
  97   3                              {
  98   4                                      mon=1;
  99   4                                      year++;
 100   4                      }   
 101   3                      }  
 102   2          }   
 103   1      }
 104          
 105          t1display() interrupt 3   using 1                                 //显示数码管
 106          {                                                                                          
 107   1               
 108   1          TH1=0xf0;                                                                           // 1/24显示  4ms中断
 109   1          TL1=0X5f;
 110   1      
 111   1              if((key3==0)&&(key0_mark!=0)&&(key0_mark!=1))
 112   1              {
 113   2                      P2=led_buf[led]|0x80;
 114   2              }
 115   1              else    P2=led_buf[led]; 
 116   1              led_num++;
 117   1      
C51 COMPILER V7.07   CLK                                                                   05/30/2006 18:51:26 PAGE 3   

 118   1              switch (led)
 119   1              {
 120   2              case 0:
 121   2                              P15=0;
 122   2                              P10=1;
 123   2                      break;
 124   2              case 1:
 125   2                              P10=0;
 126   2                  P11=1;
 127   2                      break;
 128   2              case 2:
 129   2                              P11=0;
 130   2                      P12=1;
 131   2                      break;
 132   2              case 3:
 133   2                              P12=0;
 134   2                  P13=1;
 135   2                      break;
 136   2          case 4:
 137   2                              P13=0;
 138   2                  P14=1;
 139   2                      break;
 140   2          case 5:
 141   2                              P14=0;
 142   2                  P15=1;
 143   2                      break;
 144   2              default:
 145   2                  break;
 146   2              }
 147   1              
 148   1      
 149   1              if(led_num<=125&&flash)                                         //闪烁once each 1s 
 150   1                      P1=P1&led_mask;         
 151   1              if(led_num>125) 
 152   1              {
 153   2                      led_num=0; 
 154   2                      flash=~flash;
 155   2              }                                                                                       
 156   1      //-----------------------------------查询闹钟
 157   1              if(clk1_h==h&&clk1_m==min&&clk_off==0)  
 158   1                      clk_begin=1;
 159   1      
 160   1              if(clk2_h==h&&clk2_m==min&&clk_off==0)
 161   1                      clk_begin=1;    
 162   1      
 163   1              if(agenda_year==year&&agenda_mon==mon&&agenda_day==day&&agenda_h==h&&agenda_begin==0&&clk_off==0)       //隔一

⌨️ 快捷键说明

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