标题: 豆包的程序靠谱吗? [打印本页]

作者: dcc60    时间: 2025-4-13 14:45
标题: 豆包的程序靠谱吗?
向豆包提问,使用STC15W408AS单片机、DS1302时钟芯片以及六位共阴极LED数码管制作时钟,给出了下面的回答,编译时提示        unsigned int j = 100; 有错,将其挪到函数开始处通过,下载正常,但没显示,大神看看这个程序靠谱吗?小白不太懂。
  1. 以下是使用STC15W408AS单片机、DS1302时钟芯片以及六位共阴极LED数码管制作时钟的硬件连接说明和示例代码。

  2. 硬件连接

  3. 1. DS1302与单片机连接:

  4. - DS1302的SCLK(串行时钟)引脚连接到STC15W408AS单片机的一个I/O引脚,例如P1.0。

  5. - DS1302的I/O(数据输入输出)引脚连接到STC15W408AS单片机的一个I/O引脚,例如P1.1。

  6. - DS1302的RST(复位)引脚连接到STC15W408AS单片机的一个I/O引脚,例如P1.2。

  7. - DS1302的VCC2连接到5V电源,VCC1可接备用电池(如果需要),GND接地。

  8. 2. 六位共阴极LED数码管与单片机连接:

  9. - 段选:数码管的a、b、c、d、e、f、g、dp引脚(段码)分别连接到单片机的8个I/O引脚,例如P2.0 - P2.7。

  10. - 位选:六位数码管的位选引脚(COM端)分别连接到单片机的6个I/O引脚,例如P3.0 - P3.5。

  11. - 每个位选引脚需通过一个合适的限流电阻(例如220Ω)连接到数码管的COM端。

  12. 示例代码

  13. c
  14.   
  15. #include <reg51.h>

  16. // 定义DS1302相关引脚
  17. sbit DS1302_SCLK = P1^0;  
  18. sbit DS1302_IO = P1^1;   
  19. sbit DS1302_RST = P1^2;   

  20. // 定义数码管相关引脚
  21. sbit DIG1 = P3^0;  // 位选1
  22. sbit DIG2 = P3^1;  // 位选2
  23. sbit DIG3 = P3^2;  // 位选3
  24. sbit DIG4 = P3^3;  // 位选4
  25. sbit DIG5 = P3^4;  // 位选5
  26. sbit DIG6 = P3^5;  // 位选6

  27. unsigned char code SEG_TABLE[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};  // 共阴极数码管段码表
  28. unsigned char code TABLE[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23, 0x30, 0x31};

  29. // 向DS1302写入一个字节数据
  30. void Write_DS1302_Byte(unsigned char addr, unsigned char dat) {
  31.     unsigned char n;
  32.     DS1302_RST = 0;
  33.     DS1302_SCLK = 0;
  34.     DS1302_RST = 1;
  35.     for (n = 0; n < 8; n++) {
  36.         DS1302_IO = addr & 0x01;
  37.         addr >>= 1;
  38.         DS1302_SCLK = 1;
  39.         DS1302_SCLK = 0;
  40.     }
  41.     for (n = 0; n < 8; n++) {
  42.         DS1302_IO = dat & 0x01;
  43.         dat >>= 1;
  44.         DS1302_SCLK = 1;
  45.         DS1302_SCLK = 0;
  46.     }
  47.     DS1302_RST = 0;
  48. }

  49. // 从DS1302读取一个字节数据
  50. unsigned char Read_DS1302_Byte(unsigned char addr) {
  51.     unsigned char n, dat = 0;
  52.     DS1302_RST = 0;
  53.     DS1302_SCLK = 0;
  54.     DS1302_RST = 1;
  55.     for (n = 0; n < 8; n++) {
  56.         DS1302_IO = addr & 0x01;
  57.         addr >>= 1;
  58.         DS1302_SCLK = 1;
  59.         DS1302_SCLK = 0;
  60.     }
  61.     for (n = 0; n < 8; n++) {
  62.         dat >>= 1;
  63.         if (DS1302_IO) dat |= 0x80;
  64.         DS1302_SCLK = 1;
  65.         DS1302_SCLK = 0;
  66.     }
  67.     DS1302_RST = 0;
  68.     return dat;
  69. }

  70. // 初始化DS1302
  71. void Init_DS1302() {
  72.     Write_DS1302_Byte(0x8E, 0x00);  // 关闭写保护
  73.     Write_DS1302_Byte(0x80, TABLE[0]);  // 秒
  74.     Write_DS1302_Byte(0x82, TABLE[0]);  // 分
  75.     Write_DS1302_Byte(0x84, TABLE[0]);  // 时
  76.     Write_DS1302_Byte(0x86, TABLE[0]);  // 日
  77.     Write_DS1302_Byte(0x88, TABLE[0]);  // 月
  78.     Write_DS1302_Byte(0x8A, TABLE[0]);  // 星期
  79.     Write_DS1302_Byte(0x8C, TABLE[0]);  // 年
  80.     Write_DS1302_Byte(0x8E, 0x80);  // 开启写保护
  81. }

  82. // 数码管显示函数
  83. void Display(unsigned char hour, unsigned char min, unsigned char sec) {
  84.     unsigned char i;
  85.     unsigned char digit[6];
  86.     digit[0] = hour / 10;
  87.     digit[1] = hour % 10;
  88.     digit[2] = min / 10;
  89.     digit[3] = min % 10;
  90.     digit[4] = sec / 10;
  91.     digit[5] = sec % 10;

  92.     for (i = 0; i < 6; i++) {
  93.         switch (i) {
  94.             case 0: DIG1 = 1; DIG2 = 0; DIG3 = 0; DIG4 = 0; DIG5 = 0; DIG6 = 0; break;
  95.             case 1: DIG1 = 0; DIG2 = 1; DIG3 = 0; DIG4 = 0; DIG5 = 0; DIG6 = 0; break;
  96.             case 2: DIG1 = 0; DIG2 = 0; DIG3 = 1; DIG4 = 0; DIG5 = 0; DIG6 = 0; break;
  97.             case 3: DIG1 = 0; DIG2 = 0; DIG3 = 0; DIG4 = 1; DIG5 = 0; DIG6 = 0; break;
  98.             case 4: DIG1 = 0; DIG2 = 0; DIG3 = 0; DIG4 = 0; DIG5 = 1; DIG6 = 0; break;
  99.             case 5: DIG1 = 0; DIG2 = 0; DIG3 = 0; DIG4 = 0; DIG5 = 0; DIG6 = 1; break;
  100.         }
  101.         P2 = SEG_TABLE[digit[i]];
  102.         // 适当延时以实现动态扫描
  103. <font color="#ff0000">        unsigned int j = 100;</font>
  104.         while (j--);
  105.         P2 = 0x00;  // 消隐
  106.     }
  107. }

  108. void main() {
  109.     unsigned char sec, min, hour;
  110.     Init_DS1302();
  111.     while (1) {
  112.         sec = Read_DS1302_Byte(0x81);
  113.         min = Read_DS1302_Byte(0x83);
  114.         hour = Read_DS1302_Byte(0x85);
  115.         Display(hour, min, sec);
  116.     }
  117. }


  118. 该代码实现了从DS1302读取时间数据,并通过动态扫描的方式在六位共阴极LED数码管上显示当前的时、分、秒。在实际使用中,你可能需要根据具体的硬件电路和需求对代码进行适当调整,例如优化延时时间、处理时间的更新等。
复制代码




作者: 锕发TV    时间: 2025-4-13 19:24
豆包的程序都是靠谱的

作者: dcc60    时间: 2025-4-13 22:54
有点大意了,好几个排针没焊。重新焊接后可以显示字符,延时改为函数延时,但是还是不能显示正确时间。
作者: mxk0506    时间: 2025-4-14 00:07
豆包的程序大部分靠谱,一般编译都是没有错误的,如果功能不能实现。可以看看是不是有点地方没配置好。
作者: cccc888    时间: 2025-4-14 09:46
不靠谱啊。错误很多。
作者: chxelc    时间: 2025-4-14 11:10
要结合硬件来检查。AI给的程序要验证一下的。
作者: dcc60    时间: 2025-4-14 12:05
mxk0506 发表于 2025-4-14 00:07
豆包的程序大部分靠谱,一般编译都是没有错误的,如果功能不能实现。可以看看是不是有点地方没配置好。

确实,看来需要改的地方很多!
作者: dcc60    时间: 2025-4-14 12:05
cccc888 发表于 2025-4-14 09:46
不靠谱啊。错误很多。

感谢指正!
作者: dcc60    时间: 2025-4-14 12:06
chxelc 发表于 2025-4-14 11:10
要结合硬件来检查。AI给的程序要验证一下的。

是的,想偷点懒估计不行。
作者: WL0123    时间: 2025-4-14 21:43
dcc60 发表于 2025-4-13 22:54
有点大意了,好几个排针没焊。重新焊接后可以显示字符,延时改为函数延时,但是还是不能显示正确时间。

要显示正确时间还需要增加按键设置当前时间。
作者: dcc60    时间: 2025-4-15 10:27
WL0123 发表于 2025-4-14 21:43
要显示正确时间还需要增加按键设置当前时间。

目前只是想先搞懂基本的,成功了再慢慢加。谢谢指导。
作者: rickly233    时间: 2025-5-4 12:18
一般来说豆包的智商比较低,如果会科学上网可以用gpt,国内的deepseek也还可以
作者: Xiao4    时间: 2025-5-4 20:06
现在AI写的代码或多或少会有点问题,建议器件驱动相关的代码可以在论坛上找,然后将验证OK的驱动代码给AI,让它生成数据处理这方面的代码
作者: wufa1986    时间: 2025-5-5 08:18
不每次上电都初始化,就是这个都不靠谱
作者: dcc60    时间: 2025-5-5 21:46
rickly233 发表于 2025-5-4 12:18
一般来说豆包的智商比较低,如果会科学上网可以用gpt,国内的deepseek也还可以

好多年没科学了。
deepseek也试了,还是要改才行。
作者: dcc60    时间: 2025-5-5 21:47
Xiao4 发表于 2025-5-4 20:06
现在AI写的代码或多或少会有点问题,建议器件驱动相关的代码可以在论坛上找,然后将验证OK的驱动代码给AI, ...

是的,还是要先搞懂基本东西。
作者: dcc60    时间: 2025-5-5 21:48
wufa1986 发表于 2025-5-5 08:18
不每次上电都初始化,就是这个都不靠谱

写完才发现,初始化一次就行了。正式写入不必初始化了。
作者: 会飞的鱼KKK    时间: 2025-5-6 15:20
代码逻辑没问题,就看完不完整了
作者: powerdruy    时间: 2025-6-12 17:10
新人,没有检验程序是否可行的能力的时候,AI只能帮你提供思路,不能帮你编码,否则你根本无从查起,因为代码也不是你写的
作者: 撑伞感冒人    时间: 2025-6-12 23:10
不一定,可以参考但很多时候还是要自己想
作者: Taaay    时间: 2025-6-13 10:13
感觉也不太准有时候,准的只是少部分,但你给代码让他分析,分析的还可以
作者: dcc60    时间: 2025-6-13 11:13
powerdruy 发表于 2025-6-12 17:10
新人,没有检验程序是否可行的能力的时候,AI只能帮你提供思路,不能帮你编码,否则你根本无从查起,因为代 ...

想偷懒是不行的
作者: dcc60    时间: 2025-6-13 11:14
撑伞感冒人 发表于 2025-6-12 23:10
不一定,可以参考但很多时候还是要自己想

看来只能仅供参考
作者: 2625860329    时间: 2025-6-13 13:32
逻辑简单点,还是准的,复杂的可以让他提供思路,然后一一验证
作者: linzaii    时间: 2025-6-19 14:09
靠谱,如何功能不一样需要自己修改,看自己有没有改代码的能力
作者: bd5fna    时间: 2025-6-19 17:04
豆包不如deepseek靠谱。
作者: hhdsdy    时间: 2025-6-19 17:18
bd5fna 发表于 2025-6-19 17:04
豆包不如deepseek靠谱。

deepseek在很多时候还不如kimi靠谱,在一些需要搜索并且很容易搜索到的答案并进行分析的时候,deepseek也不会进行搜索,只凭自己的分析,答案会千奇百怪的。
作者: hbsuntt    时间: 2025-6-24 16:02
  unsigned int j = 100; 有错。豆包报错可以直接复制报警报错给豆包,他会解决的。这种都是编译的问题,其他编译环境是可以用的。再KEIL里面不行,要再函数开始声明 unsigned int j ;然后使用的时候J=100;这样就不会报错了。豆包还是可以的,建议VS CODE 里面加载豆包插件,这个好用

作者: npn    时间: 2025-6-24 21:59
数码管动态扫描是要用定时器中断处理的,你这样写的话 Read_DS1302_Byte 滞留n毫秒 数码管这n毫秒什么都不亮。
作者: rayin    时间: 2025-6-25 07:17
豆包的程序搞点简单的,问题不大, 复杂的就难说了.
作者: dcc60    时间: 2025-6-25 09:41
bd5fna 发表于 2025-6-19 17:04
豆包不如deepseek靠谱。

deepseek给的代码也不行。
作者: dcc60    时间: 2025-6-25 09:44
hbsuntt 发表于 2025-6-24 16:02
unsigned int j = 100; 有错。豆包报错可以直接复制报警报错给豆包,他会解决的。这种都是编译的问题,其 ...

还能把报警返回给豆包?如何操作?
作者: dcc60    时间: 2025-6-25 09:45
npn 发表于 2025-6-24 21:59
数码管动态扫描是要用定时器中断处理的,你这样写的话 Read_DS1302_Byte 滞留n毫秒 数码管这n毫秒什么都不 ...

都是乱码,搞不懂。
作者: 一落成叶    时间: 2025-6-25 11:15
我感觉不是很靠谱,我用AI写代码,通常是让它给我一个思路或者把我的代码“喂”给AI,让它修改
作者: chxelc    时间: 2025-6-25 16:07
AI只能给你参考,一般还是要自行修改才能用。
作者: cherish、    时间: 2025-6-26 10:31
豆包的程序都是靠谱的
作者: 单片机重购    时间: 2025-6-26 19:34
使用豆包这些来讨论单片机的程序的时候,我们使用的是什么软件来进行编写的。使用的是什莫软件编写
作者: 单片机重购    时间: 2025-6-26 19:36
以及你书写比较简单的程序时是可以解答你的问题的 不然的话 你书写比较难的项目的话 豆包这种简单的大脑是不支持你书写这莫难的程序的
作者: 单片机重购    时间: 2025-6-26 19:37
在书写单片机程序的时候,我们使用AI为我们服务的时候是来辅助我们书写单片机程序的 不是来帮我们做作业的 我们的功底也不支持豆包来帮我们支持单片机来书写很难的程序的哦
作者: wannenggong    时间: 2025-6-28 11:10
个人人为,各种AI编的程序只适合为会编程者提供帮助,如果作为丝毫不懂编程人的依仗是会误事的,对于网络资源丰富的项目、词条AI能够给出靠谱的、可以实现控制的程序,对于一些网络资源很少、比较偏冷的东西或许专业的AI软件能好些但很多常见的AI编写的程序就比较离谱或文不对题。
作者: lmn2005    时间: 2025-6-28 14:15
我觉得有时可以直接用,有时只能参考,不能直接用,想用就得修改一下
作者: 太阳雨ZW    时间: 2025-6-28 16:53
多数情况下要修改下才能用。





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1