/*************************************************************************** 名稱:用定時器定時做時鐘 內容,自動從00-00-00開始,有按鍵功能 芯片型號:STC89C52RC 功能腳說明:P0為段選腳,P3為位選腳,所有引腳低電平有效. 程序員:玄溪 日期:2012.2.6 /***************************************************************************/ #include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit K1=P1^0; //分+ sbit K2=P1^1; //分- sbit K3=P1^2; //時+ sbit K4=P1^3; //時- uchar time; //定義中斷時間次數 uchar second; //定義秒 uchar minute; //定義分 uchar hour; //定義時 //===========延時函數============// void delay() { uchar j; for(j=0;j<200;j++); } //=========顯示秒函數=======// void displaysecond(uchar s) //帶返回值 { P3=0xbf; P0=du[s/10]; delay(); P3=0x7f; P0=du[s%10]; delay(); P3=0xff; if(K2==0) { s++; if(s==60) { s=0; } } } //========顯示分函數=============// void displayminute(uchar m) { P3=0xf7; P0=du[m/10]; delay(); P3=0xef; P0=du[m%10]; delay(); P3=0xdf; P0=0xbf; delay(); P3=0xff; if(!K1) { delay(); if(!K1) { TR0=0; m++; if(m==60) m=0; } } if(!K2) { delay(); if(!K2) { TR0=0; m--; if(m==0) m=59; } } TR0=1; } //========顯示時函數==============// void displayhour(uchar h) { P3=0xfe; P0=du[h/10]; delay(); P3=0xfd; P0=du[h%10]; delay(); P3=0xfb; P0=0xbf; delay(); P3=0xff; if(!K3) { delay(); if(!K3) { TR0=0; h++; if(h==24) h=0; } } if(!K4) { TR0=0; delay(); if(!K4) { h--; if(h==0) h=23; } } TR0=1; } //=============主函數============// void main(void) { TMOD=0x01; EA=1; ET0=1; TH0=(65536-46083)/256; //賦初值 TL0=(65536-46083)%256; TR0=1; while(1) { displaysecond(second); delay(); displayminute(minute); delay(); displayhour(hour); delay(); } } //=======定時器中斷子函數=================// void inter0()interrupt 1 { time++; if(time==20) { time=0; second++; } if(second==60) { second =0; minute++; } if(minute==60) { minute=0; hour++; } if(hour==24) { hour=0; } TH0=(65536-46083)/256; //賦初值 TL0=(65536-46083)%256; }
//=========顯示秒函數=======//
void displaysecond(uchar s) //帶返回值
{
P3=0xbf;
P0=du[s/10];
delay();
P3=0x7f;
P0=du[s%10];
delay();
P3=0xff;
if(K2==0)
{
s++;
if(s==60)
{
s=0;
}
}
}
你把上面程序的兩部分交換下試試. 不過整個程序布局不是很好,顯得有些冗亂.
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |