📄 wannianli.lst
字号:
953 1 if(sel==2) {address=0x88; max=12;mini=1;} //月
954 1 if(sel==1) {address=0x8c; max=99; mini=0;} //年
955 1 if(sel==4) {address=0x8a; max=7;mini=1;} //星期
956 1
957 1 //读取1302某地址上的数值转换成10进制赋给item
958 1 item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
959 1 if(sel_1==0)
960 1 item++;
961 1 else
962 1 item--;
963 1 if(item>max) item=mini;
964 1 if(item<mini) item=max;
965 1
966 1 write_clock(0x8e,0x00);//允许写操作
967 1 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
968 1 write_clock(0x8e,0x80);//写保护,禁止写操作
969 1 }
970
971 /******************************************************************************/
972 void id_case2_key(void)//id为1时的下一级选择
973 {
974 1 if(Add_Key == 0) //增加1
975 1 {
976 2 Delay(100);
977 2 if(Add_Key == 0)
978 2 {
979 3 Set_Bell(id2,0); //调用Set_Bell函数
980 3 backled_flag = 1;//开始记数
981 3 timecount2 = 0;
982 3 }
983 2 while(Add_Key ==0);//等待键松开
984 2 }
985 1 if(Dec_Key == 0) //减少1
986 1 {
987 2 Delay(100);
988 2 if(Dec_Key == 0)
989 2 {
990 3 Set_Bell(id2,1); //调用Set_Bell函数
991 3 backled_flag = 1;//开始记数
992 3 timecount2 = 0;
993 3 }
994 2 while(Dec_Key ==0);//等待键松开
995 2 }
996 1 }
997
998 /******************************************************************************/
999 void Set_Bell(unsigned char sel, bit sel_1)//根据选择调整相应项目并写入
1000 {
1001 1 signed char address,item;
1002 1 signed char max,mini;
1003 1 if(sel==4) {address=0xc6; max=59;mini=0;} //秒
1004 1 if(sel==3) {address=0xc4; max=59;mini=0;} //分
1005 1 if(sel==2) {address=0xc2; max=23; mini=0;} //时
1006 1 if(sel==1) //标志位
1007 1 {
1008 2 address=0xc8;//for read
C51 COMPILER V7.50 WANNIANLI 05/23/2006 13:38:52 PAGE 18
1009 2 if(Add_Key ==0 || Dec_Key ==0)
1010 2 Bell_Swh=~Bell_Swh;
1011 2 write_clock(address,Bell_Swh);
1012 2 } //开关
1013 1
1014 1 item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
1015 1 if(sel_1==0)
1016 1 item++;
1017 1 else
1018 1 item--;
1019 1 if(item>max) item=mini;
1020 1 if(item<mini) item=max;
1021 1
1022 1 write_clock(0x8e,0x00);//允许写操作
1023 1 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
1024 1 write_clock(0x8e,0x80);//写保护,禁止写操作
1025 1 }
1026
1027 /******************************************************************************/
1028 void Timer0_Init(void)//定时器0初始化
1029 {
1030 1 TMOD=0x01;
1031 1 TH0=(65535-50000)/256;
1032 1 TL0=(65535-50000)%256;
1033 1 EA=1;
1034 1 ET0=1;
1035 1 TR0=1;
1036 1 }
1037
1038 /******************************************************************************/
1039 void Timer0(void) interrupt 1 using 1//中断入口,冒号闪烁
1040 {
1041 1 static unsigned char timecount = 0;
1042 1
1043 1 TH0=(65535-50000)/256; //50ms定时
1044 1 TL0=(65535-50000)%256;
1045 1 timecount++;
1046 1 if(timecount > 9)//500MS
1047 1 {
1048 2 timecount = 0;
1049 2 flag = ~flag;
1050 2 }
1051 1
1052 1 if(backled_flag == 1)//按键触发背光被点亮
1053 1 {
1054 2 timecount2++;
1055 2 if(timecount2 == 200)//3S
1056 2 {
1057 3 timecount2 =0;//清0
1058 3 backled_flag =0;
1059 3 Bak_Light = led_off;//LED背光熄灭
1060 3 }
1061 2 else
1062 2 Bak_Light = led_on;
1063 2 }
1064 1
1065 1 if(Delaytime != 0)
1066 1 Delaytime--;//延时函数用
1067 1 }
1068
1069 /******************************************************************************/
1070 void Init_1302(void)//设置1302的初始时间
C51 COMPILER V7.50 WANNIANLI 05/23/2006 13:38:52 PAGE 19
1071 {
1072 1 write_clock(0x8e,0x00);//允许写操作
1073 1 write_clock(0x8c,0x06);//年
1074 1 write_clock(0x8a,0x07);//星期
1075 1 write_clock(0x88,0x01);//月
1076 1 write_clock(0x86,0x01);//日
1077 1 write_clock(0x84,0x12);//小时
1078 1 write_clock(0x82,0x00);//分钟
1079 1 write_clock(0x80,0x00);//秒
1080 1 write_clock(0x90,0xa5);//充电
1081 1 write_clock(0x8e,0x80);//禁止写操作
1082 1 }
1083
1084 /******************************************************************************/
1085 void Lcd_Mark1(void)//在预定的位置上写入汉字
1086 {
1087 1 Clr_Scr();//清屏
1088 1 frame();//显示边框
1089 1 Mcs=1;Scs=0;
1090 1 Disp_Chinese(5,8,shi);//显示室温,星期,年, . ,℃
1091 1 Disp_Chinese(5,24,wen);
1092 1 Disp_Chinese(3,8,xing);
1093 1 Disp_Chinese(3,24,qi);
1094 1 Disp_Chinese(1,40,nian);
1095 1 Disp_Digit(5,56,point);
1096 1 Mcs=0;Scs=1;
1097 1 Disp_Chinese(5,8,sheshidu);
1098 1 if(Bell_Swh == 1)//闹钟为开
1099 1 {
1100 2 Mcs=0;Scs=1;
1101 2 Disp_Chinese(5,40,biaozhi);//显示闹钟图标
1102 2 }
1103 1 }
1104
1105 /******************************************************************************/
1106 void Lcd_Mark2(void)
1107 {
1108 1 Clr_Scr();//清屏
1109 1 frame();//显示边框
1110 1
1111 1 Mcs=1;Scs=0;//显示闹钟设定等几个汉字
1112 1 Disp_Chinese(2,16,nao);
1113 1 Disp_Chinese(2,32,zhong);
1114 1 Disp_Chinese(2,48,she);
1115 1 Mcs=0;Scs=1;
1116 1 Disp_Chinese(2,0,ding);
1117 1 Disp_Digit(4,0,maohao);//显示:
1118 1 Disp_Digit(4,24,maohao);
1119 1 }
1120
1121 /******************************************************************************/
1122 void Beep(void)//BELL 蜂明器发声,整点报警
1123 {
1124 1 Bell_Out = bell_on;
1125 1 Delay_int(5);//250ms
1126 1 Bell_Out = bell_off;
1127 1 Delay_int(15);//750
1128 1 }
1129
1130 /*****************************************************************************/
1131 void Bell_now(void)
1132 {
C51 COMPILER V7.50 WANNIANLI 05/23/2006 13:38:52 PAGE 20
1133 1 Bell_Out = bell_on;
1134 1 Delay_int(5);//for 250ms
1135 1 Bell_Out = bell_off;
1136 1 Delay_int(1);//50ms
1137 1 Bell_Out = bell_on;
1138 1 Delay_int(3);//150ms
1139 1 Bell_Out = bell_off;
1140 1 Delay_int(8);//400ms
1141 1 }
1142
1143 /******************************************************************************/
1144 void main(void) //主函数
1145 {
1146 1 //初始化状态
1147 1 Bell_Out = bell_off;//蜂明器关闭
1148 1 Bak_Light = led_on;//开机背光开
1149 1
1150 1 Timer0_Init();
1151 1 Init_lcd();//设置液晶显示器
1152 1
1153 1 Clr_Scr();//清屏
1154 1 Disp_Img(logo); //显示湘灵电子LOGO开机画面
1155 1 Delay12864(60000);//Delay 4s
1156 1
1157 1 Bak_Light = led_off;//关闭背光
1158 1 Bell_Swh = read_clock(0xc9);//读取开,关的状态
1159 1 Lcd_Mark1();
1160 1
1161 1 while(1)//主循环
1162 1 {
1163 2 //设置时钟的初始值,显示05年1月1号星期六12:00:00
1164 2 if(Sysset_Key == 0 )//按下系统复位键,S4
1165 2 {
1166 3 Delay(100);//延时消抖
1167 3 if(Sysset_Key == 0 )
1168 3 {
1169 4 backled_flag = 1;//开始记数
1170 4 timecount2 = 0;
1171 4 Init_1302();//初始化时钟
1172 4 }
1173 3 }
1174 2
1175 2 if(Add_Key == 0 && Dec_Key ==0 )//进入闹钟设置界面
1176 2 {
1177 3 Delay12864(100);
1178 3 if(Add_Key == 0 && Dec_Key ==0)
1179 3 {
1180 4 backled_flag = 1;//开始记数
1181 4 timecount2 = 0;
1182 4 Lcd_Mark2();
1183 4 if(Bell_Swh == 0){Mcs=0;Scs=1;Disp_Chinese(2,32,guan);}//关
1184 4 else {Mcs=0;Scs=1;Disp_Chinese(2,32,kai);}
1185 4 while(1)
1186 4 {
1187 5 if (OK_Key == 0) // 设置和选择项目键
1188 5 {
1189 6 Delay(1000);
1190 6 if(OK_Key == 0)
1191 6 {
1192 7 backled_flag = 1;//开始记数
1193 7 timecount2 = 0;
1194 7 id2++;if(id2>5) id2=0;
C51 COMPILER V7.50 WANNIANLI 05/23/2006 13:38:52 PAGE 21
1195 7 }
1196 6 while(OK_Key == 0);//等待键松开
1197 6 }
1198 5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -