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

📄 ds1302.lst

📁 DS1302.c 也是自己写的!带有proteus图!!!
💻 LST
字号:
C51 COMPILER V8.02   DS1302                                                                02/22/2009 12:09:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\Proteus_keil\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<uint.h>
   3          #include<delay.h>
   4          
   5          uchar ds_time[]={"Time:"};
   6          uchar ds_date[]={"Date:"};
   7          uchar week[]={"Week:"};
   8          uchar heng[]={"-"};
   9          uchar td[]={"0123456789"};
  10          uchar ten=0;
  11          
  12          sbit ds1302_rs=P2^0;
  13          sbit ds1302_clk=P2^1;
  14          sbit ds1302_dat=P2^2;
  15          sbit lcd_rs=P3^5;
  16          sbit lcd_rw=P3^6;
  17          sbit lcd_ep=P3^7;
  18          
  19          void write_ds1302_dat(uchar cmd)         //写入时钟一个字节
  20          {
  21   1                      uchar i;
  22   1                      for(i=0;i<8;i++)
  23   1                      {
  24   2                              cmd=cmd>>1;
  25   2                              ds1302_dat=CY;
  26   2                              ds1302_clk=1;
  27   2                              ds1302_clk=0;
  28   2                      }
  29   1      }
  30          
  31          uchar read_ds1302_dat(void)             //读时钟一个字节
  32          {
  33   1                      uchar i;
  34   1                      for(i=0;i<8;i++)
  35   1                      {
  36   2                              ACC=ACC>>1;
  37   2                              if(ds1302_dat)ACC=ACC|0x80;             
  38   2                              ds1302_clk = 1;
  39   2                              ds1302_clk= 0;          
  40   2                      }
  41   1                      ds1302_rs = 0;
  42   1                      return(ACC);
  43   1      }
  44          
  45          uchar read_ds1302(uchar ord1)   //读时钟
  46          {
  47   1                      uchar dd=0;  
  48   1                      ds1302_rs=0;
  49   1                      ds1302_clk=0;
  50   1                      ds1302_rs=1;
  51   1                      write_ds1302_dat(ord1);
  52   1                      dd=read_ds1302_dat();
  53   1                      ds1302_rs=0;
  54   1                      return(dd);
  55   1      }
C51 COMPILER V8.02   DS1302                                                                02/22/2009 12:09:52 PAGE 2   

  56          
  57          void write_ds1302(uchar ord2,uchar dd)  //写时钟
  58          {
  59   1                      ds1302_rs=0;
  60   1                      ds1302_clk=0;
  61   1                      ds1302_rs=1;
  62   1                      write_ds1302_dat(ord2);
  63   1                      write_ds1302_dat(dd);
  64   1                      ds1302_rs=0;
  65   1      }
  66          
  67          void inti_ds1302()
  68          {
  69   1               ds1302_rs=0;
  70   1               ds1302_clk=0;
  71   1               ds1302_dat=0;
  72   1      
  73   1      /*       write_ds1302(0x8e,0x00);       //打开写保护
  74   1               write_ds1302(0x80,0x23);        //启动时钟,并设置秒
  75   1               write_ds1302(0x82,0x43);        //分
  76   1               write_ds1302(0x84,0x15);         //时 
  77   1               write_ds1302(0x86,0x03);         //日
  78   1               write_ds1302(0x88,0x03);         //月
  79   1               write_ds1302(0x8a,0x02);         //星期
  80   1               write_ds1302(0x8c,0x10);         //年
  81   1               write_ds1302(0x90,0xa5);         //启动充电器
  82   1               write_ds1302(0x8e,0x80);         //关写保护            */
  83   1      }
  84          
  85          void lcd_enable()
  86          {
  87   1       lcd_rs=0;
  88   1       lcd_rw=0;
  89   1       lcd_ep=0;
  90   1       delay(4);
  91   1       lcd_ep=1;
  92   1      }
  93          
  94          void lcd_inti()
  95          {
  96   1       P1=0x3c;  //显示 模式设置   
  97   1       lcd_enable();
  98   1       P1=0x08;          //显示关闭(光标返回00地址)  
  99   1       lcd_enable();
 100   1       P1=0x01;          //清显示             
 101   1       lcd_enable();
 102   1        P1=0x06;         //显示光标移动设置   
 103   1       lcd_enable();
 104   1        P1=0x0c;         //开显示及光标设置  
 105   1       lcd_enable();
 106   1      }
 107          
 108          write_lcd(uchar x)
 109          {
 110   1       P1=x;
 111   1       lcd_rs=1;
 112   1       lcd_rw=0;
 113   1       lcd_ep=0;
 114   1       delay(4);
 115   1       lcd_ep=1;
 116   1      }
 117          
C51 COMPILER V8.02   DS1302                                                                02/22/2009 12:09:52 PAGE 3   

 118          void c_a_dp(uchar asd)
 119          {
 120   1       ten=0;ten=asd&0xf0;ten=ten>>4;asd=asd&0x0f;
 121   1       write_lcd(td[ten]);
 122   1       write_lcd(td[asd]);
 123   1      }
 124          
 125          void main()
 126          {
 127   1       uchar s=0,cou;
 128   1       P1=0x00;
 129   1       inti_ds1302();
 130   1       lcd_inti();
 131   1      
 132   1       do{P1=0x80;
 133   2       lcd_enable();
 134   2       s=read_ds1302(0x89);
 135   2       for(cou=0;cou<5;cou++)
 136   2       {write_lcd(ds_time[cou]);}
 137   2       
 138   2       s=read_ds1302(0x85);    //时
 139   2       c_a_dp(s);
 140   2        write_lcd(heng[0]);
 141   2       s=read_ds1302(0x83);     //分
 142   2       c_a_dp(s);
 143   2       write_lcd(heng[0]);
 144   2       s=read_ds1302(0x81);  //秒
 145   2       c_a_dp(s);               
 146   2      
 147   2       P1=0xc0;
 148   2       lcd_enable();
 149   2       for(cou=0;cou<5;cou++)
 150   2      {write_lcd(week[cou]);}
 151   2       s=read_ds1302(0x8b);      //星期
 152   2       write_lcd(td[s-1]);
 153   2      
 154   2       P1=0x90;
 155   2       lcd_enable();
 156   2       for(cou=0;cou<5;cou++)
 157   2       {write_lcd(ds_date[cou]);}
 158   2        s=read_ds1302(0x87);   //日
 159   2       c_a_dp(s);
 160   2        write_lcd(heng[0]);
 161   2       s=read_ds1302(0x89);     //月
 162   2       c_a_dp(s);
 163   2       write_lcd(heng[0]);
 164   2       s=read_ds1302(0x8d);     //年
 165   2       c_a_dp(s);     
 166   2      } while(1);
 167   1      
 168   1       
 169   1      }
 170          
 171          
 172          
 173          
 174          
 175          
 176          
 177          
 178          

C51 COMPILER V8.02   DS1302                                                                02/22/2009 12:09:52 PAGE 4   


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