IMG_20161203_172523.jpg (665.83 KB, 下載次數: 75)
下載附件
自己焊的,看起開,,還可以吧,哈哈
2016-12-3 17:26 上傳
基于STC89C52的數碼管顯示秒表,用矩陣鍵盤,有走秒,輸入時間正計時、倒計時,到時提醒,及切換到時鐘模式的功能
鍵盤位置:7 8 9 開始(正計時)
4 5 6 暫停
1 2 3 倒計時
模式切換 0 時間校正 清零
很容易理解,所以,這個就直接附代碼~~
下載地址:
多功能秒表.doc
(6.43 KB, 下載次數: 85)
2016-12-3 17:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
///////////////////////////////////////////////////頭文件和一些定義和初始化在附件里有///////////////////////////////////////////////////
char codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71, 0x54};//數碼管段碼,最后一個為n
char code weixuan[]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//數碼管位碼
void Init()//清零 { run=0; remind=0; num=0; time=0; miao=0; fen=0; time0=0.00001; beep=1; key=16; EA=0; ET0=0; TR0=0; }
void delay(unsigned char i)//延時
{
char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
} void bee()//蜂鳴器
{
beep=0;
delay(500);
beep=1;
}
void keyscan()//按鍵檢測
{ uchar temp; P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xee: key=7; break; case0xde: key=8; break; case 0xbe: key=9; break; case0x7e: key=12; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xed: key=4; break; case0xdd: key=5; break; case0xbd: key=6; break; case0x7d: key=13; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; }
} }
P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xeb: key=1; break; case0xdb: key=2; break; case0xbb: key=3; break; case0x7b: key=14; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } P3=0xf7; temp=P3; temp=temp&0xf0; if(temp!=0xf0) { delay(10); temp=P3; temp=temp&0xf0; if(temp!=0xf0) { temp=P3; switch(temp) { case 0xe7: key=10; break; case0xd7: key=0; break; case0xb7: key=11; break; case0x77: key=15; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; } } } }
void stor() { if(key!=16)
{ if(key>11) switch(key) { case 12:run=1;break; case13:run=0;break; case14:run=2;break; case15:Init(); } if(key<10)
{ if(time0==0.00001) time0=0; time0=time0*10+key; run=3; } } key=16;//防止循環進入此函數 }
void T0_time()interrupt 1 { TH0=(65536-9216)/256; TL0=(65536-9216)%256; // num++; // if(num==2) // { // num=0; if(run==1) time+=0.01; else time-=0.01; // } }
void display(float t) { intmiao_,time10,a[6],n1; time10=t*100; miao_=time10%100; miao=time10/100%60; fen=time10/100/60;
a[0]=miao_%10; a[1]=miao_/10; a[2]=miao%10; a[3]=miao/10; a[4]=fen%10; a[5]=fen/10;
for(n1=0;n1<6;n1++) { if(n1!=2&&n1!=4) { P0=table[a[n1]]; dula=1; dula=0; P0=weixuan[n1]; wela=1; wela=0; delay(5); } else { //05 4744 P0=table[a[n1]]+0x80; dula=1; dula=0; P0=weixuan[n1]; wela=1; wela=0; delay(5); } }
// if(remind==0) // { // for(a5=0;a5<3;a5++)//數碼管0-2位依次顯示 // { // yu1=shang1%10;//取余 // shang1=shang1/10;//取商 // if(a5==1)//循環到個位時顯示小數點 // { // P0=table[yu1]+0x80; // dula=1; // dula=0; // P0=weixuan[a5]; // wela=1; // wela=0; // delay(5); // } // else // { // P0=table[yu1]; // dula=1; // dula=0; // P0=weixuan[a5]; // wela=1; // wela=0; // delay(5); // } // } // for(;a5<5;a5++)//數碼管3-4位依次顯示 // { // yu2=shang2%10;//取余 // shang2=shang2/10;//取商 // if(a5==3)//循環到個位時顯示小數點 // { // P0=table[yu2]+0x80; // dula=1; // dula=0; // P0=weixuan[a5]; // wela=1; // wela=0; // delay(5); // } // else // { // P0=table[yu2]; // dula=1; // dula=0; // P0=weixuan[a5]; // wela=1; // wela=0; // delay(5); // } // } // // } // else // { // P0=table[13]; // dula=1; // dula=0; // P0=weixuan[0]; // wela=1; // wela=0; // delay(5); // // P0=table[16]; // dula=1; // dula=0; // P0=weixuan[1]; // wela=1; // wela=0; // delay(5); // // P0=table[14]; // dula=1; // dula=0; // P0=weixuan[2]; // wela=1; // wela=0; // delay(5); // } }
void check_display() { if(run==0) TR0=0; if(run==1&&TR0==0||run==2&&TR0==0) { TMOD=0x01; TH0=(65536-9216)/256; TL0=(65536-9216)%256; EA=1; ET0=1; TR0=1; if(run==2&&time0!=0.00001) time=time0; } if(time==time0&&run==1&&remind==0) { // bee(); run=0; remind=1; } if(time<=0&&run==2&&remind==0) { // bee(); run=0; remind=1; } if(run!=3) display(time); else display(time0); }
void main() { Init(); while(1) { keyscan(); stor(); check_display(); } }
|