📄 ds1302clock.lst
字号:
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 + -