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

📄 电子时钟扩展.lst

📁 1.时钟有闹钟功能
💻 LST
字号:
C51 COMPILER V7.08   电子时钟扩展                                                          03/16/2009 13:49:27 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE 电子时钟扩展
OBJECT MODULE PLACED IN 电子时钟扩展.OBJ
COMPILER INVOKED BY: F:\keil\C51\BIN\C51.EXE 电子时钟扩展.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include"lcd1602.h"
   3          #include"ds1302.h"
   4          #include"ds18b20.h"
   5          
   6          #define uint unsigned int
   7          #define uchar unsigned char
   8          
   9          uint b[6];
  10          //年月日时分秒
  11          
  12          uchar code row1[]={"2009-01-01"};
  13          uchar code row2[]={"00:00:00"};
  14          uchar year1[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年
  15          uchar year2[12]={31,29,31,30,31,30,31,31,30,31,30,31};//润年
  16          uchar j[6]={0x85,0x88,0x8b,0x84+0x40,0x87+0x40,0x8a+0x40};//LCD地址
  17          
  18          uchar i,k,jj=0,w,clock=0,bigclock=0,c=0,num;
  19          //i循环数  k温度缓存 jj地址位
  20          uint temp;
  21          
  22          sbit b1=P3^0;//设置
  23          sbit b2=P3^1;//上调
  24          sbit b3=P3^2;//下调
  25          sbit b4=P3^3;//转换
  26          sbit b5=P3^4;//闹钟
  27          sbit speaker=P3^5;
  28          
  29          lcdscan()
  30          {
  31   1              for(i=0;i<6;i++)
  32   1              {
  33   2                      lcdwrite(j[i]);
  34   2                      lcdshuju(a[11-i*2]+0x30);
  35   2                      lcdwrite(j[i]+0x01);
  36   2                      lcdshuju(a[10-i*2]+0x30);
  37   2              }
  38   1      }
  39          
  40          void key()
  41          {
  42   1              if(b1==0)
  43   1              {
  44   2                      dsaddshuju(0x80,(a[1]<<4)+a[0]+0x80);
  45   2                      while(b1==0)
  46   2                      {
  47   3                              for(i=0;i<6;i++)
  48   3                              {
  49   4                                      b[i]=a[11-i*2+clock]*10+a[10-i*2+clock];
  50   4                              }
  51   3      
  52   3                              if(b4==0)
  53   3                              {
  54   4                                      delay(3);
  55   4                                      jj++;
C51 COMPILER V7.08   电子时钟扩展                                                          03/16/2009 13:49:27 PAGE 2   

  56   4                                      if(jj==6)
  57   4                                      {
  58   5                                              jj=0;
  59   5                                      }
  60   4                              }
  61   3                              if(b2==0)
  62   3                              {
  63   4                                      delay(3);
  64   4                                      b[jj]++;
  65   4                                      if(b[5]==60)b[5]=0;
  66   4                                      if(b[4]==60)b[4]=0;
  67   4                                      if(b[3]==24)b[3]=0;
  68   4                                      if((b[0]%4==0 && b[0]%100!=0) || b[0]%400==0){if(b[2]>year2[b[1]-1])b[2]=1;}
  69   4                                      else {if(b[2]>year1[b[1]-1])b[2]=1;}
  70   4                                      if(b[1]==13)b[1]=1;
  71   4                                      if(b[0]==100)b[0]=0;
  72   4                                      
  73   4                              }
  74   3                              if(b3==0)
  75   3                              {
  76   4                                      delay(3);
  77   4                                      b[jj]--;
  78   4                                      if(b[5]==-1)b[5]=59;
  79   4                                      if(b[4]==-1)b[4]=59;
  80   4                                      if(b[3]==-1)b[3]=23;
  81   4                                      if((b[0]%4==0 && b[0]%100!=0) || b[0]%400==0){if(b[2]<=0)b[2]=year2[b[1]-1];}
  82   4                                      else {if(b[2]<=0)b[2]=year1[b[1]-1];}
  83   4                                      if(b[1]==0)b[1]=12;
  84   4                                      if(b[0]==-1)b[0]=99;
  85   4                              }
  86   3      
  87   3                              for(i=0;i<6;i++)
  88   3                              {
  89   4                                      a[11-i*2+clock]=b[i]/10;
  90   4                                      a[10-i*2+clock]=b[i]%10;
  91   4                              }
  92   3      
  93   3                              lcdwrite(j[jj]);
  94   3                              lcdshuju(0);
  95   3                              lcdwrite(j[jj]+1);
  96   3                              lcdshuju(0);
  97   3                              delay(200);
  98   3                              lcdwrite(j[jj]);
  99   3                              lcdshuju(a[11-2*jj+clock]+0x30);
 100   3                              lcdwrite(j[jj]+1);
 101   3                              lcdshuju(a[10-2*jj+clock]+0x30);
 102   3                              delay(200);
 103   3                              
 104   3                              if(b1==1)
 105   3                              {
 106   4                                      dsaddshuju(0x80,(a[1]<<4)+a[0]);
 107   4                                      dson();
 108   4                              }
 109   3                              if(b5==0)clock=12;
 110   3                      }
 111   2              }
 112   1      }
 113          
 114          void main()
 115          {       
 116   1              speaker=0;
 117   1              lcdrw=0;
C51 COMPILER V7.08   电子时钟扩展                                                          03/16/2009 13:49:27 PAGE 3   

 118   1              dson();
 119   1              lcdon();
 120   1              lcdwrite(0x83);
 121   1              for(i=0;i<10;i++)
 122   1              {
 123   2                      lcdshuju(row1[i]);
 124   2                      delay(1);
 125   2              }
 126   1              lcdwrite(0x84+0x40);
 127   1              for(i=0;i<8;i++)
 128   1              {
 129   2                      lcdshuju(row2[i]);
 130   2                      delay(1);
 131   2              }
 132   1              dsrst=0;
 133   1              dssclk=0;
 134   1              while(1)
 135   1              {
 136   2                      for(i=0;i<5;i++)
 137   2                      {
 138   3                              dsrst=1;
 139   3                              dswrite(0x81+i*2);
 140   3                              k=dsread();
 141   3                              dsrst=0;
 142   3                              a[i*2]=k&0x0f;
 143   3                              a[i*2+1]=(k>>4)&0x0f;                   
 144   3                      }
 145   2                      dsrst=1;
 146   2                      dswrite(0x8d);
 147   2                      k=dsread();
 148   2                      dsrst=0;
 149   2                      a[10]=k&0x0f;
 150   2                      a[11]=(k>>4)&0x0f;
 151   2                      
 152   2                      delay(100);
 153   2      
 154   2                      lcdscan();
 155   2                      key();
 156   2                      if(b5==0)
 157   2                      {
 158   3                              for(i=0;i<12;i++)
 159   3                              {
 160   4                                      if(a[i+12]==a[i])num++;
 161   4                              }
 162   3                              if(num==12)bigclock=1;
 163   3                              else num=0;
 164   3                              lcdwrite(0x8e);
 165   3                              lcdshuju('&');
 166   3                      }
 167   2                      else 
 168   2                      {
 169   3                              lcdwrite(0x8e);
 170   3                              lcdshuju(0x00);
 171   3                      }       
 172   2                      if(bigclock==1)
 173   2                      {
 174   3                              speaker=1;
 175   3                              c++;
 176   3                              if(c==100){bigclock=0;speaker=0;}
 177   3                      }
 178   2                      temp=readtemperature();//temp是uint型的。不然会出现温度到25后回00的现象。可能是由于十六进制与十进制的差

⌨️ 快捷键说明

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