社区导航

 

搜索
查看: 2204|回复: 10

[求助] 哪位大神给看一下程序哪里出了问题,我是想用码盘测试电机速度,可数码管数值总是为0

[复制链接]

34

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-3 16:40 | 显示全部楼层 |阅读模式
该程序是我在网上找的,怎么调也调不出数值
此帖出自51单片机论坛
WP_20150803_005.jpg

回复

使用道具 举报

34

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-3 16:41 | 显示全部楼层
#include
#include
#define uint  unsigned int
#define uchar unsigned char
sbit IN1=P1^4;//定义电机;
sbit IN2=P1^5;
sbit IN3=P1^6;
sbit IN4=P1^7;
//sbit ENA=P3^4;//定义电机使能端;
//sbit ENB=P3^5;
sbit DO1=P3^6;
sbit DO2=P3^7;
uint dec;
uint f=0;//定义f为一秒内码盘转动所测的的码盘的齿轮数
uchar i=0;//定时器T1计数值;
uchar code Segcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//规定数码管显示0-9,是个字符;
/*定时器初始化*/
void go()
{
  IN1=1,IN2=0;
  IN3=1,IN4=0;
  //ENA=1;
  //ENB=1;
}

void init()
{
  TMOD=0x51;  //T1计数器,T0定时器,方式1
  TL0=(65536-10000)%256;
  TH0=(65536-10000)/256;
  TL1=0;
  TH1=0;
  ET0=1;
  EA=1;
  TR0=1;
  TR1=1;
}

/*延时子函数*/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/*显示程序*/

void display(uint dec)
{  
   dec=dec/10;
   P2=0xfe;
   P0=Segcode[dec%1000%100%10];           //个位
   delay(10);
   P2|=0xff;

P2=0xfd;
   P0=Segcode[dec%1000%100/10];           //十位
   delay(10);                          
   P2|=0xff;

P2=0xfb ;
   P0=Segcode[dec%1000/100];  
   delay(10);   
   P2|=0xff;                        //百位            

   P2=0xf7;
   P0=Segcode[dec/1000];           //千位
   delay(10);               
   P2|=0xff;
}

void main(void)
{
        init();
   
   while(1)
     {
      go();
      display(f);
     }
}

timer()interrupt 1
{
   TL0=(65536-10000)%256;
   TH0=(65536-10000)/256;
   i=i+1;
   if(i==100)
    { i=0;
      f=TH1*256+TL1;
      TL1=0;
      TH1=0;
     }
}

回复

使用道具 举报

32

TA的帖子

1

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-3 18:02 | 显示全部楼层
你试试把这句  P0=Segcode[dec%1000%100%10];
改成  P0=Segcode[5];  看看
总觉那样连续除法 51会算错

回复

使用道具 举报

441

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2015-8-3 18:59 | 显示全部楼层
先检查你的数码管的引脚对应的编码值是不是能和程序的数组能对的上:
uchar code Segcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//规定数码管显示0-9
数组对不上是没法直接使用的。
只要你心中有梦想,你人在哪里,梦想就在哪里!

回复

使用道具 举报

59

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-4 08:26 | 显示全部楼层
数码管是共阴还是共阳?

回复

使用道具 举报

34

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-4 08:50 | 显示全部楼层
shanyx2010 发表于 2015-8-3 18:02
你试试把这句  P0=Segcode[dec%1000%100%10];
改成  P0=Segcode[5];  看看
总觉那样连续除法 51会算错

换成 P0=Segcode[5]显示为5

回复

使用道具 举报

34

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-4 08:50 | 显示全部楼层
我不懂 发表于 2015-8-3 18:59
先检查你的数码管的引脚对应的编码值是不是能和程序的数组能对的上:
uchar code Segcode[10]={0xC0,0xF9, ...

能够对上,都试过了

点评

检查51定时器0计数器输入测速引脚是否接对或者解除是否良好  详情 回复 发表于 2015-8-4 14:40

回复

使用道具 举报

34

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

 楼主| 发表于 2015-8-4 08:50 | 显示全部楼层
二氧化物 发表于 2015-8-4 08:26
数码管是共阴还是共阳?

共阴极的

回复

使用道具 举报

441

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2015-8-4 14:40 | 显示全部楼层
苗子 发表于 2015-8-4 08:50
能够对上,都试过了

检查51定时器0计数器输入测速引脚是否接对或者解除是否良好
只要你心中有梦想,你人在哪里,梦想就在哪里!

回复

使用道具 举报

59

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2015-8-5 08:46 | 显示全部楼层

Segcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}你这个貌似是共阳 的编码吧?

回复

使用道具 举报

3658

TA的帖子

11

TA的资源

五彩晶圆(高级)

Rank: 9Rank: 9Rank: 9

发表于 2015-8-8 15:42 | 显示全部楼层
可以先确定是不是数码管显示的问题,看看原始数据是多少,算一下对不对。

回复

使用道具 举报

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

关闭

站长推荐上一条 1/6 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-2 16:28 , Processed in 0.386904 second(s), 34 queries , Gzip On, MemCache On.

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