欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3823|回復: 22
打印 上一主題 下一主題
收起左側

為何這個單片機程序得寫多一行?

  [復制鏈接]
跳轉到指定樓層
樓主
ID:995903 發表于 2021-12-28 20:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是一個7段數碼管循環顯示數字的程序
  1. #include "reg52.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0
  6. uchar code seg[]={0xc0,0xa4,0x99,0x82,0x80,0xf9,0xb0,0x92,0xf8,0x90,0x01};                                 
  7. void delayms(uint);                                 
  8. void main(void)
  9. {        
  10. uchar i;
  11. while(1)
  12.         {        
  13.         out=seg[i];
  14.         delayms(900);
  15.         i++;
  16.         if(seg[i]==0x01)i=0;  
  17.         }
  18. }
  19. void delayms(uint j)                                
  20. {
  21. uchar i;
  22. for(;j>0;j--)
  23.           {        
  24.                 i=250;
  25.                     while(--i);
  26.                     i=249;
  27.                     while(--i);
  28.            }
  29. }
復制代碼


為啥在main函數前面要多寫一行void delayms(uint);不寫這一行編譯就會出錯



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:883242 發表于 2021-12-28 21:40 | 只看該作者
如果第7行不存在,第14行main引用到delayms的時候不知道delayms是個什么東西,自然無法編譯成匯編。

不想寫第7行也可以,把19行到29行的delayms代碼放到第8行前面,這樣main引用delayms的時候已經知道這東西是個什么玩意兒了。
回復

使用道具 舉報

板凳
ID:573999 發表于 2021-12-28 22:11 | 只看該作者
函數聲明,基礎的C語言問題
回復

使用道具 舉報

地板
ID:424598 發表于 2021-12-28 23:28 來自觸屏版 | 只看該作者
程序加載的順序問題
回復

使用道具 舉報

5#
ID:908826 發表于 2021-12-29 08:09 | 只看該作者
函數聲明,main函數之前要保證你main函數里面要調用的函數存在,你也可以不生命,只要把那個子函數的定義寫在main函數前面即可。
回復

使用道具 舉報

6#
ID:232791 發表于 2021-12-29 08:43 | 只看該作者
你不寫delayms,main怎么知道delayms(900)。可以吧下面的void delayms(uint j) 放到main前面。
回復

使用道具 舉報

7#
ID:426861 發表于 2021-12-29 08:48 | 只看該作者
這是C語言方面的問題,函數在調用前必須先聲明
回復

使用道具 舉報

8#
ID:486279 發表于 2021-12-29 08:57 | 只看該作者
要先聲明啊 ,程序是從上往下執行,你不先告訴編譯器有這個函數,等執行到這個函數的時候,編譯器認不出來
回復

使用道具 舉報

9#
ID:995903 發表于 2021-12-29 10:59 | 只看該作者
Hephaestus 發表于 2021-12-28 21:40
如果第7行不存在,第14行main引用到delayms的時候不知道delayms是個什么東西,自然無法編譯成匯編。

不 ...

明白了,謝謝各位大佬
回復

使用道具 舉報

10#
ID:893997 發表于 2021-12-29 15:36 | 只看該作者
C語言從main函數開始,然后讀到delayms就會從main之前去找,如果不加聲明就找不到就會報錯
回復

使用道具 舉報

11#
ID:998236 發表于 2021-12-29 16:04 | 只看該作者
c語言的規則,調用前,必須先聲明函數;或者把19行之后的內容(void delayms(uint j)    )挪到main()函數之前
回復

使用道具 舉報

12#
ID:998268 發表于 2021-12-29 17:23 | 只看該作者
函數聲明,c語言的基礎規則,沒有聲明的話就會報錯
回復

使用道具 舉報

13#
ID:998126 發表于 2021-12-30 12:13 來自觸屏版 | 只看該作者
C語言從main函數開始,如果不加聲明就找不到就會報錯
回復

使用道具 舉報

14#
ID:824490 發表于 2021-12-30 15:10 | 只看該作者
函數調用前要聲明,如同生了孩紙要起名,不然,上學后老師點名,都叫仔仔,不就亂套了?
回復

使用道具 舉報

15#
ID:999177 發表于 2022-1-2 12:36 | 只看該作者
聲明這個函數,不然無法調用
回復

使用道具 舉報

16#
ID:691185 發表于 2022-1-16 17:41 | 只看該作者
申明啊如果不申明的話編譯的時候不知道你這個延時函數是什么東西,如果你不申明的話就把延時函數寫到main函數的前面
回復

使用道具 舉報

17#
ID:104472 發表于 2022-1-16 20:33 | 只看該作者
聲明調用,要不,無法找到這個函數,不寫可以,main函數寫道最后,所有子函數,寫道他前面,就不需要聲明了。
回復

使用道具 舉報

18#
ID:207421 發表于 2022-1-16 22:55 | 只看該作者

把函數寫在main前面就無需聲明
回復

使用道具 舉報

19#
ID:280000 發表于 2022-1-17 10:48 | 只看該作者
函數聲明
回復

使用道具 舉報

20#
ID:382454 發表于 2022-1-18 11:21 | 只看該作者
void delayms(uint);    這是聲明,因為你把函數放在主函數main下面了,你把這個函數放在main上面,就可用這個聲明了。
回復

使用道具 舉報

21#
ID:453974 發表于 2022-1-18 17:30 | 只看該作者
就比如你跟人借東西一樣,拿走之前得先和人家打聲招呼吧?
回復

使用道具 舉報

22#
ID:981034 發表于 2022-1-23 08:54 | 只看該作者
你盡量將子程序放在主程序之前
回復

使用道具 舉報

23#
ID:883031 發表于 2022-1-23 10:37 | 只看該作者
delayms(900)放到main前面就不需要寫這一行了。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表