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

📄 ds1302clock.lst

📁 数字体温计,由单片机控制现实当前的温度
💻 LST
📖 第 1 页 / 共 4 页
字号:
 842   2              ucAddr +=2;
 843   2          }
 844   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 845   1      }
 846          
 847          /******************************************************************************************
 848          * 函数名称    :delay
 849          * 功能描述    :
 850          * 参数        :  参数名称:    输入/输出?     类型            描述
 851          * 
 852          * 返回值      :
 853          * 作者        :
 854          * 创建日期    :2006-12-19
 855          * 全局变量    :
 856          * 全局静态变量:
 857          * 局部静态变量:
 858          *----------------------------------------修改历史------------------------------------------
 859          * 当前版本    :                         修改人:                  修改日期:
 860          * 修改说明    :
 861          ******************************************************************************************/
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 15  

 862          void delay(word useconds)
 863          {
 864   1              for(;useconds>0;useconds--);
 865   1      }
 866          
 867          /******************************************************************************************
 868          * 函数名称    :Delay
 869          * 功能描述    :
 870          * 参数        :  参数名称:    输入/输出?     类型            描述
 871          * 
 872          * 返回值      :
 873          * 作者        :
 874          * 创建日期    :2006-12-19
 875          * 全局变量    :
 876          * 全局静态变量:
 877          * 局部静态变量:
 878          *----------------------------------------修改历史------------------------------------------
 879          * 当前版本    :                         修改人:                  修改日期:
 880          * 修改说明    :
 881          ******************************************************************************************/
 882          void Delay18B20(int num)
 883          {
 884   1              while(num--);
 885   1      }
 886          /******************************************************************************************
 887          * 函数名称    :ow_reset
 888          * 功能描述    :复位
 889          * 参数        :  参数名称:    输入/输出?     类型            描述
 890          * 
 891          * 返回值      :
 892          * 作者        :
 893          * 创建日期    :2006-12-19
 894          * 全局变量    :
 895          * 全局静态变量:
 896          * 局部静态变量:
 897          *----------------------------------------修改历史------------------------------------------
 898          * 当前版本    :                         修改人:                  修改日期:
 899          * 修改说明    :
 900          ******************************************************************************************/
 901          byte ow_reset(void)
 902          {
 903   1              unsigned char x=0;
 904   1                DQ = 1;    //DQ复位
 905   1                Delay18B20(8);  //稍做延时
 906   1                DQ = 0;    //单片机将DQ拉低
 907   1                Delay18B20(80); //精确延时 大于 480us
 908   1                DQ = 1;    //拉高总线
 909   1                Delay18B20(14);
 910   1                x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 911   1                Delay18B20(20);
 912   1      }     
*** WARNING C173 IN LINE 912 OF DS1302CLOCK.C: missing return-expression
 913          
 914          /******************************************************************************************
 915          * 函数名称    :read_byte
 916          * 功能描述    :从 1-wire 总线上读取一个字节
 917          * 参数        :  参数名称:    输入/输出?     类型            描述
 918          * 
 919          * 返回值      :
 920          * 作者        :
 921          * 创建日期    :2006-12-19
 922          * 全局变量    :
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 16  

 923          * 全局静态变量:
 924          * 局部静态变量:
 925          *----------------------------------------修改历史------------------------------------------
 926          * 当前版本    :                         修改人:                  修改日期:
 927          * 修改说明    :
 928          ******************************************************************************************/
 929          byte read_byte(void)
 930          {
 931   1              byte i;
 932   1              byte value = 0;
 933   1              for (i=8;i>0;i--)
 934   1              {
 935   2              value>>=1;
 936   2              DQ = 0; 
 937   2              DQ = 1;
 938   2              delay(1);  
 939   2              if(DQ)value|=0x80;
 940   2              delay(6); 
 941   2              }
 942   1              return(value);
 943   1      }
 944          
 945          
 946          /******************************************************************************************
 947          * 函数名称    :write_byte
 948          * 功能描述    :向 1-WIRE 总线上写一个字节
 949          * 参数        :  参数名称:    输入/输出?     类型            描述
 950          * 
 951          * 返回值      :
 952          * 作者        :
 953          * 创建日期    :2006-12-19
 954          * 全局变量    :
 955          * 全局静态变量:
 956          * 局部静态变量:
 957          *----------------------------------------修改历史------------------------------------------
 958          * 当前版本    :                         修改人:                  修改日期:
 959          * 修改说明    :
 960          ******************************************************************************************/
 961          void write_byte(char val)
 962          {
 963   1              byte i;
 964   1              for (i=8; i>0; i--) // 一次写一位
 965   1              {
 966   2              DQ = 0; // 
 967   2              DQ = val&0x01;
 968   2              Delay18B20(5); // 
 969   2              DQ = 1;
 970   2              val=val/2;
 971   2              }
 972   1              Delay18B20(5);
 973   1      }
 974          
 975          /******************************************************************************************
 976          * 函数名称    :Read_Temperature
 977          * 功能描述    :读取和显示温度
 978          * 参数        :  参数名称:    输入/输出?     类型            描述
 979          * 
 980          * 返回值      :
 981          * 作者        :
 982          * 创建日期    :2006-12-19
 983          * 全局变量    :
 984          * 全局静态变量:
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 17  

 985          * 局部静态变量:
 986          *----------------------------------------修改历史------------------------------------------
 987          * 当前版本    :                         修改人:                  修改日期:
 988          * 修改说明    :
 989          ******************************************************************************************/
 990          Read_Temperature(char xx,char yy)
 991          {
 992   1              uchar i,tl_temp;
 993   1              uint  x;
 994   1              uchar ct[8];
 995   1              union{byte c[2]; int x;}temp;
 996   1        
 997   1              ow_reset();
 998   1              write_byte(0xCC); // Skip ROM
 999   1              write_byte(0x44); // 转换温度
1000   1              ow_reset();
1001   1              write_byte(0xCC); //Skip ROM
1002   1              write_byte(0xbe); // 读取寄存器
1003   1              temp.c[1]=read_byte();//读出温度低8位
1004   1              temp.c[0]=read_byte();//读出温度高8位
1005   1       
1006   1        // 零下温度判断
1007   1              sflag=0; //温度零下标志 0:零上,1:零下
1008   1              if((temp.c[0]&0xf8)!=0x00)
1009   1              {
1010   2              sflag=1; //零下标志位置1
1011   2              temp.c[1]=~temp.c[1]; //低8位取反
1012   2              temp.c[0]=~temp.c[0]; //高8位取反
1013   2              tl_temp=temp.c[1]+1;  //低8位加1 
1014   2              temp.c[1]=tl_temp;    //计算后重新存入数组
1015   2              if(tl_temp>255) temp.c[0]++;  //如果低8位大于255,向高8位进1
1016   2              }  
1017   1      
1018   1              x=((temp.c[0]&0x07)*256+temp.c[1])*.625;
1019   1              for(i=0;i<8;i++)
1020   1             {
1021   2               ct[i]=0;
1022   2             }
1023   1              i=0;
1024   1              while(x/10)
1025   1              {
1026   2              ct[i]=x%10;
1027   2              x=x/10;
1028   2              i++;
1029   2              }
1030   1              ct[i]=x;
1031   1      
1032   1              if(sflag==1) DisplayOneChar(xx-1,yy,0x2d);
1033   1              else         DisplayOneChar(xx-1,yy,0x20);
1034   1              DisplayOneChar(xx,  yy,ct[2]+0x30);//显示温度十位数
1035   1              DisplayOneChar(xx+1,yy,ct[1]+0x30);//显示温度个位数
1036   1              DisplayOneChar(xx+2,yy,0x2e);//显示小数点
1037   1              DisplayOneChar(xx+3,yy,ct[0]+0x30);//显示温度小数位
1038   1              DisplayOneChar(xx+4,yy,0x01);//显示自定义字符
1039   1              DisplayOneChar(xx+5,yy,0x43);//显示字符“C
1040   1      }
1041          
1042          /******************************************************************************************
1043          * 函数名称    :adjust_res
1044          * 功能描述    :温度分辨率调整
1045          * 参数        :  参数名称:    输入/输出?     类型            描述
1046          * 
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 18  

1047          * 返回值      :
1048          * 作者        :
1049          * 创建日期    :2006-12-19
1050          * 全局变量    :
1051          * 全局静态变量:
1052          * 局部静态变量:
1053          *----------------------------------------修改历史------------------------------------------
1054          * 当前版本    :                         修改人:                  修改日期:
1055          * 修改说明    :
1056          ******************************************************************************************/
1057          void adjust_res(char res) ///res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
1058                                     //              0.5, 0.25, 0.125   
1059          {
1060   1              ow_reset();        //复位
1061   1              write_byte(0xcc);  //跳过Rom
1062   1              write_byte(0x4e);  //写暂存器
1063   1              write_byte(0x02);  //写TH 
1064   1              write_byte(0x01);  //写TL
1065   1        //write_byte(0x5f);  //写结构寄存器
1066   1              write_byte(res);
1067   1              ow_reset();       //复位
1068   1              write_byte(0xcc); //跳过Rom 
1069   1              write_byte(0x48); //把暂存器内容写到EPRam中
1070   1      } 
1071          /******************************************************************************************
1072          * 函数名称    :mychar
1073          * 功能描述    :
1074          * 参数        :  参数名称:    输入/输出?     类型            描述
1075          * 
1076          * 返回值      :
1077          * 作者        :
1078          * 创建日期    :2006-12-19
1079          * 全局变量    :
1080          * 全局静态变量:
1081          * 局部静态变量:
1082          *----------------------------------------修改历史------------------------------------------
1083          * 当前版本    :                         修改人:                  修改日期:
1084          * 修改说明    :
1085          ******************************************************************************************/
1086          void mychar()//自定义字符
1087          {
1088   1                      WriteCommandLCM(0x48, 0); //第一行
1089   1                      WriteDataLCM(0x02);
1090   1                      WriteCommandLCM(0x49, 0); //第2行
1091   1                      WriteDataLCM(0x05);
1092   1                      WriteCommandLCM(0x4a, 0); //第3
1093   1                      WriteDataLCM(0x05);
1094   1                      WriteCommandLCM(0x4b, 0); //第4
1095   1                      WriteDataLCM(0x02);
1096   1                      WriteCommandLCM(0x4c, 0); //第5
1097   1                      WriteDataLCM(0x00);
1098   1                      WriteCommandLCM(0x4d, 0); //第6
1099   1                      WriteDataLCM(0x00);
1100   1                      WriteCommandLCM(0x4e, 0); //第7
1101   1                      WriteDataLCM(0x00);
1102   1                      WriteCommandLCM(0x4f, 0); //第8
1103   1                      WriteDataLCM(0x00);
1104   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2004    ----
C51 COMPILER V7.10   DS1302CLOCK                                                           11/08/2008 19:50:12 PAGE 19  

   CONSTANT SIZE    =      6    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9      29
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      9    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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