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

📄 settime.lst

📁 DS1302 ds18b20时间温度led显示系统源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SETTIME
OBJECT MODULE PLACED IN settime.OBJ
COMPILER INVOKED BY: D:\program files\keil\C51\BIN\C51.EXE settime.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          
   3          #define uchar unsigned char
   4          
   5          sbit SCLK = P2^6;
   6          sbit IO = P2^7;
   7          sbit RST = P2^5;
   8          
   9          sbit ACC0 = ACC^0;
  10          sbit ACC7 = ACC^7;
  11          
  12          sbit DQ = P1^0;
  13          
  14          sbit select = P3^2;
  15          sbit add = P3^3;
  16          sbit dec = P3^4;
  17          sbit esc = P3^5;
  18          
  19          bit flag2;
  20          
  21          uchar flag,flag1;
  22          uchar sec,min,hour,date,month;
  23          uchar Num[10];
  24          
  25           /* {0,1,2,3,4,5,6,7,8,9, °,C} */
  26          uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6,0x9c,0xbf,0xff}; 
  27          uchar code SW[]={0x01,0x02,0x04,0x08};
  28          
  29          void delay_2us(uchar t)
  30          {
  31   1        while(--t);
  32   1      }
  33          
  34          void delay_50us(uchar t)
  35          {
  36   1        uchar i;
  37   1        for(;t>0;t--)
  38   1        for(i=23;i>0;i--);
  39   1      }
  40          
  41          void Reset(void)
  42          {
  43   1       DQ = 0;
  44   1       delay_50us(12);
  45   1       DQ = 1;
  46   1       delay_50us(2);
  47   1      }
  48          
  49          void WriteByte(uchar byte)
  50          {
  51   1        uchar i,j;
  52   1        bit dat;
  53   1        for(i=8;i>0;i--)
  54   1        {
  55   2          DQ = 0;
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 2   

  56   2          dat = byte & 0x01;
  57   2          byte = byte>>1;
  58   2          if(dat)
  59   2          {
  60   3            DQ = 1;
  61   3           }
  62   2          else
  63   2          {
  64   3            DQ = 0;
  65   3           }
  66   2           delay_2us(30);
  67   2           DQ = 1;
  68   2           j++;
  69   2           j++;
  70   2          }
  71   1      }
  72          
  73          uchar ReadBit(void)
  74          {
  75   1        uchar dat;
  76   1        uchar i;
  77   1        DQ = 0;
  78   1        i++;
  79   1        i++;
  80   1        DQ = 1;
  81   1        i++;
  82   1        i++;
  83   1        dat = P1^0;
  84   1        delay_2us(30);
  85   1        DQ = 1;
  86   1        return (dat);
  87   1      }
  88          
  89          uchar ReadByte(void)
  90          {
  91   1        uchar i,j,val;
  92   1        val = 0x00;
  93   1        for(i=8;i>0;i--)
  94   1        {
  95   2          val = val >> 1;
  96   2          j = ReadBit();
  97   2          val = (j << 7) | val;
  98   2         }
  99   1         return (val);
 100   1      }
 101          
 102          void Start_ds18b20(void)
 103          {
 104   1        Reset();
 105   1        delay_2us(10);
 106   1        WriteByte(0xcc);
 107   1        WriteByte(0x44);
 108   1      }
 109          
 110          uchar ReadTemp(void)
 111          {
 112   1        uchar tempL,tempH,temp;
 113   1        Reset();
 114   1        delay_2us(50);
 115   1        WriteByte(0xcc);
 116   1        WriteByte(0xbe);
 117   1        tempL = ReadByte();
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 3   

 118   1        tempH = ReadByte();
 119   1        flag = tempH & 0x80;
 120   1        if(flag != 0)
 121   1        {
 122   2          tempL = ~tempL + 1;
 123   2              tempH = ~tempH + 1;
 124   2              }
 125   1        tempL = tempL & 0xf0;
 126   1        tempH = tempH & 0x0f;
 127   1        temp = (tempL >> 4) | (tempH << 4);
 128   1        return (temp);
 129   1      }
 130          
 131          /*********写一字节**********/
 132          void writebyte1302(uchar data0)
 133          {
 134   1        uchar i;
 135   1        ACC = data0;
 136   1        for(i=8;i>0;i--)
 137   1        {
 138   2          IO = ACC0;
 139   2          SCLK = 1;
 140   2          SCLK = 0;
 141   2          ACC = ACC >> 1;
 142   2         }
 143   1      }
 144          
 145          /*******读一字节******************/
 146          uchar readbyte1302()
 147          {
 148   1        uchar i;
 149   1        for(i=8;i>0;i--)
 150   1        {
 151   2          ACC = ACC >> 1;
 152   2          ACC7 = IO;
 153   2          SCLK = 1;
 154   2          SCLK = 0;
 155   2        }
 156   1        return(ACC);
 157   1      }
 158          
 159          /*********向DS1302写一字节内容********/
 160          void Write1302(uchar Addr,uchar data1)
 161          {
 162   1        RST = 0;
 163   1        SCLK = 0;
 164   1        RST = 1;
 165   1        writebyte1302(Addr);
 166   1        writebyte1302(data1);
 167   1        SCLK = 1;
 168   1        RST = 0;
 169   1      }
 170          
 171          /*************读DS1302一字节的内容*********/
 172          uchar Read1302(uchar Addr)
 173          {
 174   1        uchar temp;
 175   1        RST = 0;
 176   1        SCLK = 0;
 177   1        RST = 1;
 178   1        writebyte1302(Addr);
 179   1        temp = readbyte1302();
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 4   

 180   1        SCLK = 1;
 181   1        RST = 0;
 182   1        return(temp);
 183   1       }
 184          
 185          void settime()
 186          {
 187   1        uchar temp1,temp2;
 188   1        uchar premin,prehour,predate,premonth;
 189   1        temp1 = min / 10;
 190   1        temp2 = min % 10;
 191   1        premin = (temp1<<4) | temp2;
 192   1        temp1 = hour / 10;
 193   1        temp2 = hour % 10;
 194   1        prehour = (temp1<<4) | temp2;
 195   1        prehour = prehour | 0x80;
 196   1        temp1 = date / 10;
 197   1        temp2 = date % 10;
 198   1        predate = (temp1<<4) | temp2;
 199   1        temp1 = month / 10;
 200   1        temp2 = month % 10;
 201   1        premonth = (temp1<<4) | temp2;
 202   1        Write1302(0x8e,0x00);           //关闭写保护,准备向DS1302写入初始值
 203   1        Write1302(0x80,0x80);
 204   1        Write1302(0x82,premin);
 205   1        Write1302(0x84,prehour);
 206   1        Write1302(0x86,predate);
 207   1        Write1302(0x88,premonth);
 208   1        Write1302(0x80,0x00);
 209   1        Write1302(0x8e,0x80); //打开写保护,禁止向DS1302写入
 210   1        }     
 211          
 212          
 213          void Init1302()
 214          {
 215   1        Write1302(0x8e,0x00); //关闭写保护,准备向DS1302写入初始值
 216   1        Write1302(0x80,0x00); //启动DS1302
 217   1        Write1302(0x8e,0x80); //打开写保护,禁止向DS1302写入
 218   1        }
 219          
 220          /*********读取当前时间**********/ 
 221          void Gettime()
 222          { 
 223   1        sec = Read1302(0x81);
 224   1        min = Read1302(0x83);
 225   1        hour = Read1302(0x85);
 226   1        date = Read1302(0x87);
 227   1        month = Read1302(0x89);
 228   1        min = (min / 16) * 10 + min % 16;
 229   1        hour = hour & 0x1f;
 230   1        hour = (hour / 16)*10 + hour % 16;
 231   1        date = (date / 16) * 10 + date % 16;
 232   1        month = (month / 16) * 10 + month % 16;
 233   1       }
 234          
 235          void showtemp(uchar x)
 236          {
 237   1        uchar n,w;
 238   1        if(flag != 0)
 239   1        {
 240   2          Num[3] = 12;
 241   2         }
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 5   

 242   1        else 
 243   1        Num[3] = 13;
 244   1        Num[0] = 11;
 245   1        Num[1] = x%10;
 246   1        Num[2] = x/10;
 247   1        for(n=50;n>0;n--)
 248   1        { 
 249   2          for(w=0;w<4;w++)
 250   2          { 
 251   3                P0 = 0xff;
 252   3                P2=SW[w];
 253   3            P0=table[Num[w]];
 254   3                delay_50us(5);
 255   3                }
 256   2         }
 257   1      }
 258          
 259          void scankey()
 260          {
 261   1        if(select == 0)
 262   1        delay_50us(100);
 263   1        if(select == 0)
 264   1        {
 265   2          while(!select);
 266   2              flag1++;
 267   2              }
 268   1        
 269   1        if(flag1 == 1)        //设置小时状态时
 270   1        {
 271   2          if(add == 0)
 272   2              delay_50us(100);
 273   2              if(add == 0)
 274   2              {
 275   3                while(!add);
 276   3                if(hour == 12)
 277   3                  hour = 1;
 278   3                else
 279   3                  hour++;
 280   3                }
 281   2          if(dec == 0)
 282   2          delay_50us(100);
 283   2          if(dec == 0)
 284   2              {
 285   3                while(!dec);
 286   3                if(hour == 1)
 287   3                  hour = 12;
 288   3                else
 289   3                  hour--;
 290   3                }
 291   2               }
 292   1        
 293   1        if(flag1 == 2)      //设置分钟状态时
 294   1        {
 295   2          if(add == 0)
 296   2              delay_50us(100);
 297   2              if(add == 0)
 298   2              {
 299   3                while(!add);
 300   3                if(min == 59)
 301   3                  min = 0;
 302   3                else
 303   3                  min++;
C51 COMPILER V7.50   SETTIME                                                               04/12/2008 21:12:31 PAGE 6   

 304   3                }
 305   2          if(dec == 0)
 306   2              delay_50us(100);
 307   2              if(dec == 0)
 308   2              {
 309   3                while(!dec);
 310   3                if(min == 0)
 311   3                  min = 59;
 312   3                else
 313   3                  min--;

⌨️ 快捷键说明

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