2877|9

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

AVR显示问题 [复制链接]

麻烦大家看下程序,数码管显示,检查了好几遍没发现问题,端口也是正确的,就是无法显示。
位选74hc138,段选74hc595
#include
#include
#define uchar unsigned char
unsigned char table2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管

void set(uchar m)          //595
{
uchar n,t;
PORTB&=~BIT(4);
for(n=8;n>0;n--)   //数据写入
{
  
  PORTB&=~BIT(5);
  t=(m&0x80);
  if(t==1)
  {
  PORTB|=BIT(6);
  }
  else
  {
  PORTB&=~BIT(6);
  }
  PORTB|=BIT(5);
  m=(m<<1);
  
}//数据输出
PORTB|=BIT(4);


}

void delay()
{
        unsigned int a,b;
        for(a=30;a>0;a--)
        for(b=240;b>0;b--);
}

void main()
{


DDRB=0xff;           //端口初始化
PORTB=0xff;
PORTB|=BIT(7);      //595清0口,低电平有效
PORTB|=BIT(3);      //138设置端口,高电平有效

      


while(1)
{

PORTB&=~BIT(0);        //设置译码器显示位
PORTB&=~BIT(1);      
PORTB&=~BIT(2);
set(table2[1]);              //数据写入
delay();  
}

}
谢谢!!

最新回复

T的数值永远不会成为0X01的所以你的代码,出现问题了。如果改成我说的那样如果你 M&0X80=T ,与到的结果是0发送一个低电平。当与到的结果是0X80不是0 进入 else  发送一个1过去了。我说的对吗兄弟  详情 回复 发表于 2014-4-25 23:43
点赞 关注
 

回复
举报

1298

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
你试着检查你的短路帽连接,或者点亮单个先看亮不亮再排除问题……

点评

先谢了,我下了下给的例程是可以的,说明线路连接是没问题。我自己写的这个原来位选是可以的,后来改了下,然后再改回来就都不行了,真有点无奈了.这个会不会和用的编写软件有关系。  详情 回复 发表于 2014-4-23 12:03
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

板凳
 
同意楼上的,一个一个试一下,一步一步的找问题。首先确认你每一个输出的管脚是正确的,然后试着点亮数码管中的某一位,都没问题了再显示数字。程序没时间帮你细看了,网上有不少,估计你也看过,有可能是你管脚配置的不对吧,先一步一步试试。

点评

先谢了,我下了下给的例程是可以的,说明线路连接是没问题。我自己写的这个原来位选是可以的,后来改了下,然后再改回来就都不行了,真有点无奈了.这个会不会和用的编写软件有关系。  详情 回复 发表于 2014-4-23 12:04
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

4
 
gh131413 发表于 2014-4-23 09:59
你试着检查你的短路帽连接,或者点亮单个先看亮不亮再排除问题……

先谢了,我下了下给的例程是可以的,说明线路连接是没问题。我自己写的这个原来位选是可以的,后来改了下,然后再改回来就都不行了,真有点无奈了.这个会不会和用的编写软件有关系。
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

5
 
jishuaihu 发表于 2014-4-23 11:09
同意楼上的,一个一个试一下,一步一步的找问题。首先确认你每一个输出的管脚是正确的,然后试着点亮数码管 ...

先谢了,我下了下给的例程是可以的,说明线路连接是没问题。我自己写的这个原来位选是可以的,后来改了下,然后再改回来就都不行了,真有点无奈了.这个会不会和用的编写软件有关系。
 
 
 

回复

3404

帖子

6

TA的资源

裸片初长成(初级)

6
 
一般来说和软件没有关系,但不排除你的设置问题,既然有可用的你就在可以用的基础上一点儿一点改呗,每次改动一小部分,然后看效果。
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

7
 
问题解决了,如果595函数中t==0的话就可以了,具体原因还是不太清楚,找了找资料也没发现原因。。
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

8
 
t=(m&0x80);
  if(t==1)
  {
  PORTB|=BIT(6);   ////一句

  }
  else
  {
  PORTB&=~BIT(6);
  }
  PORTB|=BIT(5); ////二句
  m=(m<<1);
  
}
你的这段代码确实有问题,但是我认为你把T==0该的同时应该把,我注视一句和二句互换才行。
我来说说原因  比如你的代码M传来的数据时 0X3F  二进制码是 0011 1111   你的0x80 的二进制码是 1000 000 这个没有什么问题吧, M&0X80=T, 第一次与的结果是  T=0, M=M<<1。  M= 0111 1110第二次与的结果是  T=0,M=M<<1。M=11 111100 第三次与的结果是  T=0X80才对兄弟

赞赏

1

查看全部赞赏

 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

9
 
T的数值永远不会成为0X01的所以你的代码,出现问题了。如果改成我说的那样如果你 M&0X80=T ,与到的结果是0发送一个低电平。当与到的结果是0X80不是0 进入 else  发送一个1过去了。我说的对吗兄弟

点评

谢了先,你说的对,是我上边忘了说了,是需要将两个换过来,程序执行之后是正确的  详情 回复 发表于 2014-4-27 21:18
 
 
 

回复

14

帖子

0

TA的资源

一粒金砂(中级)

10
 
hnjylijunz 发表于 2014-4-25 23:43
T的数值永远不会成为0X01的所以你的代码,出现问题了。如果改成我说的那样如果你 M&0X80=T ,与到的结果是0 ...

谢了先,你说的对,是我上边忘了说了,是需要将两个换过来,程序执行之后是正确的
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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