我想用這個程序測量光電測速傳感器被擋住的時間,此光電測速傳感器沒遮擋時輸出低電平,擋住時輸出高電平,但感覺中斷沒啟動。我想用來做一個光電門,測量擋光的時間
單片機源程序如下:
- #include<reg52.h>
- unsigned long int cnt;
- unsigned long int t;//長整型,時間
- sbit in=P3^2; //信號輸入口
- sbit dula=P2^6;
- sbit wela=P2^7;
- unsigned char code table_du[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,
- 0x7d,0x07,0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71};
- unsigned char code table_we[]={
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
- unsigned char disnum[6];
- delay(unsigned char x)
- {
- unsigned char a,b;
- for(a=x;a>0;a--)
- for(b=200;b>0;b--);
- }
- timedis(void)
- {
-
- disnum[0]=t/10000000;
- disnum[1]=(t%10000000)/1000000;
- disnum[2]=(t%1000000)/100000;
- disnum[3]=(t%100000)/10000;
- disnum[4]=(t%10000)/1000;
- disnum[5]=(t%1000)/100;
-
- }
- display()
- {
- unsigned char i;
- for(i=0;i<6;i++)
- {
- P0=0xff;
- wela=1;
- wela=0;
- P0=table_du[disnum[i]];
- dula=1;
- dula=0;
- P0=table_we[i];
- wela=1;
- wela=0;
- delay(5);
- }
- }
- void int0() interrupt 0
- {
- t=cnt;
- cnt=0;
-
- }
- void timer0 () interrupt 1
- {
- TH0=(65536-100)/256;
- TL0=(65536-100)%256;
- cnt++;
- }
- void main()
- {
- TMOD=0x09;
- TH0=(65536-100)/256;
- TL0=(65536-100)%256;
- TR0=0;
- ET0=1;
-
- IT0=1;
- EX0=1;
- EA=1;
-
- while(1)
- {
- if(in==0)
- {
- TR0=1;
- }
- timedis();
- display();
- }
- }
復制代碼 |