欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: tm1637輸出一直灰色,I2C通訊監視正常? [打印本頁]

作者: sillyboy    時間: 2023-6-22 23:50
標題: tm1637輸出一直灰色,I2C通訊監視正常?
謝謝大家

作者: wulin    時間: 2023-6-23 06:09
TM1637驅動共陽數碼管時鐘示例 仿真.rar (879.08 KB, 下載次數: 21)



作者: wulin    時間: 2023-6-23 06:18
本帖最后由 wulin 于 2023-7-1 07:58 編輯

此代碼在仿真環境TM1637 的按鍵掃描功能失敗,只好另寫按鍵掃描。但用實物測試TM1637 的按鍵掃描功能正常。
作者: chxelc    時間: 2023-6-23 08:21
把程序和電路發出來,壇友才好幫你分析。
作者: cnfloatleaf    時間: 2023-6-30 20:33
tm1637.c
#include        <reg51.h>          
#include        <intrins.h>
#include        "tm1637.h"

sfr     P4 = 0xc0;
sfr     P5 = 0xc8;
sbit    SDIO = P5^5;                // TM1637
sbit    SDCK = P4^4;

void        tm1637(unsigned char intensity2, unsigned char ledA1, unsigned char ledA2)
{
        tm_start();
        tm_write(0x40);        // 設置寫RAM,地址自動+1
        tm_stop();
        _nop_();
        _nop_();
        _nop_();

        tm_start();
        tm_write(0xc0);        //        設置寫RAM地址
        tm_write(ledA1);  // write RAM
        tm_write(ledA2);  // write RAM
        tm_write(0);        // write RAM  
        tm_write(0);        // write RAM
        tm_write(0);        // write RAM  
        tm_write(0);        // write RAM
        tm_stop();
        _nop_();
        _nop_();
        _nop_();

        tm_start();
        tm_write(intensity2);        
        tm_stop();
}
void        tm_start(void)
{
        SDIO = 1;
        SDCK = 1;
        DL1uS(3);
        SDIO = 0;
        DL1uS(1);
        SDCK = 0;
}
void        tm_stop(void)
{
        SDIO = 0;
        SDCK = 0;
        DL1uS(3);
        SDCK = 1;
        DL1uS(3);
        SDIO = 1;
}
void        tm_write(unsigned char x2)
{
        unsigned char        i2;
        for(i2=0; i2<8; i2++)         
        {
                SDCK = 0;
                if((1&x2) == 0)
                { SDIO = 0; }
                else
                { SDIO = 1; }
                DL1uS(1);
                SDCK = 1;
                x2 = x2 >> 1;
        }
        SDCK = 0;
        DL1uS(1);
        while(SDIO == 1);
        DL1uS(1);
        SDCK = 1;
}
unsigned char        tm1637_key(void)
{
        unsigned char        i2,k2;
        tm_start();
        tm_write(0x42);
        SDIO = 1;
        k2 = 0;
        for(i2=0; i2<8; i2++)         
        {
                SDCK = 0;
                k2 = k2 >> 1;
                DL1uS(1);
                SDCK = 1;
                if(SDIO == 1)
                { k2 = k2 | 0x80; }
                DL1uS(1);
        }
        SDCK = 0;
        DL1uS(1);
        while(SDIO == 1);
        DL1uS(1);
        SDCK = 1;
        DL1uS(1);
        tm_stop();
        return        k2;
}

void        DL1uS(unsigned char z2)                       
{        // 1T 22.1184MHz 1uS*(z2+1)  STC8A8K tested       
        unsigned char x2,y2;
        for(x2=0; x2<z2; x2++)
        {
                for(y2=0; y2<2; y2++)
                {  }
        }
        _nop_();
}

tm1637.h
#define                _TM1637_H

void        tm1637(unsigned char intensity2, unsigned char ledA1, unsigned char ledA2);
void        tm_start(void);
void        tm_stop(void);
void        tm_write(unsigned char x2);
unsigned char        tm1637_key(void);
void        DL1uS(unsigned char z2);

這里是tm1637.c和tm1637.h文件,只用了2個數碼管,顯示和按鍵都是測試過的。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1