找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 878|回复: 4
打印 上一主题 下一主题
收起左侧

tm1637输出一直灰色,I2C通讯监视正常?

[复制链接]
跳转到指定楼层
楼主
ID:1084847 发表于 2023-6-22 23:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
谢谢大家
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2023-6-23 06:09 | 只看该作者
TM1637驱动共阳数码管时钟示例 仿真.rar (879.08 KB, 下载次数: 21)


回复

使用道具 举报

板凳
ID:213173 发表于 2023-6-23 06:18 | 只看该作者
本帖最后由 wulin 于 2023-7-1 07:58 编辑

此代码在仿真环境TM1637 的按键扫描功能失败,只好另写按键扫描。但用实物测试TM1637 的按键扫描功能正常。
回复

使用道具 举报

地板
ID:712097 发表于 2023-6-23 08:21 | 只看该作者
把程序和电路发出来,坛友才好帮你分析。
回复

使用道具 举报

5#
ID:1085441 发表于 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个数码管,显示和按键都是测试过的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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