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

📄 shizhong.lst

📁 ds1302时钟芯片的用法,希望能给大家提供帮助!
💻 LST
字号:
C51 COMPILER V7.06   SHIZHONG                                                              08/07/2007 19:54:58 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SHIZHONG
OBJECT MODULE PLACED IN shizhong.OBJ
COMPILER INVOKED BY: E:\单片机\kcai\安装后\C51\BIN\C51.EXE shizhong.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<reg52.h> //1脚电源,4脚地,8脚备用电源,2 3脚晶震,5脚复位,6脚i/0口,7脚时钟//
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          void wrbyte(uchar byte);//写入1字节//
   5          uchar readbyte(void);//读1字节//
   6          void w1302(uchar addr,uchar da);//写1字节地址和写1字节数据//
   7          uchar r1302(uchar addr);//读去1302某地址的数据//
   8          void get1302(uchar curtime[]);//读取1302当前的时间//
   9          void set1302(uchar *p);//写入1302设置时间//
  10          void dis_scan(uchar buff[]);//数码管的扫描//
  11          void ini_ds1302(void);//初始化1302//
  12          void delay(uint k);//延时//
  13          void scan_key(void);//键盘扫描//
  14          void shanshuo(uchar mov_temp);//数码管闪烁//
  15          uchar code seg7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
  16          uchar timebuf[7]={0x03,0x38,0x10,0x03,0x04,0x02,0x07};//默认时间//
  17          uchar led[16];//led 要显示的数字缓冲器//
  18          sbit T_IO=P3^7;
  19          sbit T_CLK=P3^6;
  20          sbit T_RST=P3^5;
  21          sbit ACC0=ACC^0;
  22          sbit ACC7=ACC^7;
  23          sbit P30=P3^0;//调时和调整//
  24          sbit P31=P3^1;//led移动的闪烁//
  25          sbit P32=P3^2;//加//
  26          sbit P33=P3^3;//减//
  27          uchar mov,cout;//移动的位置//led闪烁的计数//
  28          bit K1,K2,K3,K4;//按键的标志位//
  29          
  30          void main()
  31          {
  32   1       P3=0xff;
  33   1       ini_ds1302();//初始化1302//
  34   1       get1302(timebuf);//读取现在的时间//
  35   1       while(1)
  36   1       {
  37   2        scan_key();//键盘扫描//
  38   2        if(K1==0){dis_scan(timebuf);mov=6;get1302(timebuf);}
  39   2        else shanshuo(mov);
  40   2       }
  41   1       }
  42          
  43          
  44          void scan_key(void)//键盘扫描//
  45          {
  46   1       if(P30==0){delay(5);
  47   2                 if(P30==0){K1=!K1;//k1=0时正常//k1=1调时//
  48   3                         if(K1==0){w1302(0x8e,0x00);//wp=0允许写操作//
  49   4                                   set1302(timebuf);//写入1302设置的时间//
  50   4                                               w1302(0x8e,0x80);//WP=1,写保护//禁止写操作//
  51   4                                               }
  52   3                                }
  53   2                   while(P30==0);//等待暗键K1的释放//
  54   2                              }
  55   1       if(K1==1)
C51 COMPILER V7.06   SHIZHONG                                                              08/07/2007 19:54:58 PAGE 2   

  56   1       {if(P31==0&&K2==0){delay(5);if(P31==0)K2=1;}
  57   2        if(P32==0&&K3==0){delay(5);if(P32==0)K3=1;}
  58   2        if(P33==0&&K4==0){delay(5);if(P33==0)K4=1;}
  59   2       }
  60   1      
  61   1      if(K2==1&&P31==1){K2=0;if(mov==0)mov=7;mov--;}//led闪烁的移动//
  62   1      if(K3==1&&P32==1){K3=0;//调时加//
  63   2      if((timebuf[mov]&0x0f)==9)timebuf[mov]+=6;
  64   2      timebuf[mov]++;
  65   2      if(timebuf[5]>0x07)timebuf[5]=0;//星期//
  66   2      if(timebuf[4]>0x12)timebuf[4]=0;//月//
  67   2      if(timebuf[3]>0x31)timebuf[3]=0;//日//
  68   2      if(timebuf[2]>0x23)timebuf[2]=0;//时//
  69   2      if(timebuf[1]>0x59)timebuf[1]=0;//分//
  70   2      if(timebuf[0]>0x59)timebuf[0]=0;//秒//
  71   2      }
  72   1      
  73   1      if(K4==1&P33==1){K4=0;//调时减//
  74   2      if((timebuf[mov]&0x0f==0))timebuf[mov]-=6;
  75   2      timebuf[mov]--;
  76   2      if(timebuf[5]==0)timebuf[5]=0x7+1;//星期//
  77   2      if(timebuf[4]==0)timebuf[4]=0x12+1;//月//
  78   2      if(timebuf[3]==0)timebuf[3]=0x31+1;//日//
  79   2      if(timebuf[2]==0)timebuf[2]=0x12+1;//时//
  80   2      if(timebuf[1]==0)timebuf[1]=0x59+1;//分//
  81   2      if(timebuf[0]==0)timebuf[0]=0x59+1;//秒//
  82   2      }
  83   1      }
  84          
  85          
  86          void shanshuo(uchar mov_temp)//数码管闪烁//
  87          {
  88   1       uchar i;
  89   1       for(i=0;i<7;i++)
  90   1       {
  91   2        led[i*2]=timebuf[i]&0x0f;//取低四位/
  92   2        led[i*2+1]=(timebuf[i]&0xf0)>>4;//高四位//
  93   2        }
  94   1      P2=0xff;
  95   1      cout++;
  96   1      if(cout<10){led[2*mov_temp]=10;led[2*mov_temp+1]=10;}//闪烁
  97   1      if(cout>20)cout=0;//闪烁频率
  98   1      for(i=0;i<14;i++)//14位扫描//
  99   1      {
 100   2       P1=seg7[led[i]];
 101   2       P2++;
 102   2       delay(1);
 103   2       P1=0xff;
 104   2       }
 105   1       }
 106          
 107          void dis_scan(uchar buff[])//数码管扫描//
 108          {
 109   1       uchar i;
 110   1       for(i=0;i<7;i++)
 111   1       {
 112   2        led[i*2]=buff[i]&0x0f;
 113   2        led[i*2+1]=(buff[i]&0xf0)>>4;
 114   2        }
 115   1      P2=0xff;
 116   1      for(i=0;i<14;i++)
 117   1      {
C51 COMPILER V7.06   SHIZHONG                                                              08/07/2007 19:54:58 PAGE 3   

 118   2       P1=seg7[led[i]];
 119   2       P2++;
 120   2       delay(1);
 121   2       P1=0xff;
 122   2       }
 123   1       }
 124          
 125          void delay(uint k)
 126          {
 127   1       uint i,j;
 128   1       for(i=0;i<k;i++)
 129   1       {
 130   2        for(j=0;j<121;j++);
 131   2       }
 132   1       }
 133          
 134          
 135          void wrbyte(uchar byte)//写入1字节//
 136          {
 137   1       uchar i;
 138   1       ACC=byte;
 139   1       for(i=8;i>0;i--)
 140   1       {
 141   2        T_IO=ACC0;
 142   2        T_CLK=1;
 143   2        T_CLK=0;
 144   2        ACC=ACC>>1;
 145   2       }
 146   1       }
 147          
 148          
 149           uchar readbyte(void)//读1字节//
 150           {
 151   1        uchar i;
 152   1        for(i=8;i>0;i--)  {
 153   2         ACC=ACC>>1;
 154   2         ACC7=T_IO;
 155   2         T_CLK=1;
 156   2         T_CLK=0;
 157   2        }
 158   1       return(ACC);
 159   1       }
 160          
 161          void w1302(uchar addr,uchar da)//写1字节地址和写1字节数据//
 162          {
 163   1       T_RST=0;
 164   1       T_CLK=0;
 165   1       T_RST=1;
 166   1       wrbyte(addr);
 167   1       wrbyte(da);
 168   1       T_CLK=1;
 169   1       T_RST=0;
 170   1       }
 171          
 172          
 173          uchar r1302(uchar addr)//读取1302某地址的数据//
 174          {
 175   1       uchar da;
 176   1       T_RST=0;
 177   1       T_CLK=0;
 178   1       T_RST=1;
 179   1       wrbyte(addr);//地址//
C51 COMPILER V7.06   SHIZHONG                                                              08/07/2007 19:54:58 PAGE 4   

 180   1       da=readbyte();//读1 BYTE 数据//   
 181   1       T_CLK=1;   
 182   1       T_RST=0;
 183   1       return(da);
 184   1       }
 185          
 186          
 187          void set1302(uchar *p)//写入1302设置的时间 
 188          {
 189   1       uchar i;
 190   1       uchar addr=0x80;//设置时间的地址
 191   1       w1302(0x8e,0x00);//WP=0,允许写操作
 192   1       for(i=0;i<7;i++)
 193   1       {
 194   2        w1302(addr,*p);
 195   2        P2++;
 196   2        addr+=2;
 197   2       }
 198   1       w1302(0x8e,0x80);//WP=1,写保护//禁止写操作/
 199   1       }
 200          
 201          
 202          void get1302(uchar curtime[])//读取1302当前时间
 203          {
 204   1       uchar i;
 205   1       uchar addr=0x81;
 206   1       for(i=0;i<7;i++)
 207   1       {
 208   2        curtime[i]=r1302(addr);
 209   2        addr+=2;
 210   2       }
 211   1       }
 212          
 213          void ini_ds1302(void)
 214          {
 215   1       w1302(0x8e,0x00);
 216   1       w1302(0x90,0x00);
 217   1       T_CLK=0;
 218   1       T_RST=0;
 219   1       }
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    722    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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