要求定時器可以實現(xiàn)三個時間的顯示,而且每個時間的初始值可以改變,完成硬件電路設(shè)計和軟件程序設(shè)計,需要完成硬件仿真。(依據(jù)見習(xí)時間來決定,實物可以暫時不做)
設(shè)計指標(biāo)參數(shù):
(1) 定時時間1。1s-99s,可調(diào)。
(2) 定時時間2。1s-99s,可調(diào)。
(3) 定時時間3。1min-99min,可調(diào)。
(4) 所有時間數(shù)字均可調(diào)。
(5) 用數(shù)碼管顯示剩余時間。 #include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit p1=P2^3; void keyscan(uchar z); void delay(uchar k); void display(uchar i); void shezhi(); void playon(); uchar nummiaoge,nummiaoshi,numfenge,numfenshi,numshige,numshishi,tt,num; uchar code table1[]={0x3f, 0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77}; ding1h=keyscan(0); ding1l=keyscan(1); ding2h=keyscan(2); ding2l=keyscan(3); ding3h=keyscan(4); ding3l=keyscan(5); ding4h=keyscan(6); ding4l=keyscan(7); ding5h=keyscan(8); ding5l=keyscan(9); ding6h=keyscan(10); ding6l=keyscan(11); play=keyscan(12); zanting=keyscan(13); close=keyscan(14); res=keyscan(15); nummiaoge=P2^0; nummiaoshi=P2^1; numfenge=P2^2; numfenshi=P2^3; numshige=P2^4; numshishi=P2^5; void main() { tt=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; while(1) { shezhi(); playon(); } } void keyscan(uchar z) { uchar n; P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfe; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(0);break; case(0xd0):display(1);break; case(0xb0):display(2);break; case(0x70):display(3);break; } } } P1=0xfd; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfd; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(4);break; case(0xd0):display(5);break; case(0xb0):display(6);break; case(0x70):display(7);break; } } } P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xfb; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(8);break; case(0xd0):display(9);break; case(0xb0):display(10);break; case(0x70):display(11);break; } } } P1=0xf7; n=P1; n&=0xf0; if(n!=0xf0) { delay(); P1=0xf7; n=P1; n&=0xf0; if(n!=0xf0) { switch(n) { case(0xe0):display(12);break; case(0xd0):display(13);break; case(0xb0):display(14);break; case(0x70):display(15);break; } } } } void display(uchar i) { uchar table2[]={ 0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83, 0xC6,0xA1,0x86,0x8E}; P2=0xfe; P0=table; } void delay(uchar k) { uint x,y; for(x=100;x>0;x--) for(y=k;y>0;y--); } void shezhi() { if(ding1h==0) { nummiaoge++; if(nummiaoge==10) { nummaioge=0; } } if(ding1l==0) { nummiaoge--; if(nummiaoshi==-1) { nummaioshi=9; } } if(ding2h==0) { nummiaoshi++; if(nummiaoshi==10) { nummiaoshi=0; } } if(ding2l==0) { nummiaoshi--; if(nummiaoshi==-1) { nummiaoshi=9; } } if(ding3h==0) { numfensge++; if(numfenge==10) { numfenge=0; } } if(ding3l==0) { numfenge--; if(numfenge==-1) { numfenge=9; } } if(ding4h==0) { numfenshi++; if(numfenshi==10) { numfenshi=0; } } if(ding4l==0) { numfenshi--; if(numfenshi==-1) { numfenshi=9; } } if(ding5h==0) { numshige++; if(numshige==10) { numshige=0; } } if(ding5l==0) { numshige--; if(numshige=-1) { numshige=9; } } if(ding6h==0) { numshishi++; if(numshishi==10) { numshishi=0; } } if(ding6l==0) { numshishi--; if(numshishi==-1) { numshishi=9; } } } void playon() { while(1) { nummiaoge--; if(nummiaoge==0) { nummiaoshi=nummiaoshi-1; nummiaoge=9; if(nummiaoshi==0) { numfenge=numfenge-1; nummiaoshi=9; if(numfenge==0) { numfenshi=numfenshi-1; numfenge=9; if(numfenshi==0) { numshige=numshige-1; numfenshi=9; if(numshige=0) { numshishi=numshishi-1; numshige=9; } } } } } if(numshishi,numshige,numfenshi,numfenge,nummiaoshi,nummiaoge==0) { p1=1; } } } void exter0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; }
我有些東西還是不大懂,我不知道怎么樣去把鍵盤的16個鍵如何去控制6歌數(shù)碼管的加減! |