📄 2402test.lst
字号:
839 *********************************************************************************************/
840 void ALARMing(void){
841 1 uint8 alarm_bit;
842 1 alarm_bit = AT24C02_Read1Byte(0x03); // 从AT24C02的地址0x03读出定时报警设置数据
843 1 if(AT24C02_Read1Byte(0x04+(rom*10)) < 2 && alarm_bit == 1 || alarm_bit == 3){//键值值为0则是闹钟,不为0则
-是无线控制
844 2 if(AT24C02_Read1Byte(0x04+(rom*10)) == 0){
845 3 BEEPing();
846 3 }else{
847 3 beep_y();//
848 3 }
849 2 }
850 1 if(AT24C02_Read1Byte(0x04+(rom*10)) == 0 && alarm_bit == 2 || alarm_bit == 3){
851 2 //**这里将写入一个或是调用无线遥控键值处理程序**
852 2 }
853 1 }
854 /********************************************************************************************
855 //定时值校对&处理函数
856 //search_time()
857 *********************************************************************************************/
858 void search_time(void){//整个流程必须在1秒里完成,不然将有部分定时值不响应。
859 1 uint8 timeS,s,i;
860 1 static unsigned char data alarmS[25];
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 15
861 1 alarm_con = 0;
862 1 s = read_clock(0x81);//读取秒数据
863 1 for(i=0;i<25;i++){
864 2 alarmS[i] = AT24C02_Read1Byte(0x0B+i*10);//一次性将全部项目中的秒数据送入数组中
865 2 }
866 1 for(i=0;i<25;i++){
867 2 if(alarmS[i] != 0xff){//不为0xff则表示这项已经设置
868 3 alarm_con++;//定时项目个数寄存位
869 3 if(s == alarmS[i]){
870 4 timeS = AT24C02_Read1Byte(0x0a+(i*10));
871 4 if(timeS == read_clock(0x83) || timeS == 0xff){//校验 分钟
872 5 timeS = AT24C02_Read1Byte(0x09+(i*10));
873 5 if(timeS == read_clock(0x85) || timeS == 0xff){//校验 小时
874 6 timeS = AT24C02_Read1Byte(0x08+(i*10));
875 6 if(timeS == read_clock(0x8b) || timeS == 0xff){//校验 星期
876 7 timeS = AT24C02_Read1Byte(0x07+(i*10));
877 7 if(timeS == read_clock(0x87) || timeS == 0xff){//校验 日
878 8 timeS = AT24C02_Read1Byte(0x06+(i*10));
879 8 if(timeS == read_clock(0x89) || timeS == 0xff){//校验 月
880 9 timeS = AT24C02_Read1Byte(0x05+(i*10));
881 9 if(timeS == read_clock(0x8d) || timeS == 0xff){//校验 年
882 10 rom = i;//走到响应的位置
883 10
884 10 ALARMing();//** 闹钟和无线遥控的键值处理 **
885 10 //**这里将调用一个到时的响应程序alarming();
886 10 } } } } } } } } } }
887 /********************************************************************************************
888 //系统主程序 // 菜单切换
889 //main()
890 *********************************************************************************************/
891 void main (void){
892 1 beep_a();
893 1 keyboard_int ();
894 1 LCM2402_Init();//LCM2402初始化
895 1 Init_1302();//检测时钟芯片是否未被初始化
896 1 CgramWrite();
897 1 print(0x80,"Dy-2402C V1.0 (BETA)");
898 1 print(0xc2,"http://www.doyoung.net");
899 1 DelayS(5000);
900 1 LCM2402_Init();//LCM2402初始化
901 1 beep_y();
902 1
903 1
904 1 while(1){//主线程//
905 2 //-----------------------------------------------------------------------------0 主显示
906 2 if(menu == 0){
907 3 RealTime_Display(); //在第一行显示时间部分
908 3 print(0xc6," !AL");
909 3 print2(0xca,AT24C02_Read1Byte(0x03)+0x30);
910 3 print(0xcb," Used: ");
911 3 print2(0xd3,alarm_con/16+0x30);
912 3 print2(0xd4,alarm_con%16+0x30);
913 3 print(0xd5,"/25");
914 3 printTemperature();//显示温度
915 3 search_time();//定时值校对&处理函数
916 3 if (DT != 0xff){
917 4 if(DT>=0x00 && DT <0x0a){
918 5 uint16 i;
919 5 uint8 n=0,x=0xff,y=0xff;
920 5 LCM2402_Init();//LCM2402初始化
921 5 for(i=0;i<500;i++){
922 6 print(0x83,"{ Controller NO. }");
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 16
923 6 print(0xc3,"{------ ");
924 6 print(0xcd," ------}");
925 6 if(DT>=0x00 && DT <0x0a){
926 7 switch (n){
927 8 case 0: x = DT;n++;i=0;break;//
928 8 case 1: y = DT;n--;i=0;break;//
929 8 }
930 7 print2(0xcb,x%16+0x30);
931 7 print2(0xcc,y%16+0x30);
932 7 beep_k();
933 7 DelayS250();
934 7 DT = 0xff;
935 7 }
936 6 if(DT == 0x4C){
937 7 print(0xca,"{OK}");
938 7
939 7
940 7 //ALARMing(i);//** 闹钟和无线遥控的键值处理 **
941 7
942 7 DelayS250();beep_y();DT = 0xff;
943 7 }
944 6 }
945 5 }
946 4 if(DT>0x12 && DT <0x17){//当按定时加减查看的几个键时会进入定时查看菜单
947 5 beep_y();menu = 2;
948 5 }
949 4 switch (DT){
950 5 uint8 alarm_bit;
951 5 case 0x1c: beep_y();menu = 1;break;//
952 5 case 0x2F: beep_y();menu =99;break;//
953 5 case 0x19: {alarm_bit++;if(alarm_bit>3){alarm_bit=0;};
954 6 AT24C02_Write1Byte(0x03,alarm_bit);
955 6 DelayS(500);beep_y();break;
956 6 }//定时动作选择:0 全关 1 只开闹钟 2 只开控制动作 3 全开
957 5 default:DT = 0xff;break;
958 5 }
959 4 LCM2402_Init();//LCM2402初始化
960 4 DT = 0xff;
961 4 }
962 3 }
963 2 //-----------------------------------------------------------------------------1 是否调时?
964 2 if(menu == 1){
965 3 print(0x80,"Set The Real Time ?");
966 3 print(0xc5,"PP: OK AV: Esc");
967 3 if (DT != 0xff){
968 4 switch (DT){
969 5 case 0x1D: beep_n();menu = 0;break;//
970 5 case 0x1B: beep_y();menu = 11;break;//
971 5 default:DT = 0xff;break;
972 5 }
973 4 LCM2402_Init();//LCM2402初始化
974 4 DT = 0xff;
975 4 }
976 3 }
977 2 //-----------------------------------------------------------------------------2 定时查看
978 2 if(menu == 2){
979 3 alarm_Display(); //在第一行显示定时部分
980 3 print(0xc3,"] NO.");
981 3 print2(0xc8,0x30+rom/10);
982 3 print2(0xc9,0x30+rom%10);
983 3 print(0xce,"STORE: Set");
984 3 if (DT != 0xff){
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 17
985 4 switch (DT){
986 5 case 0x18: beep_y();menu = 12;break;//
987 5 case 0x13: beep_k();rom++;break;//
988 5 case 0x14: beep_k();rom--;break;//
989 5 case 0x15: beep_k();rom=rom+5;break;//
990 5 case 0x16: beep_k();rom=rom-5;break;//
991 5 case 0x1D: beep_n();menu = 0;break;//
992 5 default:DT = 0xff;break;
993 5 }
994 4 if(rom >24 && rom <100){ rom = 0;}//当
995 4 if(rom >200){ rom = 24;}
996 4 LCM2402_Init();//LCM2402初始化
997 4 DT = 0xff;
998 4 }
999 3 }
1000 2 //-----------------------------------------------------------------------------99 帮助菜单
1001 2 if(menu == 99){
1002 3 uint8 i;
1003 3 if (DT != 0xff){
1004 4 if(DT == 0x2F){
1005 5 i++;
1006 5 if(i >9){i=0;}
1007 5 DelayS(500);beep_k();
1008 5 }
1009 4 if(DT == 0x1D){
1010 5 i = 0;
1011 5 beep_n();menu = 0;
1012 5 }
1013 4 LCM2402_Init();//LCM2402初始化
1014 4 DT = 0xff;
1015 4 }
1016 3 switch (i){
1017 4 case 0: print(0x80,"AV: Esc Help");print(0xc0,"MUTE: Next Help Page");break;//
1018 4 case 1: print(0x80,"SLEEP: Set The Real Time");print(0xc0,"00~99: Controller NO.");break;//
1019 4 case 2: print(0x80,"POWER: Key ON/OFF");print(0xc0,"RECALL: Alarm ON/OFF");break;//
1020 4 case 3: print(0x80,"VOL+/-: Up/Down");print(0xc0,"PR.+/-: Alarm +/-1");break;//
1021 4 case 4: print(0x80,"F.T.+/-: Alarm +/-5");print(0xc0,"STORE: Set Alarm");break;//
1022 4 case 5: print(0x80,"-/--: Jumping");print(0xc0,"SEARCH: Set to ??");break;//
1023 4 case 6: print(0x80,"!AL0: BEEP & ALARM OFF");print(0xc0,"!AL1: Only BEEP ON");break;//
1024 4 case 7: print(0x80,"!AL2: Only ALARM ON");print(0xc0,"!AL3: BEEP & ALARM ON");break;//
1025 4 case 8: print(0x80,"PP: OK!");print(0xc0,"AV: Exit/Clean!");break;//
1026 4 case 9: print(0x81,"DoYoung.net | Dy-2402C");print(0xc5,"V1.0 2007-5-10 ");break;//
1027 4 default:break;
1028 4 }
1029 3 }
1030 2 //-----------------------------------------------------------------------------11 调时输入
1031 2 if(menu == 11){
1032 3 static unsigned char i=0;
1033 3 bit k;//定义静态
1034 3 RealTime_Display(); //在第一行显示时间部分
1035 3 for(i=1;i<8;){//8个时钟数据的循环加位
1036 4 switch (i){//显示设置项的说明
1037 5 case 7: print(0xc0,"AV:Esc (Second 00~59)^^");break;//
1038 5 case 6: print(0xc4,"(Minute 00~59)^^");break;//
1039 5 case 5: print(0xc3,"(Hour 00~23)^^");break;//
1040 5 case 4: print(0xcc,"^(Week 1~7)");break;//
1041 5 case 3: print(0xc8,"^^(Date 01~31)");break;//
1042 5 case 2: print(0xc5,"^^(Month 01~12)");break;//
1043 5 case 1: print(0xc2,"^^(Year 00~99) AV:Esc");break;//
1044 5 }
1045 4 print(0x97,"?");
1046 4 if(DT>=0x00 && DT < 0x0a){//DT办数据键码时动作
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 18
1047 5 if(i == 4){//如果是星期设置则不必输入“十位”数据
1048 6 k = 1;
1049 6 }
1050 5 Set_time(i,k);//在这里调用写时间的程序项
1051 5 if(k==0){//第一次按键输入到“十位”
1052 6 k = 1;
1053 6 }
1054 5 else{//否则是第二次按键,输入到“个位”
1055 6 k = 0;
1056 6 i++;
1057 6 }
1058 5 LRDD();//清屏+刷新显示+延时+清空DT 一体函数
1059 5 beep_k();
1060 5 }
1061 4 if(DT == 0x11 || DT == 0x17){
1062 5 i++;
1063 5 LRDD();
1064 5 beep_y();
1065 5 }
1066 4 if(DT == 0x1A){
1067 5 i--;if(i < 1){ i =7;};
1068 5 LRDD();
1069 5 beep_y();
1070 5 }
1071 4
1072 4 if (DT == 0x1D){//按 AV 键退回到主界面
1073 5 LRDD();
1074 5 beep_n();menu = 0;
1075 5 i = 9;//用于退出上一级的for循环
1076 5 }
1077 4 }
1078 3 }
1079 2 //-----------------------------------------------------------------------------12 定时值输入
1080 2 if(menu == 12){
1081 3 static unsigned char i=0;
1082 3 bit k;//定义静态
1083 3 alarm_Display(); //在第一行显示时间部分
1084 3 for(i=1;i<9;){//8个时钟数据的循环加位
1085 4 switch (i){//显示设置项的说明
1086 5 case 8: print(0xc3,"< (Controller 00~99)");break;//
1087 5 case 7: print(0xc7,"(Second 00~59)^^");break;//
1088 5 case 6: print(0xc4,"(Minute 00~59)^^");break;//
1089 5 case 5: print(0xc3,"(Hour 00~23)^^");break;//
1090 5 case 4: print(0xcc,"^(Week 1~7)");break;//
1091 5 case 3: print(0xc8,"^^(Date 01~31)");break;//
1092 5 case 2: print(0xc5,"^^(Month 01~12)");break;//
1093 5 case 1: print(0xc2,"^^(Year 00~99) AV:Esc");break;//
1094 5 }
1095 4 print(0x97,"!");
1096 4 if(DT>=0x00 && DT < 0x0a || DT == 0x12){//DT办数据键码时动作
1097 5 if(i == 4 || DT == 0x12){//如果是星期设置则不必输入“十位”数据
1098 6 k = 1;
1099 6 }
1100 5 Set_alarm(rom,i,k);//在这里调用写时间的程序项
1101 5 if(k==0){//第一次按键输入到“十位”
1102 6 k = 1;
1103 6 }
1104 5 else{//否则是第二次按键,输入到“个位”
1105 6 k = 0;
1106 6 i++;
1107 6 }
1108 5 LADD();//清屏+刷新显示+延时+清空DT 一体函数
C51 COMPILER V6.12 2402TEST 08/29/2007 22:42:54 PAGE 19
1109 5 beep_k();
1110 5 }
1111 4 switch (DT){//显示设置项的说明
1112 5 case 0x11: //i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
1113 5 case 0x12: //i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
1114 5 case 0x17: beep_y();i++;LADD();break;//// -/-- VOL+ SEARCH 则跳到下一项
1115 5 case 0x1A: beep_y();i--;if(i < 1){ i =8;};LADD();break;////VOL- 跳回上一项 //循环设备
1116 5 case 0x1D: beep_n();LADD();menu = 0;i = 19;break;////按 AV 键退回到主界面//i = 9;用于退出上一级的for
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -