3605|10

31

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

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

该程序是我在网上找的,怎么调也调不出数值

WP_20150803_005.jpg (498.44 KB, 下载次数: 0)

WP_20150803_005.jpg
此帖出自51单片机论坛

最新回复

可以先确定是不是数码管显示的问题,看看原始数据是多少,算一下对不对。  详情 回复 发表于 2015-8-8 15:42
点赞 关注
 

回复
举报

31

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
#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;
     }
}
此帖出自51单片机论坛
 
 
 

回复

32

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
你试试把这句  P0=Segcode[dec%1000%100%10];
改成  P0=Segcode[5];  看看
总觉那样连续除法 51会算错
此帖出自51单片机论坛
 
个人签名
 
 

回复

415

帖子

2

TA的资源

一粒金砂(高级)

4
 
先检查你的数码管的引脚对应的编码值是不是能和程序的数组能对的上:
uchar code Segcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//规定数码管显示0-9
数组对不上是没法直接使用的。
此帖出自51单片机论坛
 
个人签名只要你心中有梦想,你人在哪里,梦想就在哪里!
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

5
 
数码管是共阴还是共阳?
此帖出自51单片机论坛
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(初级)

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

换成 P0=Segcode[5]显示为5
此帖出自51单片机论坛
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(初级)

7
 
我不懂 发表于 2015-8-3 18:59
先检查你的数码管的引脚对应的编码值是不是能和程序的数组能对的上:
uchar code Segcode[10]={0xC0,0xF9, ...

能够对上,都试过了
此帖出自51单片机论坛

点评

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

回复

31

帖子

0

TA的资源

一粒金砂(初级)

8
 
二氧化物 发表于 2015-8-4 08:26
数码管是共阴还是共阳?

共阴极的
此帖出自51单片机论坛
 
 
 

回复

415

帖子

2

TA的资源

一粒金砂(高级)

9
 
苗子 发表于 2015-8-4 08:50
能够对上,都试过了

检查51定时器0计数器输入测速引脚是否接对或者解除是否良好
此帖出自51单片机论坛
 
个人签名只要你心中有梦想,你人在哪里,梦想就在哪里!
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

10
 

Segcode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}你这个貌似是共阳 的编码吧?
此帖出自51单片机论坛
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

11
 
可以先确定是不是数码管显示的问题,看看原始数据是多少,算一下对不对。
此帖出自51单片机论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表