4101|15

10

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

数码管编程 [复制链接]

用两片74hc595,一个位选,一个段选驱动两个双位数码管,实现30s倒计时,位选、段选均可实现,但段选数码管字符一直闪烁,看不清字符,求帮忙,谢谢啦
#include
unsigned char seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char wei[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
void delay(int v)//延时
{
   while(v!=0)v--;
}
void Qr0_5951(unsigned char num1)//串行数据输入段选八位
{
   unsigned char t;
   for(t=0;t<8;t++)
   {
     if((num1&0x80)==0x80)
    {
     P2OUT|=BIT4;
    }
    else
    {
     P2OUT&=~BIT4;
    }
     P2OUT|=BIT6;//P2.6移位寄存器上升沿
     P2OUT&=~BIT6;
     num1=num1<<1;
   }
}
void OUT_5951()//并行输出
{
  P2OUT&=~BIT5;
  P2OUT|=BIT5;//存储器上升沿
  P2OUT&=~BIT5;
}
void Qr1_5952(unsigned char num2)//串行数据输入位选八位
{
   unsigned char j;
   for(j=0;j<8;j++)
   {
     if((num2&0x80)==0x80)
    {
     P2OUT|=BIT1;//P2.1口为串行数据
    }
     else
    {
     P2OUT&=~BIT1;
    }
     P2OUT|=BIT2;//P2.2口为移位寄存器
     P2OUT&=~BIT2;
     num2=num2<<1;
   }
}
void OUT_5952()//并行输出位选信号
{
  P2OUT&=~BIT0;//P2.0为存储器
  P2OUT|=BIT0;
  P2OUT&=~BIT0;
}
void main()
{
  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  unsigned char i,h,k;
  P2DIR|=(BIT0|BIT1|BIT2|BIT4|BIT5|BIT6);
  P2OUT=0x00;
  while(1)
  {
   for(k=30;k!=0;k--)
   {
    for(i=0;i<2;i++)
    {
      Qr0_5951(seg[k/10]);//十位段选
      OUT_5951();
      Qr1_5952(wei[i]);//十位位选
      OUT_5952();
      delay(300);
    }
    for(h=2;h<4;h++)
    {
      Qr0_5951(seg[k%10]);//个位段选
      OUT_5951();
      Qr1_5952(wei[h]);//个位位选
      OUT_5952();
      delay(300);
    }
   }
  }
}


最新回复

字符一直闪烁,有两个原因,一个是扫描速率不对,一个是没有消隐,这两个排除肯定解决   详情 回复 发表于 2016-5-18 17:53
 
点赞 关注

回复
举报

6040

帖子

203

TA的资源

版主

沙发
 
估计是你的思路不对,好好研究一下数码管的动态扫描吧。你的程序写的,我完全看不出套路,我估计不超几行的代码,已经完全被你复杂化了。
另外,也要保证的你硬件设计没有问题。
 
 

回复

6066

帖子

92

TA的资源

裸片初长成(初级)

板凳
 
可以在每一次位选显示了值之后  再把段选改为全不亮  这样可以避免乱码---来着网友的回复!

点评

@ Romany 1、您需要搞清楚,您用的是共阴的还是共阳的两位一体的数码管,共阴和共阳的编码是不一样的。就是您的那个seg[]的数组; 2、检查您的硬件有没有问题,没有问题再去调程序,否则您话时间调了半天却是硬件  详情 回复 发表于 2016-5-18 11:13
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

4
 
好的,谢谢啦
 
 
 

回复

428

帖子

0

TA的资源

一粒金砂(高级)

5
 
1、全部显示8,是不是正常?如果正常硬件没啥问题。2、倒计时,那么时间没到不对数码管进行刷新,时间到,操作数码管。     思路要理清楚。
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

6
 
lcofjp 发表于 2016-5-18 10:17
估计是你的思路不对,好好研究一下数码管的动态扫描吧。你的程序写的,我完全看不出套路,我估计不超几行的 ...

我要两个数码管显示相同的数字30并倒计时,我的思路是两个数码管十位给相同的段选,再利用位选选中,再给个位段码,位选,这样确实麻烦,不知道还有什么好的思路,这是电路图,

 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

7
 
newnew0601 发表于 2016-5-18 10:33
1、全部显示8,是不是正常?如果正常硬件没啥问题。2、倒计时,那么时间没到不对数码管进行刷新,时间到, ...

谢谢回复啦,数码管一直闪,能看清的就是七段一直亮,对msp430定时应用不是很明白

点评

你可以先写个简单的,例如我楼上的那个版本,先把固定数字显示好没问题,再显示倒计时。  详情 回复 发表于 2016-5-18 11:05
 
 
 

回复

6040

帖子

203

TA的资源

版主

8
 
while(1){
同时选中1,3,输出‘3’,延时
同时选中2,4,输出‘0’,延时
}
'3','0'就是你要显示的数字,就这么简单。
 
 
 

回复

6040

帖子

203

TA的资源

版主

9
 
Romany 发表于 2016-5-18 10:55
谢谢回复啦,数码管一直闪,能看清的就是七段一直亮,对msp430定时应用不是很明白

你可以先写个简单的,例如我楼上的那个版本,先把固定数字显示好没问题,再显示倒计时。
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

10
 
lcofjp 发表于 2016-5-18 11:02
while(1){
同时选中1,3,输出‘3’,延时
同时选中2,4,输出‘0’,延时
}
'3','0'就是你要显示的数字 ...

好的,谢谢
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

11
 
你的扫码程序放到中断里面处理就行
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

12
 
maylove 发表于 2016-5-18 10:29
可以在每一次位选显示了值之后  再把段选改为全不亮  这样可以避免乱码---来着网友的回复!

@Romany  
1、您需要搞清楚,您用的是共阴的还是共阳的两位一体的数码管,共阴和共阳的编码是不一样的。就是您的那个seg[]的数组;
2、检查您的硬件有没有问题,没有问题再去调程序,否则您话时间调了半天却是硬件的问题,这个时候你都有打自己耳光的冲动;
另,像595这些数字器件,特别需要注意datashet中您对真值表的理解。
3、管管说的每次显示后,改为全不亮。这个在51单片机中我记得叫做“消重影”。
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

13
 
wateras1 发表于 2016-5-18 11:13
你的扫码程序放到中断里面处理就行

ok,多谢
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

14
 
huaiqiao 发表于 2016-5-18 11:13
@Romany  
1、您需要搞清楚,您用的是共阴的还是共阳的两位一体的数码管,共阴和共阳的编码是不一样的。 ...

共阴的,谢谢赐教
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

15
 
字符一直闪烁,有两个原因,一个是扫描速率不对,一个是没有消隐,这两个排除肯定解决
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(初级)

16
 
数码小叶 发表于 2016-5-18 17:53
字符一直闪烁,有两个原因,一个是扫描速率不对,一个是没有消隐,这两个排除肯定解决

嗯嗯,已经解决,谢谢
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表