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

2020-01-23 14:29发布

数码管用的是共阴数码管,单片机STC11F04E,数码管一直没有任何显示,调试了一天,没进展,求神坛指点。
现在要求不高,只要数码管有一点显示就行啊
下载界面.png (83.06 KB, 下载次数: 0) 下载附件 2013-2-7 19:37 上传
  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. ",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. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
48条回答
linlh
2020-01-29 16:40
我前天也遇到了楼主的问题,TM1638驱动数码管死活不显示。我用的是0.56寸的共阴数码管。刚开始还以为是数码管是共阳极的,后来测试加上看数码管数据手册,发现数码管没有问题,是共阴极的。接着又怀疑PCB做错了,对着原理图查了2遍,也发现没有问题。最后怀疑程序,可是这个程序是以前用在TM1620上没有问题,现在完全移植过来也不应该出问题啊,郁闷了2天,今天看到这个帖子里有人说是104电容的问题,恍然大悟,回过头查看我原来TM1620电路上用的也是101,而且厂家的数据手册上给出的也是101,果断去掉104,上电OK,显示全出来了。感谢楼上的提示。另外,楼主说中文手册有误是不对的,TM1638数据手册里是有个电路给出的电容是104,不过是用在驱动共阳极数码管上的,驱动共阴极电路人家给还是101.我用104是完全想当然了,认为不就是个滤波电容嘛,刚好手头没有101,都是104,就顺手焊接上去了,失误啊,以后还是得按照数据手册电路走。

一周热门 更多>