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

📄 1302.lst

📁 自制的 DS1820+51+1602 测量温度的程序 同样适合初学者 了解和掌握51单片机学西
💻 LST
字号:
C51 COMPILER V8.02   1302                                                                  08/23/2007 20:11:14 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 1302
OBJECT MODULE PLACED IN 1302.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include "1302.h"
   3          #include "1602.h"
   4          
   5          //#define     uchar        unsigned char
   6          //#define     uint         unsigned int
   7          
   8          uchar clk_time[]={0x30,0x56,0x19,0x16,0x08,0x04,0x07};  //秒,分,时,天,月,星期,年寄存器初始值      
   9          uchar sec0,sec1,min0,min1,hr0,hr1,date0,date1,mon0,mon1,week,year0,year1;
  10          
  11          /******************DS1302:写入操作(上升沿)*********************/ 
  12          void write_byte(unsigned char da)
  13          {
  14   1         unsigned char i;
  15   1         ACC=da;
  16   1         for(i=8;i>0;i--)
  17   1         { 
  18   2            T_IO=ACC0;
  19   2            T_CLK=0;     
  20   2            T_CLK=1;
  21   2            ACC=ACC>>1;
  22   2         }
  23   1      }
  24          
  25          /*******************DS1302:读取操作(下降沿)******************/
  26          unsigned char read_byte(void)
  27          {
  28   1         unsigned char i;
  29   1         for(i=0;i<8;i++)
  30   1         {
  31   2            ACC=ACC>>1;
  32   2                T_CLK = 1;
  33   2                T_CLK = 0;
  34   2            ACC7 = T_IO;
  35   2         }
  36   1         return(ACC);
  37   1      }
  38          
  39          /******************DS1302:写入数据(先送地址,再写数据)***************************/ 
  40          void write_1302(unsigned char addr,unsigned char da)
  41          {
  42   1         T_RST=0;    //停止工作
  43   1         T_CLK=0;                                 
  44   1         T_RST=1;   //重新工作
  45   1         write_byte(addr);    //写入地址
  46   1         
  47   1         write_byte(da);
  48   1         T_RST=0;
  49   1         T_CLK=1;
  50   1      }
  51          
  52          /******************DS1302:读取数据(先送地址,再读数据)**************************/
  53          unsigned char read_1302(unsigned char addr)
  54          {
  55   1         unsigned char temp;
C51 COMPILER V8.02   1302                                                                  08/23/2007 20:11:14 PAGE 2   

  56   1         T_RST=0;                                   //停止工作
  57   1         T_CLK=0;  
  58   1         T_RST=1;                         //重新工作
  59   1         write_byte(addr);   //写入地址
  60   1         temp=read_byte();
  61   1         T_RST=0;
  62   1         T_CLK=1;     //停止工作
  63   1         return(temp);
  64   1      }
  65          
  66          /******************************DS1302写时间子程序*************************/
  67          void  WriteTime()
  68          {       
  69   1              uchar i;
  70   1              uchar  temp=0x80;                   //DS1302秒的写寄存器地址 0x80
  71   1              for(i=0;i<7;i++)
  72   1         {
  73   2                write_1302(temp,clk_time[i]);
  74   2            temp+=2;                                           
  75   2         }
  76   1      
  77   1      }
  78          
  79          
  80          /*********************************DS1302读时间子程序*********************/
  81          void  ReadTime()
  82          {       
  83   1              uchar i;
  84   1              uchar  temp=0x81;                  //DS1302秒的写寄存器地址 0x81  
  85   1              for(i=0;i<7;i++) 
  86   1              {                  
  87   2                  clk_time[i]=read_1302(temp);
  88   2                      temp+=2;
  89   2              }
  90   1      
  91   1      }
  92          
  93          /******************************初始化显示时间****************************************/
  94          void  DisplayInit() 
  95          {
  96   1       Show(1,1,2+48);
  97   1              Show(2,1,48);
  98   1              
  99   1              year1=(clk_time[6]&0xF0)>>4;    //读 年 的高位
 100   1              Show(3,1,year1+48);                // 显示
 101   1              year0=clk_time[6]&0x0F;            // 读年的低位
 102   1              Show(4,1,year0+48);                        //显示       
 103   1              
 104   1              
 105   1              Show(5,1,'-');                             //显示‘-’
 106   1              
 107   1              week=clk_time[5]&0x07;         //显示星期
 108   1              
 109   1              mon1=(clk_time[4]&0x10)>>4;              //月
 110   1              Show(6,1,mon1+48);
 111   1              mon0=clk_time[4]&0x0F;
 112   1              Show(7,1,mon0+48);
 113   1                 
 114   1              Show(8,1,'-');                            
 115   1              
 116   1              date1=(clk_time[3]&0x30)>>4;     //天
 117   1              Show(9,1,date1+48);
C51 COMPILER V8.02   1302                                                                  08/23/2007 20:11:14 PAGE 3   

 118   1              date0=clk_time[3]&0x0F;
 119   1              Show(10,1,date0+48); 
 120   1              
 121   1              Show(11,1,'-');
 122   1              
 123   1              Display(12,1,"Thu");                
 124   1              
 125   1              hr1=(clk_time[2]&0x30)>>4;                //时
 126   1              Show(1,2,hr1+48); 
 127   1              hr0=clk_time[2]&0x0F;           
 128   1              Show(2,2,hr0+48);
 129   1              
 130   1              Show(3,2,':');
 131   1              
 132   1              min1=(clk_time[1]&0x70)>>4;                //分
 133   1              Show(4,2,min1+48);
 134   1              min0=clk_time[1]&0x0F;
 135   1              Show(5,2,min0+48);
 136   1              
 137   1              Show(6,2,':');
 138   1              
 139   1              sec1=(clk_time[0]&0x70)>>4;                //秒
 140   1              Show(7,2,sec1+48);
 141   1              sec0=clk_time[0]&0x0F;
 142   1              Show(8,2,sec0+48);    
 143   1      }
 144          
 145          /*******************************时间判断自加函数**********************************/
 146          void Judgetime()
 147          {
 148   1          if(sec0==0&&sec1==0)                 //判断如果秒都为0则分加一显示
 149   1                      {
 150   2                              min1=(clk_time[1]&0x70)>>4;
 151   2                              Show(4,2,min1+48);
 152   2                              min0=clk_time[1]&0x0F;
 153   2                              Show(5,2,min0+48);
 154   2                      //      P21=0;
 155   2      
 156   2                      }
 157   1                      if(min0==0&&min1==0)       //判断如果分都为0则时加一显示
 158   1                      {
 159   2                              min1=1;  //让min1为别的值 
 160   2                              hr1=(clk_time[2]&0x30)>>4;
 161   2                              Show(1,2,hr1+48); 
 162   2                              hr0=clk_time[2]&0x0F;           
 163   2                              Show(2,2,hr0+48);
 164   2                      } 
 165   1                      if(hr0==0&&hr1==0)                       //判断如果时都为0则天加一显示
 166   1                      {
 167   2                              hr0=1;   //date让为别的值
 168   2                              date1=(clk_time[3]&0x30)>>4;    
 169   2                              Show(9,1,date1+48);
 170   2                              date0=clk_time[3]&0x0F;
 171   2                              Show(10,1,date0+48);
 172   2                      switch (clk_time[5])          //同时显示星期
 173   2                      {
 174   3                              case 1: Display(12,1,"Mon"); break;
 175   3                              case 2: Display(12,1,"Tue"); break;
 176   3                              case 3: Display(12,1,"Wen"); break;
 177   3                              case 4: Display(12,1,"Thu"); break;
 178   3                              case 5: Display(12,1,"Fri"); break;
 179   3                              case 6: Display(12,1,"Sat"); break;
C51 COMPILER V8.02   1302                                                                  08/23/2007 20:11:14 PAGE 4   

 180   3                              case 7: Display(12,1,"Sun"); break;
 181   3                              default:break;
 182   3                      
 183   3                      }
 184   2                      
 185   2                      }
 186   1              if(date1==0&&date0==1)             //判断如果天都为01则月加一显示
 187   1                      {
 188   2                              date0=0;         //date让为别的值
 189   2                              mon1=(clk_time[4]&0x10)>>4;     
 190   2                              Show(6,1,mon1+48);
 191   2                              mon0=clk_time[4]&0x0F;
 192   2                              Show(7,1,mon0+48);
 193   2                      }                 
 194   1                 
 195   1                 if(mon1==0&&mon0==1)             //判断如果月为01则年加一显示
 196   1                      {
 197   2                              mon0=0;  //让为别的值
 198   2                              year1=(clk_time[6]&0xF0)>>4;    
 199   2                              Show(3,1,year1+48);
 200   2                              year0=clk_time[6]&0x0F;
 201   2                              Show(4,1,year0+48);
 202   2                      }                 
 203   1      }         
 204          
 205          
 206          
 207          void sec()
 208          { 
 209   1              sec1=(clk_time[0]&0x70)>>4;
 210   1                      Show(7,2,sec1+48);
 211   1                      sec0=clk_time[0]&0x0F;
 212   1                      Show(8,2,sec0+48);      
 213   1      }


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