標題: 豆包的程序靠譜嗎? [打印本頁]

作者: dcc60    時間: 2025-4-13 14:45
標題: 豆包的程序靠譜嗎?
向豆包提問,使用STC15W408AS單片機、DS1302時鐘芯片以及六位共陰極LED數(shù)碼管制作時鐘,給出了下面的回答,編譯時提示        unsigned int j = 100; 有錯,將其挪到函數(shù)開始處通過,下載正常,但沒顯示,大神看看這個程序靠譜嗎?小白不太懂。
  1. 以下是使用STC15W408AS單片機、DS1302時鐘芯片以及六位共陰極LED數(shù)碼管制作時鐘的硬件連接說明和示例代碼。

  2. 硬件連接

  3. 1. DS1302與單片機連接:

  4. - DS1302的SCLK(串行時鐘)引腳連接到STC15W408AS單片機的一個I/O引腳,例如P1.0。

  5. - DS1302的I/O(數(shù)據(jù)輸入輸出)引腳連接到STC15W408AS單片機的一個I/O引腳,例如P1.1。

  6. - DS1302的RST(復位)引腳連接到STC15W408AS單片機的一個I/O引腳,例如P1.2。

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

  8. 2. 六位共陰極LED數(shù)碼管與單片機連接:

  9. - 段選:數(shù)碼管的a、b、c、d、e、f、g、dp引腳(段碼)分別連接到單片機的8個I/O引腳,例如P2.0 - P2.7。

  10. - 位選:六位數(shù)碼管的位選引腳(COM端)分別連接到單片機的6個I/O引腳,例如P3.0 - P3.5。

  11. - 每個位選引腳需通過一個合適的限流電阻(例如220Ω)連接到數(shù)碼管的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. // 定義數(shù)碼管相關引腳
  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};  // 共陰極數(shù)碼管段碼表
  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寫入一個字節(jié)數(shù)據(jù)
  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讀取一個字節(jié)數(shù)據(jù)
  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. // 數(shù)碼管顯示函數(shù)
  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.         // 適當延時以實現(xiàn)動態(tài)掃描
  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. 該代碼實現(xiàn)了從DS1302讀取時間數(shù)據(jù),并通過動態(tài)掃描的方式在六位共陰極LED數(shù)碼管上顯示當前的時、分、秒。在實際使用中,你可能需要根據(jù)具體的硬件電路和需求對代碼進行適當調(diào)整,例如優(yōu)化延時時間、處理時間的更新等。
復制代碼




作者: 錒發(fā)TV    時間: 2025-4-13 19:24
豆包的程序都是靠譜的

作者: dcc60    時間: 2025-4-13 22:54
有點大意了,好幾個排針沒焊。重新焊接后可以顯示字符,延時改為函數(shù)延時,但是還是不能顯示正確時間。
作者: mxk0506    時間: 2025-4-14 00:07
豆包的程序大部分靠譜,一般編譯都是沒有錯誤的,如果功能不能實現(xiàn)。可以看看是不是有點地方?jīng)]配置好。
作者: cccc888    時間: 2025-4-14 09:46
不靠譜啊。錯誤很多。
作者: chxelc    時間: 2025-4-14 11:10
要結合硬件來檢查。AI給的程序要驗證一下的。
作者: dcc60    時間: 2025-4-14 12:05
mxk0506 發(fā)表于 2025-4-14 00:07
豆包的程序大部分靠譜,一般編譯都是沒有錯誤的,如果功能不能實現(xiàn)?梢钥纯词遣皇怯悬c地方?jīng)]配置好。

確實,看來需要改的地方很多!
作者: dcc60    時間: 2025-4-14 12:05
cccc888 發(fā)表于 2025-4-14 09:46
不靠譜啊。錯誤很多。

感謝指正!
作者: dcc60    時間: 2025-4-14 12:06
chxelc 發(fā)表于 2025-4-14 11:10
要結合硬件來檢查。AI給的程序要驗證一下的。

是的,想偷點懶估計不行。
作者: WL0123    時間: 2025-4-14 21:43
dcc60 發(fā)表于 2025-4-13 22:54
有點大意了,好幾個排針沒焊。重新焊接后可以顯示字符,延時改為函數(shù)延時,但是還是不能顯示正確時間。

要顯示正確時間還需要增加按鍵設置當前時間。
作者: dcc60    時間: 2025-4-15 10:27
WL0123 發(fā)表于 2025-4-14 21:43
要顯示正確時間還需要增加按鍵設置當前時間。

目前只是想先搞懂基本的,成功了再慢慢加。謝謝指導。
作者: rickly233    時間: 2025-5-4 12:18
一般來說豆包的智商比較低,如果會科學上網(wǎng)可以用gpt,國內(nèi)的deepseek也還可以
作者: Xiao4    時間: 2025-5-4 20:06
現(xiàn)在AI寫的代碼或多或少會有點問題,建議器件驅動相關的代碼可以在論壇上找,然后將驗證OK的驅動代碼給AI,讓它生成數(shù)據(jù)處理這方面的代碼
作者: wufa1986    時間: 2025-5-5 08:18
不每次上電都初始化,就是這個都不靠譜
作者: dcc60    時間: 2025-5-5 21:46
rickly233 發(fā)表于 2025-5-4 12:18
一般來說豆包的智商比較低,如果會科學上網(wǎng)可以用gpt,國內(nèi)的deepseek也還可以

好多年沒科學了。
deepseek也試了,還是要改才行。
作者: dcc60    時間: 2025-5-5 21:47
Xiao4 發(fā)表于 2025-5-4 20:06
現(xiàn)在AI寫的代碼或多或少會有點問題,建議器件驅動相關的代碼可以在論壇上找,然后將驗證OK的驅動代碼給AI, ...

是的,還是要先搞懂基本東西。
作者: dcc60    時間: 2025-5-5 21:48
wufa1986 發(fā)表于 2025-5-5 08:18
不每次上電都初始化,就是這個都不靠譜

寫完才發(fā)現(xiàn),初始化一次就行了。正式寫入不必初始化了。
作者: 會飛的魚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 發(fā)表于 2025-6-12 17:10
新人,沒有檢驗程序是否可行的能力的時候,AI只能幫你提供思路,不能幫你編碼,否則你根本無從查起,因為代 ...

想偷懶是不行的
作者: dcc60    時間: 2025-6-13 11:14
撐傘感冒人 發(fā)表于 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 發(fā)表于 2025-6-19 17:04
豆包不如deepseek靠譜。

deepseek在很多時候還不如kimi靠譜,在一些需要搜索并且很容易搜索到的答案并進行分析的時候,deepseek也不會進行搜索,只憑自己的分析,答案會千奇百怪的。
作者: hbsuntt    時間: 2025-6-24 16:02
  unsigned int j = 100; 有錯。豆包報錯可以直接復制報警報錯給豆包,他會解決的。這種都是編譯的問題,其他編譯環(huán)境是可以用的。再KEIL里面不行,要再函數(shù)開始聲明 unsigned int j ;然后使用的時候J=100;這樣就不會報錯了。豆包還是可以的,建議VS CODE 里面加載豆包插件,這個好用

作者: npn    時間: 2025-6-24 21:59
數(shù)碼管動態(tài)掃描是要用定時器中斷處理的,你這樣寫的話 Read_DS1302_Byte 滯留n毫秒 數(shù)碼管這n毫秒什么都不亮。
作者: rayin    時間: 2025-6-25 07:17
豆包的程序搞點簡單的,問題不大, 復雜的就難說了.
作者: dcc60    時間: 2025-6-25 09:41
bd5fna 發(fā)表于 2025-6-19 17:04
豆包不如deepseek靠譜。

deepseek給的代碼也不行。
作者: dcc60    時間: 2025-6-25 09:44
hbsuntt 發(fā)表于 2025-6-24 16:02
unsigned int j = 100; 有錯。豆包報錯可以直接復制報警報錯給豆包,他會解決的。這種都是編譯的問題,其 ...

還能把報警返回給豆包?如何操作?
作者: dcc60    時間: 2025-6-25 09:45
npn 發(fā)表于 2025-6-24 21:59
數(shù)碼管動態(tài)掃描是要用定時器中斷處理的,你這樣寫的話 Read_DS1302_Byte 滯留n毫秒 數(shù)碼管這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為我們服務的時候是來輔助我們書寫單片機程序的 不是來幫我們做作業(yè)的 我們的功底也不支持豆包來幫我們支持單片機來書寫很難的程序的哦
作者: wannenggong    時間: 2025-6-28 11:10
個人人為,各種AI編的程序只適合為會編程者提供幫助,如果作為絲毫不懂編程人的依仗是會誤事的,對于網(wǎng)絡資源豐富的項目、詞條AI能夠給出靠譜的、可以實現(xiàn)控制的程序,對于一些網(wǎng)絡資源很少、比較偏冷的東西或許專業(yè)的AI軟件能好些但很多常見的AI編寫的程序就比較離譜或文不對題。
作者: lmn2005    時間: 2025-6-28 14:15
我覺得有時可以直接用,有時只能參考,不能直接用,想用就得修改一下
作者: 太陽雨ZW    時間: 2025-6-28 16:53
多數(shù)情況下要修改下才能用。





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1