找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1684|回复: 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);不写这一行编译就会出错



回复

使用道具 举报

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 来自手机 | 显示全部楼层
程序加载的顺序问题
回复

使用道具 举报

ID:908826 发表于 2021-12-29 08:09 | 显示全部楼层
函数声明,main函数之前要保证你main函数里面要调用的函数存在,你也可以不生命,只要把那个子函数的定义写在main函数前面即可。
回复

使用道具 举报

ID:232791 发表于 2021-12-29 08:43 | 显示全部楼层
你不写delayms,main怎么知道delayms(900)。可以吧下面的void delayms(uint j) 放到main前面。
回复

使用道具 举报

ID:426861 发表于 2021-12-29 08:48 | 显示全部楼层
这是C语言方面的问题,函数在调用前必须先声明
回复

使用道具 举报

ID:486279 发表于 2021-12-29 08:57 | 显示全部楼层
要先声明啊 ,程序是从上往下执行,你不先告诉编译器有这个函数,等执行到这个函数的时候,编译器认不出来
回复

使用道具 举报

ID:995903 发表于 2021-12-29 10:59 | 显示全部楼层
Hephaestus 发表于 2021-12-28 21:40
如果第7行不存在,第14行main引用到delayms的时候不知道delayms是个什么东西,自然无法编译成汇编。

不 ...

明白了,谢谢各位大佬
回复

使用道具 举报

ID:893997 发表于 2021-12-29 15:36 | 显示全部楼层
C语言从main函数开始,然后读到delayms就会从main之前去找,如果不加声明就找不到就会报错
回复

使用道具 举报

ID:998236 发表于 2021-12-29 16:04 | 显示全部楼层
c语言的规则,调用前,必须先声明函数;或者把19行之后的内容(void delayms(uint j)    )挪到main()函数之前
回复

使用道具 举报

ID:998268 发表于 2021-12-29 17:23 | 显示全部楼层
函数声明,c语言的基础规则,没有声明的话就会报错
回复

使用道具 举报

ID:998126 发表于 2021-12-30 12:13 来自手机 | 显示全部楼层
C语言从main函数开始,如果不加声明就找不到就会报错
回复

使用道具 举报

ID:824490 发表于 2021-12-30 15:10 | 显示全部楼层
函数调用前要声明,如同生了孩纸要起名,不然,上学后老师点名,都叫仔仔,不就乱套了?
回复

使用道具 举报

ID:999177 发表于 2022-1-2 12:36 | 显示全部楼层
声明这个函数,不然无法调用
回复

使用道具 举报

ID:691185 发表于 2022-1-16 17:41 | 显示全部楼层
申明啊如果不申明的话编译的时候不知道你这个延时函数是什么东西,如果你不申明的话就把延时函数写到main函数的前面
回复

使用道具 举报

ID:104472 发表于 2022-1-16 20:33 | 显示全部楼层
声明调用,要不,无法找到这个函数,不写可以,main函数写道最后,所有子函数,写道他前面,就不需要声明了。
回复

使用道具 举报

ID:207421 发表于 2022-1-16 22:55 | 显示全部楼层

把函数写在main前面就无需声明
回复

使用道具 举报

ID:280000 发表于 2022-1-17 10:48 | 显示全部楼层
函数声明
回复

使用道具 举报

ID:382454 发表于 2022-1-18 11:21 | 显示全部楼层
void delayms(uint);    这是声明,因为你把函数放在主函数main下面了,你把这个函数放在main上面,就可用这个声明了。
回复

使用道具 举报

ID:453974 发表于 2022-1-18 17:30 | 显示全部楼层
就比如你跟人借东西一样,拿走之前得先和人家打声招呼吧?
回复

使用道具 举报

ID:981034 发表于 2022-1-23 08:54 | 显示全部楼层
你尽量将子程序放在主程序之前
回复

使用道具 举报

ID:883031 发表于 2022-1-23 10:37 | 显示全部楼层
delayms(900)放到main前面就不需要写这一行了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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