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

📄 控制系统.lst

📁 核心文件,直接烧录
💻 LST
📖 第 1 页 / 共 5 页
字号:
 482          
 483          /*延时(一次10个机器周期不等) 参数格式:延时数*/
 484          void delay(unsigned int det)
 485          {
 486   1        while(det--);
 487   1      }
 488          
 489          
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 9   

 490          
 491          /*1s延时*/
 492          void delay_pw()
 493          {
 494   1        delay(60000);
 495   1        delay(60000);
 496   1      }
 497          
 498          
 499          /*6个周期  6us */
 500          void  delay_b20(uchar n)
 501          {  
 502   1        while(n--);
 503   1      }
 504          
 505          
 506          
 507          /*主时钟中断处理*/
 508          void time0_isr(void) interrupt  TF0_VECTOR  using 1
 509          {
 510   1        TR0=0;
 511   1        TL0=(time_count&0x00FF);
 512   1        TH0=(time_count>>8);
 513   1        TR0=1;
 514   1        if(--time_tick)  return;
 515   1        time_tick=20;
 516   1        t0_isr=1;
 517   1        if(nba_tim&!oth_run)     // 当在篮球器界面时 nba_tim==1、oth_run==0 
 518   1        {
 519   2          if(resu[3]==0)
 520   2              {
 521   3                resu[3]=59;
 522   3                if(resu[2]>0) resu[2]--;
 523   3              }
 524   2              else resu[3]--;
 525   2              if(resu[2]==0&resu[3]==0)  // 比赛时间到后停止
 526   2              {
 527   3                TR0=0;TR1=0;EA=0;
 528   3              }
 529   2              return;
 530   2        }
 531   1        if((++temp_min)==60)    // 实现温度的更新
 532   1        {
 533   2          temp_min=0;
 534   2          temp_delay--;
 535   2              if(temp_delay==0)
 536   2          {
 537   3                b20time=1;temp_delay=5;
 538   3              }
 539   2        }     
 540   1      }
 541          
 542          
 543          /*24时钟中断处理*/
 544          void time1_isr(void) interrupt  TF1_VECTOR  using 2
 545          {
 546   1        TR1=0;
 547   1        TL1=(time_count&0x00FF);
 548   1        TH1=(time_count>>8);
 549   1        TR1=1;
 550   1        if(--time_tick1) return;
 551   1        time_tick1=20;
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 10  

 552   1        if(resu[4]>0)resu[4]--;         //  篮球器24秒中断
 553   1        t0_isr=1;
 554   1        if(resu[4]==0)
 555   1        { TR0=0;TR1=0;EA=0;}
 556   1      }
 557          
 558          
 559          /*定时器初始化*/
 560          void time_init()                        
 561          {
 562   1        EA=0;
 563   1        TR0=0;
 564   1        TR1=0;
 565   1        TMOD=0x11;
 566   1        TL0=(time_count&0x00FF);
 567   1        TH0=(time_count>>8);
 568   1        TL1=(time_count&0x00FF);
 569   1        TH1=(time_count>>8);
 570   1        IE=0;
 571   1        ET0=1;
 572   1        ET1=1;
 573   1      }
 574          
 575          
 576          
 577          /*=====================================================================================
 578           函数名称:LCD驱动
 579           功能描述:基本驱动(写1个字节、清屏、初始化)
 580           全局变量:无
 581           参数说明:dat_comm(0:命令 1:数据),content(数值)
 582           返回说明:无返回值
 583           设 计 人:LIJH
 584           版    本:1.0
 585           说    明:
 586           ======================================================================================*/
 587          
 588          
 589          /*检查忙碌位*/
 590          void chk_busy (void)
 591          {
 592   1        lcd_data = 0xff;
 593   1        lcd_rs = 0;    // 命令
 594   1        lcd_rw = 1;    // 读
 595   1        lcd_e = 1;
 596   1        while(busy==1);
 597   1        lcd_e = 0;
 598   1      }
 599          
 600          
 601          /*写LCD 参数格式:0:命令,1:数值 ,数据*/
 602          void wr_lcd (uchar dat_comm,uchar content)
 603          {
 604   1        chk_busy ();
 605   1        lcd_rs=dat_comm;
 606   1        lcd_rw = 0;         // 写
 607   1        lcd_data=content;   // 输出数据或命令
 608   1        lcd_e=1;             
 609   1        lcd_e=0;
 610   1      }
 611          
 612          
 613          /*清绘图*/
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 11  

 614          void clrgdram(void)
 615          {
 616   1        uchar i,j;
 617   1        for(j=0;j<32;j++)
 618   1        {
 619   2          wr_lcd(comm,0x34);
 620   2          wr_lcd(comm,0x80+j);
 621   2          wr_lcd(comm,0x80);
 622   2          wr_lcd(comm,0x30);
 623   2          for(i=0;i<32;i++)
 624   2            wr_lcd(dat,0x00);  // 写入0x00
 625   2         }
 626   1        wr_lcd(comm,0x36);
 627   1      }
 628          
 629          
 630          /*清除显示*/
 631          void clear_dis(void)
 632          {
 633   1        wr_lcd(comm,0x30);
 634   1        wr_lcd(comm,0x01);  // 清屏,地址指针指向00H
 635   1        clrgdram();             // 请绘图RAM
 636   1      }
 637          
 638          
 639          
 640          /*开机LCD初始化*/
 641          void init_lcd (void)
 642          {
 643   1        lcd_rst=1;
 644   1        wr_lcd(comm,0x30);  // 30---基本指令动作  
 645   1        wr_lcd(comm,0x06);  // 光标的移动方向
 646   1        wr_lcd(comm,0x0c);  // 开显示,关游标
 647   1        clear_dis(); 
 648   1      }
 649          
 650          
 651          
 652          
 653          
 654          /*=====================================================================================
 655           函数名称:DS1302驱动
 656           功能描述:基本驱动(读写数据、读写日期,时间、初始化)
 657           全局变量:无
 658           参数说明:w_adder(写地址),r_adder(读地址),w_data(写入数据)
 659           返回说明:返回读取的数据
 660           设 计 人:LIJH
 661           版    本:1.0
 662           说    明:上升沿写入数值,下降沿读出数值,没用设立后背电池充电
 663           ======================================================================================*/
 664          
 665          
 666          /*向1302写数据 参数格式:地址,数据*/
 667          void w1302(uchar w_adder,uchar w_data)
 668          {
 669   1        uchar d;
 670   1        ret_ds1302();
 671   1        for(d=0;d<16;d++)
 672   1        {
 673   2          if(d==8) w_adder=w_data;
 674   2              d02_data=(bit)(w_adder&0x01);
 675   2          d02_sclk=0;          // 上升沿
C51 COMPILER V8.02   縚制系统                                                              08/08/2008 18:31:54 PAGE 12  

 676   2          w_adder>>=1;
 677   2          d02_sclk=1;
 678   2        }
 679   1        end_ds1302();    
 680   1      }
 681          
 682          
 683          
 684          /*接收1302一个字节的数据 参数格式:读地址*/
 685          uchar r1302(uchar r_adder)
 686          {
 687   1        uchar d=0;
 688   1        ret_ds1302();
 689   1        for(d=0;d<8;d++)       // 写地址
 690   1        {
 691   2          d02_data=(bit)(r_adder&0x01);
 692   2          d02_sclk=0;
 693   2          r_adder>>=1;
 694   2          d02_sclk=1;
 695   2        }
 696   1        r_adder=0;
 697   1        for(d=0;d<8;d++)       // 读数据 
 698   1        {
 699   2              d02_data=1;
 700   2              d02_sclk=1;              // 下降沿
 701   2              r_adder>>=1;
 702   2              d02_sclk=0;
 703   2              if(d02_data) r_adder|=0x80;
 704   2        }
 705   1        end_ds1302();
 706   1        return(r_adder);
 707   1      }
 708          
 709          
 710          
 711          /*写入时间与日期*/
 712          void wds1302_time_date(void)
 713          {
 714   1        w1302(d02_wrc,0x00);                           // 写允许
 715   1        w1302(0x90,0xa5);                  // 单二极管2K电阻充电
 716   1        w1302(d02_year,today.year);            // 年
 717   1        w1302(d02_weeks,today.week);           // 星期
 718   1        w1302(d02_month,today.month);          // 月
 719   1        w1302(d02_day,today.day);              // 日
 720   1        w1302(d02_hour,0x7f&now.hour);         // 时
 721   1        w1302(d02_minute,now.minute);          // 分
 722   1        w1302(d02_second,0x7f&now.second); // 秒
 723   1        w1302(d02_wrc,0x80);                           // 写禁止
 724   1      }
 725          

⌨️ 快捷键说明

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