打印
[PIC®/AVR®/dsPIC®产品]

16F877A数码管显示问题

[复制链接]
2161|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者
自己单步调试看看好了

使用特权

评论回复
5
yewuyi| | 2013-8-28 08:47 | 只看该作者
这样的东西有什么可问的呢?基本的电路知识!

动态扫描应当先关闭位选,然后变更段数值,再打开位选。

使用特权

评论回复
6
ZHUSHUHAI|  楼主 | 2013-8-28 08:52 | 只看该作者
另外  我在调试的时候 查看PORTD寄存器确实一直为0x00,PORTB确实也会不断的从数组上的数据上一直往上加,会从0xc0到0x90变化,但是硬件数码管上却一直显示三个0,是硬件有问题吗?是驱动不够吗?

使用特权

评论回复
7
yewuyi| | 2013-8-28 10:13 | 只看该作者
ZHUSHUHAI 发表于 2013-8-28 08:52
另外  我在调试的时候 查看PORTD寄存器确实一直为0x00,PORTB确实也会不断的从数组上的数据上一直往上加, ...

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


你到底有无按照我在5楼的方式送段和位数据,如果没有,按照那个做了再说。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

13

帖子

1

粉丝