//////////////////////////////////////////////////////////////////////////
//程序功能:萬年歷顯示
//晶振大。6MHZ
//////////////////////////////////////////////////////////////////////////
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit start_test = P3^0;
sbit start_add = P3^1;
sbit w0 = P1^0;
sbit w1 = P1^1;
sbit w2 = P1^2;
sbit w3 = P1^3;
sbit w4 = P1^4;
sbit c0 = P2^0;
sbit c1 = P2^1;
uint year,month,day,hour,min,sec,time,ge,shi,bai,qian,s_year,s_day,s_time,c_time,m_once,m_time;
uchar code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
///////////////////////P1延時函數(shù)/////////////////////////////////////////
void delay()
{
uint x = 0;
for(x=0;x<500;x++);
}
/////////////////////////數(shù)據(jù)處理/////////////////////////////////////////
void chuli()
{
if(sec%12 < 4)
{
qian=hour/10;
bai=hour%10;
shi=min/10;
ge=min%10;
}
else if(sec%12 < 8)
{
qian=year/1000;
bai=year/100%10;
shi=year%100/10;
ge=year%10;
}
else
{
qian=month/10;
bai=month%10;
shi=day/10;
ge=day%10;
}
}
/////////////////////////消影處理/////////////////////////////////////////////
void xiaoyin()
{
delay();
}
/////////////////////////顯示函數(shù)/////////////////////////////////////////////
void display()
{
/////////ge///////////////
w0 = 1; w1 = 1; w2 = 1;w3 = 1;
P0=tab[ge];
w0 = 0; w1 = 1; w2 = 1;w3 = 1;
xiaoyin();
/////////shi//////////////
w0 = 1; w1 = 1; w2 = 1;w3 = 1;
P0=tab[shi];
w0 = 1; w1 = 0; w2 = 1;w3 = 1;
//bit_select = bit_select << 1 + 1;
xiaoyin();
/////////bai//////////////
w0 = 1; w1 = 1; w2 = 1;w3 = 1;
P0=tab[bai];
w0 = 1; w1 = 1; w2 = 0;w3 = 1;
xiaoyin();
/////////qian/////////////
w0 = 1; w1 = 1; w2 = 1;w3 = 1;
P0=tab[qian];
w0 = 1; w1 = 1; w2 = 1;w3 = 0;
xiaoyin();
w0 = 1; w1 = 1; w2 = 1;w3 = 1;
}
//////////////////////////中斷定時////////////////////////////////////////////
void timer0() interrupt 1
{
TH0=(65536-50000)>>8;
TL0=65536-50000;
time ++;
s_time++;
c_time++;
m_time++;
}
//////////////////////////判斷閏年////////////////////////////////////////////
int leap (int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
///////////////////////////判斷月//////////////////////////////////////////////
void days_month ()
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
s_day = 31;
if(month==4||month==6||month==9||month==11)
s_day = 30;
if(month==2&&leap(year)==1)
s_day = 29;
else
s_day = 28;
}
///////////////////////////計算日月年///////////////////////////////////////////
void s_date()
{
days_month();
if (month == 12&&day == s_day)
{
month = 0;
year++;
if (day == s_day&&hour == 24)
{
day = 0;
month++;
}
}
}
//////////////////////////gai///////////////////////////////////////////////////
void date_display()
{
if(c1==0 && c_time <1)
{
c_time = 0;
if(c0 == 0)
{
day++;
}
}
if(c1==0 && c_time <4)
{
c_time = 0;
if(c0 == 0)
{
month++;
}
}
if(c1==0 && c_time >4)
{
c_time = 0;
if(c0 == 0)
{
year++;
}
}
}
//////////////////////////主函數(shù)////////////////////////////////////////////////
void main()
{
m_time = 0;
m_once = 0;
ge = 0;
shi = 0;
sec = 0;
min = 0;
hour = 0;
time = 0;
s_time = 0;
c_time = 0;
day = 18;
month = 05;
year = 2012;
//////////////中斷定時初始化////////////////
TMOD=0x01;
TH0=(65536-50000)>>8;
TL0=65536-50000;
EA=1;
ET0=1;
TR0=1;
///////////////////////////////////////////
while(1)
{
if(start_test == 0)
{
while (m_once < 5)
{
if(time==10)
{
time = 0;
m_once++;
}
if(start_add == 0)
{
m_time = 0;
if(m_time <10)
{
hour++;
}
}
}
}
if(c1 == 0)
{
date_display();
}
else
{
display();
}
if(s_time ==5)
{
s_time = 0;
w4 = ~w4;
}
if(time==10)
{
time = 0;
sec++;
if (sec == 60)
{
sec = 0;
min++;
if (min == 60)
{
min = 0;
hour++;
if (hour == 24)
{
hour = 0;
day++;
}
}
}
chuli();
s_date();
}
}
}
能顯示年月日小時,分鐘,但調(diào)節(jié)不了我想用P3.0P3.1口進行時間上的調(diào)節(jié)控制,怎么搞我現(xiàn)在的不行?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |