微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > PCB设计学习讨论 > 脉冲测速的程序麻烦大家看看可不可以?

脉冲测速的程序麻烦大家看看可不可以?

时间:10-02 整理:3721RD 点击:
//A44E的3脚连至P3.2;WT588D连至P3.0;ULN2803连至P3.3
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define lcd_12864 P2
sbit speed_data=P3^2;    //外部中断0脉冲计数
sbit dianji=P3^3;                 // 接直流电机调速
sbit RS=P3^5;
sbit RW=P3^6;
sbit EN=P3^7;
uchar code digit[]={"0123456789"} ;
uchar speed_num=0;   //脉冲计数次数
uchar num;                   // 速度调节标志
uchar a,b;
uchar X;
uchar ge,shi,bai,qian,wan;//分别储存采集的个位,十位,百位,千位,万位数字
void Delay_ms(uint xms)
{
        uchar i;
        while(xms--)
        for(i=0;i<120;i++);
}
/********************************************************
*函数名:  xianshi()
*功能:   
*数组:          
********************************************************/
void xianshi()
{
           ge=X%10;
           shi=(X%100)/10;
           bai=(X%1000)/100;
           qian=(X%10000)/1000;
           wan=X/10000;
           lcd12864_display(2,1," ");
           lcd12864_write_data(digit[wan]);
           lcd12864_write_data(digit[qian]);
           lcd12864_write_data(digit[bai]);
           lcd12864_write_data(digit[shi]);
           lcd12864_write_data(digit[ge]);
           Delay_ms(1000);
}
/******************外部中断0服务程序*****************************/
void INT_0() interrupt 0       
{
         speed_num++;
}
/***************定时器0中断服务程序*****************************/
void timer_0() interrupt 1
{
    uchar counter=0;       
        TH0=(65536-50000)/256;                   //重设定时器0初值
        TL0=(65536-50000)%256;
        counter++;
        if(100==counter)
        {       
        a=speed_num;           //到5S就计算收到多少个脉冲
                counter=0;
        }
}
/******************速度检测程序*****************************/
uchar speed_text(uchar a)    //5S内计算的转速
{
                uchar b;
                b=a*12;//1分钟的转速
                return b;
}
/**************  下面是主函数  *******************************************/
void main()
{
                                                /**中断初始化**/
        EA=1;               //打开总中断
        EX0=1;                   //打开外部中断0
        IT0=1;                   //外部中断0脉冲触发方式
        TMOD |=0x01;           //设定时器0的工作模式1
        TH0=(65536-50000)/256;          //设定定时器0定时时间为10ms计数初值
        TL0=(65536-50000)%256;
        TR0=1;              //打开定时器0                                               
  while(1)
  {           
                                          lcd12864_init();                         
                                          X=speed_text(b);          //获取速度
                                          xianshi();                          //显示速度
                                  lcd12864_display(1,1, "当前速度为:");
                                         Delay_ms(3000);                                                         
  }
}

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

网站地图

Top