////////////////////////////////////////////////////////////////////////// //程序功能:萬年歷顯示 //晶振大。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延時函數///////////////////////////////////////// void delay() { uint x = 0; for(x=0;x<500;x++); } /////////////////////////數據處理///////////////////////////////////////// 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(); } /////////////////////////顯示函數///////////////////////////////////////////// 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++; } } } //////////////////////////主函數//////////////////////////////////////////////// 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(); } } }
能顯示年月日小時,分鐘,但調節不了我想用P3.0P3.1口進行時間上的調節控制,怎么搞我現在的不行? |