数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 420|回复: 24

[C51] TM1639显示乱码

[复制链接]
发表于 2025-5-10 21:55:52 | 显示全部楼层 |阅读模式
刚入单片机,想用STC15W408AS、TM1639、LED数码管显示12,结合AI生成的代码,显示的都是乱码,如何改动都不成功。麻烦大神帮忙看看哪里出了问题。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
 楼主| 发表于 2025-5-10 22:15:05 | 显示全部楼层
忘了贴代码。




  1. #include <STC15F2K60S2.H>
  2. //#include "TM1639.h"

  3. #include <intrins.h>


  4. sbit TM1639_DIO = P1^4;
  5. sbit TM1639_CLK = P1^5;
  6. sbit TM1639_STB = P1^6;

  7. // 共阴数码管段码表(0~9)
  8. const unsigned char SegCode[] =
  9. {
  10.     0x3F, // 0
  11.     0x06, // 1
  12.     0x5B, // 2
  13.     0x4F, // 3
  14.     0x66, // 4
  15.     0x6D, // 5
  16.     0x7D, // 6
  17.     0x07, // 7
  18.     0x7F, // 8
  19.     0x6F  // 9
  20. };


  21. // 向TM1639写入一个字节       

  22. void TM1639_WriteByte(unsigned char ddd)
  23. {
  24.         unsigned char i;
  25.        
  26.         for (i = 0; i < 8; i++)
  27.                 {
  28.                                 TM1639_CLK = 0;

  29.                                 TM1639_DIO = (ddd & 0x01) ? 1 : 0;
  30.                                 _nop_();//***********
  31.                                 TM1639_CLK = 1;
  32.                                                 ddd >>= 1;
  33.                 }
  34. }

  35. // 发送命令
  36. void TM1639_SendCommand(unsigned char cmd)
  37. {
  38.     TM1639_STB = 0;
  39.     TM1639_WriteByte(cmd);
  40.     TM1639_STB = 1;
  41. }

  42. // 显示数字“1”和“2”
  43. void Display_12()
  44. {
  45.     TM1639_STB = 0;
  46.     TM1639_WriteByte(0x40);    // 地址自动增加模式
  47.     TM1639_STB = 1;
  48.     TM1639_STB = 0;
  49.     TM1639_WriteByte(0xC0);    // 起始地址为0xC0(GRID1)
  50.     TM1639_WriteByte(SegCode[1]);  // 第一位显示“1”
  51.     TM1639_WriteByte(SegCode[2]);  // 第二位显示“2”
  52.     TM1639_STB = 1;
  53. }

  54. void main()
  55. {
  56.     TM1639_SendCommand(0x8f);  // 设置亮度(0x88~0x8F,最亮为0x8F)
  57.     while(1)
  58.                 {
  59.         Display_12();          // 持续显示“12”
  60.     }
  61. }

复制代码


回复 支持 反对

使用道具 举报

发表于 2025-5-11 12:28:10 | 显示全部楼层
你这硬件也是新做的吧?软件也是新抄来的吧?调试出了问题就这么没头没脑的问,很难找到答案。
你得有定位这个问题的思路:
1)首先软件显示八个8加小数点,全点亮。看看硬件能不能全亮。这样排除硬件的接线故障,类似数码管焊接方向反了这样的问题。
2)然后软件显示8个1、一个1,这样最少的段码,看看是不是和预期的一致。
3)固定某一位,轮番显示0~9的数字。显示的内容对不对?预期固定的那个位置对不对?这个过程中你就能发现很多问题了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-11 13:43:40 | 显示全部楼层
maidoo 发表于 2025-5-11 12:28
你这硬件也是新做的吧?软件也是新抄来的吧?调试出了问题就这么没头没脑的问,很难找到答案。
你得有定位 ...

上面已经说了,小白初入门,结合AI写的,因为不懂所以来问。
虽然接了8个数码管,想着简单显示12,搞懂了原理再慢慢写。
感谢支持。
回复 支持 反对

使用道具 举报

发表于 2025-5-11 14:52:15 | 显示全部楼层
代码要结合电路图的,没图不好分析啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-11 16:08:41 | 显示全部楼层
图是有的,因为是实验,所以图也是多用途的。
这个实验中,TM1639的6、7、8分别接在STC15W408AS的7、8、9脚。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2025-5-11 16:41:39 | 显示全部楼层
硬件电路和软件没对应上把 AI 只能各处大概的 细节还是要调试的
回复 支持 反对

使用道具 举报

发表于 2025-5-11 17:55:23 来自手机浏览器 | 显示全部楼层
dcc20250209 发表于 2025-5-11 16:08
图是有的,因为是实验,所以图也是多用途的。
这个实验中,TM1639的6、7、8分别接在STC15W408AS的7、8、9脚 ...

按上面网友说的,把这里面的数字都改成数字8试试,看能不能显示88

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2025-5-11 18:06:00 | 显示全部楼层
本帖最后由 zj97czb 于 2025-5-11 18:37 编辑

你这图是你画的吗?很明显你这些段是要两个字节才能组成 一个完整的字
0x0f,0x03,//0
0x06,0x00,//1
0x0b,0x05,//2
0x0f,0x04,//3
0x06,0x06,//4
0xod,0x06,//5
0x0d,0x07,//6
0x07,0x00,//7
0x0f,0x07,//8
0x0f,0x06//9
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-11 23:10:53 | 显示全部楼层
17805352 发表于 2025-5-11 16:41
硬件电路和软件没对应上把 AI 只能各处大概的 细节还是要调试的

硬件电路应该没问题。
运行了梁百万的程序,能正常计数。估计还是程序问题,刚入门小白不会写,只能去理解大神门的程序。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-11 23:15:09 | 显示全部楼层
shuzhi 发表于 2025-5-11 17:55
按上面网友说的,把这里面的数字都改成数字8试试,看能不能显示88

改成88后显示这样。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-11 23:24:21 | 显示全部楼层
zj97czb 发表于 2025-5-11 18:06
你这图是你画的吗?很明显你这些段是要两个字节才能组成 一个完整的字
0x0f,0x03,//0
0x06,0x00,//1

自己画的图,为了方便实验,LED、STC15W408AS、TM1639分别打了板,多谢嘉力创。

将代码改为上述后,仍不能正确显示,还需慢慢研究,感谢支持。
回复 支持 反对

使用道具 举报

发表于 2025-5-12 08:30:27 | 显示全部楼层
一般都是段码表数据出错导致的
回复 支持 反对

使用道具 举报

发表于 2025-5-12 08:40:08 | 显示全部楼层
本帖最后由 lmn2005 于 2025-5-12 08:41 编辑

TM1639支持共阳和共阴两种模式,好像共阴的驱动比共阳的难搞,手头没有1639,没办法测试。有点像我以前弄的:

TM1638驱动共阳数码管,太难了 - 我爱单片机 数码之家  https://www.mydigit.cn/thread-445919-1-1.html
回复 支持 反对

使用道具 举报

发表于 2025-5-12 09:26:56 | 显示全部楼层
谁写的找谁问去啊,把照片丢回给ai然后让它自己改,坚决不惯着
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-12 09:47:53 | 显示全部楼层
t3486784401 发表于 2025-5-12 09:26
谁写的找谁问去啊,把照片丢回给ai然后让它自己改,坚决不惯着

感谢顶贴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-12 09:50:44 | 显示全部楼层
lmn2005 发表于 2025-5-12 08:40
TM1639支持共阳和共阴两种模式,好像共阴的驱动比共阳的难搞,手头没有1639,没办法测试。有点像我以前弄的 ...

一直都用共阴数码管,感觉这种比较符合常理。
回复 支持 反对

使用道具 举报

发表于 2025-5-12 11:35:06 | 显示全部楼层
结合这个图再看一下,要驱动一个芯片,首先要看芯片的手册

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-5-12 11:37:55 | 显示全部楼层
bg4rff 发表于 2025-5-12 11:35
结合这个图再看一下,要驱动一个芯片,首先要看芯片的手册

感谢支持!
回复 支持 反对

使用道具 举报

发表于 2025-5-12 11:46:36 | 显示全部楼层
本帖最后由 bg4rff 于 2025-5-12 11:49 编辑
bg4rff 发表于 2025-5-12 11:35
结合这个图再看一下,要驱动一个芯片,首先要看芯片的手册

一个8位的管对应两个寄存器
TM1639_WriteByte(SegCode[1]);
TM1639_WriteByte(SegCode[1]>>4);
TM1639_WriteByte(SegCode[2]);
TM1639_WriteByte(SegCode[2]>>4);
TM1639_WriteByte(SegCode[3]);
TM1639_WriteByte(SegCode[3]>>4);
TM1639_WriteByte(SegCode[4]);
TM1639_WriteByte(SegCode[4]>>4);


SegCode取码时按照对应的段排列DpGFEDCBA
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-27 07:09 , Processed in 0.156001 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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