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

2019-03-24 17:54发布

该程序是我在网上找的,怎么调也调不出数值
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
苗子
1楼-- · 2019-03-25 01:53
#include<reg51.h>
#include<intrins.h>
#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;
     }
}
shanyx2010
2楼-- · 2019-03-25 04:39
你试试把这句  P0=Segcode[dec%1000%100%10];
改成  P0=Segcode[5];  看看
总觉那样连续除法 51会算错
我不懂
3楼-- · 2019-03-25 08:39
 精彩回答 2  元偷偷看……
二氧化物
4楼-- · 2019-03-25 08:39
数码管是共阴还是共阳?
苗子
5楼-- · 2019-03-25 12:54
shanyx2010 发表于 2015-8-3 18:02
你试试把这句  P0=Segcode[dec%1000%100%10];
改成  P0=Segcode[5];  看看
总觉那样连续除法 51会算错

换成 P0=Segcode[5]显示为5
苗子
6楼-- · 2019-03-25 17:35
 精彩回答 2  元偷偷看……

一周热门 更多>