久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5287|回復: 23
打印 上一主題 下一主題
收起左側

用tm1637驅動芯片去點亮數碼管,為什么數碼管不亮 附單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
求大佬幫忙看看,用的單片機芯片是stc8G1k08,數碼管驅動芯片是tm1637,參考了網上的一些驅動代碼,程序燒進去數碼管不亮代碼是這些,目前是先解決數碼管顯示數的問題,
#include<STC8G.h>
#include<intrins.h>
//sbit SCL=P3^2;   
//sbit SDA=P3^3; 單片機stc8g.h的頭文件用的是P33代替P3^3引腳,P32代替是  P3^2引腳;所以沒用sCL與SDA
void IIC_delay(unsigned char i)
{
      unsigned int j = i;;
            while(j--);
}

void start_IIC(void)
{
        P32=1;
        P33=1;
        IIC_delay(2);
        P33=0;
        IIC_delay(2);
        P32=0;
        IIC_delay(2);
}

void stop_IIC(void)
{
        P32=0;
        IIC_delay(3);
        P33=0;
        IIC_delay(2);
        P32=1;
        IIC_delay(2);
        P33=1;
}

void ack_IIC()
{
        P32=0;
            IIC_delay(5);
        while(P33);
        P32=1;
               IIC_delay(2);
        P32=0;
               IIC_delay(2);
}

void WriteByte(unsigned char  WriteData)//寫一個字節
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                P32=0;
                if(WriteData&0x01)
                     P33 = 1;
                else
                      P33 = 0;
                IIC_delay(3);
                WriteData=WriteData>>1;
               IIC_delay(3);
                P32=1;
                IIC_delay(3);
        }

        ack_IIC();
}
void I2C()
{
        P32=1;
        P33=1;
        
  start_IIC();
  WriteByte(0x40);
  ack_IIC();
        stop_IIC();
   //寫命令,設置起始地址
        start_IIC();
         WriteByte(0xc0);
        ack_IIC();

   //寫數據
   WriteByte(0xbf);
        ack_IIC();
   WriteByte(0x3f);
   ack_IIC();
   WriteByte(0x3f);
   ack_IIC();
  WriteByte(0x3f);
  ack_IIC();
  WriteByte(0x3f);
  ack_IIC();
   //寫命令開顯示
        stop_IIC();
        start_IIC();
        WriteByte(0x8f);
        ack_IIC();
        stop_IIC();
}
void main()
{
        P3M0 = 0X00;
        P3M1 = 0X00;//這兩個是將P3端口設置為準雙向口模式
        I2C();
  while(1)
        {
               
  }

}



pcb的原理圖.png (138.2 KB, 下載次數: 57)

這個是芯片的鏈接圖

這個是芯片的鏈接圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:923440 發表于 2021-6-21 10:55 | 只看該作者
在線等,不知道現在玩單片機的還多不多,這個問題找了好幾天都沒有解決,這個芯片的引腳用萬用表量后都有電;不知道
回復

使用道具 舉報

板凳
ID:320306 發表于 2021-6-21 11:38 | 只看該作者
這個芯片對時序要求比較高,建議把延時加大試試。
回復

使用道具 舉報

地板
ID:938643 發表于 2021-6-21 12:24 | 只看該作者
數碼管頻率修改一下試試
回復

使用道具 舉報

5#
ID:123289 發表于 2021-6-21 13:54 | 只看該作者
能先說說tm1637的工作原理嗎?
回復

使用道具 舉報

6#
ID:123289 發表于 2021-6-21 13:56 | 只看該作者
DIG1、DIG2、DG1、DG2、DG3又是什么呢?
回復

使用道具 舉報

7#
ID:748788 發表于 2021-6-21 15:28 | 只看該作者
先用賣家提供的例程測試能否正常顯示,然后再上自己的程序
回復

使用道具 舉報

8#
ID:923440 發表于 2021-6-21 16:07 | 只看該作者
wwh2382 發表于 2021-6-21 15:28
先用賣家提供的例程測試能否正常顯示,然后再上自己的程序

賣家只負責賣,他不給提供程序
,我從網上找的代碼,燒進去數碼管沒有反應
回復

使用道具 舉報

9#
ID:923440 發表于 2021-6-21 16:13 | 只看該作者
yzwzfyz 發表于 2021-6-21 13:54
能先說說tm1637的工作原理嗎?

這個tm1637驅動芯片我從網上找的芯片手冊看的,具體的原理我不太清楚
回復

使用道具 舉報

10#
ID:923440 發表于 2021-6-21 16:29 | 只看該作者
zsyzdx 發表于 2021-6-21 11:38
這個芯片對時序要求比較高,建議把延時加大試試。

把延時改成了100ms,還是沒有反應
回復

使用道具 舉報

11#
ID:844772 發表于 2021-6-21 16:54 | 只看該作者
看到兩個問題:一是,你的void WriteByte(unsigned char  WriteData)已經包含了ack_IIC(),后邊I2C()又讀一次,當然就讀不到了。二是,你對應答理解不對啊,所以void ack_IIC()可能寫錯了。我簡單寫了一個,你看看行不?
        P32=0;
        IIC_delay(5);
        P33=1;
        IIC_delay(5);
       P32=1;
       IIC_delay(5);
       while(P33==1);   //獲得應答位       
回復

使用道具 舉報

12#
ID:923440 發表于 2021-6-21 17:13 | 只看該作者
glinfei 發表于 2021-6-21 16:54
看到兩個問題:一是,你的void WriteByte(unsigned char  WriteData)已經包含了ack_IIC(),后邊I2C()又讀 ...

你好,我按你說的改了,但是數碼管還是不亮
回復

使用道具 舉報

13#
ID:401564 發表于 2021-6-21 21:20 | 只看該作者
void ack_IIC()
{
        P32=0;
        P33=1;
            IIC_delay(5);
        while(P33);
        P32=1;
               IIC_delay(2);
        P32=0;
               IIC_delay(2);
}
數據線在讀取前要先置位為才能正確的讀取P33引腳的電平狀態
回復

使用道具 舉報

14#
ID:923440 發表于 2021-6-21 21:29 | 只看該作者
Y_G_G 發表于 2021-6-21 21:20
void ack_IIC()
{
        P32=0;

我改成你說的,試了也不行,應該不是這個問題
回復

使用道具 舉報

15#
ID:401564 發表于 2021-6-21 23:56 | 只看該作者
51c_yang 發表于 2021-6-21 21:29
我改成你說的,試了也不行,應該不是這個問題

這驅動IC并不是用IIC通訊的
你要先看數據手冊,然后自己先寫一個寫入的函數,就是簡單的啟動然后寫入,其它的什么都不要
就看應答有沒有應答,有應答就搞一個指示,一個IO接一個LED看一下
首先要做的是寫入,然后要正確的應答,
這個過程就是用來驗證你寫入字節函數是否正確而已,只有寫入函數正確了,才能進行下一步
直接就能找到代碼然后亮燈的,這種好事并不多
這個IC的數據手冊中是有例程的,你可以去參考一下
回復

使用道具 舉報

16#
ID:923440 發表于 2021-6-22 08:49 | 只看該作者
Y_G_G 發表于 2021-6-21 23:56
這驅動IC并不是用IIC通訊的
你要先看數據手冊,然后自己先寫一個寫入的函數,就是簡單的啟動然后寫入,其它 ...

這個寫入函數是tm1637芯片手冊給的,
回復

使用道具 舉報

17#
ID:844772 發表于 2021-6-22 08:53 | 只看該作者
看了你電路,想問你P3口為啥還要拉高呢,它內部集成了,而且你用的是1K的,也太小了,直接接試試。
另外,我查了一下,看來它的應答要求不高,兩種寫法應該都行。
回復

使用道具 舉報

18#
ID:401564 發表于 2021-6-22 10:08 | 只看該作者
51c_yang 發表于 2021-6-22 08:49
這個寫入函數是tm1637芯片手冊給的,

怎么就想著復制別人的代碼直接就能亮燈了呢?如果這樣的話,單片機工程師都找不到工作了
這個驅動IC的數據手冊我看過了,就幾個頁面的PDF而已,有編程基礎10個小時之內就能亮燈了
學習總是要的嘛,不是說坐在那等著,網友說一個你改一下
回復

使用道具 舉報

19#
ID:923440 發表于 2021-6-22 10:50 | 只看該作者
Y_G_G 發表于 2021-6-22 10:08
怎么就想著復制別人的代碼直接就能亮燈了呢?如果這樣的話,單片機工程師都找不到工作了
這個驅動IC的數據 ...

額,第一次接觸這個,謝謝你提醒
回復

使用道具 舉報

20#
ID:748788 發表于 2021-6-22 10:59 | 只看該作者
既然是抄來的也就不用太較真,不行就再抄別的。論壇里玩過1637的還是有的,你沒好好找。自己還好意思說找了好幾天!707794433的“基于單片機+TM1637的數碼管顯示程序”看著不錯,起碼程序的書寫格式比你那個強。具體網址我就不發了,麻煩你動手找一下
回復

使用道具 舉報

21#
ID:923440 發表于 2021-6-22 20:12 | 只看該作者
wwh2382 發表于 2021-6-22 10:59
既然是抄來的也就不用太較真,不行就再抄別的。論壇里玩過1637的還是有的,你沒好好找。自己還好意思說找了 ...

那個我也試了,
回復

使用道具 舉報

22#
ID:844772 發表于 2021-6-22 20:30 | 只看該作者
我覺得是P3上拉的電阻太小,試試直接連了嗎?
回復

使用道具 舉報

23#
ID:213124 發表于 2021-6-22 20:33 | 只看該作者
#include<STC_NEW_8051.H>
#include"TM1628.H"

                 /*寫入單字節函數*/
void TM_w_BYTE(unsigned char TM_w_data){

unsigned char i,temp1;

unsigned char x;
temp1=TM_w_data;//賦值
for(i=0;i<8;i++)//循環寫入每一位
{
if(temp1&0x01)
//寫入第一位
{TM_DIO_high;}
else
{TM_DIO_low;}
TM_CLK_low;
for(x=8;x>0;x--);
TM_CLK_high;
temp1>>=1;//右循環一位
}
}

/*寫入命令*/
void TM_w_command(unsigned char TM_w_data)
{
TM_STB_low; //片選拉低
TM_w_BYTE(TM_w_data); //寫命令
TM_STB_high; //拉高寫入
}

/*固定地址寫入數據函數*/
void TM_w_data(unsigned char TM_w_addr,unsigned char TM_w_data)
{
TM_STB_low;
TM_w_BYTE(TM_ADD_command + TM_w_addr); //地址寫入BYTE
TM_w_BYTE(TM_w_data); //數據寫入BYTE
TM_STB_high; //忽略CLK
}

void TM_init(void)
{
TM_STB_high;
TM_CLK_high;
}




TM1638H
#ifndef __TM1628_H__
#define __TM1628_H__

sbit DIO =P1^7;
sbit CLK =P1^6;
sbit STB =P1^5;

#define TM_CLK_high CLK=1
#define TM_CLK_low CLK=0
#define TM_DIO_high DIO=1
#define TM_DIO_low DIO=0
#define TM_STB_high STB=1
#define TM_STB_low STB=0

#define TM_DAT_command 0x40
#define TM_DIS_control 0x70
#define TM_ADD_command 0xc0
#define TM_SGM_LUM 0x8e
void TM_w_BYTE(unsigned char TM_w_data);
void TM_w_command(unsigned char TM_w_data);
void TM_w_data(unsigned char TM_w_addr,unsigned char TM_w_data);
unsigned int TM_r_BYTE(void);
unsigned int TM_r_key(void);
void TM_init(void);

#endif


實物調通的,stc10F08
回復

使用道具 舉報

24#
ID:923440 發表于 2021-6-23 09:14 | 只看該作者
glinfei 發表于 2021-6-22 20:30
我覺得是P3上拉的電阻太小,試試直接連了嗎?

你好,謝謝回答,可是這個板子也是按著這個電路打的,硬件這方面我沒辦法去改
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 懂色一区二区三区免费观看 | 黄色三级毛片 | 亚洲一区二区三区在线免费观看 | 一区二区中文 | 亚洲天堂日韩精品 | 激情91| 久久精品—区二区三区 | 成人免费看黄 | 久久91精品久久久久久9鸭 | 久久国产一区二区三区 | 欧美精品网站 | 久久精品国产一区二区三区不卡 | 国产成人精品在线播放 | av在线播放网址 | 亚洲精品久久久久久久久久久久久 | 国产精品一级在线观看 | 91在线精品一区二区 | 国产精品免费视频一区 | 中文在线一区二区 | 欧美区精品 | 在线观看视频福利 | 在线观看视频一区 | 久久久久亚洲视频 | 日韩av在线一区二区 | 亚洲美女视频 | 欧美久久一区二区三区 | 国产丝袜一区二区三区免费视频 | 午夜影院在线观看 | www久久久 | 日韩在线不卡 | 国产精品免费一区二区三区 | 一区二区三区视频在线观看 | 人妖videosex高潮另类 | 欧美视频日韩 | 久久精品国产一区二区电影 | 欧美日本亚洲 | 中文字幕人成人 | 国产成人免费在线 | 久久精品国产a三级三级三级 | 中文字幕综合 | 一级黄色短片 |