| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6661 人关注过本帖
标题:请高手帮忙修改单片机加减计数器程序
只看楼主 加入收藏
Emotiona
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:311
专家分:581
注 册:2017-3-7
收藏
得分:0 
观帖!!!
2017-04-26 23:18
mllwj
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2017-4-19
收藏
得分:0 
回复 19楼 grmmylbs
昨天把电路板上的IC全部拆下来,按照电路板认真的又画了一次图,最后对照原来画的,基本没错,精简了一下电路
图片附件: 游客没有浏览图片的权限,请 登录注册

现在用你给的最后一个程序仿真的时候,一开始这样
图片附件: 游客没有浏览图片的权限,请 登录注册

按K1十次(或者大概10秒后)变成这样
图片附件: 游客没有浏览图片的权限,请 登录注册
,在按K110次(或者又过10秒后)变成
图片附件: 游客没有浏览图片的权限,请 登录注册
......按k1十次或者十秒变一次
图片附件: 游客没有浏览图片的权限,请 登录注册

每个变化按k2同样的次数都能返回,或者按k5都能回到一开始的状态,说明k1.k2和k5都能正常执行,现在的问题好像是显示还没正常
2017-04-28 09:13
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
你 把下面的函数改成这样试试,看看哪个数码管在亮
程序代码:
void sendbyte(uint b)//传送显示字节函数
{
      uchar num,c;
    COM0 = COM1 =COM2 = COM3 = 1;    //熄灭数码管

    COM0 = 0;
      num=LED_table[b%10];//个位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
    }

    #if 0
    COM0 = 1;

    COM1 = 0;
      num=LED_table[b%100/10];//十位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
    COM1 = 1;

    COM2 = 0;
   num=LED_table[b%1000/100] | 0x20;//百位,加上小数点
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   COM2 = 1;

   COM3 = 0;
   num=LED_table[b/1000];//千位
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   COM3 = 1;
   #endif
}    
2017-04-28 10:13
mllwj
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2017-4-19
收藏
得分:0 
回复 23楼 grmmylbs
现在是千位在显示,好像是0--9的变动,笔画显示不准确,看不清楚
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-04-28 10:33
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
那这样呢?笔画的问题只能你自己摸索了。
程序代码:
void sendbyte(uint b)//传送显示字节函数
{
      uchar num,c;
    COM0 = COM1 =COM2 = COM3 = 1;    //熄灭数码管

    COM0 = 3;
      num=LED_table[b%10];//个位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
    }

    //COM0 = 1;

    COM1 = 2;
      num=LED_table[b%100/10];//十位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
    //COM1 = 1;

    COM1 = 0;
   num=LED_table[b%1000/100] | 0x20;//百位,加上小数点
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   //COM2 = 1;

   COM0 = 0;
   num=LED_table[b/1000];//千位
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   //COM3 = 1;
}    
2017-04-28 10:47
mllwj
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2017-4-19
收藏
得分:0 
回复 25楼 grmmylbs
现在百位上显示,笔画静止没变化了
图片附件: 游客没有浏览图片的权限,请 登录注册

按K1或者K2的时候千位上显示和百位上同样的笔画,放开按键恢复只在百位上显示
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-04-28 10:57
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
你把23楼的代码里COM0 = 0;分别改成COM1 = 0;
COM2 = 0;
COM3 = 0;
三种情况各试一遍。看看哪个数码管会亮。
2017-04-28 11:07
mllwj
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2017-4-19
收藏
得分:0 
COM1 = 0的时候在百位上显示
COM2 = 0的时候在十位上显示
COM3 = 0的时候在个位上显示
都是好像是0--9的变动
2017-04-28 11:21
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
那com都是对的,奇怪一起显示就不行了。加个延时看看?
程序代码:
void sendbyte(uint b)//传送显示字节函数
{
      uchar num,c;
    COM0 = COM1 =COM2 = COM3 = 1;    //熄灭数码管
    delay(3);

    COM3 = 0;
      num=LED_table[b%10];//个位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
    }

    //COM0 = 1;
     delay(3);
    COM2 = 0;
      num=LED_table[b%100/10];//十位
      for(c=0;c<8;c++)//依次传送8位
    {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
    //COM1 = 1;
     delay(3);
    COM1 = 0;
   num=LED_table[b%1000/100] | 0x20;//百位,加上小数点
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   //COM2 = 1;
     delay(3);
   COM0 = 0;
   num=LED_table[b/1000];//千位
   for(c=0;c<8;c++)//依次传送8位
   {
       CLK=0;
       DAT=num&0x01;
       CLK=1;
       num>>=1;
   }
   //COM3 = 1;
}    


[此贴子已经被作者于2017-4-28 11:39编辑过]

2017-04-28 11:30
mllwj
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2017-4-19
收藏
得分:0 
现在编译的时候提示这个错误
图片附件: 游客没有浏览图片的权限,请 登录注册
2017-04-28 11:39
快速回复:请高手帮忙修改单片机加减计数器程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022087 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved