找回密码
 立即注册
楼主: 人在江南

TM1650显示问题

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:409
  • 最近打卡:2025-12-18 01:25:12
已绑定手机

2

主题

198

回帖

1400

积分

金牌会员

积分
1400
发表于 2025-5-19 15:46:16 | 显示全部楼层
用这个芯片你得注意,发送完后最好初始化一下,或者隔几秒初始化一次,不然会黑屏的
不抛弃,不放弃
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:594
  • 最近打卡:2025-12-18 09:17:40

51

主题

397

回帖

856

积分

高级会员

积分
856
发表于 2025-10-27 21:32:33 | 显示全部楼层
为什么不传个可以用的程序。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-11-13 13:45:31

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 2025-11-5 12:48:27 | 显示全部楼层
tm1650使用很简单的,运行效果稳定,8级亮度调节,分享一下我的驱动,实测时钟频率40Mhz也是稳定运行。要将两个引脚设置为推挽输出才可以。

tm1650.h:
#include  "Config.h"
#ifndef __TM1650_H
#define __TM1650_H

#define SDA P14
#define SCL P11

void LED_Start(void);
void LED_Stop(void);
void LED_WriteByte(u8 dat);
void LED_Init(u8 dat);
void LED_Set(u8 pos,u8 dat);
#endif

tm1650.c:
#include  "TM1650.h"

void LED_Start(void)
{
        SCL = 1;
        NOP1();
        SDA = 1;
        NOP1();
        SDA = 0;
        NOP1();
        SCL = 0;
        NOP1();
}

void LED_Stop(void)
{
        SDA = 0;
        NOP1();
        SCL = 0;
        NOP1();
        SCL = 1;
        NOP1();
        SDA = 1;
        NOP1();
}

void LED_WriteByte(u8 dat)
{
        u8 i;
        for(i=0; i<8; i++)
        {
                SCL = 0;
                NOP1();
                if(dat & 0x80){SDA = 1;NOP1();}
                else {SDA = 0;NOP1();}
                SCL = 1;
                NOP1();
                dat <<= 1;
        }
        SCL = 0;
        NOP1();
        SDA = 1;
        NOP1();
        SCL = 1;
        NOP1();
        SCL = 0;
        NOP1();
}

void LED_Init(u8 dat)
{
        dat <<= 4;
        dat += 1;
        LED_Start();
        LED_WriteByte(0x48);
        LED_WriteByte(dat);
        LED_Stop();
}

void LED_Set(u8 pos,u8 dat)
{
        LED_Start();
        LED_WriteByte(0x68 + 2*pos);
        LED_WriteByte(dat);
        LED_Stop();
}

使用方式:

初始化:LED_Init(Light);   light是1-8级亮度。

刷新数据:tm1650支持4位数字,可以单独控制
LED_Set(0,0x3F);
LED_Set(1,0x3F);
LED_Set(2,0x3F);
LED_Set(3,0x3F);
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-11-13 13:45:31

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 2025-11-5 12:54:18 | 显示全部楼层
这是驱动共阴数码管的驱动,tm1650好像也可以驱动共阳数码管,换个地址数据就可以了,不过我没有共阳数码管,没试过。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-11-13 13:45:31

1

主题

7

回帖

49

积分

新手上路

积分
49
发表于 2025-11-6 16:02:27 | 显示全部楼层
刚测试,把nop去掉也可以,40Mhz主频下,8h8k64u连续刷新4位数字用时40us多一点,速度已经挺快的,单独刷新1位数字只需要10us。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:229
  • 最近打卡:2025-12-17 13:29:09
已绑定手机

8

主题

51

回帖

123

积分

注册会员

积分
123
发表于 2025-11-15 08:35:46 | 显示全部楼层
终于 终于看到有人咨询TM1650的问题了  那么我就不得不把我珍藏多年的1650库分享出来了
  1. #ifndef        __STC32G_tm1650_H
  2. #define        __STC32G_tm1650_H
  3. #include "config.h"
  4. #define tm1650_sda  DIO
  5. #define tm1650_scl  CLK
  6. #define smg1 0x68
  7. #define smg2 0x6a
  8. #define smg3 0x6c
  9. #define smg4 0x6e
  10. #define L_Du01     0x11
  11. #define L_Du02     0x21
  12. #define L_Du03     0x31
  13. #define L_Du04     0x41
  14. #define L_Du05     0x51
  15. #define L_Du06     0x61
  16. #define L_Du07     0x71
  17. #define L_Du08     0x81
  18. void tm1650_start();
  19. void tm1650_stop();
  20. void tm1650_write_1byte(unsigned char onebyte);
  21. void tm1650_ack();
  22. extern void tm1650_write_display(unsigned char ADD,unsigned char DATA);
  23. extern void tm1650_init();
  24. extern void tm1650_write(unsigned char DATA1,unsigned char DATA2,unsigned char DATA3,unsigned char DATA4);
  25. #endif
  26. 这部分是.H 文件
复制代码


  1. #include "STC32G_TM1650.h"
  2. extern u8 code tab[];
  3. extern u8 code tab_ud[];
  4. void tm1650_start()
  5. {
  6.         tm1650_sda = 1;
  7.         tm1650_scl = 1;
  8.         tm1650_sda = 0;
  9. }
  10. void tm1650_stop()
  11. {
  12.         tm1650_sda = 0;
  13.         tm1650_scl = 1;
  14.         tm1650_sda = 1;
  15. }
  16. void tm1650_ack(void)
  17. {       
  18.         unsigned char timeout = 0;
  19.         tm1650_scl = 1;
  20.         tm1650_scl = 0;
  21.         do        timeout++;
  22.         while((tm1650_sda)&&(timeout<255));                 
  23.         tm1650_scl = 0;         
  24. }
  25. void tm1650_write_1byte(unsigned char onebyte)
  26. {
  27.         unsigned char i;
  28.         for (i=0;i<8;i++)
  29.         {
  30.                 tm1650_scl = 0;
  31.                
  32.                 if(onebyte & 0x80)
  33.                 {
  34.                         tm1650_sda = 1;
  35.                 }
  36.                 else
  37.                 {
  38.                         tm1650_sda = 0;
  39.                 }
  40.                 onebyte = onebyte<<1;       
  41.                 tm1650_scl = 1;
  42.                 tm1650_scl = 0;
  43.         }
  44. }
  45. void tm1650_write_display(unsigned char ADD,unsigned char DATA)
  46. {
  47.         tm1650_start();
  48.         tm1650_write_1byte(ADD);
  49.         tm1650_ack();
  50.         tm1650_write_1byte(DATA);
  51.         tm1650_ack();
  52.         tm1650_stop();
  53. }
  54. void tm1650_init()
  55. {
  56.     tm1650_write_display(0x48,L_Du06);
  57.         tm1650_write_display(smg1,tab[0]);
  58.         tm1650_write_display(smg2,tab[1]);
  59.         tm1650_write_display(smg3,tab[2]);
  60.         tm1650_write_display(smg4,tab[3]);
  61. }
  62. void tm1650_write(unsigned char DATA1,unsigned char DATA2,unsigned char DATA3,unsigned char DATA4)
  63. {
  64.     tm1650_write_display(0x48,L_Du03);      
  65.         tm1650_write_display(smg1,tab[DATA1]);
  66.         tm1650_write_display(smg2,tab[DATA2]);
  67.         tm1650_write_display(smg3,tab[DATA3]);
  68.         tm1650_write_display(smg4,tab[DATA4]);
  69. }
  70. 这部分是.c文件
复制代码


  1. u8 code tab[21] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0X80,0X23,0X1C,0X40,0X00};
  2. u8 code tab_ud[5] = {0X00,0x23,0x54,0x62,0x1C};
  3. 这部分是mian文件中的字符数组
  4. void        GPIO_config(void)
  5. {
  6.         P1_MODE_IO_PU(GPIO_Pin_HIGH);                        //P1.4,P.5,P1.6,P.7 设置为准双向口
  7.     P2_MODE_IO_PU(GPIO_Pin_4 | GPIO_Pin_5);                //P2.4,P2.5 设置为准双向口
  8.         P4_MODE_IO_PU(GPIO_Pin_6 | GPIO_Pin_7);                //P4.6,P4.7 设置为准双向口
  9.     P7_MODE_IO_PU(GPIO_Pin_HIGH);
  10.         I2C_SW(I2C_P24_P25);                                            //I2C_P14_P15,I2C_P24_P25,I2C_P76_P77,I2C_P33_P32
  11.         UART2_SW(UART2_SW_P46_P47);                            //UART2_SW_P10_P11,UART2_SW_P46_P47
  12.    
  13. //    P_MODE_IO_PU(GPIO_Pin_HIGH);                        //P1.4,P.5,P1.6,P.7 设置为准双向口
  14.    
  15.    
  16. }
  17. 这部分是mian文件中的GPIO初始化设置
  18. void main(void)
  19. {
  20.         u8  i,j;
  21.         u8  addr;
  22.         u8  status;
  23.         WTST = 0;                //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  24.         EAXSFR();                //扩展SFR(XFR)访问使能
  25.         CKCON = 0;      //提高访问XRAM速度
  26.         GPIO_config();
  27. //        I2C_config();
  28.         DMA_config();
  29.         UART_config();
  30.     tm1650_init();
  31.         EA = 1;
  32.         printf("命令设置:\r\n");
  33.         printf("W 0x12 1234567890 --> 写入操作  十六进制地址  写入内容\r\n");
  34.         printf("R 0x12 10         --> 读出操作  十六进制地址  读出字节内容\r\n");
  35. 这部分是mian函数中的初始化程序
  36. sbit CLK = P7^6;
  37. sbit DIO = P7^5;
  38. 这是config文件中端口设置
  39. 实际使用中只需要吧端口设置这里改成自己需要的  然后初始化那里改一下端口就行了
复制代码
但使龙城飞将在,不教胡马度阴山!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:229
  • 最近打卡:2025-12-17 13:29:09
已绑定手机

8

主题

51

回帖

123

积分

注册会员

积分
123
发表于 2025-11-15 08:37:49 | 显示全部楼层
顺便再把我的程序上传上来让各位大神看看

只有数码管显示的程序 没有按键读取的程序(主要本人项目中没有使用到  还有就是暂时还不会搞)

stc32驱动TM1650.rar

284.62 KB, 下载次数: 0

但使龙城飞将在,不教胡马度阴山!
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-12-18 21:19 , Processed in 0.110968 second(s), 76 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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