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

📄 hclcd.lst

📁 单片机开发板源程序适合初学者 第二部分DA转换输出
💻 LST
📖 第 1 页 / 共 4 页
字号:
 780   2                      temp =temp<<1;
 781   2                      SCL = 0;
 782   2                      SomeNOP();
 783   2                      SDA = CY;
 784   2                      SomeNOP();
 785   2                      SCL = 1;
 786   2                      SomeNOP();
 787   2              }
 788   1              SCL = 0;
 789   1              SomeNOP();
 790   1              SDA = 1;
 791   1              SomeNOP();
 792   1      }
 793          /*I2C读数据程序(从数据线上读出一个BYTE)返回值为读出的数据(BYTE型)*/
 794          Uchar Readx(void)
 795          {
 796   1              Uchar i,j,k=0;
 797   1              SCL = 0;
 798   1              SomeNOP();
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 14  

 799   1              SDA = 1;
 800   1              for (i=0;i<8;i++)       // 串行移位,先读出高位,后读出低位//
 801   1              {
 802   2                      SomeNOP();
 803   2                      SCL = 1;
 804   2                      SomeNOP();
 805   2                      if(SDA ==1) j=1;
 806   2                      else    j=0;
 807   2                      k =(k<<1)|j;
 808   2                      SCL = 0;
 809   2              }
 810   1              SomeNOP();              
 811   1              return(k);              //返回读出的值//
 812   1      }
 813          
 814          //******************以下为对24CXX系列的读写程序******************************//
 815          //*************24CXX的device address 为写0A0H,读为0A1H*********************//
 816          /*某个地址写数据*/
 817          void X24_Write(Uchar Addresshigh,Uchar Addresslow,Uchar Write_date)
 818          {
 819   1              I2CStart();
 820   1              Writex(0xA0);
 821   1              AutoACK();
 822   1              Writex(Addresshigh);
 823   1              AutoACK();
 824   1              Writex(Addresslow);
 825   1              AutoACK();
 826   1              Writex(Write_date);
 827   1              AutoACK();
 828   1              I2CStop();
 829   1              Delay_1ms(10);
 830   1      }
 831          
 832          /*对某个地址读操作,函数值为读出的数据*/
 833          Uchar X24_Read(Uchar Addresshigh,Uchar Addresslow)
 834          {       
 835   1              Uchar i;
 836   1              I2CStart();
 837   1              Writex(0xA0);
 838   1              AutoACK();
 839   1              Writex(Addresshigh);
 840   1              AutoACK();
 841   1              Writex(Addresslow);
 842   1              AutoACK();
 843   1              I2CStart();
 844   1              Writex(0xA1);
 845   1              AutoACK();
 846   1              i =Readx();
 847   1              //ACK();        //注意:这里不能有ACK应答信号//
 848   1              I2CStop();
 849   1              Delay_1ms(0);
 850   1              return(i);
 851   1      }
 852          
 853          /*对内存中的数据块写入,入口为写EEPROM的地址,内存缓冲中的数据的起始地址(是IDATA的数据)*/       
 854          void X24_WritePage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Writeip)
 855          {
 856   1              Uchar i;
 857   1              I2CStart();
 858   1              Writex(0xA0);
 859   1              AutoACK();
 860   1              Writex(Addresshigh);
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 15  

 861   1              AutoACK();
 862   1              Writex(Addresslow);
 863   1              AutoACK();
 864   1              for(i=0;i<64;i++)
 865   1              {
 866   2                      Writex(*Writeip++);
 867   2                      AutoACK();
 868   2              }
 869   1              I2CStop();
 870   1      }
 871          /*把EEPROM中的数据读出来存放在内存缓冲中,起始地址为(是IDATA的数据)*/
 872          void X24_ReadPage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Readip)
 873          {
 874   1              Uchar i;
 875   1              I2CStart();
 876   1              Writex(0xA0);
 877   1              AutoACK();
 878   1              Writex(Addresshigh);
 879   1              AutoACK();
 880   1              Writex(Addresslow);
 881   1              AutoACK();
 882   1              I2CStart();
 883   1              Writex(0xA1);
 884   1              AutoACK();
 885   1              for(i=0;i<63;i++)               //PAGE读的时候最后一个BYTE不要ACK信号//
 886   1              {
 887   2                      *Readip = Readx();
 888   2                       Readip = Readip++;
 889   2                       ACK();
 890   2                      }
 891   1              *Readip = Readx();
 892   1              NACK();
 893   1              I2CStop();
 894   1              Delay_1ms(0);
 895   1      }
 896          
 897          
 898          //*******************以下为对PCF8383/PCF8563的读写子程序********************//  
 899          //**********时钟片device address的写地址为0A2H,读地址为0A3H******************//
 900          /*对PCF8563的时钟读到内存中,以IDATA指针开始的连续7个BYTE*/
 901          //****读出的内容依次为“秒,分钟,小时,日,星期,月/世纪,年********************//
 902          //PCF8585依次为“秒,分钟,小时,日,星期月
 903          void GetPCF8563(Uchar idata *Getip)
 904          {
 905   1              Uchar i;
 906   1              I2CStart();
 907   1              Writex(0xA2);
 908   1              AutoACK();
 909   1              Writex(0x02);   //从秒地址开始读//
 910   1              AutoACK();
 911   1              I2CStart();
 912   1              Writex(0xA3);
 913   1              AutoACK();
 914   1              for(i=0;i<6;i++)
 915   1              {
 916   2                      *Getip = Readx();
 917   2                      Getip = Getip++;
 918   2                      ACK();
 919   2              }
 920   1              *Getip = Readx();
 921   1              NACK();
 922   1              I2CStop();
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 16  

 923   1              Delay_1ms(0);
 924   1      }
 925          /*设定8563/8583的时间内容依次为“秒,分钟,小时,日,星期,月/世纪,年*/
 926          //PCF8585依次为“秒,分钟,小时,日,星期月
 927          void SetPCF8563(Uchar idata *Setip)
 928          {
 929   1              Uchar i;
 930   1              I2CStart();
 931   1              Writex(0xA2);
 932   1              AutoACK();
 933   1              Writex(0x02);
 934   1              AutoACK();
 935   1              for(i=0;i<7;i++)
 936   1              {
 937   2                      Writex(*Setip++);
 938   2                      AutoACK();
 939   2              }
 940   1              I2CStop();
 941   1      }
 942          
 943          Uchar ReadPCF8563(Uchar AddrePCF)
 944          {
 945   1              Uchar i;
 946   1              I2CStart();
 947   1              Writex(0xA2);
 948   1              AutoACK();
 949   1              Writex(AddrePCF);
 950   1              AutoACK();
 951   1              I2CStart();
 952   1              Writex(0xA3);
 953   1              AutoACK();
 954   1              i =Readx();
 955   1              //ACK();        //注意:这里不能有ACK应答信号//
 956   1              I2CStop();
 957   1              Delay_1ms(0);
 958   1              return(i);
 959   1      }
 960          void WritePCF8563(Uchar AddrePCF,Uchar PCFdata)
 961          {
 962   1              I2CStart();
 963   1              Writex(0xA2);
 964   1              AutoACK();
 965   1              Writex(AddrePCF);
 966   1              AutoACK();
 967   1              Writex(PCFdata);
 968   1              AutoACK();
 969   1              I2CStop();
 970   1              Delay_1ms(10);
 971   1      }
 972                   
 973                  
 974          
 975          void SetWaring (Uchar Wyear,Uchar Wmonth,Uchar Wday)
 976          {
 977   1              X24_Write(0x07,0xf0,Wyear);
 978   1              X24_Write(0x07,0xf1,Wmonth);
 979   1              X24_Write(0x07,0xf2,Wday);
 980   1      }
 981          
 982                  
 983          /*返回值为1和0,1为已溢出,0为没有溢出*/  
 984          bit CheckTime(void)
C51 COMPILER V7.06   HCLCD                                                                 09/24/2008 15:03:44 PAGE 17  

 985          {
 986   1              Uchar j,k;
 987   1              j = X24_Read(0x07,0xcb);
 988   1              k = ReadPCF8563(0x08 );         /*读年的时间*/
 989   1              if(k<j)
 990   1              {
 991   2                      return(0);
 992   2              }
 993   1              else 
 994   1              {       
 995   2                      if(k>j)
 996   2                      {
 997   3                              return(1);
 998   3                      }
 999   2                      else
1000   2                      {
1001   3                              j = X24_Read(0x07,0xcc);
1002   3                              k = ReadPCF8563(0x07)&0x1f;     /*读月的时间*/
1003   3                              if (k<j)
1004   3                              {
1005   4                                      return(0);
1006   4                              }
1007   3                              else
1008   3                              {
1009   4                                      if(k>j)
1010   4                                      {
1011   5                                              return(1);
1012   5                                      }
1013   4                                      else
1014   4                                      {
1015   5                                              j = X24_Read(0x07,0xcd);
1016   5                                              k = ReadPCF8563(0x05)&0x3f;     /*读日的时间*/
1017   5                                              if (k>j)return(1);
1018   5                                              else return(0);
1019   5                                      }
1020   4                              }               
1021   3                      }                       
1022   2              }
1023   1      }
1024          
1025          
1026          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2590    ----
   CONSTANT SIZE    =   3052    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     29      10
   IDATA SIZE       =     71    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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