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

📄 main.lst

📁 基于12887和80c52的时钟程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 223   1      
 224   1       
 225   1       //将调时后的时间日期写入12887
 226   1       if(showtime==0)//当前状态是显示时间状态
 227   1          SetTime(BIN2BCD(time[0])/*秒*/,BIN2BCD(time[1])/*分*/,BIN2BCD(time[2]))/*时*/;
 228   1       else//当前状态是显示日期
 229   1          SetDate(BIN2BCD(time[4])/*日*/,BIN2BCD(time[5])/*月*/,BIN2BCD(time[6]))/*年*/;
 230   1        
 231   1      }
 232          
C51 COMPILER V6.12  MAIN                                                                   06/27/2007 16:47:25 PAGE 5   

 233          
 234          
 235          //////////////////////////动态显示时间日期/////////////////////////////
 236           
 237           void display() //显示时间
 238          {
 239   1       uchar data six,five,four,three,secon,first;
 240   1       //将要显示的数字的各位分离
 241   1       six=time[2+showtime]/10;
 242   1       five=time[2+showtime]%10;
 243   1       
 244   1       four=time[1+showtime]/10;
 245   1       three=time[1+showtime]%10;
 246   1      
 247   1       secon=time[0+showtime]/10;
 248   1       first=time[0+showtime]%10;
 249   1      
 250   1       //将二进制数转换为七段码
 251   1       six=d2q[six];
 252   1       five=d2q[five];
 253   1       four=d2q[four];
 254   1       three=d2q[three];
 255   1       secon=d2q[secon];
 256   1       first=d2q[first];
 257   1      
 258   1        if(showtime==4)//当前状态是显示日期
 259   1            showpoint=0x04;//显示日期时显示数点
 260   1        else//当前状态是显示时间
 261   1            showpoint=0x00;//显示时间时不显示数点
 262   1      
 263   1        if(timch_bitchoose==0)//确保不在调时状态时关闭闪动开关变量使不闪
 264   1        {
 265   2         six_flash=0x00;
 266   2         five_flash=0x00;
 267   2         three_flash=0x00;
 268   2         four_flash=0x00;
 269   2         secon_flash=0x00;
 270   2         first_flash=0x00;   
 271   2        }
 272   1      
 273   1        if(flash_T<=15)//若在调时状态,闪,灭   
 274   1          {
 275   2           P8255B=close;
 276   2           P8255A=six;
 277   2           P8255B=six_open|six_flash;
 278   2           delay(3);
 279   2      
 280   2           P8255B=close;
 281   2           P8255A=five|showpoint;//显示日期时显示年与月之间的隔点
 282   2           P8255B=five_open|five_flash;
 283   2           delay(3);
 284   2      
 285   2           P8255B=close;
 286   2           P8255A=four;
 287   2           P8255B=four_open|four_flash;
 288   2           delay(3);
 289   2      
 290   2           P8255B=close;
 291   2           P8255A=three|showpoint;//显示日期时显示月与日之间的隔点
 292   2           P8255B=three_open|three_flash;
 293   2           delay(3);
 294   2      
C51 COMPILER V6.12  MAIN                                                                   06/27/2007 16:47:25 PAGE 6   

 295   2           P8255B=close;
 296   2           P8255A=secon;
 297   2           P8255B=secon_open|secon_flash;
 298   2           delay(3);
 299   2      
 300   2           P8255B=close;
 301   2           P8255A=first;
 302   2           P8255B=first_open|first_flash;
 303   2           delay(3);
 304   2          }
 305   1       else//若在调时状态,闪,亮
 306   1         {    
 307   2           P8255B=close;
 308   2           P8255A=six;
 309   2           P8255B=six_open;
 310   2           delay(3);
 311   2      
 312   2           P8255B=close;
 313   2           P8255A=five|showpoint;//显示日期时显示年与月之间的隔点
 314   2           P8255B=five_open;
 315   2           delay(3);
 316   2      
 317   2           P8255B=close;
 318   2           P8255A=four;
 319   2           P8255B=four_open;
 320   2           delay(3);
 321   2      
 322   2           P8255B=close;
 323   2           P8255A=three| showpoint;//显示日期时显示月与日之间的隔点
 324   2           P8255B=three_open;
 325   2           delay(3);
 326   2      
 327   2           P8255B=close;
 328   2           P8255A=secon;
 329   2           P8255B=secon_open;
 330   2           delay(3);
 331   2      
 332   2           P8255B=close;
 333   2           P8255A=first;
 334   2           P8255B=first_open;
 335   2           delay(3);
 336   2         }
 337   1      
 338   1      	flash_T++;//flash_T 记录一个闪动周期内动态显示的次数
 339   1       
 340   1         if(flash_T==50)//一个闪动周期内动态显示50次,闪动周期大于 50*(3*6)ms
 341   1            flash_T=0;
 342   1       }
 343          
 344          
 345          /*************时间延迟***************************/
 346          void delay(uchar data x)//x为要延迟的时间ms级
*** WARNING C258 IN LINE 346 OF .\MAIN.C: 'x': mspace on parameter ignored
 347          {
 348   1       uchar data j;
 349   1       while (x-->0)
 350   1       {
 351   2        for(j=0;j<125;j++) // 延迟的时间1ms
 352   2         {;}
 353   2       }
 354   1      }
 355          
C51 COMPILER V6.12  MAIN                                                                   06/27/2007 16:47:25 PAGE 7   

 356          /*********************进制转换***************************/
 357          uchar BCD2BIN(uchar data BCD)
*** WARNING C258 IN LINE 357 OF .\MAIN.C: 'BCD': mspace on parameter ignored
 358          {
 359   1      	unsigned char data tem=0;
 360   1      	tem=BCD&0x0f;
 361   1      	BCD=BCD>>4;
 362   1      	tem+=BCD*10;
 363   1      	return tem;
 364   1      }
 365          
 366          
 367          uchar BIN2BCD(uchar data BIN)
*** WARNING C258 IN LINE 367 OF .\MAIN.C: 'BIN': mspace on parameter ignored
 368          {
 369   1       uchar data shi,ge,BCD;
 370   1       shi=BIN/10;
 371   1       ge=BIN%10;
 372   1       shi=shi<<4;
 373   1       BCD=shi|ge;
 374   1       return BCD;   
 375   1      }
 376          
 377          /************************************************/
 378          
 379          
 380          /////////////////////判断是否闰年////////////////////
 381          void if_leapyear()
 382          {
 383   1       uchar data year;
 384   1       year=2000+time[6];
 385   1       if(year%4!=0)
 386   1         leapyear=0;
 387   1       else if(year%100!=0)
 388   1         leapyear=1;
 389   1       else if(year%400!=0)
 390   1         leapyear=0;
 391   1       else
 392   1         leapyear=1;
 393   1      }
 394          ////////////////////////////键盘输入控制显示时间还是显示日期/////////////////////////
 395          void keyscan()
 396          {
 397   1        P8255C=0Xc0;
 398   1       if((P8255C&0xc0)!=0xc0)
 399   1         {
 400   2          delay(5);
 401   2          if((P8255C&0xc0)!=0xc0)
 402   2            {
 403   3             if(showtime==0)
 404   3                showtime=4;//显示日期
 405   3             else
 406   3                showtime=0;//显示时间
 407   3            }
 408   2         }
 409   1      	while((P8255C&0xc0)!=0xc0) //防止一次按键,多次响应
 410   1      	    P8255B=0XFF;
 411   1      }
 412          /*
 413          //////////////////初始化函数///////////////
 414          void Init()//定时器。中断的初始化
 415          {
C51 COMPILER V6.12  MAIN                                                                   06/27/2007 16:47:25 PAGE 8   

 416          	TMOD=0X16;//0001 0110,定时器0采用外部计数方式2,定时器1采用定时方式1
 417              
 418              TH0=0xfe;
 419              TL0=0XFE;//定时初值,定时器0计1满
 420          
 421              thl1=15536;//定时器1定时50ms
 422          	//12M Hz 晶振
 423          
 424              EX0=1;//外部中断0允许
 425              EX1=1;//外部中断1允许
 426              ET0=1;//定时中断0允许
 427              ET1=1;//定时中断1允许
 428           
 429          
 430          	IT0=1;
 431          	IT1=1;//外部中断触发方式	
 432          
 433          	TR1=1;      //T1运行
 434          	TR0=1;      // T0 运行
 435          
 436          
 437          	P8255Con=0x88; //初始化8255 A口输入检测数据 0x82
 438          
 439          	EA=1;  //开中断
 440          }
 441          */	


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1181    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  8 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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