找回密码
 立即注册

QQ登录

只需一步,快速开始

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

关于51单片机测速模块的问题

[复制链接]
跳转到指定楼层
楼主
ID:595886 发表于 2019-9-13 20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位前辈,这两天我在做小车测速,然后液晶1602显示小车速度,两个测速模块输出端接到两个外部中断口,采用下降沿触发,每进入一次中断,计数加一。测速模块就是通过码盘计数那一种。但是我发现无论我怎么改程序,液晶都不能正确显示。最后我发现应该是测速模块的问题。我发现就算轮子没有转,中断里面的计数也会一直加,并且加的速度很快。我想问问各位前辈,这是怎么回事?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2019-9-13 22:50 | 只看该作者
这个问题就是你的程序问题
没有程序、没有原理图、没有实物,谁能知道怎么来找问题,否则只能靠猜了

回复

使用道具 举报

板凳
ID:595886 发表于 2019-9-14 00:40 | 只看该作者
有没有前辈帮忙看一下啊
回复

使用道具 举报

地板
ID:478885 发表于 2019-9-14 04:54 | 只看该作者
用示波器观察一下,外部中断口轮子没有转肯定有脉冲,码盘不会有问题,问题出在码盘供电滤波
回复

使用道具 举报

5#
ID:595886 发表于 2019-9-14 10:40 | 只看该作者
angmall 发表于 2019-9-13 22:50
这个问题就是你的程序问题
没有程序、没有原理图、没有实物,谁能知道怎么来找问题,否则只能靠猜了

前辈,这就是我的测试程序,就是把外部中断的脉冲数显示到开发板的数码管上,结果脉冲数一直在增加。
  1. #include<reg52.h>

  2. sbit ADDR0=P1^0;
  3. sbit ADDR1=P1^1;
  4. sbit ADDR2=P1^2;
  5. sbit ADDR3=P1^3;
  6. sbit ENLED=P1^4;

  7. unsigned char code LedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  8. unsigned char LedBuff[6]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};

  9. unsigned long second=0;
  10. unsigned int count=0;
  11. unsigned char i=0;
  12. bit dir=0;
  13. unsigned int count1;

  14. void main()
  15. {
  16.         ENLED=0;
  17.         ADDR3=1;
  18.         
  19.         EA=1;
  20.         TMOD&=0xF0;
  21.         TMOD|=0x01;
  22.         TH0=0xFC;
  23.         TL0=0x67;
  24.         ET0=1;
  25.         TR0=1;
  26.         EX0=1;
  27.         IT0=1;

  28.         while(1)
  29.         {
  30.                 if(dir)
  31.                 {
  32.                         dir=0;
  33.                         LedBuff[0]=LedChar[count1%10];
  34.                         LedBuff[1]=LedChar[count1/10%10];
  35.                         LedBuff[2]=LedChar[count1/100%10];
  36.                         LedBuff[3]=LedChar[count1/1000%10];
  37.                         LedBuff[4]=LedChar[count1/10000%10];
  38.                         LedBuff[5]=LedChar[count1/100000%10];
  39.                 }
  40.         }
  41. }

  42. void InterruptTimer0() interrupt 1
  43. {
  44.         TH0=0xFC;
  45.         TL0=0x67;
  46.         count++;
  47.         if(count>=1000)
  48.         {
  49.                 count=0;
  50.                 dir=1;
  51.         }
  52.         P0=0xFF;
  53.         P1=(P1&0xF8)|i;        
  54.         P0=LedBuff[i];
  55.         if(i<5) i++;
  56.         else i=0;              
  57. }

  58. void OutTimer0()  interrupt 0
  59. {
  60.         count1++;
  61. }
复制代码
回复

使用道具 举报

6#
ID:595886 发表于 2019-9-14 10:41 | 只看该作者
swzh 发表于 2019-9-14 04:54
用示波器观察一下,外部中断口轮子没有转肯定有脉冲,码盘不会有问题,问题出在码盘供电滤波

码盘供电我是把单片机的5V电源引出来之后,又加了一个100uf的电容之后再给测速模块供电的,应该不是供电问题
回复

使用道具 举报

7#
ID:213173 发表于 2019-9-14 16:59 | 只看该作者
就是这样酷 发表于 2019-9-14 10:40
前辈,这就是我的测试程序,就是把外部中断的脉冲数显示到开发板的数码管上,结果脉冲数一直在增加。

count1变量需要定时清0,否则怎么计算速度?
回复

使用道具 举报

8#
ID:595886 发表于 2019-9-17 22:25 | 只看该作者
wulin 发表于 2019-9-14 16:59
count1变量需要定时清0,否则怎么计算速度?

是啊,测速的时候清零啊
回复

使用道具 举报

9#
ID:595886 发表于 2019-9-17 22:57 | 只看该作者
wulin 发表于 2019-9-14 16:59
count1变量需要定时清0,否则怎么计算速度?

是啊,测速的时候清零啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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