|
#include < reg51.h > // 實(shí)現(xiàn)光電門計(jì)數(shù)
#include <intrins.h>
sbit LS138A=P2^2;
sbit LS138B=P2^3;
sbit LS138C=P2^4;
unsigned int LedNumVal = -1 ,LedOut[8];
unsigned char code Disp_Tab[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x80,0x7c,0x39,0x5e,0x79,0x71,0x00};
void display()
{
unsigned char i;
unsigned int j;
unsigned int v;
v = LedNumVa;
if (v>=1000) LedOut[4]=Disp_Tab[v%10000/1000];
if (v>=100) LedOut[5]=Disp_Tab[v%1000/100];
if (v>=10) LedOut[6]=Disp_Tab[v%100/10];
if (v>=0) LedOut[7]=Disp_Tab[v%10];
for( i=0; i<8; i++)
{
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
P0 = LedOut[i]; //發(fā)送段碼
j=10; //掃描間隔時(shí)間設(shè)定
while(j--);
P0 = 0x00; //消隱
}
}
void main(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
// IT0=0; //低電平觸發(fā)
IT0=1; //下降沿觸發(fā)
EA=1;
EX0=1;
while(1)
{
display();
}
}
/********************************************************
* INT0中斷函數(shù) *
********************************************************/
void counter(void) interrupt 0
{
// unsigned char x;
EX0=0;
LedNumVal++; //中斷計(jì)數(shù)
EX0=1;
}
/********************************************************/
|
|