📄 时钟_1602.lst
字号:
183 1 //第1行
184 1 comw(0x84);
185 1 for(i=0;i<8;i++)
186 1 { if(i==2||i==5) dataw(num[11]);
187 2 else dataw(num[time[i]]);
188 2 // if(i==2&&time[7]%2) P2=num[10];//秒闪
189 2 }
190 1 ////////////////////////////////////////////////////////////
191 1 //第2行
192 1 comw(0xc6);
193 1 for(i=0;i<=3;i++)
194 1 dataw(tmp[i]);
195 1 }
196
197
198
199 /****************************************************************************************
200 显示时间调整子程序
201
202 *****************************************************************************************/
203
204 void t_adj(void)
205 { uchar i;
206 1 time[0]=hour0/10;//
207 1 time[1]=hour0%10;
208 1 time[3]=minute0/10;
209 1 time[4]=minute0%10;//将时间拆分
210 1
211 1 if(dp_flag==1){if(right<2) time[right]=10;
212 2 else if(right>=2) time[right+1]=10;}//判断是否是当前调整位 ,是当前调整位闪烁
213 1 //////////////////////////////////////////////////////
214 1 //第1行
215 1 comw(0x80);
216 1 for(i=0;i<6;i++)
217 1 dataw(adj[i]); //" adjust"
218 1 for(i=0;i<6;i++)
219 1 dataw(adj_0[i]);//" time "
220 1 /////////////////////////////////////////////////////
221 1 //第2行
222 1 comw(0xc5);
223 1 for(i=0;i<5;i++)
224 1 {if(i==2)dataw(num[11]);
225 2 else dataw(num[time[i]]);}
226 1 }
227
228
229
230 /****************************************************************************************
231 显示闹钟1调整子程序
232
233 *****************************************************************************************/
234
235 void t1_adj(void)
236 { uchar i;
237 1 t1_set[0]=hour1/10;//
238 1 t1_set[1]=hour1%10;
239 1 t1_set[3]=minute1/10;
240 1 t1_set[4]=minute1%10;//将定时1设定的时间拆分
241 1 /////////////////////////////////////////////////////////////////////////////////////////////////
C51 COMPILER V7.50 时钟_1602 08/18/2007 17:24:18 PAGE 5
242 1 if(dp_flag==1){if(right<2) t1_set[right]=10;
243 2 else if(right>=2) t1_set[right+1]=10;}//判断是否是当前调整位 ,是当前调整位闪烁
244 1 ///////////////////////////////////////////////////////////////////////////////////////////////////
245 1 comw(0x02);
246 1 //第1行
247 1 comw(0x80);
248 1 for(i=0;i<6;i++)
249 1 dataw(adj[i]); //" adjust"
250 1 for(i=0;i<6;i++)
251 1 dataw(adj_1[i]);//" t1 "
252 1 ///////////////////////////////////////////////////////////////////////////////////////////////////
253 1 //判断显示t1是显示on还是off
254 1 if(out==1){for(i=0;i<4;i++) dataw(off[i]);}
255 1 else {for(i=0;i<4;i++)dataw(ON[i]);}//ON[]两个字母均为大写,用小写时会出错,也不知为什么
256 1 /////////////////////////////////////////////////////
257 1 //第2行
258 1 comw(0xc5);
259 1 for(i=0;i<5;i++)
260 1 {if(i==2)dataw(num[11]);
261 2 else dataw(num[t1_set[i]]);}
262 1 }
263
264
265
266 /****************************************************************************************
267 定时控制1输出子程序
268
269 *****************************************************************************************/
270
271 void t1_out(void)
272 { if(out1==0) p_out1=0;
273 1 else p_out1=1;
274 1 if(hour0==hour1&&minute0==minute1) {p_out1=1;out1=1;}
275 1 }
276
277
278
279 /****************************************************************************************
280 键盘扫描子程序
281
282 *****************************************************************************************/
283 void key_scan (void)
284
285 {
286 1 key_flag=0;//将键盘按下标志位清零
287 1
288 1 if(set_key==0) { set++;if(set==3) set=0;//设置加1,切换状态
289 2 while(set_key==0);//等待键松开
290 2 }
291 1 if(right_key==0){right++;if(right==4) right=0;//右移,切换调整位
292 2 while(right_key==0) {;}}//等待键松开
293 1
294 1 switch(set) //根据当前调整,将其时间传送给调整的缓存数组
295 1 { case 1: {ten_hour=hour0/10,hour=hour0%10,ten_minute=minute0/10,minute=minute0%10; adj_flag=1;} break
-;//时间调整
296 2 case 2: {ten_hour=hour1/10,hour=hour1%10,ten_minute=minute1/10,minute=minute1%10;adj_flag=1;} break;
-//定时1调整
297 2 //case 3: {ten_hour=hour2/10,hour=hour2%10,ten_minute=minute2/10,minute=minute2%10;} break;//定时2调整
298 2 }
299 1
300 1 if(up_key==0) { switch(right)//根据调整位进行相应调整
301 2 { case 0:{ten_hour++;if(ten_hour==3)ten_hour=0;} break;//十时调整
C51 COMPILER V7.50 时钟_1602 08/18/2007 17:24:18 PAGE 6
302 3 case 1:{hour++;if((ten_hour!=2&&hour==10)||(ten_hour==2&&hour==4)) hour=0;} break;//时调整
303 3 case 2:{ten_minute++;if(ten_minute==6) ten_minute=0;} break;//十分调整
304 3 case 3:{minute++;if(minute==10) minute=0;} break;//分调整
305 3 }
306 2 while(up_key==0) {;}//等待键松开
307 2 }
308 1
309 1 if(on_off_key==0)out=~out;//设置是否启动定时
310 1 while(on_off_key==0){;};//等待键松开
311 1
312 1 switch(set) //将调整后的时间传送回去
313 1 { case 1:{hour0=ten_hour*10+hour;minute0=ten_minute*10+minute;}break;
314 2 case 2:{hour1=ten_hour*10+hour;minute1=ten_minute*10+minute;out1=out;}break;
315 2 // case 3:{hour2=ten_hour*10+hour,minute2=ten_minute*10+minute,out2=out;}break;
316 2 }
317 1 }
318
319 /****************************************************************************************
320 T0中断子程序
321
322 *****************************************************************************************/
323
324 void t0(void) interrupt 1 using 1
325 { uchar a,b;
326 1 b++;a++;
327 1
328 1 TH0=(65536-46080)/256;//
329 1 TL0=(65536-46080)%256;// 50ms定时
330 1 if(a==5) {a=0;dp_flag=~dp_flag;}
331 1 if(b==20) {b=0;s_flag=1;second++;}//够1s则将数码管小数点取反,则看到闪烁
332 1 if(second==60){second=0;minute0++;}//够1分钟则加分钟计数加1
333 1 if(minute0==60){minute0=0,hour0++;}////够1小时则小时计数加1
334 1 if(hour0==24)hour0=0;//够24小时则清零
335 1 }
336 /****************************************************************************************
337 T1中断子程序
338
339 *****************************************************************************************/
340
341 void t1(void) interrupt 3 using 2
342 {
343 1 uchar j,key_1;
344 1 j++;
345 1
346 1 TH1=(65536-10000)/256;
347 1 TL1=(65536-10000)%256;//10ms定时
348 1
349 1 P3=0xff;//键盘扫描程序
350 1 if(j==2){j=0,key=P3&00111100;
351 2 if(key=key_1) key_flag=1; }
352 1 key_1=P3&00111100;//10ms内若两次的结果一样,表明有按键按下
353 1
354 1 }
355
356
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 989 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.50 时钟_1602 08/18/2007 17:24:18 PAGE 7
DATA SIZE = 74 5
IDATA SIZE = ---- ----
BIT SIZE = 7 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -