做课设可以用的红外人流计数
单片机源程序如下:
- #include<AT89x51.H>
- sbit led1 =P2^0;
- sbit led2 =P2^1;
- sbit led3 =P2^2;
- sbit led4 =P2^3;
- unsigned code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管断码
- unsigned code dis[] ={0xfe,0xfd,0xfb,0xf7}; //扫描数码管客值
- unsigned char disbuff[5]={0}; //显示缓存
- unsigned char i =0; //定义扫描数码管字数
- unsigned int count1=0; //计左电机码盘脉冲值
- /************************************************************************/
- //显示数码管字程序
- void Display_SMG(void)
- {
- if(++i>=4)i=0;
- P0=table[disbuff[i]];
- if(i==0)
- {P2_0=0;P2_1=1;P2_2=1;P2_3=1;}
- if(i==1)
- {P2_0=1;P2_1=0;P2_2=1;P2_3=1;}
- if(i==2)
- {P2_0=1;P2_1=1;P2_2=0;P2_3=1;}
- if(i==3)
- {P2_0=1;P2_1=1;P2_2=1;P2_3=0;}
-
- }
- /***************************************************/
- ///*TIMER0中断服务子函数产生PWM信号*/
- void timer0()interrupt 1 using 2
- {
- TH0=0XF8; //1Ms定时
- TL0=0X30;
- Display_SMG(); //中断服务子程序扫描数码管
- }
- /***************************************************/
- void main(void)
- {
- TMOD=0X01;
- TH0= 0XF8; //1ms定时
- TL0= 0X30;
- TR0= 1;
- ET0= 1;
- EA = 1;
- count1=0; //初始化人数为1
- disbuff[0]=count1/1000;
- disbuff[1]=count1%1000/100;
- disbuff[2]=count1%1000%100/10;
- disbuff[3]=count1%1000%100%10;
- while(1) /*无限循环*/
- {
- if(P2_7==0)
- {
- while(!P2_7);
- count1++;
- if(count1>=9999) //计到99归零
- count1=0;
- disbuff[0]=count1/1000;
- disbuff[1]=count1%1000/100;
- disbuff[2]=count1%1000%100/10;
- disbuff[3]=count1%1000%100%10;
- }
- }
- }
-
复制代码
所有资料51hei提供下载:
53.红外人流量计数(数码管显示).rar
(11.34 KB, 下载次数: 32)
|