搜索
bottom↓
回复: 44

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

[复制链接]

出0入0汤圆

发表于 2013-2-7 19:39:29 | 显示全部楼层 |阅读模式
数码管用的是共阴数码管,单片机STC11F04E,数码管一直没有任何显示,调试了一天,没进展,求神坛指点。
现在要求不高,只要数码管有一点显示就行啊




  1. #include <intrins.h>
  2. #include <STC11F04E.H>
  3. #include <stdio.h>

  4. #define SYSTEM_CLK 11520000

  5. void uart_init(unsigned int baud) {
  6.     SCON  = 0x50;
  7.     TMOD |= 0x20;
  8.     TH1 = 256 - SYSTEM_CLK / baud / 384;
  9.     TR1 = 1;
  10.     TI = 1;
  11. }

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

  15.         i = 22;
  16.         j = 3;
  17.         k = 227;
  18.         do
  19.         {
  20.                 do
  21.                 {
  22.                         while (--k);
  23.                 } while (--j);
  24.         } while (--i);
  25. }

  26. void _delay_us(unsigned char i)                //@11.0592MHz
  27. {
  28.         while(i--)
  29.     {
  30.         _nop_();
  31.     }
  32. }

  33. sbit STB = P3^3;
  34. sbit CLK = P3^4;
  35. sbit DIO = P3^5;
  36. sbit led1 = P1^6;
  37. sbit led2 = P1^7;

  38. #define DIO_high    do{DIO=1;}while(0)
  39. #define DIO_low     do{DIO=0;}while(0)
  40. #define CLK_high    do{CLK=1;}while(0)
  41. #define CLK_low     do{CLK=0;}while(0)
  42. #define STB_high    do{STB=1;}while(0)
  43. #define STB_low     do{STB=0;}while(0)

  44. unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
  45. void TM1638_Write(unsigned char DATA)                        //写数据函数
  46. {
  47.          unsigned char i;
  48.          for(i=0;i<8;i++)
  49.          {
  50.                  CLK_low;
  51.                  if(DATA&0X01)
  52.                          DIO_high;
  53.                  else
  54.                          DIO_low;
  55.                  DATA>>=1;
  56.                  CLK_high;
  57.                  _delay_us(1);
  58.          }
  59. }

  60. void Write_COM(unsigned char cmd)                //发送命令字
  61. {
  62.          STB_low;
  63.          TM1638_Write(cmd);
  64.          STB_high;
  65.          _delay_us(1);
  66. }
  67. void init_TM1638(void)
  68. {
  69.          unsigned char i;
  70.          Write_COM(0x8F);//亮度
  71.          Write_COM(0x40);
  72.          STB_low;
  73.          TM1638_Write(0xc0);
  74.          for(i=0;i<16;i++)
  75.                  TM1638_Write(0x00);
  76.          STB_high;
  77. }

  78. int main(void)
  79. {
  80.         unsigned int i=0,j=0;
  81.         unsigned char flag=0;
  82.         init_TM1638();
  83.         uart_init(9600);
  84.         Delay500ms();
  85.         while(1)
  86.         {
  87.                 for(i=0; i<8; i++)
  88.                 {
  89.                         printf("i=%2d; this is a test.\n",i);

  90.             Write_COM(0x8F);//亮度
  91.             Write_COM(0x40);
  92.             STB_low;
  93.             TM1638_Write(0xc0);
  94.             for(j=0;j<16;j++)
  95.             {
  96.                 TM1638_Write(i);
  97.             }
  98.             STB_high;

  99.                         Delay500ms();
  100.             
  101.                 }
  102.         }
  103. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入85汤圆

发表于 2013-2-7 19:51:29 | 显示全部楼层
使用51串口的串口的同步方式,加入STB试试

出0入0汤圆

发表于 2013-2-7 20:08:07 | 显示全部楼层
io口没初始化吧

出0入90汤圆

发表于 2013-2-7 20:21:47 来自手机 | 显示全部楼层
会不会把共 阴极数码管弄成共阳了

出0入0汤圆

 楼主| 发表于 2013-2-7 20:22:39 | 显示全部楼层
marshallemon 发表于 2013-2-7 19:51
使用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)

出0入0汤圆

 楼主| 发表于 2013-2-7 20:26:34 | 显示全部楼层
honami520 发表于 2013-2-7 20:21
会不会把共 阴极数码管弄成共阳了

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-2-7 20:28:03 | 显示全部楼层
beyond870215 发表于 2013-2-7 20:08
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.}
这个可以吗?

出0入0汤圆

发表于 2013-2-7 20:36:08 | 显示全部楼层
i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

出0入0汤圆

 楼主| 发表于 2013-2-7 20:46:15 | 显示全部楼层
superAFE 发表于 2013-2-7 20:34
你在写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)

出0入0汤圆

 楼主| 发表于 2013-2-7 20:48:23 | 显示全部楼层
wthzack 发表于 2013-2-7 20:36
i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-2-7 20:56:37 | 显示全部楼层
进口小开关 发表于 2013-2-7 20:48
刚才看了一下数据手册,有个例子中用的是104

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

出0入0汤圆

发表于 2013-2-7 20:59:26 | 显示全部楼层
E文数据手册,例子中用的是101,即 100pF。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-2-7 21:01:41 | 显示全部楼层
我用 TM1635  用103電容  Data就亂了

出0入0汤圆

 楼主| 发表于 2013-2-7 21:27:44 | 显示全部楼层
eblc1388 发表于 2013-2-7 20:59
E文数据手册,例子中用的是101,即 100pF。

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

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

出0入90汤圆

发表于 2013-2-7 21:32:18 | 显示全部楼层
我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。

出0入0汤圆

发表于 2013-2-7 21:44:16 | 显示全部楼层
晕,问题可能不仅仅是由于104电容引起的,但是104绝对能引起此问题。

出0入0汤圆

发表于 2013-2-7 21:46:32 | 显示全部楼层
lz 可以用51的IO口模拟spi总线写数据看看

出0入0汤圆

发表于 2013-2-7 21:59:39 | 显示全部楼层
你需要一台示波器

出0入0汤圆

发表于 2013-2-7 22:16:20 | 显示全部楼层
先把104电容去掉,如果真要用,也只能用101,用104肯定不行;这芯片很好用,完全按手册上电路,用官方程序,肯定OK

出0入0汤圆

 楼主| 发表于 2013-2-7 22:26:49 | 显示全部楼层
发自内心,感谢神坛各位坛友,果然是电容的问题。
中文数据手册伤不起啊。
用钳子暴力把104电容弄碎了,数码管立马出字了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-2-7 22:28:41 | 显示全部楼层
wthzack 发表于 2013-2-7 20:36
i/o 接口那3顆 0.1uF 電容太大啦 那些Data 都去充電了

谢谢您,一眼看出了问题之所在。

出0入0汤圆

发表于 2013-2-7 22:35:12 | 显示全部楼层
stb
data
clk
不能加104.。。。。。你非得加,那么程序必须延时足够

出0入0汤圆

发表于 2013-2-7 23:58:25 | 显示全部楼层
正如楼上所说,加上的话,CLK的时间必须足够,加上对抗干扰有一定帮助。

出0入0汤圆

发表于 2013-2-8 00:21:06 | 显示全部楼层
104电容是可以用,不过你的MCU得推挽……
建议别那么大……

出0入0汤圆

发表于 2013-2-8 00:35:36 | 显示全部楼层
进口小开关 发表于 2013-2-7 22:28
谢谢您,一眼看出了问题之所在。

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

出0入0汤圆

发表于 2013-3-1 15:19:27 | 显示全部楼层
eblc1388 发表于 2013-2-7 20:59
E文数据手册,例子中用的是101,即 100pF。

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

出0入0汤圆

发表于 2013-3-1 18:29:00 | 显示全部楼层
进口小开关 发表于 2013-2-7 22:26
发自内心,感谢神坛各位坛友,果然是电容的问题。
中文数据手册伤不起啊。
用钳子暴力把104电容弄碎了,数 ...

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

出0入0汤圆

发表于 2013-7-18 05:56:45 | 显示全部楼层
honami520 发表于 2013-2-7 21:32
我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。 ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-7-18 05:57:27 | 显示全部楼层
honami520 发表于 2013-2-7 21:32
我觉得肯定不是电容的问题!这个只是影响信号的变化速度而已!肯定还是程序的问题。我写TM1640一次性成功。 ...

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

官方的例图没用

出0入10汤圆

发表于 2013-7-18 06:25:48 来自手机 | 显示全部楼层
104电容太大了,数据都给滤波滤掉了,以前刚工作时我用595也碰到这种问题

出0入0汤圆

发表于 2013-7-18 08:25:50 | 显示全部楼层
104有时候会救人,但有时候就会害人的

出0入0汤圆

发表于 2013-7-18 08:53:47 | 显示全部楼层
那个电容应该是100PF呀,104太大了。

出0入0汤圆

发表于 2013-7-18 09:01:23 | 显示全部楼层
TM1629 还要转换数据,不知道这个IC是不是也是这样。

出0入0汤圆

发表于 2013-7-18 09:39:28 | 显示全部楼层
哈哈……104的王道!!你这是书看太多了!!

出0入90汤圆

发表于 2013-7-18 11:41:44 | 显示全部楼层
不需要串电阻,电路照手册来肯定行

出0入0汤圆

发表于 2013-7-18 14:31:00 | 显示全部楼层
以前用过CH452,和这个差不多,SPI 之类的数据线上不应该加电容,大的电容肯定破坏掉了信号。

出0入0汤圆

发表于 2013-7-18 19:39:47 | 显示全部楼层
honami520 发表于 2013-7-18 11:41
不需要串电阻,电路照手册来肯定行

多谢指导

出0入0汤圆

发表于 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,就顺手焊接上去了,失误啊,以后还是得按照数据手册电路走。

出0入0汤圆

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

出0入0汤圆

发表于 2014-4-19 14:32:16 | 显示全部楼层
像这种时序问题,买个逻辑分析仪很方便

出0入0汤圆

发表于 2014-4-19 14:32:36 | 显示全部楼层
像这种时序问题,买个逻辑分析仪很方便

出0入0汤圆

发表于 2014-4-25 21:14:49 | 显示全部楼层
用的是固定地址还是自动增加,估计是时序没写对吧

出0入0汤圆

发表于 2014-7-20 22:05:22 | 显示全部楼层
LZ  后面有继续做吗?

出0入0汤圆

 楼主| 发表于 2014-7-22 10:02:53 | 显示全部楼层
pengtaoABC 发表于 2014-7-20 22:05
LZ  后面有继续做吗?

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

出0入0汤圆

 楼主| 发表于 2014-7-22 10:05:27 | 显示全部楼层
pengtaoABC 发表于 2014-7-20 22:05
LZ  后面有继续做吗?

优化针对的是模拟量采集部分。显示部分很容易,把电容去掉之后就OK了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 12:35

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表