单片机学习小组
直播中

王学超

7年用户 207经验值
私信 关注

基于AT89C51单片机平台的转速测量方法


基于单片机的转速测量系统设计 介绍了一种基于AT89C51单片机平台,采用光电传感器实施电机转速测量的方法,硬件系统包括脉冲信号产生、脉冲信号处理和显示模块,并采用C语言编程,结果表明该方法具有简单、精度高、稳定性好的优点。介绍了该测速法的基本原理、实现步骤和软硬件设计。  
  
原代码:
  • #include
  • #define uchar unsigned char
  • #define uint unsigned int
  • uint mm=1234;
  • uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,};
  • delay(uint m)
  • { uint i,j;
  •   for(i=m;i>0;i--)
  •      for(j=60;j>0;j--);
  • }
  • xian_shi()
  • { uchar qian,bei,shi,ge;
  •   uint jj;
  •   jj=mm;
  •   jj*=20;
  •   //jj+=1;
  •   qian=jj/1000;
  •   bei=jj%1000/100;
  •   shi=jj%100/10;
  •   ge=jj%10;
  •    P2=0x10;
  •    P0=table[qian];
  •    delay(1);
  •   //P2=0;
  •    P2=0x20;
  •    P0=table[bei];
  •    delay(1);
  • //P2=0;
  •    P2=0x40;
  •    P0=table[shi];
  •    delay(1);
  •    //P2=0;
  •    P2=0x80;
  •    P0=table[ge];
  •    delay(1);
  •    //P2=0;
  • }
  • timer_init()  //定时器计数器初始化函数
  • {   EA=1;
  •     ET0=1;
  •     ET1=1;
  •     TMOD=0X51;
  •     TH0=(65535-50000)/256;
  •     TL0=(65535-50000)%256;
  •     TH1=0;
  •     TL1=0;
  •     TR0=1;
  •     TR1=1;
  • }
  • main()
  • {
  •     timer_init();
  •     P0=0;      //开始数码管不显示
  •    while(1)
  •      {
  •          xian_shi();
  •          delay(2);  //数码管刷新时间单位毫秒
  •      }
  • }
  • void timer0() interrupt 1
  • {   TR0=0;
  •     TR1=0;
  •     TH0=(65535-50000)/256;
  •     TL0=(65535-50000)%256;
  •     mm=0;
  •     mm|=TH1;
  •     mm=(mm<<8)|TL1;
  • //        mm-=55536;
  •     TH1=0;
  •     TL1=0;
  •     TR0=1;
  •     TR1=1;
  • }
  • void timer1() interrupt 3     //显示0000说明出错
  • {   TR1=0;
  •     TR0=0;
  •     mm=0;
  •    // TH1=0;
  •    // TL1=0;
  •    // TR1=1;
  • }




全部资料(压缩包)下载:    测速.rar  



更多回帖

发帖
×
20
完善资料,
赚取积分