📄 clock.lst
字号:
229 1 uchar i;
230 1 uchar ByteData=0;
231 1 for(i=0;i<8;i++)
232 1 {
233 2 SCL=1;
234 2 I2cWait();
235 2 ByteData<<=1;
236 2 if(SDA)ByteData++;
237 2 SCL=0;
238 2 I2cWait();
239 2 }
240 1 SDA=1;
241 1 I2cWait();
C51 COMPILER V8.08 CLOCK 10/11/2007 17:28:37 PAGE 5
242 1 SCL=1;
243 1 I2cWait();
244 1 SCL=0;
245 1 I2cWait();
246 1 return ByteData;
247 1 }
248 //--------------------------声明AT24C02的读写子程序-------------------
249 void I2cWrite24C02(uchar I2c24C02Addr,uchar I2c24C02Data)//写
250 {
251 1 I2cStart();
252 1 I2cSendByte(AddressWrite24C02);
253 1 I2cSendByte(I2c24C02Addr);
254 1 I2cSendByte(I2c24C02Data);
255 1 I2cStop();
256 1 }
257
258 uchar I2cRead24C02(uchar I2c24C02Addr)//读
259 {
260 1 uchar Data;
261 1 I2cStart();
262 1 I2cSendByte(AddressWrite24C02);
263 1 I2cSendByte(I2c24C02Addr);
264 1 I2cStart();
265 1 I2cSendByte(AddressRead24C02);
266 1 Data=I2cReceiveByte();
267 1 I2cStop();
268 1 return Data;
269 1 }
270 //-------------------------初始化24C02-----------------------------
271 void Initializtion(void)
272 {
273 1 uchar i,j;
274 1 uchar StartByte=I2cRead24C02(0);
275 1 j=1;
276 1 if(StartByte==I2cStartByte)
277 1 for(i=0;i<40;i++)
278 1 {
279 2 if(I2cRead24C02(j)==I2cEndByte)break;
280 2 RingDataH[i]=I2cRead24C02(j++);
281 2 RingDataL[i]=I2cRead24C02(j++);
282 2 RingCount++;
283 2 }
284 1 else
285 1 {
286 2 I2cWrite24C02(0,I2cStartByte);
287 2 I2cWrite24C02(1,I2cEndByte);
288 2 }
289 1 }
290
291 //-------------------排序的程序------------------------------------
292 void Taxis(void)
293 {
294 1 uchar i,j,t;
295 1 for(i=0;i<RingCount;i++)
296 1 for(j=0;j<RingCount-i-1;j++)
297 1 {
298 2 if(RingDataH[j]>RingDataH[j+1])
299 2 {
300 3 t=RingDataH[j];
301 3 RingDataH[j]=RingDataH[j+1];
302 3 RingDataH[j+1]=t;
303 3 t=RingDataL[j];
C51 COMPILER V8.08 CLOCK 10/11/2007 17:28:37 PAGE 6
304 3 RingDataL[j]=RingDataL[j+1];
305 3 RingDataL[j+1]=t;
306 3 }
307 2 else if(RingDataH[j]==RingDataH[j+1])
308 2 if(RingDataL[j]>RingDataL[j+1])
309 2 {
310 3 t=RingDataL[j];
311 3 RingDataL[j]=RingDataL[j+1];
312 3 RingDataL[j+1]=t;
313 3 }
314 2 }
315 1 }
316
317 //---------------------------闹铃设置--------------------------------
318 void Control_Ring_Set_Key(void)
319 {
320 1 uchar Null[]={0x00,0x38,0x38,0x3e,0x37,0x00};//"Null"的字形码
321 1 uchar ShowRing[3];
322 1 uchar NowKey;
323 1 uchar i,j=1;
324 1 uchar BeforKey=0xff;
325 1 uchar KeyCount=0;
326 1 uchar FlagBit=3;
327 1 uchar ShowRingCount=0;
328 1 uchar count1=0x40;//无操作时的时间控制
329 1 uchar count2=0xff;//无操作时的时间控制
330 1 S_Ray_Flag=1;
331 1 ShowRing[0]=RingDataL[ShowRingCount];
332 1 ShowRing[1]=RingDataH[ShowRingCount];
333 1 ShowRing[2]=ShowRingCount;
334 1 while(1)
335 1 {
336 2 if(RingCount==0)
337 2 Display(Null,5);
338 2 else
339 2 Display(ShowRing,FlagBit);
340 2 if(KeyCount==2)
341 2 {
342 3 KeyCount=0;
343 3 NowKey=GetKey();
344 3 if(NowKey!=BeforKey)
345 3 {
346 4 count1=0x40;
347 4 count2=0xff;
348 4 switch(NowKey)
349 4 {
350 5 case 1://增加一个闹铃
351 5 if(RingCount!=40 && FlagBit==4)
352 5 {
353 6 RingDataH[RingCount]=RingDataL[RingCount]=0;
354 6 ShowRingCount=RingCount++;
355 6 }
356 5 if(RingCount==0)
357 5 {
358 6 RingDataH[0]=RingDataL[0]=0;
359 6 RingCount++;
360 6 }
361 5 ShowRing[0]=RingDataL[ShowRingCount];
362 5 ShowRing[1]=RingDataH[ShowRingCount];
363 5 ShowRing[2]=ShowRingCount;
364 5 break;
365 5 case 2://删除一个闹铃
C51 COMPILER V8.08 CLOCK 10/11/2007 17:28:37 PAGE 7
366 5 if(RingCount!=0 && FlagBit==4)
367 5 {
368 6 if(RingCount==1)
369 6 {
370 7 RingDataH[0]=RingDataL[0]=0;
371 7 }
372 6 else
373 6 {
374 7 for(i=ShowRingCount;i<RingCount;i++)
375 7 {
376 8 RingDataH[i]=RingDataH[i+1];
377 8 RingDataL[i]=RingDataL[i+1];
378 8 }
379 7 RingDataH[i]=RingDataL[i]=0;
380 7 }
381 6 RingCount--;
382 6 if(RingCount==ShowRingCount)
383 6 ShowRingCount--;
384 6 ShowRing[0]=RingDataL[ShowRingCount];
385 6 ShowRing[1]=RingDataH[ShowRingCount];
386 6 ShowRing[2]=ShowRingCount;
387 6 }
388 5 break;
389 5
390 5 case 3://左移
391 5 if(RingCount!=0)
392 5 {
393 6 if(FlagBit==4)FlagBit=1;
394 6 else FlagBit++;
395 6 }
396 5 break;
397 5 case 4://闹铃时间增
398 5 switch(FlagBit)
399 5 {
400 6 case 1:
401 6 if(ShowRing[0]==59)
402 6 ShowRing[0]=0;
403 6 else
404 6 ShowRing[0]++;
405 6 RingDataL[ShowRingCount]=ShowRing[0];
406 6 break;
407 6 case 2:
408 6 if(ShowRing[1]==23)
409 6 ShowRing[1]=0;
410 6 else
411 6 ShowRing[1]++;
412 6 RingDataH[ShowRingCount]=ShowRing[1];
413 6 break;
414 6 case 3:
415 6 if(ShowRingCount==RingCount-1)
416 6 ShowRingCount=0;
417 6 else
418 6 ShowRingCount++;
419 6 ShowRing[0]=RingDataL[ShowRingCount];
420 6 ShowRing[1]=RingDataH[ShowRingCount];
421 6 ShowRing[2]=ShowRingCount;
422 6 break;
423 6 }
424 5 break;
425 5 case 5://闹铃时间减
426 5 switch(FlagBit)
427 5 {
C51 COMPILER V8.08 CLOCK 10/11/2007 17:28:37 PAGE 8
428 6 case 1:
429 6 if(ShowRing[0]==0)
430 6 ShowRing[0]=59;
431 6 else
432 6 ShowRing[0]--;
433 6 break;
434 6 case 2:
435 6 if(ShowRing[1]==0)
436 6 ShowRing[1]=23;
437 6 else
438 6 ShowRing[1]--;
439 6 break;
440 6 case 3:
441 6 if(ShowRingCount==0)
442 6 ShowRingCount=RingCount-1;
443 6 else
444 6 ShowRingCount--;
445 6 ShowRing[0]=RingDataL[ShowRingCount];
446 6 ShowRing[1]=RingDataH[ShowRingCount];
447 6 ShowRing[2]=ShowRingCount;
448 6 break;
449 6 }
450 5 break;
451 5 case 6://右移
452 5 if(RingCount!=0)
453 5 {
454 6 if(FlagBit==1)FlagBit=4;
455 6 else FlagBit--;
456 6 }
457 5 break;
458 5 case 7://取消
459 5 L3: j=1;
460 5 RingCount=0;
461 5 EA=0;
462 5 for(i=0;i<40;i++)
463 5 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -