[PIC®/AVR®/dsPIC®产品] 16F877A数码管显示问题

[复制链接]
 楼主| ZHUSHUHAI 发表于 2013-8-27 20:46 | 显示全部楼层 |阅读模式
各位好
我在调试三位数码管的时候单个单个显示数字没有问题,如下程序。
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
const uchar table[]={0xfd,0xfb,0xf7};
const uchar smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管
void delay_ms(uint ms)
{
        uint x,y;
        for(x=ms;ms>0;ms--)
        {
                for(y=66;y>0;y--);
        }
}
void PORT_init(void)
{
        TRISB=0;//B口输出模式
        TRISD=0;//D口低三位为输出模式                       
}

void display(void)
{
        uchar i;
        for(i=0;i<3;i++)
        {
                PORTD=table[i];//位选
                PORTB=smg[i];//段选
                delay_ms(1000);
        }
}

}
void main()
{
        delay_ms(1);
        PORT_init();
        while(1)
        {
                display();
        }
}
但是当我把三个位都选中的时候三个数码管不会动了,一直都是0
如下程序
#include<pic.h>
#define uchar unsigned char
#define uint unsigned int
__CONFIG(0x3B31);
const uchar table[]={0xfd,0xfb,0xf7};
const uchar smg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管
void delay_ms(uint ms)
{
        uint x,y;
        for(x=ms;ms>0;ms--)
        {
                for(y=66;y>0;y--);
        }
}
void PORT_init(void)
{
        TRISB=0;//B口输出模式
        TRISD=0;//D口低三位为输出模式                       
}

void display(void)
{
        uchar i;
        for(i=0;i<10;i++)
        {
                PORTD=0x00;//位选全打开
                PORTB=smg[i];//段选
                delay_ms(1000);
        }
}

}
void main()
{
        delay_ms(1);
        PORT_init();
        while(1)
        {
                display();
        }
}
请问是什么问题呢???
huangxz 发表于 2013-8-27 23:31 | 显示全部楼层
位选是不能全打开的,因为这种LED是动态扫描的,只能一位一位搞。
 楼主| ZHUSHUHAI 发表于 2013-8-27 23:34 | 显示全部楼层
我为选全选中的话 就表示三个数码管同时显示一样的东西。
yklstudent 发表于 2013-8-28 08:47 | 显示全部楼层
自己单步调试看看好了
yewuyi 发表于 2013-8-28 08:47 | 显示全部楼层
这样的东西有什么可问的呢?基本的电路知识!

动态扫描应当先关闭位选,然后变更段数值,再打开位选。
 楼主| ZHUSHUHAI 发表于 2013-8-28 08:52 | 显示全部楼层
另外  我在调试的时候 查看PORTD寄存器确实一直为0x00,PORTB确实也会不断的从数组上的数据上一直往上加,会从0xc0到0x90变化,但是硬件数码管上却一直显示三个0,是硬件有问题吗?是驱动不够吗?
yewuyi 发表于 2013-8-28 10:13 | 显示全部楼层
ZHUSHUHAI 发表于 2013-8-28 08:52
另外  我在调试的时候 查看PORTD寄存器确实一直为0x00,PORTB确实也会不断的从数组上的数据上一直往上加, ...

不懂先去翻翻书,动态扫描的范例代码到处多的是,能在这BBS不停发贴问这么基础的问题,可能用百度一下就能查清楚了。


你到底有无按照我在5楼的方式送段和位数据,如果没有,按照那个做了再说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

13

帖子

1

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