微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这是光电传感器和霍尔传感器用来计算速度和次数的程序

这是光电传感器和霍尔传感器用来计算速度和次数的程序

时间:10-02 整理:3721RD 点击:
错在哪呢?求教
/**程序功能 光电传感器 霍尔传感器***/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit du=P2^6;
sbit we=P2^7;
sbit beep=P2^3;
sbit gd=P2^0;           //光电传感器接口  当光耦传感器被遮光时电压由0V变为5V
sbit hr=P2^1;           //霍尔传感器接口  当霍尔传感器附近有磁铁且极性相同时电压由5V变为0V
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //数码管显示位
uchar key, pp=0,sd=0,dq=0,a0,a1,a2,a3,a4,a,b,c;        //pp全局变量,产生时间基准;sd全局变量,缓存当前速度;dq全局变量,计算当前速度
void delayms(uchar x)
  {
     uchar i,j;
         for(i=x;i>0;i--)
           for(j=110;j>0;j--);
  }
void keyscan()           //按键扫描,读按键1
  {
     uchar temp;
         P3=0xfe;
         temp=P3;
         temp=temp&0xf0;
         if(temp!=0xf0)
           delayms(10);
           if(temp!=0xf0)
             {
                   temp=P3;
                    switch(temp)
                          {
                             case 0xee:key=1;break;
                          }
                        while(temp!=0xf0)
                         {
                                    temp=P3;
                                 temp=temp&0xf0;
                                  beep=0;
                         }
                 }
                 beep=1;                                                                                                                                                                                                                                             
  }

void dis(uchar a,uchar b,uchar c)        //a显示内容;b,c显示位置
  {
     a0=a/10;
         a1=a%10;

         du=0;
         P0=tab[a0];
         du=1;
         du=0;

         we=0;
         P0=num;
         we=1;
         we=0;
         delayms(40);

                  du=0;
         P0=tab[a1];
         du=1;
         du=0;

         we=0;
         P0=num[c];
         we=1;
         we=0;
         delayms(40);

         
  }

  void t0() interrupt  1        //利用定时器0产生时间基准
    {
           TH0=(65536-46080)/256;
           TL0=(65536-46080)%256;
           pp++;
           if(pp==20)
           {
             pp=0;        //时间基准清0,重新开始
                 sd=dq;         //转存当前速度,便于显示
                 dq=0;         //当前速度清0,重新开始
           }
        }

void main()
  {
     uint count=0;                   //用于计算总次数
         bit gd2=0;                                //用于确定光电传感器的上升延
         bit hr2=0;                           //用于确定霍尔传感器的上升延
         TH0=(65536-46080)/256;
         TL0=(65536-46080)%256;
         TMOD=0x01;
         EA=1;
         ET0=1;
         TR0=1;

          begin:
          dis(0,4,5);
          while(1)
             {
                   keyscan();
                   if(key==1)
                     {
                           count=0;
                           goto begin;
                         }
                   if(dq==0)
                     {
                            dis(sd,1,2);
                         }
                         if(gd==0)
                           {
                             gd2=1;
                           }
                         if(hr==0)
                            {
                                  hr2=1;
                                }
                          if((gd!=0&&gd2!=0)||(hr!=0&&hr2!=0))
                       {
                              gd2=0;
                                  hr2=0;
                                  count++;
                                  if(count==100)
                                  {
                                    count=0;
                                  }
                                  dq++;
                                  if(dq==100)
                                  {
                                    dq=0;
                                  }
                                  dis(count,4,5);
                            }
                        }
                        
  }



好东西呀,谢谢分享

好东西呀

不错不错呀啊呀

多谢多谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top