数码管扫描求助

[复制链接]
 楼主| laoliang3064 发表于 2010-9-12 19:46 | 显示全部楼层 |阅读模式
本帖最后由 laoliang3064 于 2010-9-13 13:54 编辑

这个8位8段数码管是用单片机一路端口驱动,字形驱动和位驱动用74HC373锁存,现在出现问题就是数码管单个位显示数据没有问题,不能同时有2个或2个以上显示,总是有前面的数据叠加到后面的数码管上,问高手如何解决?


这是显示函数:

void led_Display(){
    unsigned tmp ;
    P4DIR  = 0xff;                             // 设置 p4 输出
    P4OUT &= 0x00;                          // 设置
    P1DIR |= 0xc0;                           // 设置 p1.6,p1.7 输出
    P1OUT |= 0x00;                          // 关闭数据锁存器
      tmp    = 0x01;   
      P4OUT  = NUM_LED[led_Buf[led_Ctrl]];  // 设置显示值  
      P1OUT |= 0x40;                                 // 打开数据锁存器
      P1OUT &= 0X00;                                // 关闭数据锁存
   
      P4OUT  =~(tmp<<led_Ctrl);                 // 设置那只LED显示
      P1OUT  |= 0x80;                                 // 打开控制锁存
      P1OUT  &= 0X00;                                 // 关闭控制锁存
}
 楼主| laoliang3064 发表于 2010-9-12 21:38 | 显示全部楼层
这个,怎么也没个人搭话,单片机高手哪去了?
原野之狼 发表于 2010-9-13 00:05 | 显示全部楼层
考虑下段选和位选的匹配 你这种情况是没有协调好这两者的控制信号从而造成叠加
高勇 发表于 2010-9-13 08:10 | 显示全部楼层
在显示之前要消隐。
ayb_ice 发表于 2010-9-13 08:22 | 显示全部楼层
分时显示
分时了没有
 楼主| laoliang3064 发表于 2010-9-13 08:56 | 显示全部楼层
基本确定了,段选和位选的时序没有问题,数码管是共阴极,段选后时位选置高,位选时段选置低。
 楼主| laoliang3064 发表于 2010-9-13 08:58 | 显示全部楼层
消隐了也没作用,依然叠加,关键是叠加的不该有的部分比较暗,而不是相同的亮度。
 楼主| laoliang3064 发表于 2010-9-13 15:04 | 显示全部楼层
这么快就沉下去了?好吧,人工置顶。
zhy433 发表于 2010-9-13 16:26 | 显示全部楼层
tmp    = 0x01;   
      P4OUT  = NUM_LED[led_Buf[led_Ctrl]];  // 设置显示值  
      P1OUT |= 0x40;                                 // 打开数据锁存器
      P1OUT &= 0X00;                                // 关闭数据锁存
在这段后面加个P4OUT=0xff试一下。
zhy433 发表于 2010-9-13 16:39 | 显示全部楼层
共阴极的话加P4OUT=0x00
ddtx 发表于 2010-9-13 16:40 | 显示全部楼层
下个输入输出之前要清楚掉上个输出数据
ddtx 发表于 2010-9-13 16:42 | 显示全部楼层
void led_Display(){
    unsigned tmp ;
    P4DIR  = 0xff;                             // 设置 p4 输出
    P4OUT &= 0x00;                          // 设置
    P1DIR |= 0xc0;                           // 设置 p1.6,p1.7 输出
    P1OUT |= 0x00;                          // 关闭数据锁存器
      tmp    = 0x01;
      P4OUT  = 0xff;//此处关闭上次显示数据  
      P4OUT  = NUM_LED[led_Buf[led_Ctrl]];  // 设置显示值  
      P1OUT |= 0x40;                                 // 打开数据锁存器
      P1OUT &= 0X00;                                // 关闭数据锁存
      //此处加入延时
       P4OUT  = 0xff;//此处关闭上次显示数据
      P4OUT  =~(tmp<<led_Ctrl);                 // 设置那只LED显示
      P1OUT  |= 0x80;                                 // 打开控制锁存
      P1OUT  &= 0X00;                                 // 关闭控制锁存
      //此处加入延时
}
 楼主| laoliang3064 发表于 2010-9-13 17:37 | 显示全部楼层
12# ddtx

一会儿回家试试,谢谢。
yuyetufu 发表于 2010-9-13 22:11 | 显示全部楼层
时序:关位码,给数据,开位码
 楼主| laoliang3064 发表于 2010-9-13 22:58 | 显示全部楼层
本帖最后由 laoliang3064 于 2010-9-13 23:02 编辑

问题解决了,忘了关位码,都是锁存惹得祸,我老想着锁存就万事大吉了,结果杯具了。是万能的21ic汇聚的众多网友给了我力量,阿门,结贴给分。

void led_Display(){
    unsigned tmp ;
    P4DIR  = 0xff;                          // 设置 p4 输出
    P4OUT &= 0x00;                          // 设置
    P1DIR |= 0xc0;                          // 设置 p1.6,p1.7 输出
    P1OUT |= 0x00;                          // 关闭数据锁存器
      tmp    = 0x01;   
      P4OUT  = NUM_LED[led_Buf[led_Ctrl]];  // 设置显示值  
      P1OUT |= 0x40;                        // 打开数据锁存器
      P1OUT &= 0X00;                        // 关闭数据锁存

     
      P4OUT  =~(tmp<<led_Ctrl);             // 设置那只LED显示
      P1OUT  |= 0x80;                       // 打开控制锁存      
      P1OUT  &= 0X00;                       // 关闭控制锁存
      
      delay(1);

      
       P4OUT |= 0Xff;                       //消隐
       P1OUT |= 0x80;                       
       P1OUT &= 0X00;
   
    }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:不清楚方向的叛逆没意义也没力量。 360777249

23

主题

766

帖子

1

粉丝
个人签名:不清楚方向的叛逆没意义也没力量。 360777249

23

主题

766

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部