找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1335|回复: 3
收起左侧

这个单片机测电机转速程序为啥不能检测到脉冲?

[复制链接]
ID:448185 发表于 2019-4-26 17:41 | 显示全部楼层 |阅读模式
50黑币
那位大佬可以帮我看看

单片机源程序如下:
#include <reg52.h>

typedef unsigned int u16;
typedef unsigned char u8;

#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;

u16 j,z,s,count,zhuan;     
u8 display[]="speed=     r/s  ";  

void Lcd1602_Delay1ms(u16 c)  //yan shi
{
    u16 a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
            
}


void LcdWriteCom(u8 com)        //xie yi ge ming ling  
{
        LCD1602_E = 0;     
        LCD1602_RS = 0;           
        LCD1602_RW = 0;           
        
        LCD1602_DATAPINS = com;     
        Lcd1602_Delay1ms(1);               

        LCD1602_E = 1;                 
        Lcd1602_Delay1ms(5);         
        LCD1602_E = 0;
}

void LcdWriteData(u16 dat)        //xie ru yi ge shu jv               
{
        LCD1602_E = 0;        
        LCD1602_RS = 1;        
        LCD1602_RW = 0;        

        LCD1602_DATAPINS = dat;
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;   
        Lcd1602_Delay1ms(5);   
        LCD1602_E = 0;
}

void LcdInit()                                                  //LCD chu shi hua
{
         LcdWriteCom(0x38);
        LcdWriteCom(0x0c);
        LcdWriteCom(0x06);  
        LcdWriteCom(0x01);  
        LcdWriteCom(0x80);  
}



void displaytolcd()
{  
         LcdWriteCom(0x80); //?LCD1602xie shu jv  
        for (j=0;j<16;j++)   
        {   
            LcdWriteData(display[j]);         
        }
}

void Jshu0Init()
{
        TMOD=0x05;
        TH0=0xff;
        TL0=0xff;
        TR0=1;
        ET0=1;
        EA=1;
}
void Timer0Init()
{
        TMOD|=0X01;
        TH0=0XFC;        //ding shi 1ms
        TL0=0X18;        
        ET0=1;
        EA=1;
        TR0=1;               
}

void  disp_count()
{  
              LcdWriteCom(0x80); //?LCD1602xie shu jv
        display[7]=(zhuan/1000+'0');      
        display[8]=(zhuan/100%10+'0');   
        display[9]=(zhuan/10%10+'0');      
        display[10]=(zhuan%10+'0');      
}

void main()
{
  LcdInit();
        Jshu0Init();
        Timer0Init();
        disp_count();
        displaytolcd();

        while(1);
}

void Jshu0()        interrupt 0
{
         TH0=0xff;
   TL0=0xff;
   s++;
}

void Timer0() interrupt 1
{
        static u16 i;
        static u16 s;
        TH0=0XFC;        //1ms
        TL0=0X18;
        i++;
        if(i==1000)
        {
                displaytolcd();
                zhuan=s;
                disp_count();
    ET0=0;
    i=0;
    TH0=0XFC;        //1ms
          TL0=0X18;
                s=0;
               
        }
        ET0=1;
        
}

回复

使用道具 举报

ID:94031 发表于 2019-4-27 10:08 | 显示全部楼层
应该把硬件原理图也发出来。
回复

使用道具 举报

ID:448185 发表于 2019-4-27 15:17 | 显示全部楼层
xuyaqi 发表于 2019-4-27 10:08
应该把硬件原理图也发出来。

D:\单片机\CH6800-ES V2.0光盘资料(新)\开发板原理图"
回复

使用道具 举报

ID:357633 发表于 2019-4-29 13:43 | 显示全部楼层
static u16 s;
u16 j,z,s,count,zhuan;
这里有两个s定义,zhuan=s;是static u16 s;这个s的值,一直都是0,没改变过
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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