神坛,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. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
47条回答
huangyiting1990
1楼-- · 2020-01-30 03:50
像这种时序问题,买个逻辑分析仪很方便
qq开始学单片机
2楼-- · 2020-01-30 04:11
用的是固定地址还是自动增加,估计是时序没写对吧
pengtaoABC
3楼-- · 2020-01-30 04:31
LZ  后面有继续做吗?
进口小开关
4楼-- · 2020-01-30 06:16
 精彩回答 2  元偷偷看……
进口小开关
5楼-- · 2020-01-30 10:22
pengtaoABC 发表于 2014-7-20 22:05
LZ  后面有继续做吗?

优化针对的是模拟量采集部分。显示部分很容易,把电容去掉之后就OK了。

一周热门 更多>