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

📄 gsd.lst

📁 菜鸟板的时钟 第一次学51
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   GSD                                                                   02/12/2009 20:21:02 PAGE 11  

 612          函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
 613          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 614                    址sla,返回值在c.
 615                     如果返回1表示操作成功,否则操作有误。
 616          注意:    使用前必须已结束总线。
 617          ********************************************************************/
 618          uchar IRcvByte(uchar sla,uchar suba)
 619          {
 620   1      uchar c;
 621   1         Start_I2c();                /*启动总线*/
 622   1         SendByte(sla);           /*发送器件地址*/
 623   1           if(ack==0)return(0);
 624   1         SendByte(suba);           /*发送子器件地址*/
 625   1           if(ack==0)return(0);
 626   1      
 627   1        Start_I2c();
 628   1      
 629   1       SendByte(sla+1);           /*发读器件地址*/
 630   1           if(ack==0)return(0);
 631   1         c=RcvByte();               /*读取数据*/
 632   1           Ack_I2c(1);               /*发送非就答位*/
 633   1        Stop_I2c();                  /*结束总线*/ 
 634   1        return c;
 635   1      }
 636          
 637          void readtime(void)
 638          {uchar  time_temp1,time_temp,time_temp2;
 639   1                        time_temp=IRcvByte(PCF8583, 0X02);
 640   1                              time_temp1=(time_temp/16)&0x0f;time_temp2=time_temp&0x0f;
 641   1                           sec=time_temp1*10+time_temp2;
 642   1                          time_temp=IRcvByte(PCF8583, 0X03);
 643   1                              time_temp1=time_temp>>4;time_temp2=time_temp&0x0f;
 644   1                           min=time_temp1*10+time_temp2;
 645   1                         time_temp=IRcvByte(PCF8583, 0X04);
 646   1                              time_temp1=(time_temp>>4)&0x03;time_temp2=time_temp&0x0f;
 647   1                           hou=time_temp1*10+time_temp2;
 648   1                          time_temp=IRcvByte(PCF8583, 0X05);
 649   1                              time_temp1=(time_temp>>4)&0x03;;time_temp2=time_temp&0x0f;
 650   1                           day=time_temp1*10+time_temp2;
 651   1                          time_temp=IRcvByte(PCF8583, 0X06);
 652   1                              time_temp1=(time_temp>>4)&0x01;time_temp2=time_temp&0x0f;
 653   1                           mon=time_temp1*10+time_temp2;
 654   1                          time_temp=IRcvByte(PCF8583, 0X05);
 655   1                              time_temp1=(time_temp>>6)&0x03;time_temp2=time_temp&0x0f;
 656   1                                       year=time_temp1;
 657   1      }
 658          
 659          uchar convert_BCD(uchar i)
 660          { 
 661   1           uchar i1,i2;
 662   1               i1=i%10;
 663   1               i2=i/10; 
 664   1              i2=i2<<4;
 665   1               i=i2+i1;
 666   1               return i;
 667   1      }
 668          
 669          void adj_year(void)
 670          {      uchar j=16;
 671   1               r_ShowNumber(4,16+j,(year+8)/10);
 672   1                r_ShowNumber(4,24+j,(year+8)%10);
 673   1                ShowChina(4,32+j,16);
C51 COMPILER V7.07   GSD                                                                   02/12/2009 20:21:02 PAGE 12  

 674   1                                          //month
 675   1                ShowNumber(4,48+j,mon/10);
 676   1                  ShowNumber(4,56+j,mon%10);
 677   1                   ShowChina(4,64+j,17);
 678   1                                          //day
 679   1                  ShowNumber(4,80+j,day/10);
 680   1                    ShowNumber(4,88+j,day%10);
 681   1                   ShowChina(4,96+j,18);
 682   1                       show_time();
 683   1      }
 684          void adj_month(void)
 685          {      uchar j=16;
 686   1              ShowNumber(4,16+j,(year+8)/10);
 687   1                ShowNumber(4,24+j,(year+8)%10);
 688   1                ShowChina(4,32+j,16);
 689   1                                          //month
 690   1                 r_ShowNumber(4,48+j,mon/10);
 691   1                  r_ShowNumber(4,56+j,mon%10);
 692   1                   ShowChina(4,64+j,17);
 693   1                                          //day
 694   1                  ShowNumber(4,80+j,day/10);
 695   1                    ShowNumber(4,88+j,day%10);
 696   1                   ShowChina(4,96+j,18);
 697   1                               show_time();
 698   1      }
 699          void adj_day(void)
 700          {      uchar j=16;
 701   1              ShowNumber(4,16+j,(year+8)/10);
 702   1                ShowNumber(4,24+j,(year+8)%10);
 703   1                ShowChina(4,32+j,16);
 704   1                                          //month
 705   1               ShowNumber(4,48+j,mon/10);
 706   1                  ShowNumber(4,56+j,mon%10);
 707   1                   ShowChina(4,64+j,17);
 708   1                                          //day
 709   1                    r_ShowNumber(4,80+j,day/10);
 710   1                    r_ShowNumber(4,88+j,day%10);
 711   1                   ShowChina(4,96+j,18);
 712   1                               show_time();
 713   1      }
 714          void adj_hour(void)
 715          {       uchar j;
 716   1                      j = 32;
 717   1              //hour
 718   1              r_ShowNumber(6,0+j,hou/10);
 719   1              r_ShowNumber(6,8+j,hou%10);
 720   1              ShowChina(6,16+j,19);
 721   1              //minute
 722   1              ShowNumber(6,32+j,min/10);
 723   1              ShowNumber(6,40+j,min%10);
 724   1              ShowChina(6,48+j,20);
 725   1              //second
 726   1              ShowNumber(6,64+j,sec/10);
 727   1              ShowNumber(6,72+j,sec%10);
 728   1              ShowChina(6,80+j,21);
 729   1              show_date();
 730   1      }
 731          void adj_min(void)
 732          {       uchar j;
 733   1                      j = 32;
 734   1              //hour
 735   1              ShowNumber(6,0+j,hou/10);
C51 COMPILER V7.07   GSD                                                                   02/12/2009 20:21:02 PAGE 13  

 736   1              ShowNumber(6,8+j,hou%10);
 737   1              ShowChina(6,16+j,19);
 738   1              //minute
 739   1              r_ShowNumber(6,32+j,min/10);
 740   1              r_ShowNumber(6,40+j,min%10);
 741   1              ShowChina(6,48+j,20);
 742   1              //second
 743   1              ShowNumber(6,64+j,sec/10);
 744   1              ShowNumber(6,72+j,sec%10);
 745   1              ShowChina(6,80+j,21);
 746   1              show_date();
 747   1      }
 748          
 749          void dis_adjtime(void)
 750          {
 751   1          uchar i,j,k;
 752   1          if(key==set)
 753   1              {  MS++;
 754   2              if(MS>=6)
 755   2                      {MS=0;
 756   3                              
 757   3                      i=convert_BCD(min);
 758   3                         ISendByte(PCF8583, 0X03,i);
 759   3                          i=convert_BCD(hou);
 760   3                               ISendByte(PCF8583, 0X04, i);
 761   3                                         j=convert_BCD(day);
 762   3                                         j=j&0x3f;
 763   3                                         k=year<<6;
 764   3                                         i=j|k;
 765   3                                         ISendByte(PCF8583, 0x05, i);
 766   3                                         i=convert_BCD(mon);
 767   3                                         ISendByte(PCF8583, 0x06, i);
 768   3                                           ISendByte(PCF8583, 0X00,0x00);             
 769   3                        }
 770   2              }
 771   1      
 772   1              switch(MS)
 773   1                      {
 774   2                      case 1: adj_year();break;
 775   2                      case 2: 
 776   2                              {adj_month();
 777   3                              //i=convert_BCD(min);
 778   3                               // i=i|year;
 779   3                               //ISendByte(PCF8583, 0X03,i);
 780   3                              }
 781   2                              break;
 782   2                      case  3:
 783   2                              adj_day();
 784   2                              break;
 785   2                      case 4: adj_hour();break;
 786   2                      case  5: adj_min();break;
 787   2                      default:break;
 788   2              }
 789   1          switch(MS)
 790   1              {
 791   2                case 1: 
 792   2                              {
 793   3                              ISendByte(PCF8583, 0X00,0x40);  
 794   3                              if(key==add)
 795   3                                      {     year++;
 796   4                                              if(year>3)year=0;
 797   4                                      adj_year();break;        
C51 COMPILER V7.07   GSD                                                                   02/12/2009 20:21:02 PAGE 14  

 798   4                                      }
 799   3                              if(key==sub)
 800   3                                      {     year--;
 801   4                                              if(year==0)year=3;
 802   4                                      adj_year();break;        
 803   4                                      }
 804   3                                }
 805   2                              break;
 806   2                case 2: 
 807   2                              if(key==add)
 808   2                                      {     mon++;
 809   3                                              if(mon>12)mon=1;
 810   3                                      adj_month();break;       
 811   3                                      }
 812   2                              if(key==sub)
 813   2                                      {     mon--;
 814   3                                              if(mon==0)mon=12;
 815   3                                      adj_month();break;       
 816   3                                      }
 817   2                              break;
 818   2                case 3: 
 819   2                              if(key==add)
 820   2                                      {     day++;
 821   3                                              if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))
 822   3                                                      {
 823   4                                                         if(day>31)day=1;
 824   4                                   }
 825   3                                                 else  
 826   3                                                      {if(day>30)day=1;}
 827   3                                      adj_day();break;         
 828   3                                      }
 829   2                              if(key==sub)
 830   2                                      {     day--;
 831   3                                          if(day==0)
 832   3                                              {
 833   4                                                  if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))
 834   4                                                         day=31;
 835   4                                                    if((mon==4)||(mon==6)||(mon==9)||(mon==11)) 
 836   4                                                         day=30;
 837   4                                                   if(mon==2) day=29;
 838   4                                              }
 839   3                                             adj_day();break;  
 840   3                                      }
 841   2                              break;
 842   2              case 4:
 843   2                              if(key==add)
 844   2                                      {     hou++;
 845   3                                              if(hou>23)hou=0;
 846   3                                      adj_hour();break;        
 847   3                                      }
 848   2                              if(key==sub)
 849   2                                      {     hou--;
 850   3                                              if(hou==0)hou=23;
 851   3                                     adj_hour();break;          
 852   3                                      }
 853   2                              break;
 854   2              case  5:
 855   2                              if(key==add)
 856   2                                      {     min++;
 857   3                                              if(min>59)min=0;
 858   3                                      adj_min();break;         
 859   3                                      }
C51 COMPILER V7.07   GSD                                                                   02/12/2009 20:21:02 PAGE 15  

 860   2                              if(key==sub)
 861   2                                      {     min--;
 862   3                                              if(min<0)min=59;
 863   3                                     adj_min();break;   
 864   3                                      }
 865   2                              break;
 866   2                      default:break;
 867   2              }
 868   1      }
 869          
 870          void main(void)
 871          {
 872   1         InitLCD();
 873   1         
 874   1                      show_hz();
 875   1           init_timer0();//初始化定时器T0
 876   1           ISendByte( PCF8583, 0x00, 0x00);
 877   1               show_ad();
 878   1          while(1)
 879   1          {             
 880   2               if(key!=0)
 881   2                      {
 882   3                          dis_adjtime();
 883   3                            key=0;
 884   3                      }
 885   2        
 886   2                if(MS==0)
 887   2                        {
 888   3                       readtime();
 889   3                       show_date_time();
 890   3                          }
 891   2                if( read_temp==1)
 892   2                     {
 893   3                            gettempTS();      
 894   3                               b1=temp/10;b2=temp%10;
 895   3                              show_ad();
 896   3                      read_temp=0;
 897   3                              }    //读DS18B20检测到的温度Delay1mS(600);  
 898   2              
 899   2                      //Display();
 900   2          }
 901   1      }
 902          
 903          
 904          
 905          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3276    ----
   CONSTANT SIZE    =    912    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     43      28
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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