📄 24m点阵时钟.lst
字号:
891 1 DQ = 1 ; //DQ复位
892 1 Delay(8) ; //稍做延时
893 1
894 1 DQ = 0 ; //单片机将DQ拉低
895 1 Delay(90) ; //精确延时 大于 480us
896 1
897 1 DQ = 1 ; //拉高总线
898 1 Delay(8) ;
899 1
900 1 presence = DQ ; //如果=0则初始化成功 =1则初始化失败
901 1 Delay(100) ;
902 1 DQ = 1 ;
903 1
904 1 return(presence) ; //返回信号,0=presence,1= no presence
905 1 }
906
907
908 /* 读一个字节 */
909 /*******************************************************************/
910 ReadOneChar(void)
911 {
912 1 unsigned char i = 0 ;
913 1 unsigned char dat = 0 ;
914 1
915 1 for (i = 8 ; i > 0 ; i--)
916 1 {
917 2 DQ = 0 ; // 给脉冲信号
918 2 dat >>= 1 ;
C51 COMPILER V8.05a 24M点阵时钟 09/28/2010 07:26:18 PAGE 16
919 2 DQ = 1 ; // 给脉冲信号
920 2
921 2 if(DQ)
922 2 dat |= 0x80 ;
923 2 Delay(4) ;
924 2 }
925 1
926 1 return (dat) ;
927 1 }
928
929 /* 写一个字节 */
930 /*******************************************************************/
931 WriteOneChar(unsigned char dat)
932 {
933 1 unsigned char i = 0 ;
934 1 for (i = 8 ; i > 0 ; i--)
935 1 {
936 2 DQ = 0 ;
937 2 DQ = dat&0x01 ;
938 2 Delay(5) ;
939 2
940 2 DQ = 1 ;
941 2 dat>>=1 ;
942 2 }
943 1 }
944
945 /* 读取温度 */
946 /*******************************************************************/
947 Read_Temperature(void)
948 {
949 1 Init_DS18B20() ;
950 1
951 1 WriteOneChar(0xCC) ; // 跳过读序号列号的操作
952 1 WriteOneChar(0x44) ; // 启动温度转换
953 1
954 1 Init_DS18B20() ;
955 1 WriteOneChar(0xCC) ; //跳过读序号列号的操作
956 1 WriteOneChar(0xBE) ; //读取温度寄存器
957 1
958 1 temp_data[0] = ReadOneChar() ; //温度低8位
959 1 temp_data[1] = ReadOneChar() ; //温度高8位
960 1 }
961
962 /* 数据转换与温度显示 */
963 /*******************************************************************/
964 void Disp_Temperature()
965 {
966 1 temp_ram[4]=temp_data[0]&0x0f ;
967 1 temp_ram[0]=ditab[temp_ram[4]]+0x30 ; //查表得小数位的值
968 1
969 1 temp_ram[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ;
970 1 temp_ram[3]=temp_ram[4]/100+0x30 ;
971 1 temp_ram[1]=temp_ram[4]%100 ;
972 1 temp_ram[2]=temp_ram[1]/10+0x30 ;
973 1 temp_ram[1]=temp_ram[1]%10+0x30 ;
974 1
975 1 if(temp_ram[3]==0x30) //高位为0,不显示
976 1 {
977 2 temp_ram[3]=0x20 ;
978 2 if(temp_ram[2]==0x30) //次高位为0,不显示
979 2 temp_ram[2]=0x20 ;
980 2 }
C51 COMPILER V8.05a 24M点阵时钟 09/28/2010 07:26:18 PAGE 17
981 1
982 1 }
983 /*
984 void start_time(){
985 Time.Year = 0x10;
986 Time.Month = 0x7;
987 Time.Day = 0x23;
988 Time.Hour = 0x21;
989 Time.Minute = 0x58;
990 Time.Second = 0x0;
991 Time.Week = 0x5;
992 }*/
993
994 //=================
995 //****校时函数****
996 //=================
997 void Change_Time(){
998 1 //
999 1 MSG_MV = MSG_MV_L;
1000 1 move_times = 0;
1001 1 start_word=0;
1002 1 TMP_TIME = Time.Hour;
1003 1 TR1 = 1; //开启定时器1闪烁
1004 1 do{
1005 2 switch(CHANGE){
1006 3 case CHG_HOUR:
1007 3 case CHG_MIN:
1008 3 case CHG_SEC:
1009 3 Put_Tdispram(0);
1010 3 break;
1011 3 case CHG_MON:
1012 3 case CHG_DAY:
1013 3 Put_Ddispram(0);
1014 3 break;
1015 3 case CHG_WEEK:
1016 3 Put_Kdispram(0);
1017 3 break;
1018 3 case CHG_YEAR:
1019 3 Put_Ydispram(0);
1020 3 break;
1021 3 default:
1022 3 break;
1023 3 }
1024 2 Show_sWord();
1025 2 //if(!key_done)
1026 2 // ReadKey1();
1027 2 }while(ReadKey1() != KEY3_S && exit < 10); //MSG_KEY
1028 1 Change_obj(); //保证退出校时无隐身
1029 1 HIDE = 0;
1030 1 key_done = 0;
1031 1 //key_done = 1; //按键事件处理完成
1032 1 TR1 = 0; //关闭定时器1闪烁
1033 1
1034 1 }
1035 //==================
1036 //****对象切换****
1037 //==================
1038 void Change_obj(){
1039 1 switch(CHANGE){
1040 2 case CHG_HOUR:
1041 2 if(Time.Hour == 0xcc)
1042 2 Time.Hour = TMP_TIME;
C51 COMPILER V8.05a 24M点阵时钟 09/28/2010 07:26:18 PAGE 18
1043 2 TMP_TIME = Time.Minute;
1044 2 break;
1045 2 case CHG_MIN:
1046 2 if(Time.Minute == 0xcc)
1047 2 Time.Minute = TMP_TIME;
1048 2 TMP_TIME = Time.Second;
1049 2 break;
1050 2 case CHG_SEC:
1051 2 if(Time.Second == 0xcc)
1052 2 Time.Second = TMP_TIME;
1053 2 TMP_TIME = Time.Month;
1054 2 break;
1055 2 case CHG_MON:
1056 2 if(Time.Month == 0xcc)
1057 2 Time.Month = TMP_TIME;
1058 2 TMP_TIME = Time.Day;
1059 2 break;
1060 2 case CHG_DAY:
1061 2 if(Time.Day == 0xcc)
1062 2 Time.Day = TMP_TIME;
1063 2 TMP_TIME = Time.Week;
1064 2 break;
1065 2 case CHG_WEEK:
1066 2 if(Time.Week == 0xcc)
1067 2 Time.Week = TMP_TIME;
1068 2 TMP_TIME = Time.Year;
1069 2 break;
1070 2 case CHG_YEAR:
1071 2 if(Time.Year == 0xcc)
1072 2 Time.Year = TMP_TIME;
1073 2 TMP_TIME = Time.Hour;
1074 2 break;
1075 2 default:
1076 2 break;
1077 2 }
1078 1 }
1079 //==================
1080 //****加加函数****
1081 //功能: 0x19 ++ =0x20
1082 //==================
1083 uchar Add_num(char *num){
1084 1 ++(*num);
1085 1 if(((*num) & 0x0f) == 0x0a){
1086 2 *num += 0x10;
1087 2 *num &= 0xf0;
1088 2 }
1089 1 return *num;
1090 1 }
1091 //==================
1092 //****校时加加****
1093 //==================
1094 void Add_Time(){
1095 1 switch(CHANGE){
1096 2 case CHG_HOUR:
1097 2 if(HIDE){
1098 3 if(Add_num(&TMP_TIME) == 0x24)
1099 3 TMP_TIME= 0;
1100 3 }
1101 2 else{
1102 3 if(Add_num(&Time.Hour) == 0x24)
1103 3 Time.Hour = 0;
1104 3 }
C51 COMPILER V8.05a 24M点阵时钟 09/28/2010 07:26:18 PAGE 19
1105 2 break;
1106 2 case CHG_MIN:
1107 2 if(HIDE){
1108 3 if(Add_num(&TMP_TIME) == 0x60)
1109 3 TMP_TIME= 0;
1110 3 }
1111 2 else{
1112 3 if(Add_num(&Time.Minute) ==
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -