📄 ds1302clock.lst
字号:
848 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
849 2 pClock++;
850 2 ucAddr +=2;
851 2 }
852 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
853 1 }
854
855 /******************************************************************************************
856 * 函数名称 :delay
857 * 功能描述 :
858 * 参数 : 参数名称: 输入/输出? 类型 描述
859 *
860 * 返回值 :
861 * 作者 :
C51 COMPILER V8.01 DS1302CLOCK 08/16/2008 15:50:11 PAGE 15
862 * 创建日期 :2006-12-19
863 * 全局变量 :
864 * 全局静态变量:
865 * 局部静态变量:
866 *----------------------------------------修改历史------------------------------------------
867 * 当前版本 : 修改人: 修改日期:
868 * 修改说明 :
869 ******************************************************************************************/
870 void delay(word useconds)
871 {
872 1 for(;useconds>0;useconds--);
873 1 }
874
875 /******************************************************************************************
876 * 函数名称 :Delay
877 * 功能描述 :
878 * 参数 : 参数名称: 输入/输出? 类型 描述
879 *
880 * 返回值 :
881 * 作者 :
882 * 创建日期 :2006-12-19
883 * 全局变量 :
884 * 全局静态变量:
885 * 局部静态变量:
886 *----------------------------------------修改历史------------------------------------------
887 * 当前版本 : 修改人: 修改日期:
888 * 修改说明 :
889 ******************************************************************************************/
890 void Delay18B20(int num)
891 {
892 1 while(num--);
893 1 }
894 /******************************************************************************************
895 * 函数名称 :ow_reset
896 * 功能描述 :复位
897 * 参数 : 参数名称: 输入/输出? 类型 描述
898 *
899 * 返回值 :
900 * 作者 :
901 * 创建日期 :2006-12-19
902 * 全局变量 :
903 * 全局静态变量:
904 * 局部静态变量:
905 *----------------------------------------修改历史------------------------------------------
906 * 当前版本 : 修改人: 修改日期:
907 * 修改说明 :
908 ******************************************************************************************/
909 byte ow_reset(void)
910 {
911 1 unsigned char x=0;
912 1 DQ = 1; //DQ复位
913 1 Delay18B20(8); //稍做延时
914 1 DQ = 0; //单片机将DQ拉低
915 1 Delay18B20(80); //精确延时 大于 480us
916 1 DQ = 1; //拉高总线
917 1 Delay18B20(14);
918 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
919 1 Delay18B20(20);
920 1 }
*** WARNING C173 IN LINE 920 OF DS1302CLOCK.C: missing return-expression
921
922 /******************************************************************************************
C51 COMPILER V8.01 DS1302CLOCK 08/16/2008 15:50:11 PAGE 16
923 * 函数名称 :read_byte
924 * 功能描述 :从 1-wire 总线上读取一个字节
925 * 参数 : 参数名称: 输入/输出? 类型 描述
926 *
927 * 返回值 :
928 * 作者 :
929 * 创建日期 :2006-12-19
930 * 全局变量 :
931 * 全局静态变量:
932 * 局部静态变量:
933 *----------------------------------------修改历史------------------------------------------
934 * 当前版本 : 修改人: 修改日期:
935 * 修改说明 :
936 ******************************************************************************************/
937 byte read_byte(void)
938 {
939 1 byte i;
940 1 byte value = 0;
941 1 for (i=8;i>0;i--)
942 1 {
943 2 value>>=1;
944 2 DQ = 0;
945 2 DQ = 1;
946 2 delay(1);
947 2 if(DQ)value|=0x80;
948 2 delay(6);
949 2 }
950 1 return(value);
951 1 }
952
953
954 /******************************************************************************************
955 * 函数名称 :write_byte
956 * 功能描述 :向 1-WIRE 总线上写一个字节
957 * 参数 : 参数名称: 输入/输出? 类型 描述
958 *
959 * 返回值 :
960 * 作者 :
961 * 创建日期 :2006-12-19
962 * 全局变量 :
963 * 全局静态变量:
964 * 局部静态变量:
965 *----------------------------------------修改历史------------------------------------------
966 * 当前版本 : 修改人: 修改日期:
967 * 修改说明 :
968 ******************************************************************************************/
969 void write_byte(char val)
970 {
971 1 byte i;
972 1 for (i=8; i>0; i--) // 一次写一位
973 1 {
974 2 DQ = 0; //
975 2 DQ = val&0x01;
976 2 Delay18B20(5); //
977 2 DQ = 1;
978 2 val=val/2;
979 2 }
980 1 Delay18B20(5);
981 1 }
982
983 /******************************************************************************************
984 * 函数名称 :Read_Temperature
C51 COMPILER V8.01 DS1302CLOCK 08/16/2008 15:50:11 PAGE 17
985 * 功能描述 :读取和显示温度
986 * 参数 : 参数名称: 输入/输出? 类型 描述
987 *
988 * 返回值 :
989 * 作者 :
990 * 创建日期 :2006-12-19
991 * 全局变量 :
992 * 全局静态变量:
993 * 局部静态变量:
994 *----------------------------------------修改历史------------------------------------------
995 * 当前版本 : 修改人: 修改日期:
996 * 修改说明 :
997 ******************************************************************************************/
998 Read_Temperature(char xx,char yy)
999 {
1000 1 uchar i,tl_temp;
1001 1 uint x;
1002 1 uchar ct[8];
1003 1 union{byte c[2]; int x;}temp;
1004 1
1005 1 ow_reset();
1006 1 write_byte(0xCC); // Skip ROM
1007 1 write_byte(0x44); // 转换温度
1008 1 ow_reset();
1009 1 write_byte(0xCC); //Skip ROM
1010 1 write_byte(0xbe); // 读取寄存器
1011 1 temp.c[1]=read_byte();//读出温度低8位
1012 1 temp.c[0]=read_byte();//读出温度高8位
1013 1
1014 1 // 零下温度判断
1015 1 sflag=0; //温度零下标志 0:零上,1:零下
1016 1 if((temp.c[0]&0xf8)!=0x00)
1017 1 {
1018 2 sflag=1; //零下标志位置1
1019 2 temp.c[1]=~temp.c[1]; //低8位取反
1020 2 temp.c[0]=~temp.c[0]; //高8位取反
1021 2 tl_temp=temp.c[1]+1; //低8位加1
1022 2 temp.c[1]=tl_temp; //计算后重新存入数组
1023 2 if(tl_temp>255) temp.c[0]++; //如果低8位大于255,向高8位进1
1024 2 }
1025 1
1026 1 x=((temp.c[0]&0x07)*256+temp.c[1])*.625;
1027 1 for(i=0;i<8;i++)
1028 1 {
1029 2 ct[i]=0;
1030 2 }
1031 1 i=0;
1032 1 while(x/10)
1033 1 {
1034 2 ct[i]=x%10;
1035 2 x=x/10;
1036 2 i++;
1037 2 }
1038 1 ct[i]=x;
1039 1
1040 1 if(sflag==1) DisplayOneChar(xx-1,yy,0x2d);
1041 1 else DisplayOneChar(xx-1,yy,0x20);
1042 1 DisplayOneChar(xx, yy,ct[2]+0x30);//显示温度十位数
1043 1 DisplayOneChar(xx+1,yy,ct[1]+0x30);//显示温度个位数
1044 1 DisplayOneChar(xx+2,yy,0x2e);//显示小数点
1045 1 DisplayOneChar(xx+3,yy,ct[0]+0x30);//显示温度小数位
1046 1 DisplayOneChar(xx+4,yy,0x01);//显示自定义字符
C51 COMPILER V8.01 DS1302CLOCK 08/16/2008 15:50:11 PAGE 18
1047 1 DisplayOneChar(xx+5,yy,0x43);//显示字符“C
1048 1 }
1049
1050 /******************************************************************************************
1051 * 函数名称 :adjust_res
1052 * 功能描述 :温度分辨率调整
1053 * 参数 : 参数名称: 输入/输出? 类型 描述
1054 *
1055 * 返回值 :
1056 * 作者 :
1057 * 创建日期 :2006-12-19
1058 * 全局变量 :
1059 * 全局静态变量:
1060 * 局部静态变量:
1061 *----------------------------------------修改历史------------------------------------------
1062 * 当前版本 : 修改人: 修改日期:
1063 * 修改说明 :
1064 ******************************************************************************************/
1065 void adjust_res(char res) ///res 分别等于 0x1f, 0x3f, 0x5f 温度读数分辨率分别对应
1066 // 0.5, 0.25, 0.125
1067 {
1068 1 ow_reset(); //复位
1069 1 write_byte(0xcc); //跳过Rom
1070 1 write_byte(0x4e); //写暂存器
1071 1 write_byte(0x02); //写TH
1072 1 write_byte(0x01); //写TL
1073 1 //write_byte(0x5f); //写结构寄存器
1074 1 write_byte(res);
1075 1 ow_reset(); //复位
1076 1 write_byte(0xcc); //跳过Rom
1077 1 write_byte(0x48); //把暂存器内容写到EPRam中
1078 1 }
1079 /******************************************************************************************
1080 * 函数名称 :mychar
1081 * 功能描述 :
1082 * 参数 : 参数名称: 输入/输出? 类型 描述
1083 *
1084 * 返回值 :
1085 * 作者 :
1086 * 创建日期 :2006-12-19
1087 * 全局变量 :
1088 * 全局静态变量:
1089 * 局部静态变量:
1090 *----------------------------------------修改历史------------------------------------------
1091 * 当前版本 : 修改人: 修改日期:
1092 * 修改说明 :
1093 ******************************************************************************************/
1094 void mychar()//自定义字符
1095 {
1096 1 WriteCommandLCM(0x48, 0); //第一行
1097 1 WriteDataLCM(0x02);
1098 1 WriteCommandLCM(0x49, 0); //第2行
1099 1 WriteDataLCM(0x05);
1100 1 WriteCommandLCM(0x4a, 0); //第3
1101 1 WriteDataLCM(0x05);
1102 1 WriteCommandLCM(0x4b, 0); //第4
1103 1 WriteDataLCM(0x02);
1104 1 WriteCommandLCM(0x4c, 0); //第5
1105 1 WriteDataLCM(0x00);
1106 1 WriteCommandLCM(0x4d, 0); //第6
1107 1 WriteDataLCM(0x00);
1108 1 WriteCommandLCM(0x4e, 0); //第7
C51 COMPILER V8.01 DS1302CLOCK 08/16/2008 15:50:11 PAGE 19
1109 1 WriteDataLCM(0x00);
1110 1 WriteCommandLCM(0x4f, 0); //第8
1111 1 WriteDataLCM(0x00);
1112 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2006 ----
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 + -