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

📄 2051.lst

📁 基于STC89C2051单片机的电子钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
 177   1              ET0=1;
 178   1              TR0=1;              
 179   1      }
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 4   

 180          
 181          //延时函数
 182          void Delay(uint i)
 183          {
 184   1              while(i--);
 185   1      }
 186          
 187          //函数功能:时钟计时
 188          void TimerMake(void)
 189          {                       
 190   1              if(++TimeData[Second]>=60)                //秒
 191   1              {
 192   2                      TimeData[Second]=0;
 193   2                      if(++TimeData[Minute]>=60)        //分
 194   2                      {
 195   3                              TimeData[Minute]=0;     
 196   3              if(++TimeData[Hour]>=24)          //时
 197   3                      TimeData[Hour]=0;
 198   3                      }
 199   2              }
 200   1      }
 201          
 202          //时钟显示数据放入显示缓冲区
 203          void TimeDisData(void)
 204          {
 205   1              DispData[0]=Disp[TimeData[Hour]/10];
 206   1              if(SecondFlashFlag)
 207   1              {       
 208   2                      //每半秒加小数点用于秒闪
 209   2      //              DispData[1]=Disp[TimeData[Hour]%10]|0x80;       
 210   2      //              DispData[2]=Disp[TimeData[Minute]/10]|0x80;
 211   2      //      }
 212   2      //      else
 213   2      //      {       
 214   2                      DispData[1]=Disp[TimeData[Hour]%10];    
 215   2                      DispData[2]=Disp[TimeData[Minute]/10];
 216   2              }       
 217   1              DispData[3]=Disp[TimeData[Minute]%10];
 218   1      }
 219                  
 220          //闹铃显示数据放入显示缓冲区
 221          void TimingDisData(void)
 222          {
 223   1              if(TimingDisSelectFlag)
 224   1              {
 225   2                      //第2定时时间
 226   2                      DispData[0]=Disp[TimeData[Hour_n2]/10];
 227   2                      DispData[1]=Disp[TimeData[Hour_n2]%10];         
 228   2                      DispData[2]=Disp[TimeData[Minute_n2]/10];
 229   2                      DispData[3]=Disp[TimeData[Minute_n2]%10];
 230   2              }
 231   1              else
 232   1              {       
 233   2                      //第1定时时间   
 234   2                      DispData[0]=Disp[TimeData[Hour_n1]/10];
 235   2                      DispData[1]=Disp[TimeData[Hour_n1]%10]; 
 236   2                      DispData[2]=Disp[TimeData[Minute_n1]/10];       
 237   2                      DispData[3]=Disp[TimeData[Minute_n1]%10];
 238   2              }       
 239   1      }
 240                                  
 241          //函数功能:显示
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 5   

 242          //两种显示程序都可行,生成的代码量相当
 243          void Display(void)
 244          {
 245   1      /*      uchar i;
 246   1              uchar databat;
 247   1              uchar ScanStart=0x0e;                   //扫描初值,由低位开始扫描
 248   1      
 249   1              //选择显示数据
 250   1              if(TimingSetFlag)
 251   1                      TimingDisData();
 252   1              else
 253   1                      TimeDisData();
 254   1              //动态扫描显示
 255   1              for(i=0;i<4;i++)
 256   1              {       
 257   1                      databat=DisScan&0xf0;                           //保存P3口当前状态      
 258   1                      DisScan=databat|0x2f;                           //清屏          
 259   1                      DispOut=DispData[i];                            //输出字符码
 260   1                      DisScan=databat|(ScanStart&0x2f);               //输出位扫描码
 261   1                      Delay(DISTIME);                                                                                 //延时
 262   1                      ScanStart=(ScanStart<<1)+1;                                     //产生下一位扫描码              
 263   1              }*/
 264   1      
 265   1              //选择显示数据
 266   1              if(TimingSetFlag)
 267   1                      TimingDisData();
 268   1              else
 269   1                      TimeDisData();          
 270   1              //显示时十位    
 271   1              Hour_SWei=0;            
 272   1              DispOut=DispData[0];
 273   1              Delay(num);
 274   1              Hour_SWei=1;
 275   1              //显示时个位
 276   1              Hour_GWei=0;                                    
 277   1              DispOut=DispData[1];
 278   1              Delay(num);
 279   1              Hour_GWei=1;    
 280   1              //显示分十位    
 281   1              Min_SWei=0;
 282   1              DispOut=DispData[2];
 283   1              Delay(num);
 284   1              Min_SWei=1;     
 285   1              //显示分个位
 286   1              Min_GWei=0;
 287   1              DispOut=DispData[3];
 288   1              Delay(num);
 289   1              Min_GWei=1;                             
 290   1      }
 291          
 292          //函数功能:定闹时间比较
 293          void TimeCompate(void)
 294          {
 295   1              //时分相等且秒为0时启动闹铃输出 
 296   1              if(TimeData[Second]==0)
 297   1              {
 298   2                      if((TimeData[Hour_n1]==TimeData[Hour])&&(TimeData[Minute_n1]==TimeData[Minute]))
 299   2                              StartBuzze();
 300   2                              
 301   2                      else if((TimeData[Hour_n2]==TimeData[Hour])&&(TimeData[Minute_n2]==TimeData[Minute]))
 302   2                              StartBuzze();
 303   2              }                                               
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 6   

 304   1      }
 305          
 306          //函数功能:启动闹铃输出
 307          void StartBuzze(void)
 308          {
 309   1              TimingSuitedFlag=1;
 310   1              ET1=1;
 311   1              TR1=1;                                                  //用TR1控制闹铃声响     
 312   1      }       
 313                  
 314          //按键扫描函数:产生键值
 315          void KeyScan(void)
 316          {       
 317   1              uint KeyLongTime;
 318   1              
 319   1              if(!Button_S1)                                          
 320   1              {               
 321   2                      Bee_Out=0;                                      //启动按键声                                                                                                            
 322   2                      if(TimingSuitedFlag)                    //有闹铃输出时  
 323   2                      {
 324   3                              TimingSuitedFlag=0;
 325   3                              Bee_Out=1;                                      //闹铃停闹
 326   3                              TR1=0;                                          //关闭TR1
 327   3                              ET1=0;                  
 328   3                      }                               
 329   2                      else
 330   2                      {                                                                                                                       
 331   3                              while(!Button_S1)                               //等待按键松开
 332   3                              {
 333   4                                      KeyLongTime++;                          //长按键计时开始
 334   4                                      if(KeyLongTime>300)
 335   4                                      {
 336   5                                              Bee_Out=1;                              //关闭按键声
 337   5                                              Display();                              //保持显示
 338   5                                      }                               
 339   4                                      if(KeyLongTime>600)                     //长按键超过5秒
 340   4                                      {
 341   5                                              TimeSetFlag=1;                  //进入校时模式                                                                          
 342   5                                              SecondFlashFlag=1;              //使秒闪长亮                                    
 343   5                                              KeyVal=12;                              //键值置12指向校时模式起始键值                                  
 344   5                                      }                                                       //校时设定模式的后续键值由KeyVal++产生
 345   4                              }
 346   3                              //按键松开
 347   3                              KeyVal++;                                               //产生键值
 348   3                              KeyLongTime=0;                                  //清长按键计时
 349   3                              TimingFunFlag=!TimingFunFlag;   //闹铃功能开或关                        
 350   3                      }                                                               
 351   2              }       
 352   1      }
 353          
 354          //键功能函数:执行键值功能
 355          void KeyFunction(void)
 356          {
 357   1              uchar *j;                                                               //定义指针
 358   1                              
 359   1              switch(KeyVal)

⌨️ 快捷键说明

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