找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5939|回复: 2
打印 上一主题 下一主题
收起左侧

[求助]哪位高人能给个汇编程序啊,要求用8952单片机通过数脉冲计数法来测量旋转角度并在LED上显示的?先谢过,做个朋友啊

[复制链接]
跳转到指定楼层
楼主
ID:19183 发表于 2009-11-16 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助]哪位高人能给个汇编程序啊,要求用8952单片机通过数脉冲计数法来测量旋转角度并在LED上显示的?先谢过,做个朋友啊
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:16763 发表于 2009-11-22 00:24 | 只看该作者
用编码器,一周发多少个脉冲,换算成角度。
回复

使用道具 举报

板凳
ID:16763 发表于 2009-12-13 23:48 | 只看该作者

给你个测转速的参考下

#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P3^0;
sbit f=P1^1;
uint cur_r;
uint cur_ms,cur_sec;//当前毫秒,秒
uint couter; //脉冲数量
uchar code design[10]={0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60};
//*******************************************************************
//***************initial*********************************************
void initial(void)
{   couter=cur_r=0;
    TMOD=0x01;
    TH0=0xb1;
 TL0=0xe0;
 EA=1;
 EX0=0;
 IT0=1;
}
//延时***************************************************************
//delay()************************************************************
void delay(uint i)
{   uint j;
    for(;i>0;i--)
 for(j=0;j<120;j++)
 {;}
}
//外部中断***********************************************************
//caculate外部脉冲数量***********************************************
void intrp0(void) interrupt 0
{   couter++;
}
//定时器1中断********************************************************
//20ms中断***********************************************************
//编码器采用100PULSE/R的*********************************************
void intrp1(void) interrupt 1
{   TH0=0xb1;
 TL0=0xe0;
    if(cur_ms<50){cur_ms++;}
 else
 {   cur_ms=0;
     cur_sec++;
  if(cur_sec>=2)
     {   EX0=0;                //计算时禁止外部中断,停止计数
         ET0=0;
      TR0=0;
      cur_r=couter*3/10;   //当前转速
         cur_ms=0;
         cur_sec=0;
   couter=0;
         EX0=1;                //重新开启脉冲计数
      ET0=1;
      TR0=1; 
   f=~f;
   cur_sec=0;
  }
  }
}
//显示接口***********************************************************
//P0为数码管显示接口,P1为数码管控制接口*****************************
void display(uint x)
{   uint g_wei,s_wei,b_wei;//个位,十位,百位
    if(x>=999){x=999;}//限制为999R/MIN
 b_wei=x/100;
 s_wei=(x-b_wei*100)/10;
 g_wei=(x-b_wei*100-s_wei*10)%10;
 //百位显示
 P0=design[b_wei];
 P2=0xfe;
 delay(5);
 //十位显示
 P0=design[s_wei];
 P2=0xfd;
 delay(5);
 //个位显示
 P0=design[g_wei];
 P2=0xfb;
 delay(5);
}
//*******************************************************************
//main***************************************************************
void main()
{   initial();
    while(1)
 {   display(cur_r);
  if(key){EX0=0;ET0=0;TR0=0;} //按下停止按钮
  else {EX0=1;ET0=1,TR0=1;}
  }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表