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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 1   


C51 COMPILER V8.18, 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时钟
   3          =============================================================*/
   4          
   5          #include <AT89x51.h>
   6          #include <string.h>
   7          #include < intrins.h >
   8          #define delayNOP() ; {_nop_() ;_nop_() ;_nop_() ;_nop_() ;} ;
   9          #define LCM_RW P2_1 //定义引脚
  10          #define LCM_RS P2_0
  11          #define LCM_E P2_2
  12          #define LCM_Data P0
  13          #define Busy 0x80          //用于检测LCM状态字中的Busy标识
  14          #define uchar unsigned char
  15          sbit T_CLK=P1^0;
  16          sbit T_IO =P1^1;
  17          sbit T_RST=P1^2;
  18          sbit ACC0=ACC^0;
  19          sbit ACC7=ACC^7;
  20          sbit LED=P1^4;                   //背光灯输出 (因本实验板无此功能 所以此项功能用P1.4LED灯作为指示)
  21          sbit system=P3^2;                //模式 对应实验板K1按键
  22          sbit TimerUp=P3^3;               //时间减 对应实验板K2按键
  23          sbit TimerDown=P3^4;     //时间加 对应实验板K3按键
  24          sbit BEEP=P3^6;       //蜂鸣器
  25          void   Set(uchar,uchar);      //根据选择调整相应项目
  26          void   RTInputByte(uchar);    //输入 1Byte */
  27          uchar  RTOutputByte(void);    //输出 1Byte */
  28          void   W1302(uchar, uchar);   //向DS1302写入一个字节
  29          uchar  R1302(uchar);          //从DS1302读出一个字节
  30          void   Set1302(uchar * );     //设置时间 
  31          void   KeySound();                        //按键音
  32          void   ClockSound();              //闹铃蜂鸣声
  33          uchar id,msec,model,LedTime,d;
  34          bit a,b;                          //闪烁标志位                        
  35          uchar inittime[7]={0x50,0x59,0x23,0x24,0x07,0x05,0x09}; //初始化后设置为:09年7月24日星期5 23点59分50秒
  36          void  Out_LCM(void);     //显示屏幕
  37          void  model0(void);                                                //显示输出
  38          void  model1(void);
  39          void  model2(void);
  40          void  model3(void);
  41          void  model4(void);
  42          void  model5(void);
  43          void  model6(void); 
  44          void  id_case1_key();   //项目调整
  45          void  Modset();          //模式键处理
  46          void  WriteDataLCM(uchar WDLCM);
  47          void  WriteCommandLCM(uchar WCLCM,BuysC);
  48          uchar ReadStatusLCM(void);
  49          void  LCMInit(void);
  50          void  OutputInformation(uchar X, uchar Y, uchar DData);
  51          void  DisplayListChar(uchar X, uchar Y, uchar code *DData);
  52          
  53          void  Delay5Ms(void);
  54          void  Delay400Ms(void);
  55          void  systemsetup(void);                 //进入系统设置
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 2   

  56          uchar code systemp[]={"System.setup"};  //字符串输出(系统设定)
  57          uchar code TIMER[]={"Time"};            //字符串输出(时间)
  58          uchar code DATE[]={"Date"};                 //字符串输出(日期)
  59          uchar code alarmclock[]={"Clock"};      //字符串输出(闹铃)
  60          uchar code lamp[]={"Lamp"};                         //字符串输出(背光灯)
  61          uchar code reset[]={"Reset"};               //字符串输出(时间归零)
  62          uchar code exit[]={"Exit"};             //字符串输出(退出)
  63          uchar code set[]={"Set"};                               //字符串输出(设置)
  64          uchar code sec[]={"sec"};               //字符串输出(秒)
  65          uchar code ClockSet[]={"ClockSet"};             //字符串输出(闹铃设置)
  66          uchar code ClockOn[]={"ON"};                //字符串输出(ON)
  67          uchar code ClockOff[]={"OFF"};              //字符串输出(OFF)
  68          
  69          void  timesetup(void);                   //时间设置
  70          void  datesetup(void);                   //日期设置
  71          void  alarmclockset(void);               //闹铃设置
  72          void  lampsetup(void);                   //背光灯设置                                                                      
  73          void  timereset(void);                   //时间清零
  74          
  75          
  76          /*******************************************************************/
  77          void delay1(int ms)
  78          {
  79   1       unsigned char y ;
  80   1        while(ms--)
  81   1       {
  82   2        for(y = 0 ; y<250 ; y++)
  83   2        {
  84   3         _nop_() ;
  85   3         _nop_() ;
  86   3         _nop_() ;
  87   3         _nop_() ;
  88   3        }
  89   2       }
  90   1      }
  91          /* 延时子程序*/
  92          
  93          void  delay11(uchar x)
  94          { uchar j;
  95   1          while((x--)!=0)
  96   1          { for(j=0;j<125;j++)
  97   2               {;}
  98   2          }
  99   1      }
 100          //--------------------------------------------------
 101           //--------------------------------------------------
 102          void delay0(uchar x)    //x*0.14MS
 103          {
 104   1       unsigned char i;
 105   1        while(x--)
 106   1       {
 107   2        for (i = 0; i<13; i++) {}
 108   2       }
 109   1      }
 110          
 111          
 112          
 113          /*********************************************************/
 114          void beep()             //蜂鸣器响一声函数
 115          {
 116   1        unsigned char i;
 117   1        for (i=0;i<100;i++)
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 3   

 118   1         {
 119   2         delay0(4);
 120   2         BEEP=!BEEP;       //BEEP取反
 121   2         } 
 122   1         BEEP=1;           //关闭蜂鸣器
 123   1         delay11(250);       //延时     
 124   1      }
 125          void main(void)
 126          {
 127   1        LED=0;        //打开LED ,低电平有效,外接9012驱动
 128   1        Delay400Ms(); //启动等待,等LCM讲入工作状态
 129   1        Delay400Ms();
 130   1        LCMInit();    //LCM初始化
 131   1        TMOD=0x01;    //16位定时
 132   1        TH0=0x3c;             //50ms
 133   1        TL0=0xb0;
 134   1        EA=1;
 135   1        TR0=1;
 136   1        ET0=1;  
 137   1         
 138   1        while(1)
 139   1        {
 140   2           if(TimerDown==0)         //左移键按下后把背光灯打开
 141   2            {Delay5Ms();
 142   3            if(TimerDown==0)
 143   3                 {KeySound();                   //蜂鸣声
 144   4                      LED=0;                            //打开背光灯
 145   4                  LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16;} //取出背光灯时间并转换为十进制数         
 146   3             }
 147   2               b=1;                             //模式键是否动作标志。为1时不动作,为0时动作。
 148   2               Modset();                        //调用模式键处理程序判断按键是否按下。
 149   2               if(b==0)
 150   2                {
 151   3                 KeySound();                    //蜂鸣声
 152   3                 LED=0;                 //打开背光灯
 153   3                 systemsetup();         //进入系统设置模式
 154   3                 LedTime=R1302(0xc1)/16*10+R1302(0xc1)%16; //取出背光灯时间并转换为十进制数
 155   3                 }
 156   2               if((LED==0)&&LedTime==0)  //延时间是否到
 157   2                  LED=1;                 //关闭背光灯 
 158   2               if(R1302(0xc3)==1)        //闹铃是否打开,0xc3为读闹铃寄存器地址。
 159   2                 {if((R1302(0x85)==R1302(0xc5))&&(R1302(0x83)==R1302(0xc7))) //判断闹铃时间是否到,
 160   3                        ClockSound();            //发出闹铃蜂鸣声,无按键动作蜂鸣一分钟。
 161   3                      }          
 162   2               model0();                //输出显示屏幕
 163   2              }                                           
 164   1      }
 165          
 166          void KeySound()                         //按键音
 167          {
 168   1       beep();                                            //开蜂鸣声
 169   1       }
 170          void ClockSound()                       //闹铃蜂鸣声
 171          {
 172   1       if(a==0)
 173   1        {
 174   2         beep();
 175   2        }
 176   1      }
 177          
 178          void Modset()                   //模式键处理
 179          { if(system==0)               
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 4   

 180   1         {
 181   2          Delay5Ms();
 182   2          if(system==0)
 183   2               {while(system==0);
 184   3                 KeySound();                    //蜂鸣声
 185   3                 a=0;msec=0;b=0;                //a、msec为闪烁标志,按键有动作时清零,不闪烁。
 186   3               }                                                //b为模式键确认动作。其它程判断b是否为零时来确定模式键是否动作。
 187   2         }
 188   1      }
 189          
 190          void systemsetup(void)              //系统设置
 191          { 
 192   1        model=1;
 193   1        while(model!=0)
 194   1        {     
 195   2        Out_LCM(); 
 196   2        if (TimerUp==0)             //设置项目左移
 197   2            {Delay5Ms();
 198   3             if(TimerUp==0)
 199   3                 {a=0;msec=0;KeySound();//蜂鸣声
 200   4                  if(model--==1)            //6种系统设置项目
 201   4                       model=6;
 202   4                      }   
 203   3             while(TimerUp==0);    
 204   3            }
 205   2         if (TimerDown==0)         //设置项目右移
 206   2            {
 207   3             Delay5Ms();
 208   3             if(TimerDown==0) 
 209   3                   {a=0;msec=0;KeySound();//蜂鸣声
 210   4                       if(model++==6)
 211   4                           model=1; 
 212   4                       }         
 213   3             while(TimerDown==0);    
 214   3            }
 215   2           b=1;                       //模式键是否动作标志。为1时不动作,为0时动作。
 216   2               Modset();              //调用模式键处理程序判断按键是否按下。
 217   2               if(b==0)
 218   2                 {KeySound();                    //蜂鸣声
 219   3                  switch(model)          //进入进个项目设置
 220   3                        {
 221   4                         case 1:
 222   4                              timesetup(); break;   //时间设置
 223   4                         case 2:
 224   4                              datesetup();break;    //日期设置
 225   4                         case 3:
 226   4                              alarmclockset();break;//闹铃设置
 227   4                         case 4:
 228   4                              lampsetup();break;        //背光灯设置
 229   4                     case 5:
 230   4                              timereset();break;    //时间清零
 231   4                         case 6:
 232   4                              model=0;break;        //退出系统设置
 233   4                        }
 234   3                }
 235   2         }
 236   1       }
 237          
 238                                                                    
 239          void timesetup()                //时间调整
 240          {
 241   1       id=6;

⌨️ 快捷键说明

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