打印
[技术问答]

SC92F7322驱动IIC接口的TM1640无法显示?

[复制链接]
1446|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dqqqqqq|  楼主 | 2019-3-14 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码在别的51上验证过了,可以显示,但是在SC92F7322上无法显示


#define WRITE_DATA_MODE_Z   0x40        // 地址自动加
#define WRITE_DATA_MODE_G   0x44        // 固定地址
#define START_DATA          0xC0        //
#define DISPLAY_EN          0x8F        // 开显示  //显示命令控制 脉冲宽度14/16
#define DISPLAY_DIS         0x80        // 关显示


// 端口定义
sbit SCLK   =   P3^7;
sbit DIO    =   P3^6;

// sbit SCLK   =   P3^2;
// sbit DIO    =   P3^3;

unsigned char DisBuf[16];           // 显示缓存

unsigned char code ch_table[]={
        0x3F,  //"0"
        0x06,  //"1"
        0x5B,  //"2"
        0x4F,  //"3"
        0x66,  //"4"
        0x6D,  //"5"
        0x7D,  //"6"
        0x07,  //"7"
        0x7F,  //"8"
        0x6F,  //"9"
        0x77,  //"A"
        0x7C,  //"B"
        0x39,  //"C"
        0x5E,  //"D"
        0x79,  //"E"
        0x71,  //"F"
        0x76,  //"H"
        0x38,  //"L"
        0x37,  //"n"
        0x3E,  //"u"
        0x73,  //"P"
        0x5C,  //"o"
        0x40,  //"-"
        0x00,  //熄灭
};

void Init_Display();//初始化
void TM1640_Set(unsigned char add,unsigned char dat); //数码管显示


// 开始
void start()
{
    SCLK=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();       
    DIO=1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();       
    DIO=0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_();       
    SCLK=0;   
}

void send_data(unsigned char x)          //送数据    低位先传
{
    unsigned char  i;
    for(i=0;i<8;i++)
    {
        SCLK=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();                       
        DIO=(bit)(x&0x01);
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();               
        SCLK=1;
        x>>=1;
    }
    SCLK=0;
}

// 结束
void stop()
{
    SCLK=0;
    DIO=0;
    SCLK=1;
    DIO=1;
}

void Init_Display()
{
    start();
    send_data(DISPLAY_DIS);         // 关显示
    stop();

    start();
    //send_data(WRITE_DATA_MODE_Z);   // 自动地址
    send_data(WRITE_DATA_MODE_G);   // 固定地址       
    stop();

    start();
    send_data(0x8F);                // 开显示
    stop();
}

void TM1640_Set(unsigned char add,unsigned char dat) //数码管显示
{
        unsigned char i;
        start();
        send_data(START_DATA);              //起始地址
        for(i=0;i<16;i++)                   //送16位数
        {
                                          DisBuf[i]=dat;
            send_data(ch_table[DisBuf[i]]);
        }
                                stop();
}

相关帖子

沙发
零三翟邢止胃| | 2019-3-15 13:12 | 只看该作者
大佬来解答啊! 我不懂

使用特权

评论回复
板凳
oldfish01234| | 2019-3-26 15:10 | 只看该作者
把单片机主频降低些试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

90

帖子

0

粉丝