?? disk.c
字號:
/*-------------------------------------
程序功能:萬年歷
硬件連接:輸出(PO連接J3,P1.0連接位碼,P1.1連接段碼)
獨立按鍵輸入(P2連接K1--8,但是只用到了端口低位4個)
--------------------------------------*/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define InPut P2
#define DataOut P0
sbit SegDat=P1^0;
sbit SegCs=P1^1;
ulong JBit;
uint KeyData,CsCount,JChoose,i;
uint TimeCount,SecondData,MinuteData,HourData;DayData,MonthData,YearDataL,YearDataH;
bit JDisplay;
uint ReadKey();
DisplayData [8];
CsData [9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x67};
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
/*0 1 2 3 4 5 6 7 8 9 共陰*/
//*****時間模式*****
TimeDisplay()
{DisplayData [0]=tab[HourData/10];
DisplayData [1]=tab[HourData%10];
DisplayData [2]=0x40;
DisplayData [3]=tab[MinuteData/10];
DisplayData [4]=tab[MinuteData%10];
DisplayData [5]=0x40;
DisplayData [6]=tab[SecondData/10];
DisplayData [7]=tab[SecondData%10]; //送入顯示數(shù)據(jù)
if(JChoose==1) //小時修改
{if(KeyData==0xfb)
{KeyData=0xff,HourData++;}
if(KeyData==0xf7)
{KeyData=0xff,HourData--;}
if(SecondData%2==0) //光標(biāo)閃爍
{DisplayData [0]=0x00;
DisplayData [1]=0x00;}
}
else if(JChoose==2) //分鐘修改
{if(KeyData==0xfb)
{KeyData=0xff,MinuteData++;}
if(KeyData==0xf7)
{KeyData=0xff,MinuteData--;}
if(SecondData%2==0) //光標(biāo)閃爍
{DisplayData [3]=0x00;
DisplayData [4]=0x00;}
}
else JChoose=0;
}
//*****日期模式*****
DateDisplay()
{DisplayData [0]=tab[2];
DisplayData [1]=tab[0];
DisplayData [2]=tab[YearDataL/10];
DisplayData [3]=tab[YearDataL%10];
DisplayData [4]=tab[MonthData/10];
DisplayData [5]=tab[MonthData%10];
DisplayData [6]=tab[DayData/10];
DisplayData [7]=tab[DayData%10]; //送入顯示數(shù)據(jù)
if(JChoose==1) //年份修改
{if(KeyData==0xfb)
{KeyData=0xff,YearDataL++;}
if(KeyData==0xf7)
{KeyData=0xff,YearDataL--;}
if(SecondData%2==0)
{DisplayData [0]=0x00;
DisplayData [1]=0x00;
DisplayData [2]=0x00;
DisplayData [3]=0x00;}
}
else if(JChoose==2) //月份修改
{if(KeyData==0xfb)
{KeyData=0xff,MonthData++;}
if(KeyData==0xf7)
{KeyData=0xff,MonthData--;}
if(SecondData%2==0)
{DisplayData [4]=0x00;
DisplayData [5]=0x00;}
}
else if(JChoose==3) //日期修改
{if(KeyData==0xfb)
{KeyData=0xff,DayData++;}
if(KeyData==0xf7)
{KeyData=0xff,DayData--;}
if(SecondData%2==0)
{DisplayData [6]=0x00;
DisplayData [7]=0x00;}
}
else JChoose=0;
}
//////////菜單判斷系統(tǒng)////////////////
DisplaySystem()
{ if(KeyData==0xfe) //判斷菜單按鍵
{JDisplay=~JDisplay;
KeyData=0xff;}
else if(KeyData==0xfd) //判斷修改按鍵
{JChoose++;
KeyData=0xff;}
else;
if(JDisplay==0)
{TimeDisplay();} //時間模式
else
{DateDisplay();} //日期模式
}
////////時間判斷系統(tǒng)////////////////
HourSystem() //小時判斷
{ if(SecondData==60)
{SecondData=0;
MinuteData++;}
else if(SecondData>60)
{SecondData=0;}
else;
if(MinuteData==60)
{MinuteData=0;
HourData++;}
else if(MinuteData>60)
{MinuteData=0;}
else;
if(HourData>24)
{HourData=0;
DayData++;}
else;
}
/////////////日期判斷系統(tǒng)///////////
DaySystem()
{ if(MonthData<7&MonthData>0) //1~7月
{if(MonthData==2) //2月
{if(YearDataL%4==0) //潤年
{if(DayData>29)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
else //平年
{if(DayData>28)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
}
if(MonthData%2==0&MonthData!=2) //小月
{if(DayData>30)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
else //大月
{if(DayData>31)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
}
else if(MonthData>=7&MonthData<=12)//8~12月
{if(MonthData%2==0) //大月
{if(DayData>31)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
else //小月
{if(DayData>30)
{DayData=1;
MonthData++;}
else if(DayData==0)
{DayData=1;}
else;
}
}
else if(MonthData==13) //月份進位
{MonthData=1;
YearDataL++;}
else {MonthData=1;}//超出范圍
}
///////////年份判斷系統(tǒng)/////////////
YearSystem()
{if(YearDataL>50)
{YearDataL=50;}
else if(YearDataL<0)
{YearDataL=0;}
else ;
}
///////////按鍵////////////
KeyScan()
{ if(ReadKey()!=0xff)
{JBit++;
if(JBit==10) //短按防抖
{KeyData=ReadKey();}
else if(JBit%50==0) //長按加1
{KeyData=ReadKey();}
else;
}
else {JBit=0;}
}
uint ReadKey() //鍵值讀取
{ uint tempkey;
InPut=0xff;
tempkey=InPut;
return (tempkey);
}
//*****顯示
Display()
{ while(CsCount<8)
{ DataOut=DisplayData[CsCount]; //送數(shù)據(jù)
SegDat=1;
SegDat=0;
DataOut=CsData[CsCount]; //送位碼
SegCs=1;
SegCs=0;
for(i=0;i<100;i++); //循環(huán)寫入
DataOut=0xff;
SegCs=1;
SegCs=0;
CsCount++;
}
CsCount=0;
}
main()
{ TMOD=0x01;
TH0=(65539-50000)/256;
TL0=(65539-50000)%256;
EA=1;
ET0=1;
TR0=1;
//*****************************
while(1)
{HourSystem();
DaySystem();
YearSystem();
KeyScan();
DisplaySystem();
Display();
}
}
////////定時中斷///////////////
void Time() interrupt 1
{ TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TimeCount++;
if(TimeCount==20)
{SecondData++;
TimeCount=0;}
else;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -