进口小开关 发表于 2013-2-7 19:39:29

神坛,TM1638死活不显示任何东西,是什么原因呢?

数码管用的是共阴数码管,单片机STC11F04E,数码管一直没有任何显示,调试了一天,没进展,求神坛指点。
现在要求不高,只要数码管有一点显示就行啊{:3_60:}




#include <intrins.h>
#include <STC11F04E.H>
#include <stdio.h>

#define SYSTEM_CLK 11520000

void uart_init(unsigned int baud) {
    SCON= 0x50;
    TMOD |= 0x20;
    TH1 = 256 - SYSTEM_CLK / baud / 384;
    TR1 = 1;
    TI = 1;
}

void Delay500ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        i = 22;
        j = 3;
        k = 227;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void _delay_us(unsigned char i)                //@11.0592MHz
{
        while(i--)
    {
      _nop_();
    }
}

sbit STB = P3^3;
sbit CLK = P3^4;
sbit DIO = P3^5;
sbit led1 = P1^6;
sbit led2 = P1^7;

#define DIO_high    do{DIO=1;}while(0)
#define DIO_low   do{DIO=0;}while(0)
#define CLK_high    do{CLK=1;}while(0)
#define CLK_low   do{CLK=0;}while(0)
#define STB_high    do{STB=1;}while(0)
#define STB_low   do{STB=0;}while(0)

unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void TM1638_Write(unsigned char DATA)                        //写数据函数
{
         unsigned char i;
         for(i=0;i<8;i++)
         {
               CLK_low;
               if(DATA&0X01)
                         DIO_high;
               else
                         DIO_low;
               DATA>>=1;
               CLK_high;
               _delay_us(1);
         }
}

void Write_COM(unsigned char cmd)                //发送命令字
{
         STB_low;
         TM1638_Write(cmd);
         STB_high;
         _delay_us(1);
}
void init_TM1638(void)
{
         unsigned char i;
         Write_COM(0x8F);//亮度
         Write_COM(0x40);
         STB_low;
         TM1638_Write(0xc0);
         for(i=0;i<16;i++)
               TM1638_Write(0x00);
         STB_high;
}

int main(void)
{
        unsigned int i=0,j=0;
        unsigned char flag=0;
        init_TM1638();
        uart_init(9600);
        Delay500ms();
        while(1)
        {
                for(i=0; i<8; i++)
                {
                        printf("i=%2d; this is a test.\n",i);

            Write_COM(0x8F);//亮度
            Write_COM(0x40);
            STB_low;
            TM1638_Write(0xc0);
            for(j=0;j<16;j++)
            {
                TM1638_Write(i);
            }
            STB_high;

                        Delay500ms();
            
                }
        }
}

marshallemon 发表于 2013-2-7 19:51:29

使用51串口的串口的同步方式,加入STB试试

beyond870215 发表于 2013-2-7 20:08:07

io口没初始化吧

honami520 发表于 2013-2-7 20:21:47

会不会把共 阴极数码管弄成共阳了

进口小开关 发表于 2013-2-7 20:22:39

marshallemon 发表于 2013-2-7 19:51 static/image/common/back.gif
使用51串口的串口的同步方式,加入STB试试

我这里的串口仅仅用来打印输出的。
控制端口用的是这几个:
sbit STB = P3^3;
sbit CLK = P3^4;
sbit DIO = P3^5;
#define DIO_high    do{DIO=1;}while(0)
#define DIO_low   do{DIO=0;}while(0)
#define CLK_high    do{CLK=1;}while(0)
#define CLK_low   do{CLK=0;}while(0)
#define STB_high    do{STB=1;}while(0)
#define STB_low   do{STB=0;}while(0)

进口小开关 发表于 2013-2-7 20:26:34

honami520 发表于 2013-2-7 20:21 static/image/common/back.gif
会不会把共 阴极数码管弄成共阳了

应该不会,数码管用的是AH的,并且,使用前用万用表测量过。

进口小开关 发表于 2013-2-7 20:28:03

beyond870215 发表于 2013-2-7 20:08 static/image/common/back.gif
io口没初始化吧

初始化用的是:
76.void init_TM1638(void)

77. {

78.         unsigned char i;

79.         Write_COM(0x8F);//亮度

80.         Write_COM(0x40);

81.         STB_low;

82.         TM1638_Write(0xc0);

83.         for(i=0;i<16;i++)

84.               TM1638_Write(0x00);

85.         STB_high;

86.}
这个可以吗?

wthzack 发表于 2013-2-7 20:36:08

i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

进口小开关 发表于 2013-2-7 20:46:15

superAFE 发表于 2013-2-7 20:34 static/image/common/back.gif
你在写0x8f之前没有拉低stb信号吧?

写0x8f用的是Write_COM(0x8F);//亮度

void Write_COM(unsigned char cmd)                //发送命令字
{
         STB_low;
         TM1638_Write(cmd);
         STB_high;
         _delay_us(1);
}
还有刚才把每个信号前后都加了100us的延时,也没效果,
#define DIO_high    do{_delay_us(100);DIO=1;_delay_us(100);}while(0)
#define DIO_low   do{_delay_us(100);DIO=0;_delay_us(100);}while(0)
#define CLK_high    do{_delay_us(100);CLK=1;_delay_us(100);}while(0)
#define CLK_low   do{_delay_us(100);CLK=0;_delay_us(100);}while(0)
#define STB_high    do{_delay_us(100);STB=1;_delay_us(100);}while(0)
#define STB_low   do{_delay_us(100);STB=0;_delay_us(100);}while(0)

{:3_60:}

进口小开关 发表于 2013-2-7 20:48:23

wthzack 发表于 2013-2-7 20:36 static/image/common/back.gif
i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

刚才看了一下数据手册,有个例子中用的是104

wthzack 发表于 2013-2-7 20:56:37

进口小开关 发表于 2013-2-7 20:48 static/image/common/back.gif
刚才看了一下数据手册,有个例子中用的是104

把 104 拆掉 or 換 100P 電容 試試

eblc1388 发表于 2013-2-7 20:59:26

E文数据手册,例子中用的是101,即 100pF。{:lol:}

wthzack 发表于 2013-2-7 21:01:41

我用 TM1635用103電容Data就亂了

进口小开关 发表于 2013-2-7 21:27:44

eblc1388 发表于 2013-2-7 20:59 static/image/common/back.gif
E文数据手册,例子中用的是101,即 100pF。

中文datasheet伤不起啊,一会想想办法怎么把电容弄下来。
放假了,工具都在公司那里,连个电烙铁都木有了……

一小时内回复超了,得等会。

honami520 发表于 2013-2-7 21:32:18

我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。

oufuqiang 发表于 2013-2-7 21:44:16

晕,问题可能不仅仅是由于104电容引起的,但是104绝对能引起此问题。

william_rain 发表于 2013-2-7 21:46:32

lz 可以用51的IO口模拟spi总线写数据看看

SNOOKER 发表于 2013-2-7 21:59:39

你需要一台示波器

czc818 发表于 2013-2-7 22:16:20

先把104电容去掉,如果真要用,也只能用101,用104肯定不行;这芯片很好用,完全按手册上电路,用官方程序,肯定OK

进口小开关 发表于 2013-2-7 22:26:49

发自内心,感谢神坛各位坛友,果然是电容的问题。
中文数据手册伤不起啊。
用钳子暴力把104电容弄碎了,数码管立马出字了。


进口小开关 发表于 2013-2-7 22:28:41

wthzack 发表于 2013-2-7 20:36 static/image/common/back.gif
i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

谢谢您,一眼看出了问题之所在。{:handshake:}

jetli 发表于 2013-2-7 22:35:12

stb
data
clk
不能加104.。。。。。{:titter:}你非得加,那么程序必须延时足够

eastboy 发表于 2013-2-7 23:58:25

正如楼上所说,加上的话,CLK的时间必须足够,加上对抗干扰有一定帮助。

xwkm 发表于 2013-2-8 00:21:06

104电容是可以用,不过你的MCU得推挽……
建议别那么大……

wthzack 发表于 2013-2-8 00:35:36

进口小开关 发表于 2013-2-7 22:28 static/image/common/back.gif
谢谢您,一眼看出了问题之所在。

記得 成品要加100P ~200P電容電容越大延遲時間要加大 穩定度較好但浪費時間{:titter:}

wallacer 发表于 2013-3-1 15:19:27

eblc1388 发表于 2013-2-7 20:59 static/image/common/back.gif
E文数据手册,例子中用的是101,即 100pF。

果然是0.1uf的问题。看来天微得改善datasheet啊!

清雨影 发表于 2013-3-1 18:29:00

进口小开关 发表于 2013-2-7 22:26 static/image/common/back.gif
发自内心,感谢神坛各位坛友,果然是电容的问题。
中文数据手册伤不起啊。
用钳子暴力把104电容弄碎了,数 ...

哪要这么暴力?用小刀划断PCB上的铜丝不就行了?将来如果要104的电容可以刮开导线再焊上.

keil_c51 发表于 2013-7-18 05:56:45

honami520 发表于 2013-2-7 21:32 static/image/common/back.gif
我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。 ...

keil_c51 发表于 2013-7-18 05:57:27

honami520 发表于 2013-2-7 21:32 static/image/common/back.gif
我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。 ...

请教一下:TM1640驱动led数码管,是不是不用串限流电阻?

官方的例图没用

ylei12 发表于 2013-7-18 06:25:48

104电容太大了,数据都给滤波滤掉了,以前刚工作时我用595也碰到这种问题

lmt50211 发表于 2013-7-18 08:25:50

104有时候会救人,但有时候就会害人的

xzyang 发表于 2013-7-18 08:53:47

那个电容应该是100PF呀,104太大了。

liangws201 发表于 2013-7-18 09:01:23

TM1629 还要转换数据,不知道这个IC是不是也是这样。

DiaoMao_Huang 发表于 2013-7-18 09:39:28

哈哈……104的王道!!你这是书看太多了!!

honami520 发表于 2013-7-18 11:41:44

不需要串电阻,电路照手册来肯定行

sange 发表于 2013-7-18 14:31:00

以前用过CH452,和这个差不多,SPI 之类的数据线上不应该加电容,大的电容肯定破坏掉了信号。

keil_c51 发表于 2013-7-18 19:39:47

honami520 发表于 2013-7-18 11:41 static/image/common/back.gif
不需要串电阻,电路照手册来肯定行

多谢指导

linlh 发表于 2014-4-19 01:46:29

我前天也遇到了楼主的问题,TM1638驱动数码管死活不显示。我用的是0.56寸的共阴数码管。刚开始还以为是数码管是共阳极的,后来测试加上看数码管数据手册,发现数码管没有问题,是共阴极的。接着又怀疑PCB做错了,对着原理图查了2遍,也发现没有问题。最后怀疑程序,可是这个程序是以前用在TM1620上没有问题,现在完全移植过来也不应该出问题啊,郁闷了2天,今天看到这个帖子里有人说是104电容的问题,恍然大悟,回过头查看我原来TM1620电路上用的也是101,而且厂家的数据手册上给出的也是101,果断去掉104,上电OK,显示全出来了。感谢楼上的提示。另外,楼主说中文手册有误是不对的,TM1638数据手册里是有个电路给出的电容是104,不过是用在驱动共阳极数码管上的,驱动共阴极电路人家给还是101.我用104是完全想当然了,认为不就是个滤波电容嘛,刚好手头没有101,都是104,就顺手焊接上去了,失误啊,以后还是得按照数据手册电路走。

lswhome 发表于 2014-4-19 03:17:37

我都没接电容。。。失误啊。。。。不过我弄那个装在一个80W紫外线灯内部,灯架挖的洞,4位数码管,用来给紫外线灯定时用的,感觉那干扰也不小。。。用了半年多了,没有出过问题。。呵呵,单片机用的跟楼主的是一样的。

huangyiting1990 发表于 2014-4-19 14:32:16

像这种时序问题,买个逻辑分析仪很方便

huangyiting1990 发表于 2014-4-19 14:32:36

像这种时序问题,买个逻辑分析仪很方便

qq开始学单片机 发表于 2014-4-25 21:14:49

用的是固定地址还是自动增加,估计是时序没写对吧

pengtaoABC 发表于 2014-7-20 22:05:22

LZ后面有继续做吗?

进口小开关 发表于 2014-7-22 10:02:53

pengtaoABC 发表于 2014-7-20 22:05
LZ后面有继续做吗?

恩,当时现场的电磁环境很恶劣,后续又完善了几个版本,优化了PCB现场电磁干扰的问题、程序的稳定性等。说起来快一年半了,时间过的真快。

进口小开关 发表于 2014-7-22 10:05:27

pengtaoABC 发表于 2014-7-20 22:05
LZ后面有继续做吗?

优化针对的是模拟量采集部分。显示部分很容易,把电容去掉之后就OK了。
页: [1]
查看完整版本: 神坛,TM1638死活不显示任何东西,是什么原因呢?