做課設可以用的紅外人流計數
單片機源程序如下:
- #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)
2019-1-6 17:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|