求大佬指點
QQ截圖20181120170328.png (173.94 KB, 下載次數: 26)
下載附件
2018-11-20 17:03 上傳
#include<reg52.h> //庫文件 #define ucharunsigned char//宏定義無符號字符型 #define uintunsigned int //宏定義無符號整型 /******************************************************************** 初始定義 *********************************************************************/ code ucharseg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //顯示段碼 數碼管字跟 ucharwei[4]={0XEf,0XDf,0XBf,0X7f}; //位的控制端 uint sec; //定義計數值,每過1 秒,sec 減一 uchar keycnt=0;//按下次數值 uint tcnt; //鍵值判斷 sbit P3_0=P3^0; sbit P1_0=P1^0; /******************************************************************** 延時函數 *********************************************************************/ void delay(uchart) { uchar i,j; for(i=0;i<t;i++) { for(j=13;j>0;j--); { ; } } }
/******************************************************************** 顯示函數 *********************************************************************/ void Led(intdate) //顯示函數 { /*****************數據轉換*****************************/ uint z,x,c,v; z=date/1000; //求千位 x=date%1000/100; //求百位 c=date%100/10; //求十位 v=date%10; //求個位
P2=0XFF; P0=seg7code[z]; P2=wei[0]; delay(80); P2=0XFF; P0=seg7code[x]; P2=wei[1]; delay(80); P2=0XFF; P0=seg7code[c]; P2=wei[2]; delay(80); P2=0XFF; P0=seg7code[v]; P2=wei[3]; delay(80); P2=0XFF; } /******************************************************************** 按鍵掃描函數 *********************************************************************/ void KEY() //按鍵掃描程序 {
if(P3_0==0) { delay(20); if(P3_0==0) { keycnt++; /******************************************************************** 按下次數判斷函數 *********************************************************************/ switch(keycnt)//按下次數判斷 { case 1: //第一次按下 TH0=0x06; //對TH0 TL0 賦值 TL0=0x06; TR0=1; //開始定時 break; case 2: //第二次按下 TR0=0; //定時結束 break; case 3: //第三次按下 keycnt=0; //重新開始判斷鍵值 sec=60; //計數重新從零開始 P1_0=1; break; } while(P3_0==0); } } } /******************************************************************** 定時中斷服務函數 *********************************************************************/ void t0(void)interrupt 1 using 0 //定時中斷服務函數 { tcnt++; //每過250ust tcnt 加一 if(tcnt==4000) //計滿4000次(1 秒)時 { tcnt=0; //重新再計 sec--; if(sec==0) { TR0=0; //定時結束 P1_0=0 ; delay(20); P1_0=1; } } }
/******************************************************************** 主函數 *********************************************************************/ void main() { TMOD=0x02; //定時器工作在方式2 ET0=1; EA=1; sec=60; while(1) { KEY(); Led(sec); } }
/******************************************************************** 結束 *********************************************************************/
|