可調(diào)時鐘不能在四針腳oled上顯示問題
10-1 DS1302時鐘.zip
(107.83 KB, 下載次數(shù): 7)
2023-3-31 17:46 上傳
點擊文件名下載附件
大佬能幫我看看,基于stc89c52單片機,可調(diào)時鐘不能在四針腳oled上顯示,程序哪出了問題
#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();//設(shè)置時間
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;
}
}
|