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

📄 main.lst

📁 51写的一个定时时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MAIN                                                                  03/04/2001 18:19:09 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           #include<reg52.h>
   2          #include<LCD12864.H>
   3          
   4          /****定义按键接口**************/
   5          sbit Mode=P2^6;
   6          sbit Add=P2^7;
   7          sbit Dec=P1^5;
   8          sbit Ent=P1^6;
   9          sbit led1=P1^1; 
  10          sbit led2=P1^0;
  11          sbit led3=P1^4;
  12          sbit SPK=P1^3;
  13          
  14          unsigned char code para_month[13]={0,0,3,3,6,1,4,6,2,5,0,3,5};  //星期月参变数
  15          
  16          unsigned char cnt,counter,counter1;
  17           
  18          unsigned char id,id1,word;
  19          
  20          void Add_key1();
  21          void Set_time(unsigned char sel,bit sel_1);
  22          void Add_key2();
  23          void Set_bell(unsigned char sel,bit sel_1);
  24          bit leap_year();
  25          unsigned char week_proc();
  26          
  27          extern void Write_24c04( unsigned char add,unsigned char dat);
  28          extern unsigned char Read_24C04(unsigned char add);
  29          
  30          /*******************按键加一减一程序*******************/
  31          void Add_key1()
  32            {
  33   1          if(Add==0)
  34   1              {
  35   2                Delay12864(20);
  36   2                if(Add==0)
  37   2                { 
  38   3                  Set_time(id,0);
  39   3                      while(Add==0);
  40   3                      }
  41   2                }
  42   1          if(Dec==0)
  43   1              {
  44   2                 Delay12864(20);
  45   2                 if(Dec==0)
  46   2                 {
  47   3                   Set_time(id,1);
  48   3                      while(Dec==0);
  49   3                      }
  50   2                }
  51   1              }
  52          
  53           /***************设定时间**********/
  54          void Set_time(unsigned char sel, bit sel_1) //根据选择调整相应项目并写入DS1302
  55          {
C51 COMPILER V7.50   MAIN                                                                  03/04/2001 18:19:09 PAGE 2   

  56   1        if(sel==1){
  57   2             if(sel_1==0){year++;if(year>99)year=0;}
  58   2                  else { year--;if(year==0)year=99;}}
  59   1        if(sel==2){
  60   2             if(sel_1==0){month++;  if(month>12)month=1;}
  61   2             else {month--;if(month==0)month=12;}}
  62   1         if(sel==3){
  63   2             if(sel_1==0){date++;if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  64   3                                              if (date>31) date=1;                    //大月31天
  65   3                                      if (month==4||month==6||month==9||month==11)            
  66   3                                              if (date>30) date=1;                    //小月30天
  67   3                                      if (month==2)                   
  68   3                                              {if(leap_year())                                //闰年的条件
  69   4                                                      {if (date>29) date=1;}          //闰年2月为29天
  70   4                                               else
  71   4                                                      {if (date>28) date=1;}}
  72   3                                                      }               //平年2月为28天
  73   2              else {date--;if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
  74   3                                              if (date==0) date=31;                   //大月31天
  75   3                                      if (month==4||month==6||month==9||month==11)            
  76   3                                              if (date==1) date=30;                   //小月30天
  77   3                                      if (month==2)                   
  78   3                                              {if(leap_year())                                //闰年的条件
  79   4                                                      {if (date==0) date=29;}         //闰年2月为29天
  80   4                                               else
  81   4                                                      {if (date==0) date=28;}}        //平年2月为28天
  82   3                                                         }
  83   2                                                      }
  84   1               if(sel==4){
  85   2                      if(sel_1==0){week++;if(week>7)week=1;}
  86   2                              else{week--;if(week==0)week=7;}}
  87   1              if(sel==5){
  88   2                      if(sel_1==0){hour++;if(hour>23)hour=0;}
  89   2                              else{hour--;if(hour==0)hour=23;}}
  90   1              if(sel==6){
  91   2                      if(sel_1==0){min++;if(min>59)min=0;}
  92   2                              else{min--;if(min==0)min=59;}}
  93   1              if(sel==7){
  94   2                      if(sel_1==0){sec++;if(hour>59)sec=0;}
  95   2                              else{sec--;if(sec==0)sec=59;}}
  96   1       // write_clock(0x8e,0x00);//允许写操作
  97   1       // write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
  98   1       // write_clock(0x8e,0x80);//写保护,禁止写操作 
  99   1        } 
 100          /**************设定脑铃*******************/
 101          /*******************按键加一减一程序*******************/
 102          void Add_key2()
 103            {
 104   1          if(Add==0)
 105   1              {
 106   2                Delay12864(20);
 107   2                if(Add==0)
 108   2                { 
 109   3                  Set_bell(id1,0);
 110   3                      while(Add==0);
 111   3                      }
 112   2                }
 113   1          if(Dec==0)
 114   1              {
 115   2                 Delay12864(20);
 116   2                 if(Dec==0)
 117   2                 {
C51 COMPILER V7.50   MAIN                                                                  03/04/2001 18:19:09 PAGE 3   

 118   3                   Set_bell(id1,1);
 119   3                      while(Dec==0);
 120   3                      }
 121   2                }
 122   1              }
 123          
 124           /***************设定时间**********/
 125          void Set_Bell(unsigned char sel, bit sel_1)//根据选择调整相应项目并写入24 
 126          {
 127   1        signed char address,item;
 128   1        signed char max,mini;
 129   1        if(sel==7)  {address=0x0e; max=59;mini=0;}    //秒
 130   1        if(sel==6)  {address=0x0d; max=59;mini=0;}    //分
 131   1        if(sel==5)  {address=0x0c; max=23; mini=0;}   //时
 132   1        if(sel==4)  {address=0x0b; max=59;mini=0;}    //秒
 133   1        if(sel==3)  {address=0x0a; max=59;mini=0;}    //分
 134   1        if(sel==2)  {address=0x09; max=23; mini=0;}   //时
 135   1        if(sel==1)  
 136   1        {
 137   2        //    address=0x08;
 138   2              if(Add ==0 || Dec ==0)
 139   2              Bell_Swh=~Bell_Swh;
 140   2              Write_24c04(0x08,Bell_Swh);
 141   2        }    //开关
 142   1      
 143   1        item = Read_24C04(address);
 144   1        if(sel_1==0) 
 145   1              item++;  
 146   1        else
 147   1              item--;
 148   1        if(item>max) item=mini;   
 149   1        if(item<mini) item=max;
 150   1      
 151   1        Write_24c04(address,item);//写入24
 152   1      }
 153          
 154            //闰年的计算
 155          bit leap_year()
 156          {
 157   1              bit leap;
 158   1              if((year%4==0&&year%100!=0)||year%400==0)//闰年的条件
 159   1                      leap=1;
 160   1              else
 161   1                      leap=0;
 162   1              return leap;
 163   1      }
 164          
 165          //星期的自动运算和处理
 166          unsigned char week_proc()
 167          {       unsigned char num_leap; 
 168   1              unsigned char c;
 169   1              num_leap=year/4-year/100+year/400;//自00年起到year所经历的闰年数
 170   1              if( leap_year()&& month<=2 )      //既是闰年且是1月和2月        
 171   1                      c=5;
 172   1              else 
 173   1                      c=6;
 174   1              week=(year+para_month[month]+date+num_leap+c)%7;//计算对应的星期
 175   1              return week;
 176   1      }
 177          /******************做日期运算*****************/
 178          //时间和日期处理程序
 179          void pro_timedate()
C51 COMPILER V7.50   MAIN                                                                  03/04/2001 18:19:09 PAGE 4   

 180          {       
 181   1              sec++;
 182   1              if(sec > 59)
 183   1                      {sec = 0;
 184   2                       min++;
 185   2                       if(min>59)
 186   2                              {min=0;
 187   3                               hour++;
 188   3                               if(hour>23)
 189   3                                      {hour=0;
 190   4                                       date++;
 191   4                                       if (month==1||month==3||month==5||month==7||month==8||month==10||month==12)
 192   4                                               if (date>31) {date=1;month++;}                                 //大月31天
 193   4                                       if (month==4||month==6||month==9||month==11)           
 194   4                                               if (date>30) {date=1;month++;}                                 //小月30天
 195   4                                       if (month==2)                  
 196   4                                               {if( leap_year())                                                              //闰年的条件
 197   5                                                      {if (date>29) {date=1;month++;}}                        //闰年2月为29天
 198   5                                               else
 199   5                                                      {if (date>28) {date=1;month++;}}                        //平年2月为28天 
 200   5                                               }                              
 201   4                                       if (month>12) {month=1;year++;}
 202   4                                       if (year>99) year=0;
 203   4                                      }
 204   3                              }
 205   2                      }
 206   1              week_proc();
 207   1               Write_24c04( 0x01,0);
 208   1       Write_24c04( 0x02,year);
 209   1       Write_24c04( 0x03,month);
 210   1       Write_24c04( 0x04,date);
 211   1       Write_24c04( 0x05,hour);
 212   1       Write_24c04( 0x06,min);
 213   1       Write_24c04( 0x07,sec);
 214   1                                      //闹钟启用时,报警时间到,启动Timer1
 215   1      }
 216          /********定时器0。做时钟用*****************/
 217          void timer0() interrupt 1 using 0
 218          {
 219   1        TH0=0x3c;
 220   1        TL0=0xb2;
 221   1        cnt++;
 222   1      //      if((word==1)&&(Bell_Swh == 1))
 223   1      //      {
 224   1      //        TR1=0;
 225   1      //        }
 226   1        if(cnt==20)
 227   1         {
 228   2           led1^=1;
 229   2           cnt=0;
 230   2          pro_timedate();
 231   2          }
 232   1        }
 233          /********定时器0。做时钟用*****************/
 234          void timer1() interrupt 3 using 0
 235          {
 236   1              TH1=0x3c;                               
 237   1              TL1=0xb0;
 238   1              counter1++;

⌨️ 快捷键说明

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