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

📄 ds1302.lst

📁 在Keil环境下
💻 LST
字号:
C51 COMPILER V8.02   DS1302                                                                10/27/2008 20:53:15 PAGE 1   


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

line level    source

   1          /*作者:史叔伍
   2          完成日期:2008-10-27
   3          */
   4          #include<reg52.h>
   5          #define uint unsigned int
   6          #define uchar unsigned char
   7          sbit SCLK=P3^3;
   8          sbit IO=P3^4;
   9          sbit RST=P3^5;
  10          sbit BIT7=ACC^7;  //将数据放入ACC便于位寻址,如果用变量没法位寻址
  11          sbit BIT0=ACC^0;
  12          uchar code table[]=
  13          {0x3f,0x06,0x5b,0x4f,0x66,
  14          0x6d,0x7d,0x07,0x7f,0x6f};
  15          uchar curtime[7];
  16          uchar pda[7];
  17          
  18          /*延时程序*/
  19          void delay(uint z)
  20          {
  21   1              uint x,y;
  22   1              for(x=z;x>0;x--)
  23   1                      for(y=110;y>0;y--);
  24   1      }
  25          
  26          /*八位数据写入*/
  27          void writebyte(uchar dat)
  28          {
  29   1          uchar i;
  30   1              ACC=dat;//将要写入的数放入ACC
  31   1              RST=1;  //启动数据传送
  32   1              for(i=8;i>0;i--)//循环八次,写入八位数据,从低位到高位
  33   1              {
  34   2                  IO=BIT0; //将ACC^0的值赋给时钟数据线
  35   2                      SCLK=0;
  36   2                      SCLK=1; //在时钟线的上升沿写入一位数据
  37   2                      ACC=ACC>>1;     //将高一位数据移到ACC^0
  38   2              }
  39   1      }
  40          
  41          /*八位数据读出*/
  42          uchar readbyte(void)
  43          {
  44   1          uchar i;
  45   1              RST=1;//启动数据传送
  46   1              for(i=8;i>0;i--) //读出八位数据,从低位到高位
  47   1              {
  48   2                  ACC=ACC>>1; //将前一下降沿读出的数据右移一位,从而该次读出的数放入ACC^7
  49   2                      IO=1;   //P1口输入之前置1
  50   2                      SCLK=1;
  51   2                      SCLK=0;  //在时钟线的下降升沿读出一位数据
  52   2              BIT7=IO;
  53   2              }
  54   1              return(ACC);
  55   1      }
C51 COMPILER V8.02   DS1302                                                                10/27/2008 20:53:15 PAGE 2   

  56          
  57          /*将指令或数据写入对应寄存器*/
  58          void writereg(uchar addr,uchar dat)
  59          {
  60   1          RST=0;
  61   1              SCLK=0;//只有在SCLK为低电平时,才能将RST置为高电平
  62   1              delay(1);
  63   1              RST=1;
  64   1              writebyte(addr);
  65   1              writebyte(dat);
  66   1              SCLK=1;
  67   1              RST=0;
  68   1              delay(1);
  69   1              RST=1;
  70   1              IO=1;
  71   1      }
  72          
  73          /*读出对应寄存器*/
  74          uchar readreg(uchar addr)
  75          {
  76   1          uchar dat;
  77   1              RST=0;
  78   1              SCLK=0;
  79   1              delay(1);
  80   1              RST=1;
  81   1              writebyte(addr);
  82   1              dat=readbyte();
  83   1              RST=0;
  84   1              return(dat);
  85   1      }
  86          
  87          /*设置时间初值*/
  88          void settime(uchar *pda)
  89          {
  90   1          uchar i;
  91   1              uchar addr=0x80;//偶数为写操作
  92   1              writereg(0x8e,0x00);//将控制寄存器值设为零,最高位WP=0允许写
  93   1              for(i=7;i>0;i--)   //将7个时间初值写入对应寄存器
  94   1          { 
  95   2                  writereg(addr,*pda); //写对应时钟寄存器的值
  96   2                      pda++;
  97   2                      addr+=2;
  98   2              }
  99   1              writereg(0x8e,0x80); //写保护,防止干扰影响时间值
 100   1      }
 101          
 102          /*读取当前时间值*/
 103          void gettime(uchar curtime[])
 104          {
 105   1          uchar i,j;
 106   1              uchar addr=0x81; //奇数为读操作
 107   1          bdata uchar sec; //可位寻址内部数据存储器,允许位与字节混合访问
 108   1              for(i=0;i<7;i++)
 109   1              {
 110   2                  curtime[i]=readreg(addr);//读对应时钟寄存器的值
 111   2                      sec=curtime[i];
 112   2                      j=sec>>4;//将BCD码转化成为对应十进制数
 113   2                      j*=10;
 114   2                      sec=sec&0x0f;
 115   2                      sec+=j;
 116   2                      curtime[i]=sec;
 117   2                      addr+=2;
C51 COMPILER V8.02   DS1302                                                                10/27/2008 20:53:15 PAGE 3   

 118   2              }
 119   1      }
 120          
 121          /*6位数码管显示*/
 122          void show(uchar  *curtime)      
 123          {
 124   1          P1=0xfe;
 125   1              P0=table[curtime[0]%10];
 126   1              delay(3);
 127   1              P1=0xfd;
 128   1              P0=table[curtime[0]/10];
 129   1              delay(3);
 130   1              P1=0xfb;
 131   1              P0=table[curtime[1]%10];
 132   1              delay(3);
 133   1              P1=0xf7;
 134   1              P0=table[curtime[1]/10];
 135   1              delay(3);
 136   1              P1=0xef;
 137   1              P0=table[curtime[2]%10];
 138   1              delay(3);
 139   1              P1=0xdf;
 140   1              P0=table[curtime[2]/10];
 141   1              delay(3);
 142   1      }
 143          
 144          /*主程序*/
 145          void main()
 146          {           
 147   1          settime(pda); 
 148   1          while(1)
 149   1              {       
 150   2              gettime(curtime);
 151   2              show(curtime);
 152   2              }
 153   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    414    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15      10
   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 + -