关于51单片机模块化编程的函数申明问题 (//write_com(); //这里的这个函数要不要先申明呢?)
求解呀?以前学C语言的时候记得说过被调用的函数在主调函数之后要事先申明才可以,但是在keil里面编译的时候没申明它也没有出错,求解#include<reg52.h>#in...
求解呀?以前学C语言的时候记得说过被调用的函数在主调函数之后要事先申明才可以,但是在keil里面编译的时候没申明它也没有出错,求解
#include<reg52.h>
#include"lcd1602.h"
#include"delay.h"
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
void init()//初始化
{
//write_com(); //这里的这个函数要不要先申明呢?
dula=0;
wela=0;
lcden=0;
write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口
write_com(0x0c); //设置开显示,不显示光标
write_com(0x06); //写一个字符后地址指针加1
write_com(0x01); //显示清0,数据指针清0
}
void write_com(unsigned char com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(unsigned char date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
} 展开
#include<reg52.h>
#include"lcd1602.h"
#include"delay.h"
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit dula=P2^6;
sbit wela=P2^7;
void init()//初始化
{
//write_com(); //这里的这个函数要不要先申明呢?
dula=0;
wela=0;
lcden=0;
write_com(0x38); //设置16x2显示,5x7点阵,8位数据接口
write_com(0x0c); //设置开显示,不显示光标
write_com(0x06); //写一个字符后地址指针加1
write_com(0x01); //显示清0,数据指针清0
}
void write_com(unsigned char com)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(unsigned char date)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
} 展开
2个回答
展开全部
把被调用的子程序放在调用函数的上方,把所有子程序放在主程序的前面,这样就不用在前面声明了。
追问
那跟我上面那样子,只是一个子程序模块,main()主函数不在这个里面,但init()调用了write_com()这个函数,那是不是要把init()写作它的后面呢?
追答
对的,要这样写,或者在#include"delay.h"下面声明
void write_com(unsigned char com);
void init();
void write_data(unsigned char date);
注意声明也要把被调用的放在主调用的前面。这样写是让编译器先知道有这么一个程序,然后后面其他程序调用时编译器才能识别这个是“认识的”。
2012-10-16
展开全部
这里面没有main函数啊,如果main函数在最前面,那么在main函数中一调用就会报出警告了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询