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

📄 da1302.lst

📁 利用实时时钟芯片DS1302设计的实时时钟
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.08   DA1302                                                                09/16/2008 21:50:25 PAGE 1   


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

line level    source

   1          /*============================================================
   2          使用1602液晶显示DS1302+c51时钟 
   3          [注:AT89C51使用12M晶振]
   4          =============================================================*/
   5          
   6          #include <AT89x51.h>
   7          #include <string.h>
   8          
   9          #define LCM_RW P3_1 //定义引脚
  10          #define LCM_RS P3_0
  11          #define LCM_E P3_2
  12          #define LCM_Data P0
  13          #define Busy 0x80          //用于检测LCM状态字中的Busy标识
  14          #define uchar unsigned char
  15          
  16          sbit T_CLK=P2^4;
  17          sbit T_IO =P2^5;
  18          sbit T_RST=P2^6;
  19          sbit ACC0=ACC^0;
  20          sbit ACC7=ACC^7;
  21          sbit LED=P2^0;                   //背光灯输出 (因本实验板无此功能 所以此项功能无效)
  22          sbit system=P1^1;                //模式
  23          sbit TimerUp=P1^2;               //时间加
  24          sbit TimerDown=P1^0;     //时间减
  25          sbit Speaker=P2^1;       //蜂鸣器
  26          
  27          
  28          void   Set(uchar,uchar);      //根据选择调整相应项目
  29          void   RTInputByte(uchar);    //输入 1Byte */
  30          uchar  RTOutputByte(void);    //输出 1Byte */
  31          void   W1302(uchar, uchar);   //向DS1302写入一个字节
  32          uchar  R1302(uchar);          //从DS1302读出一个字节
  33          void   Set1302(uchar * );     //设置时间 
  34          void   KeySound();                        //按键音
  35          void   ClockSound();              //闹铃蜂鸣声
  36          
  37          
  38          uchar id,msec,model,LedTime,d;
  39          bit a,b;                          //闪烁标志位
  40          
  41                                  
  42          uchar inittime[7]={0x00,0x10,0x19,0x29,0x03,0x04,0x06}; //初始化后设置为:06年3月29日星期3 19点10分0秒
  43          void  Out_LCM(void);     //显示屏幕
  44          void  model0(void);                                                //显示输出
  45          void  model1(void);
  46          void  model2(void);
  47          void  model3(void);
  48          void  model4(void);
  49          void  model5(void);
  50          void  model6(void);
  51          
  52           
  53          void  id_case1_key();   //项目调整
  54          void  Modset();          //模式键处理
  55          
C51 COMPILER V8.08   DA1302                                                                09/16/2008 21:50:25 PAGE 2   

  56          void  WriteDataLCM(uchar WDLCM);
  57          void  WriteCommandLCM(uchar WCLCM,BuysC);
  58          uchar ReadStatusLCM(void);
  59          void  LCMInit(void);
  60          void  OutputInformation(uchar X, uchar Y, uchar DData);
  61          void  DisplayListChar(uchar X, uchar Y, uchar code *DData);
  62          
  63          void  Delay5Ms(void);
  64          void  Delay400Ms(void);
  65          void  systemsetup(void);                 //进入系统设置
  66          
  67          uchar code systemp[]={"System.setup"};  //字符串输出(系统设定)
  68          uchar code TIMER[]={"Time"};            //字符串输出(时间)
  69          uchar code DATE[]={"Date"};                 //字符串输出(日期)
  70          uchar code alarmclock[]={"Clock"};      //字符串输出(闹铃)
  71          uchar code lamp[]={"Lamp"};                         //字符串输出(背光灯)
  72          uchar code reset[]={"Reset"};               //字符串输出(时间归零)
  73          uchar code exit[]={"Exit"};             //字符串输出(退出)
  74          uchar code set[]={"Set"};                               //字符串输出(设置)
  75          uchar code sec[]={"sec"};               //字符串输出(秒)
  76          uchar code ClockSet[]={"ClockSet"};             //字符串输出(闹铃设置)
  77          uchar code ClockOn[]={"ON"};                //字符串输出(ON)
  78          uchar code ClockOff[]={"OFF"};              //字符串输出(OFF)
  79          
  80          void  timesetup(void);                   //时间设置
  81          void  datesetup(void);                   //日期设置
  82          void  alarmclockset(void);               //闹铃设置
  83          void  lampsetup(void);                   //背光灯设置                                                                      
  84          void  timereset(void);                   //时间清零
  85          
  86          void main(void)
  87          {
  88   1        Speaker=1;    //关闭蜂鸣器
  89   1        LED=0;        //打开LED ,低电平有效,外接9012驱动
  90   1        Delay400Ms(); //启动等待,等LCM讲入工作状态
  91   1        Delay400Ms();
  92   1        LCMInit();    //LCM初始化
  93   1        TMOD=0x01;    //16位定时
  94   1        TH0=0x3c;             //50ms
  95   1        TL0=0xb0;
  96   1        EA=1;
  97   1        TR0=1;
  98   1        ET0=1;  
  99   1         
 100   1        while(1)
 101   1        {
 102   2           if(TimerDown==0)         //左移键按下后把背光灯打开
 103   2            {Delay5Ms();
 104   3            if(TimerDown==0)
 105   3                 {KeySound();                   //蜂鸣声
 106   4                      LED=0;                            //打开背光灯
 107   4                  LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;} //取出背光灯时间并转换为十进制数         
 108   3             }
 109   2               b=1;                             //模式键是否动作标志。为1时不动作,为0时动作。
 110   2               Modset();                        //调用模式键处理程序判断按键是否按下。
 111   2               if(b==0)
 112   2                {
 113   3                 KeySound();                    //蜂鸣声
 114   3                 LED=0;                 //打开背光灯
 115   3                 systemsetup();         //进入系统设置模式
 116   3                 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; //取出背光灯时间并转换为十进制数
 117   3                 }
C51 COMPILER V8.08   DA1302                                                                09/16/2008 21:50:25 PAGE 3   

 118   2               if((LED==0)&&LedTime==0)  //延时间是否到
 119   2                  LED=1;                 //关闭背光灯 
 120   2               if(R1302(0xc3)==1)        //闹铃是否打开,0xc3为读闹铃寄存器地址。
 121   2                 {if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,
 122   3                        ClockSound();            //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。
 123   3                      }          
 124   2               model0();                //输出显示屏幕
 125   2              }                                           
 126   1      }
 127          
 128          void KeySound()                         //按键音
 129          {
 130   1       Speaker=0;                                         //开蜂鸣声
 131   1       Delay5Ms();
 132   1       Speaker=1;                                         //关蜂鸣声
 133   1       }
 134          void ClockSound()                       //闹铃蜂鸣声
 135          {
 136   1       if(a==0)
 137   1        {
 138   2         Speaker=0;                                   //开蜂鸣声
 139   2         Delay5Ms();
 140   2         Delay5Ms();
 141   2         Delay5Ms();
 142   2         Speaker=1;                               //关蜂鸣声
 143   2        }
 144   1      }
 145          
 146          void Modset()                   //模式键处理
 147          { if(system==0)               
 148   1         {
 149   2          Delay5Ms();
 150   2          if(system==0)
 151   2               {while(system==0);
 152   3                 KeySound();                    //蜂鸣声
 153   3                 a=0;msec=0;b=0;                //a、msec为闪烁标志,按键有动作时清零,不闪烁。
 154   3               }                                                //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。
 155   2         }
 156   1      }
 157          
 158          void systemsetup(void)              //系统设置
 159          { 
 160   1        model=1;
 161   1        while(model!=0)
 162   1        {     
 163   2        Out_LCM(); 
 164   2        if (TimerUp==0)             //设置项目左移
 165   2            {Delay5Ms();
 166   3             if(TimerUp==0)
 167   3                 {a=0;msec=0;KeySound();//蜂鸣声
 168   4                  if(model--==1)            //6种系统设置项目
 169   4                       model=6;
 170   4                      }   
 171   3             while(TimerUp==0);    
 172   3            }
 173   2         if (TimerDown==0)         //设置项目右移
 174   2            {
 175   3             Delay5Ms();
 176   3             if(TimerDown==0) 
 177   3                   {a=0;msec=0;KeySound();//蜂鸣声
 178   4                       if(model++==6)
 179   4                           model=1; 
C51 COMPILER V8.08   DA1302                                                                09/16/2008 21:50:25 PAGE 4   

 180   4                       }         
 181   3             while(TimerDown==0);    
 182   3            }
 183   2           b=1;                       //模式键是否动作标志。为1时不动作,为0时动作。
 184   2               Modset();              //调用模式键处理程序判断按键是否按下。
 185   2               if(b==0)
 186   2                 {KeySound();                    //蜂鸣声
 187   3                  switch(model)          //进入进个项目设置
 188   3                        {
 189   4                         case 1:
 190   4                              timesetup(); break;   //时间设置
 191   4                         case 2:
 192   4                              datesetup();break;    //日期设置
 193   4                         case 3:
 194   4                              alarmclockset();break;//闹铃设置
 195   4                         case 4:
 196   4                              lampsetup();break;        //背光灯设置
 197   4                     case 5:
 198   4                              timereset();break;    //时间清零
 199   4                         case 6:
 200   4                              model=0;break;        //退出系统设置
 201   4                        }
 202   3                }
 203   2         }
 204   1       }
 205          
 206                                                                    
 207          void timesetup()                //时间调整
 208          {
 209   1       id=6;
 210   1       while(model==1)                                //model为1时进入时间调整
 211   1        {
 212   2          b=1;
 213   2          Modset();
 214   2              if(b==0)
 215   2               {KeySound();                        //蜂鸣声
 216   3                if(id++==9)                       //6..9为时分秒调。                             .
 217   3                 id=6;
 218   3                }
 219   2         id_case1_key();                              //调用按键处理
 220   2         Out_LCM();                   //显示输出
 221   2       } 
 222   1      }
 223          void datesetup()                //对日期进行调整
 224          {
 225   1       id=1;
 226   1       while(model==2)                                //model为2时进入日期调整
 227   1        {b=1;
 228   2         Modset();                                    //模式键是否动作
 229   2         if(b==0)

⌨️ 快捷键说明

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