qepuemc 发表于 2024-4-17 22:44:52

再分享一下不成功的例请懂的给看看哪里有问题。STC8H8K下 LQFP32


//本例程基于STC8H8K64U为主控芯片的实验箱9进行编写测试,STC8G、STC8H系列芯片可通用参考.

#include "stc8h.h"       //包含此头文件后,不需要再包含"reg51.h"头文件
#include "intrins.h"



//1.TM1640显示基本程序
sbit DIN=P3^5;                                   //定义DIN数据端口
sbit CLK=P3^4;                                   //定义CLK数据端口
unsigned intCODE={0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,};//共阴数码管0~F字型码,需根据硬件接法定义               
//1.TM1640显示基本程序


//2.TM1640显示基本程序
/********************Start函数*************************/
void I2CStart()
{
    DIN=1;
    CLK=1;
        _nop_();
        _nop_();
        DIN=1;
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
}
/********************Stop函数*************************/
void I2CStop()
{
        CLK=1;
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
        DIN=1;
        _nop_();
        _nop_();
        CLK=0;
        DIN=0;

}

/***************发送8bit数据,从低位开始**************/
void I2CWritebyte(unsigned char oneByte)
{
unsigned char i;
for(i=0;i<8;i++)
{
    CLK=0;
        if(oneByte&0x01)
          DIN=1;
        else
          DIN=0;
        _nop_();
        _nop_();
        _nop_();
        CLK=1;
        oneByte=oneByte>>1;
        }
        CLK=0;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        DIN=0;
        _nop_();
        _nop_();
}

/************显示函数,数码管1~16位显示0~F************/
void disp()
{
unsigned char i;

I2CStart();
I2CWritebyte(0x40);        //数据命令设置:普通模式,地址自动加一
I2CStop();

I2CStart();
I2CWritebyte(0xc0);        //地址命令设置:初始地址00H
for(i=0;i<16;i++)                //发送16位显示数据
{
   I2CWritebyte(CODE);
}
I2CStop();

I2CStart();
I2CWritebyte(0x8c);        //显示控制:显示开,脉冲宽度设为11/16
I2CStop();
}
//2.TM1640显示基本程序



void main()
{
       
    P0M0 = 0x00; P0M1 = 0x00;
    P1M0 = 0x00; P1M1 = 0x00;
    P2M0 = 0x00; P2M1 = 0x00;
    P3M0 = 0x00; P3M1 = 0x00;

    P4M0 = 0x00; P4M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P7M0 = 0x00; P7M1 = 0x00;
       
while (1);
{

       
//3.TM1640显示基本程序
//重新定义数码管显示的数据


//取数据
CODE=5;



//取数据
//取数据

//取数据
//数据比较
//第1位
switch(CODE){       
        case 0: CODE=0x3F; break;
        case 1: CODE=0x06; break;
        case 2: CODE=0x5B; break;
        case 3: CODE=0x4F; break;       
        case 4: CODE=0x66; break;
        case 5: CODE=0x6D; break;
        case 6: CODE=0x7D; break;
        case 7: CODE=0x07; break;
        case 8: CODE=0x7F; break;
        case 9: CODE=0x6F; break;       
}
//第1位


disp();                         //显示
//3.TM1640显示基本程序
       
}
}

嵌入式之路 发表于 2024-4-18 00:20:16

我有1637的,感兴趣的话我可以贴下

jackfangxq 发表于 2024-4-21 20:36:54

嵌入式之路 发表于 2024-4-18 00:20
我有1637的,感兴趣的话我可以贴下

贴上来学习一下,谢谢

嵌入式之路 发表于 2024-4-21 22:41:03

jackfangxq 发表于 2024-4-21 20:36
贴上来学习一下,谢谢

我本周整理下

jackfangxq 发表于 2024-4-22 07:36:19

嵌入式之路 发表于 2024-4-21 22:41
我本周整理下

非常感谢

xxkj2010 发表于 2024-4-22 09:02:42


qepuemc 发表于 2024-4-24 14:36:44

xxkj2010 发表于 2024-4-22 09:02


代码就是人家给的例子。在stc15w可以用。stc32也可以用。stc8让我直接放弃1640

xxkj2010 发表于 2024-4-24 15:02:00

用逻辑分析仪看一下波形。

qepuemc 发表于 2024-4-24 22:21:12

xxkj2010 发表于 2024-4-24 15:02
用逻辑分析仪看一下波形。

该解决的问题已解决,解决不了的。就算了,波形什么的就算了吧。

qepuemc 发表于 2024-4-25 21:27:47

STC32G12K128 发表于 2024-3-23 09:48
stc32G驱动数码,其他客户测试的分享:
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=5604&high ...

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7602在9楼
这个是我刚分离好的好理解的STC直接驱动PCB的例子。有需要可以参考一下
页: 1 [2] 3
查看完整版本: 请教32G12K128怎么带TM1640驱动数码管先分享我成功的在STC15W408AS上的成功经验