10-1 DS1302时钟.zip
(107.83 KB, 下载次数: 119)
只显示时钟就能显示,吧调节时间的程序加上去过后就没法正常运行了,请各位大佬帮我看看
- #include <REGX52.H>
- #include "OLED.h"
- #include "DS1302.h"
- #include "Key.h"
- #include "Timer0.h"
- #include "Delay.H"
-
- #define uchar unsigned char
- #define uint unsigned int
-
- unsigned char KeyNum,SHOW_MODE,TimeSetFlashFlag;
- char TimeSetSelect;
-
- void TimeShow(void)
- {
- DS1302_ReadTime();
- OLED_ShowNum(0,3,DS1302_Time[0]/10,1,8);
- OLED_ShowNum(7,3,DS1302_Time[0]%10,1,8);
- OLED_ShowString(15,3,"-",8);
- OLED_ShowNum(22,3,DS1302_Time[1]/10,1,8);
- OLED_ShowNum(29,3,DS1302_Time[1]%10,1,8);
- OLED_ShowString(35,3,"-",8);
- OLED_ShowNum(42,3,DS1302_Time[2]/10,1,8);
- OLED_ShowNum(49,3,DS1302_Time[2]%10,1,8);
- OLED_ShowNum(0,4,DS1302_Time[3]/10,1,8);
- OLED_ShowNum(7,4,DS1302_Time[3]%10,1,8);
- OLED_ShowString(15,4,":",8);
- OLED_ShowNum(22,4,DS1302_Time[4]/10,1,8);
- OLED_ShowNum(29,4,DS1302_Time[4]%10,1,8);
- OLED_ShowString(35,4,":",8);
- OLED_ShowNum(42,4,DS1302_Time[5]/10,1,8);
- OLED_ShowNum(49,4,DS1302_Time[5]%10,1,8);
- }
-
- void TimeSet(void)
- {
- if(KeyNum==2){TimeSetSelect++;if(TimeSetSelect>5){TimeSetSelect=0;}}
- if(KeyNum==3){TimeSetSelect--;if(TimeSetSelect<0){TimeSetSelect=5;}}
-
- if(KeyNum==4)
- {
- DS1302_Time[TimeSetSelect]++;
- if(DS1302_Time[0]>99){DS1302_Time[0]=0;}
- if(DS1302_Time[1]>12){DS1302_Time[1]=1;}
- if( DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7 ||
- DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)
- {
- if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
- }
- else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)
- {
- if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
- }
- else if(DS1302_Time[1]==2)
- {
- if(DS1302_Time[0]%4==0)
- {
- if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
- }
- else
- {
- if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
- }
- }
- if(DS1302_Time[3]>23){DS1302_Time[3]=0;}
- if(DS1302_Time[4]>59){DS1302_Time[4]=0;}
- if(DS1302_Time[5]>59){DS1302_Time[5]=0;}
- }
- if(KeyNum==5)
- {
- DS1302_Time[TimeSetSelect]--;
- if(DS1302_Time[0]<0){DS1302_Time[0]=99;}
- if(DS1302_Time[1]<1){DS1302_Time[1]=12;}
- if( DS1302_Time[1]==1 || DS1302_Time[1]==3 || DS1302_Time[1]==5 || DS1302_Time[1]==7 ||
- DS1302_Time[1]==8 || DS1302_Time[1]==10 || DS1302_Time[1]==12)
- {
- if(DS1302_Time[2]<1){DS1302_Time[2]=31;}
- if(DS1302_Time[2]>31){DS1302_Time[2]=1;}
- }
- else if(DS1302_Time[1]==4 || DS1302_Time[1]==6 || DS1302_Time[1]==9 || DS1302_Time[1]==11)
- {
- if(DS1302_Time[2]<1){DS1302_Time[2]=30;}
- if(DS1302_Time[2]>30){DS1302_Time[2]=1;}
- }
- else if(DS1302_Time[1]==2)
- {
- if(DS1302_Time[0]%4==0)
- {
- if(DS1302_Time[2]<1){DS1302_Time[2]=29;}
- if(DS1302_Time[2]>29){DS1302_Time[2]=1;}
- }
- else
- {
- if(DS1302_Time[2]<1){DS1302_Time[2]=28;}
- if(DS1302_Time[2]>28){DS1302_Time[2]=1;}
- }
- }
- if(DS1302_Time[3]<0){DS1302_Time[3]=23;}
- if(DS1302_Time[4]<0){DS1302_Time[4]=59;}
- if(DS1302_Time[5]<0){DS1302_Time[5]=59;}
- }
- if(TimeSetSelect==0 && TimeSetFlashFlag==1){OLED_ShowString(0,3," ",8);}
- else {OLED_ShowNum(0,3,DS1302_Time[0]/10,1,8);OLED_ShowNum(7,3,DS1302_Time[0]%10,1,8);}
- if(TimeSetSelect==1 && TimeSetFlashFlag==1){OLED_ShowString(22,3," ",8);}
- else {OLED_ShowNum(22,3,DS1302_Time[1]/10,1,8);OLED_ShowNum(29,3,DS1302_Time[1]%10,1,8);}
- if(TimeSetSelect==2 && TimeSetFlashFlag==1){OLED_ShowString(42,3," ",8);}
- else {OLED_ShowNum(42,3,DS1302_Time[2]/10,1,8);OLED_ShowNum(49,3,DS1302_Time[2]%10,1,8);}
- if(TimeSetSelect==3 && TimeSetFlashFlag==1){OLED_ShowString(0,4," ",8);}
- else {OLED_ShowNum(0,4,DS1302_Time[3]/10,1,8);OLED_ShowNum(7,4,DS1302_Time[3]%10,1,8);}
- if(TimeSetSelect==4 && TimeSetFlashFlag==1){OLED_ShowString(22,4," ",8);}
- else {OLED_ShowNum(22,4,DS1302_Time[4]/10,1,8);OLED_ShowNum(29,4,DS1302_Time[4]%10,1,8);}
- if(TimeSetSelect==5 && TimeSetFlashFlag==1){OLED_ShowString(42,4," ",8);}
- else {OLED_ShowNum(42,4,DS1302_Time[5]/10,1,8);OLED_ShowNum(49,4,DS1302_Time[5]%10,1,8);}
- }
-
-
- void main()
- {
- OLED_Init();
- OLED_Clear();
- DS1302_Init();
- Timer0_Init();
-
- DS1302_SetTime();//设置时间
-
- while(1)
- {
- KeyNum=Key_shi();
- if(KeyNum==1)
- {
- if(SHOW_MODE==0){SHOW_MODE=1;TimeSetSelect=0;}
- else if(SHOW_MODE==1){SHOW_MODE=0;DS1302_SetTime();}
- }
- switch(SHOW_MODE)
- {
- case 0:TimeShow();break;
- case 1:TimeSet();break;
- }
-
- }
- }
-
-
- void Timer0_Routine() interrupt 1
- {
- static unsigned int T0Count;
- TL0 = 0x66;
- TH0 = 0xFC;
- T0Count++;
- if(T0Count>=500)
- {
- T0Count=0;
- TimeSetFlashFlag=!TimeSetFlashFlag;
- }
- }
复制代码
|