|
#include<reg52.h> #include"led.h" uchar code lednum[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76,0x38};//數碼管字0~9、'-'、'H'、'L'、,共陰數碼管段碼 uchar code lednum_p[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//數碼管字0~9,帶小數點 /*****************延時函數********************/ void LedDelay(uint x) { uchar k; while(x--) for(k=0;k<30;k++) ; } /*****************數碼管掃描********************/ void LedScan(void) { uchar k; for(k=0;k<100;k++) { SEG=lednum[dig0]; DIG=0xfe; LedDelay(1); SEG=0x00;//DIG是選擇哪一只數碼管點亮 SEG=lednum_p[dig1]; DIG=0xfd; LedDelay(1); SEG=0x00;//SEG是選擇數碼管哪幾段亮,這里0x00是熄滅所有段 SEG=lednum[dig2]; DIG=0xfb; LedDelay(1); SEG=0x00; SEG=lednum[dig3]; DIG=0xf7; LedDelay(1); SEG=0x00; } } /**************數碼管某位閃爍*****************/ void LedFlick(uchar FlickBit) { uchar k; for(k=0;k<100;k++) { switch(FlickBit) { case(1)://第1位數碼管閃爍,右往左 SEG=lednum[dig0];if(k<50){DIG=0xfe; LedDelay(1);}else{DIG=0xff; LedDelay(1);} SEG=0x00; SEG=lednum_p[dig1]; DIG=0xfd; LedDelay(1); SEG=0x00; SEG=lednum[dig2]; DIG=0xfb; LedDelay(1); SEG=0x00; SEG=lednum[dig3]; DIG=0xf7; LedDelay(1); SEG=0x00; break; case(2)://第2位數碼管閃爍 SEG=lednum[dig0]; DIG=0xfe; LedDelay(1); SEG=0x00; //SEG=lednum_p[dig1];if(k<50){DIG=0xfd; LedDelay(1);}else{DIG=0xff; LedDelay(1);} SEG=0x00; //以下這句是用來處理閃爍數字而不閃爍小數點的 DIG=0xfd; if(k<50){SEG=lednum_p[dig1];LedDelay(1);}else{SEG=0x80; LedDelay(1);} DIG=0xff; SEG=lednum[dig2]; DIG=0xfb; LedDelay(1); SEG=0x00; SEG=lednum[dig3]; DIG=0xf7; LedDelay(1); SEG=0x00; break; case(3)://第3位數碼管閃爍 SEG=lednum[dig0]; DIG=0xfe; LedDelay(1); SEG=0x00; SEG=lednum_p[dig1]; DIG=0xfd; LedDelay(1); SEG=0x00; SEG=lednum[dig2];if(k<50){DIG=0xfb; LedDelay(1);}else{DIG=0xff; LedDelay(1);} SEG=0x00; SEG=lednum[dig3]; DIG=0xf7; LedDelay(1); SEG=0x00; break; case(4)://第4位數碼管閃爍 SEG=lednum[dig0]; DIG=0xfe; LedDelay(1); SEG=0x00; SEG=lednum_p[dig1]; DIG=0xfd; LedDelay(1); SEG=0x00; SEG=lednum[dig2]; DIG=0xfb; LedDelay(1); SEG=0x00; SEG=lednum[dig3];if(k<50){DIG=0xf7; LedDelay(1);}else{DIG=0xff; LedDelay(1);} SEG=0x00; default:break; } } } |