#include
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 顯示段碼值0123456789
unsigned char code seg[]={0,1};//分別對應相應的數碼管點亮
////////////////////////////////////////////////////////
void delay(unsigned int cnt)
{
while(--cnt);
}
///////////////////////////////////////////////////////
void xianshi(int n)
{int i,j;
if(n<=9)
{P0=dofly[n];//取顯示數據
P2=seg[0]; //取段碼
}
else
{ i=n/10;j=n%10;
P0=dofly;//取顯示數據
P2=seg[0]; //取段碼
delay(200);
P0=dofly[j];//取顯示數據
P2=seg[1]; //取段碼
}
}
sbit LED=P3^3;//紅外發射
sbit LED1=P1^2;
sbit IR=P3^2;//紅外一體化接收
bit Flag;
void Init_Timer0(void)
{
TMOD |= 0x01;
TH0=0xf0; /* Init value */
TL0=0x00;
EA=1; /* interupt enable */
ET0=1; /* enable timer0 interrupt */
TR0=1;
}
void Timer0_isr(void) interrupt 1 using 1
{
TH0=0x0f; /* Init value */
TL0=0x00;
Flag=!Flag;
}
main()
{
int n=1;
unsigned int j;
Init_Timer0();
while(1)
{
if(LED1==1)
{
if(Flag)
{
for(j=0;j<27;j++)//大約38KHz
led="!LED;//發射管輸出
" }
if(LED1==0) n++;
}
xianshi(n);
led1="IR;//讀取一體化接收頭數值
"
if(Flag)
{
for(j=0;j<27;j++)//大約38KHz
led="!LED;//發射管輸出
"
}
}
}
用兩個數碼管記錄車流量,但是當當著接收器的時候還是無法計數,請高手幫忙!~ |