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

📄 da1302.lst

📁 别人的C51菜单程序
💻 LST
字号:
C51 COMPILER V8.08   DA1302                                                                06/30/2007 15:23:46 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DA1302
OBJECT MODULE PLACED IN da1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE da1302.c LARGE OPTIMIZE(9,SPEED) DEBUG OBJECTEXTEND

line level    source

   1          #include <at89c51xd2.h>
   2          #include <intrins.h>
   3          #include "ds1302.h"
   4          #include "lm3228.h"
   5          #include "common.h"
   6          #include "ds1302_hanzi.h"
   7          
   8          sbit IO_DATA =P1^5;
   9          sbit CLK =P1^6;
  10          sbit RST =P1^7;
  11          
  12          uchar data time1[8];
  13          
  14          
  15          //从1302读取一个字节
  16          uchar read_1302(void)
  17          {
  18   1              uchar xdata i,data_1302;
  19   1              
  20   1              for(i=0;i<8;i++)
  21   1              {       
  22   2                      
  23   2                      data_1302>>=1;
  24   2                      if(IO_DATA)
  25   2                      {
  26   3                              data_1302|=0x80;
  27   3                      }
  28   2                      CLK=1;
  29   2                      //nop();
  30   2                      CLK=0;
  31   2              }
  32   1              return(data_1302);
  33   1      }
  34          //向1302写入一个字节
  35          void write_1302(uchar data_1302)
  36          {
  37   1              uchar xdata i;
  38   1              
  39   1              for(i=0;i<8;i++)
  40   1              {
  41   2                      
  42   2                      data_1302>>=1;
  43   2                      IO_DATA=CY;
  44   2                      CLK=0;
  45   2                      //nop();
  46   2                      CLK=1;
  47   2                      //nop();
  48   2                      CLK=0;
  49   2              }
  50   1              
  51   1      }
  52          //从1302的某地址读一个字节的数据
  53          /*uchar read_byte_1302(uchar addr)
  54          {
  55                  uchar data data_1302;
C51 COMPILER V8.08   DA1302                                                                06/30/2007 15:23:46 PAGE 2   

  56                  RST=0;
  57                  CLK=0;
  58                  RST=1;
  59                  write_1302(addr|0x01);
  60                  data_1302=read_1302();
  61                  CLK=1;
  62                  RST=0;
  63                  CLK=0;
  64                  return (data_1302);
  65          }*/
  66          //向1302的某地址写入一个字节的数据
  67          void write_byte_1302(uchar addr,uchar data_1302)
  68          {
  69   1              RST=0;
  70   1              CLK=0;
  71   1              RST=1;
  72   1              write_1302(addr);
  73   1              write_1302(data_1302);
  74   1              CLK=1;
  75   1              RST=0;
  76   1              CLK=0;
  77   1      }
  78          //是否写保护
  79          void protect_1302(bit flag)
  80          {
  81   1              if(flag)
  82   1                      write_byte_1302(DS1302_CONTROL,0x80);
  83   1              else
  84   1                      write_byte_1302(DS1302_CONTROL,0x00);
  85   1      }
  86          
  87          //停止1302时钟
  88          /*void stop_1302(void)
  89          {
  90                  write_byte_1302(DS1302_SECOND,0x80);
  91          }*/
  92          //启动1302时钟
  93          void start_1302(void)
  94          {
  95   1              write_byte_1302(DS1302_SECOND,0x00);
  96   1      }
  97          
  98          //读1302的时间序列
  99          void read_data(uchar *j)
 100          {
 101   1              uchar xdata i;
 102   1              RST=0;
 103   1              CLK=0;
 104   1              RST=1;
 105   1              write_1302(0xbf);
 106   1              for(i=0;i<8;i++)
 107   1              {
 108   2                      *(j)=read_1302();
 109   2                      j++;
 110   2                      
 111   2              }
 112   1              CLK=1;
 113   1              RST=0;
 114   1              CLK=0;
 115   1      }
 116          //写1302的时间序列
 117          void write_data(uchar *j)
C51 COMPILER V8.08   DA1302                                                                06/30/2007 15:23:46 PAGE 3   

 118          {
 119   1              uchar xdata i;
 120   1              RST=0;
 121   1              CLK=0;
 122   1              RST=1;
 123   1              write_1302(0xbe);
 124   1              for(i=0;i<8;i++)                                                 
 125   1              {
 126   2                      write_1302(*j);
 127   2                      j++;
 128   2              }
 129   1              CLK=1;
 130   1              RST=0;
 131   1              CLK=0;
 132   1      }       
 133          //显示时间
 134          void display_time(uchar lowaddr,uchar highaddr)
 135          {
 136   1      
 137   1                      read_data(time1);                                                                                       //读时间
 138   1      
 139   1                      if(time1[2]&0x80)                                                                                       //如果成立,即12小时制,否则24小时制
 140   1                      {                                                                                                                       //显示小时
 141   2                              if(time1[2]&0x20)                                                                               //如果成立,即下午,否则上午
 142   2                              {
 143   3                                      string_display_code(1,&time2[12],lowaddr+0x09,highaddr);
 144   3                                      string_display_code(1,&time2[13],lowaddr+0x0a,highaddr);
 145   3                                      if(time1[2]&0x10)                                                                       //下午
 146   3                                      {
 147   4                                              string_display_code(1,&time2[(time1[2]&0x10)>>4],lowaddr+0x00,highaddr);
 148   4                                              string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 149   4                                      }
 150   3                                      else
 151   3                                      {
 152   4                                              string_display_code(1,&time2[14],lowaddr+0x00,highaddr);
 153   4                                              string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 154   4                                      }
 155   3                              }
 156   2                              else                                                                                                            //上午
 157   2                              {
 158   3                                      string_display_code(1,&time2[11],lowaddr+0x09,highaddr);
 159   3                                      string_display_code(1,&time2[13],lowaddr+0x0a,highaddr);
 160   3                                        if(time1[2]&0x10)
 161   3                                      {
 162   4                                              string_display_code(1,&time2[(time1[2]&0x10)>>4],lowaddr+0x00,highaddr);
 163   4                                              string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 164   4      
 165   4                                      }
 166   3                                      else
 167   3                                      {
 168   4                                              string_display_code(1,&time2[14],lowaddr+0x00,highaddr);                                        
 169   4                                              string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 170   4                                      }
 171   3                              }
 172   2                      }
 173   1                       else                                                                                                                   //24小时制
 174   1                       {
 175   2                              if(time1[2]&0x30)
 176   2                              {
 177   3                                      string_display_code(1,&time2[(time1[2]&0x30)>>4],lowaddr+0x00,highaddr);
 178   3                                      string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 179   3                              }
C51 COMPILER V8.08   DA1302                                                                06/30/2007 15:23:46 PAGE 4   

 180   2                              else
 181   2                              {
 182   3                                      string_display_code(1,&time2[14],lowaddr+0x00,highaddr);
 183   3                                      string_display_code(1,&time2[time1[2]&0x0f],lowaddr+0x01,highaddr);
 184   3                              }
 185   2                      }                               
 186   1                      string_display_code(1,&time2[10],lowaddr+0x02,highaddr);                                                                //显示:
 187   1      
 188   1                      string_display_code(1,&(time2[(time1[1]&0x70)>>4]),lowaddr+0x03,highaddr);                              //显示分钟
 189   1                      string_display_code(1,&time2[time1[1]&0x0f],lowaddr+0x04,highaddr);
 190   1                      
 191   1      
 192   1      
 193   1                      string_display_code(1,&time2[10],lowaddr+0x05,highaddr);                                                                //显示:
 194   1      
 195   1      
 196   1                      string_display_code(1,&(time2[(time1[0]&0x70)>>4]),lowaddr+0x06,highaddr);                              //显示秒
 197   1                      string_display_code(1,&time2[time1[0]&0x0f],lowaddr+0x07,highaddr);
 198   1      
 199   1      }
 200          //设置时间
 201          void set_time(uchar *time)
 202          {
 203   1              protect_1302(0);                                                                                                                //清除写保护
 204   1                                                                                                                                                              //写预设时间
 205   1              write_data(time);
 206   1              
 207   1              start_1302();                                                                                                                    //启动1302
 208   1      
 209   1              protect_1302(1);                                                                                                                  //开启写保护
 210   1      }
 211          
 212          
 213           //显示星期
 214          void display_week(uchar lowaddr,uchar highaddr)
 215          {
 216   1              uchar xdata i;
 217   1              hanzi_display(hanzi3,sizeof(hanzi3),lowaddr,highaddr);                            //显示“星期”
 218   1              read_data(time1);
 219   1              i=time1[5];                                                       //显示星期几
 220   1              hanzi_display(&hanzi4[(i-2)*32],32,lowaddr+0x4,highaddr);                                //sizeof(hanzi4[i])
 221   1      }                                                                                                                                                                  
 222          //显示“现在时间”
 223          void display_currenttime(uchar lowaddr,uchar highaddr)
 224          {
 225   1              hanzi_display(hanzi2,sizeof(hanzi2),lowaddr,highaddr);
 226   1      }
 227          //
 228          void display_year(uchar lowaddr,uchar highaddr)
 229          {
 230   1              read_data(time1);
 231   1              set_point(SET_ADDRESS_POINTER,lowaddr,highaddr);
 232   1              string_display_code(1,&time2[(time1[6]>>4&0x0f)],lowaddr,highaddr);
 233   1              string_display_code(1,&time2[time1[6]&0x0f],lowaddr+0x01,highaddr);              //年
 234   1              text_display('-');
 235   1              string_display_code(1,&time2[time1[4]>>4&0x01],lowaddr+0x03,highaddr);
 236   1              string_display_code(1,&time2[time1[4]&0x0f],lowaddr+0x04,highaddr);       //月
 237   1              text_display('-');
 238   1              string_display_code(1,&time2[time1[3]>>4&0x03],lowaddr+0x06,highaddr);
 239   1              string_display_code(1,&time2[time1[3]&0x0f],lowaddr+0x07,highaddr);                //日
 240   1      }
 241          void time_display(void)
C51 COMPILER V8.08   DA1302                                                                06/30/2007 15:23:46 PAGE 5   

 242          {
 243   1              display_currenttime(0x00,0x08);
 244   1              display_year(0x28,0x31);
 245   1              display_week(0x10,0x08);
 246   1              display_time(0x38,0x31);
 247   1      }
 248          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    729    ----
   CONSTANT SIZE    =    431    ----
   XDATA SIZE       =   ----       6
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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