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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 13  

 736   1                DisplayListChar(5,1,reset);       //显示reset   
 737   1      }
 738          /**********************************退出***********************************************/
 739          void model6()
 740          {
 741   1        OutputInformation(10,1,0x20);       //不显示
 742   1        OutputInformation(11,1,0x20);       //不显示
 743   1        DisplayListChar(0,1,lamp);          //显示lamp
 744   1        DisplayListChar(5,1,reset);         //显示reset
 745   1        if(a==1)
 746   1               {OutputInformation(12,1,0x20);   //不显示
 747   2                OutputInformation(13,1,0x20);   //不显示
 748   2                OutputInformation(14,1,0x20);   //不显示
 749   2                OutputInformation(15,1,0x20);   //不显示
 750   2               }
 751   1        else
 752   1           DisplayListChar(12,1,exit);      //显示exit
 753   1      }
 754          
 755                  
 756            
 757          //********* LCM1602驱动程序 ***************
 758          //写数据
 759          void WriteDataLCM(uchar WDLCM)
 760          {
 761   1      ReadStatusLCM(); //检测忙
 762   1      
 763   1      LCM_RS = 1;
 764   1      LCM_RW = 0;
 765   1      LCM_E = 0; 
 766   1      LCM_Data = WDLCM;
 767   1      delayNOP() ;
 768   1          LCM_E = 1 ;
 769   1          delayNOP() ;
 770   1       LCM_E = 0 ; 
 771   1      }
 772          //写指令
 773          void WriteCommandLCM(uchar WCLCM,BuysC)     //BuysC为0时忽略忙检测
 774           {
 775   1        if (BuysC) ReadStatusLCM(); //根据需要检测忙
 776   1       
 777   1        LCM_RS = 0;
 778   1        LCM_RW = 0; 
 779   1        LCM_E = 0;
 780   1       _nop_() ;
 781   1          _nop_() ; 
 782   1       LCM_Data = WCLCM;
 783   1      delayNOP() ;
 784   1        LCM_E = 1; 
 785   1      delayNOP() ;
 786   1       LCM_E = 0;
 787   1       }
 788          //读状态
 789          uchar ReadStatusLCM(void)
 790           {
 791   1       LCM_RS = 0 ;
 792   1          LCM_RW = 1 ;
 793   1          LCM_E = 1 ;
 794   1          delayNOP() ;
 795   1        LCM_E = 1;
 796   1        while (LCM_Data & Busy); //检测忙信号
 797   1       LCM_E =0;
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 14  

 798   1        return(LCM_Data);
 799   1       }
 800          //LCM初始化
 801          void LCMInit(void) 
 802           {
 803   1      
 804   1       
 805   1      
 806   1      delay1(15) ;
 807   1      
 808   1      WriteCommandLCM(0x01,1);
 809   1        WriteCommandLCM(0x38,1);
 810   1          delay1(5) ;
 811   1        WriteCommandLCM(0x38,1);
 812   1        delay1(5) ;
 813   1        WriteCommandLCM(0x38,1);
 814   1        delay1(5) ;
 815   1        WriteCommandLCM(0x0c,1); //显示模式设置,开始要求每次检测忙信号
 816   1        delay1(5) ;
 817   1        WriteCommandLCM(0x06,1); // 显示光标移动设置
 818   1        
 819   1       }
 820          //按指定位置显示一个字符
 821          void OutputInformation(uchar X, uchar Y, uchar DData)
 822           {
 823   1        Y &= 0x1;
 824   1        X &= 0xF; //限制X不能大于15,Y不能大于1
 825   1        if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 826   1        X |= 0x80; //算出指令码
 827   1        WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 828   1        WriteDataLCM(DData);
 829   1       }
 830          //按指定位置显示一串字符  ***原来的遇到空格0x20就不显示***
 831          void DisplayListChar(uchar X, uchar Y, uchar code *DData)
 832          {
 833   1        uchar ListLength,j;
 834   1        ListLength = strlen(DData);
 835   1        Y &= 0x1;
 836   1        X &= 0xF; //限制X不能大于15,Y不能大于1
 837   1            if (X <= 0xF) //X坐标应小于0xF
 838   1              { 
 839   2               for(j=0;j<ListLength;j++)
 840   2                  {
 841   3                   OutputInformation(X, Y, DData[j]); //显示单个字符
 842   3                   X++;
 843   3                  }
 844   2              }
 845   1      }
 846          //5ms延时
 847          void Delay5Ms(void)
 848           {
 849   1        unsigned int TempCyc = 5552;
 850   1        while(TempCyc--);
 851   1       }
 852          //400ms延时
 853          void Delay400Ms(void)
 854           {
 855   1        uchar TempCycA = 5;
 856   1        unsigned int TempCycB;
 857   1        while(TempCycA--)
 858   1        {
 859   2         TempCycB=7269;
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 15  

 860   2         while(TempCycB--);
 861   2        }
 862   1       }
 863          
 864          //********DS1302读写程序***************//
 865          /******************************************************************** 
 866          函 数 名:RTInputByte()
 867          功    能:实时时钟写入一字节
 868          说    明:往DS1302写入1Byte数据 (内部函数)
 869          入口参数:d 写入的数据 
 870          返 回 值:无  
 871          ***********************************************************************/
 872          void RTInputByte(uchar d) 
 873          { 
 874   1          uchar i;
 875   1          ACC = d;
 876   1          for(i=8; i>0; i--)
 877   1          {
 878   2              T_IO = ACC0;           /*相当于汇编中的 RRC */
 879   2              T_CLK = 1;
 880   2              T_CLK = 0;
 881   2              ACC = ACC >> 1; 
 882   2          } 
 883   1      }
 884          /******************************************************************** 
 885          函 数 名:RTOutputByte()
 886          功    能:实时时钟读取一字节
 887          说    明:从DS1302读取1Byte数据 (内部函数)
 888          入口参数:无  
 889          返 回 值:ACC
 890          设    计:zhaojunjie           日    期:2002-03-19
 891          修    改:                     日    期: 
 892          ***********************************************************************/
 893          uchar RTOutputByte(void) 
 894          { 
 895   1          uchar i;
 896   1          for(i=8; i>0; i--)
 897   1          {
 898   2              ACC = ACC >>1;         /*相当于汇编中的 RRC */
 899   2              ACC7 = T_IO;
 900   2              T_CLK = 1;
 901   2              T_CLK = 0;
 902   2          } 
 903   1          return(ACC); 
 904   1      }
 905          /******************************************************************** 
 906          函 数 名:W1302()
 907          功    能:往DS1302写入数据
 908          说    明:先写地址,后写命令/数据 (内部函数)
 909          调    用:RTInputByte() , RTOutputByte()
 910          入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 911          返 回 值:无
 912          ***********************************************************************/
 913          void W1302(uchar ucAddr, uchar ucDa)
 914          {
 915   1          T_RST = 0;
 916   1          T_CLK = 0;
 917   1          T_RST = 1;
 918   1          RTInputByte(ucAddr);       /* 地址,命令 */
 919   1          RTInputByte(ucDa);       /* 写1Byte数据*/
 920   1          T_CLK = 1;
 921   1          T_RST = 0;
C51 COMPILER V8.18   DA1302                                                                12/15/2009 15:11:35 PAGE 16  

 922   1      }
 923          /******************************************************************** 
 924          函 数 名:R1302()
 925          功    能:读取DS1302某地址的数据
 926          说    明:先写地址,后读命令/数据 (内部函数)
 927          调    用:RTInputByte() , RTOutputByte()
 928          入口参数:ucAddr: DS1302地址
 929          返 回 值:ucData :读取的数据
 930          ***********************************************************************/
 931          uchar R1302(uchar ucAddr)
 932          {
 933   1          uchar ucData;
 934   1          T_RST = 0;
 935   1          T_CLK = 0;
 936   1          T_RST = 1;
 937   1          RTInputByte(ucAddr);             /* 地址,命令 */
 938   1          ucData = RTOutputByte();         /* 读1Byte数据 */
 939   1          T_CLK = 1;
 940   1          T_RST = 0;
 941   1          return(ucData);
 942   1      }
 943          
 944          /******************************************************************** 
 945          函 数 名:Set1302()
 946          功    能:设置初始时间
 947          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 948          调    用:W1302()
 949          入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 950                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 951          返 回 值:无
 952          ***********************************************************************/
 953          void Set1302(uchar *pClock) 
 954          {
 955   1          uchar i;
 956   1          uchar ucAddr = 0x80; 
 957   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作*/
 958   1          for(i =7; i>0; i--)
 959   1          { 
 960   2              W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 961   2              pClock++;
 962   2              ucAddr +=2;
 963   2          }
 964   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护*/
 965   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3498    ----
   CONSTANT SIZE    =     69    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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