熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
|
天旭 發(fā)表于 2018-12-12 13:54 您好,可以把圖單獨(dú)發(fā)一下嗎,不清晰,謝謝啦 |
|
#include <reg52.h> #define uchar unsigned char #define uint unsigned int uchar code tab[] ={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0xff}; //0,12,3,4,5,6,7,8,9,關(guān)顯示 uchar b,d,t; //定義變量 uchar fen=10,miao=0; //定時(shí)初始時(shí)間變量 uchar flag; //標(biāo)志位 uchar temp; //矩形鍵盤鍵值 sbit beep =P1^7 ; //蜂鳴器 void delay(uint z) //延時(shí)函數(shù) { uint x,y; for(x=z;x>0;x--) for( y= 110;y>0;y--); } void dispaly() //定時(shí)時(shí)間顯示 { uchar miaoge,fenge,miaoshi,fenshi; miaoge = miao%10; P2 = 0x80;; P0 =tab[miaoge]; delay(1); miaoshi = miao/10; P2 =0x40; P0 =tab[miaoshi]; delay(1); fenge = fen%10; P2=0x20; P0 =tab[fenge]; delay(1); fenshi =fen/10; P2 =0x10; P0 =tab[fenshi]; delay(1); P2 =0x00; } void dispaly1(char a) //甲隊(duì)比分顯示 { uchar ge1,shi1; b=a; ge1=b%10; P2=0x02; P0=tab[ge1]; delay(1); shi1=b/10; P2=0x01; P0=tab[shi1]; delay(1); P2=0x00; } void dispaly2(char c) //乙隊(duì)比分顯示 { uchar ge2,shi2; d=c; ge2 =d%10; P2=0x08; P0=tab[ge2]; delay(1); shi2 =d/10; P2 = 0x04; P0 =tab[shi2]; delay(1); P2 =0x80; } void keyscan() //矩陣鍵盤掃描控制 { char a,c,e,f; dispaly1(a); dispaly2(c); P3 =0xfe; temp=P3; temp =temp&0xf0; while(temp!=0xf0) { delay(5); temp =P3; temp =temp&0xf0; while(temp!=0xf0) { temp =P3; if(temp==0xee) { delay(5); if(temp == 0xee) { a++; //甲隊(duì)比分加1 if(a>=100) a=99; dispaly1(a); } } if(temp==0xde) { delay(5); if(temp==0xde) { a=a+2; //甲隊(duì)比分加2 if(a>=100) a=99; dispaly1(a); } } if(temp==0xbe) { delay(5); if(temp==0xbe) { a=a+3; //甲隊(duì)比分加3 if(a>=100) a=99; dispaly1(a); } } if(temp ==0x7e) { delay(5); if(temp ==0x7e) { a--; //甲隊(duì)比分減1 if(a<= -1) a=0; dispaly1(a); } } while(temp!= 0xf0) //松手檢測 { temp =P3; temp=temp&0xf0; dispaly1(a); } } } P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp =P3; temp=temp&0xf0; while(temp!=0xf0) { temp =P3; if(temp==0xed) { delay(5); if(temp ==0xed) { c++; //乙隊(duì)比分加1 if(c>=100) c=99; dispaly2(c); } } if(temp==0xdd) { delay(5); if(temp==0xdd) { c= c+2; //乙隊(duì)比分加2 if(c>=100) c=99; dispaly2(c); } } if(temp==0xbd) { delay(5); if(temp ==0xbd) { c=c+3; //乙隊(duì)比分3 if(c>=100) c=99; dispaly2(c); } } if(temp ==0x7d) { delay(5); if(temp ==0x7d) { c--; //乙隊(duì)比分減1 if(c <= -1) c=0; dispaly2(c); } } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; dispaly2(c); } } } P3=0xfb; temp=P3; temp =temp&0xf0; while(temp!=0xf0) { delay(5); temp =P3; temp=temp&0xf0; while(temp!=0xf0) { temp =P3; if(temp==0xeb) { delay(5); if(temp ==0xeb) { a=0; //雙方比分清零 dispaly1(a); c=0; dispaly2(c); } } if(temp == 0xdb) { delay(5); if(temp ==0xdb) { e=a; f=c; a=f; dispaly1(a); //雙方比分切換 c=e; dispaly2(c); } } if(flag!=1) //避免誤操作,只有在時(shí)間停止的情況下才能加/減定時(shí)時(shí)間 { if(temp==0xbb) { delay(5); if(temp==0xbb) { fen++; // 定時(shí)時(shí)間加1 if(fen==99) fen=0; } } if(temp ==0x7b) { delay(5); if(temp==0x7b) { fen--; //定時(shí)時(shí)間減1 if(fen== -1) fen=99; } } } while(temp!=0xf0) { temp=P3; temp =temp&0xf0; dispaly2(c); } } } P3=0xf7; temp =P3; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P3; temp =temp&0xf0; while(temp!=0xf0) { temp=P3; if(temp==0xe7) { delay(5); if(temp==0xe7) { TR0=1; //比賽開始計(jì)時(shí)按鍵 flag=1; } } if(temp==0xd7) { delay(5); if(temp==0xd7) { TR0=0; //比賽暫停計(jì)時(shí)按鍵 flag=0; } } if(temp==0xb7) { delay(5); if(temp==0xb7) { fen=0; //比賽時(shí)間清零 miao=0; } } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; dispaly2(c); } } } } void timer0(void)interrupt 1 //T0中斷服務(wù) { TH0=0x4c; //50ms延時(shí)初值 TL0=0x00; t++; if(t==20) //50ms走20次剛好1S,1s時(shí)間到,減1操作 { t=0; miao--; if(miao == -1) { fen--; miao=59; //當(dāng)59s減完,分減1 } if(fen == -1) { fen=0; //分清零 miao=0; beep=0; //時(shí)間停止蜂鳴器響 } } } void init() //T0中斷初始化 { TMOD=0x01; TH0= (65536-50000)/256; TL0= (65536-50000)%256; ET0=1; EA=1; TR0=0; } void main() //主程序 { P2=0xfe; init(); while(1) { dispaly(); keyscan(); } } 圖看我頭像 希望對你有幫助 ![]() |
| 用8051單片機(jī) |
Powered by 單片機(jī)教程網(wǎng)