Keil 中为什么函数不能经过多级调用??? 在主函数调用A函数A函数再调用B,编译时去出现无法连接B??
#include<reg51.h>#include<intrins.h>//包含__nop();:函数#defineucharunsignedchar//宏的定义变量类型...
#include<reg51.h>
#include <intrins.h> //包含__nop();:函数
#define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char
#define uint unsigned int //宏的定义变量类型 uint 代替 unsigned int
unsigned char code tab [5][32]= {
{0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02},/*"我",0*/
}; // 阴码,高位在前,顺向
sbit X_data=P2^0; //595列数据串行输入脚
sbit X_clk=P2^1; //595列数据脉冲输入脚
sbit X_store=P2^2; //595列数据输出锁存
void delay(unsigned int us); //
void display(uchar i); //
// void senddata(unsigned char dat);
void main()
{
uchar i, j;
while(1)
{
for(i=0;i<5;i++) // 五个字循环显示
{
for(j=0;j<200;j++) //每个字显示的时间
{
display(i);
}
}
}
}
//*****************
void display(uchar i_i)
{
unsigned char i_;
uchar k;
uchar m,n;
for(k=0;k<16;k++) //
{
m=tab[i_i][2*k]; //
n=tab[i_i][2*k+1]; //
X_store=0; // 让锁存时钟变低电平
// 因为是高位在前所以要先送第二个数再送第一个数
for(i_=0;i_<8;i_++)
{ //为什么不能替换??? //
X_clk=0; //当本函数独立写在下方, //
if(n&0x80) //并被display函数调用时 //
X_data=1; //显示不能成功调用, //
else // 为什么??? //
X_data=0; // //
X_clk=1; // //
n=n<<1; //移位使分离为*******************//
}
for(i_=0;i_<8;i_++) //送第一个数
{
X_clk=0; //
if(m&0x80) //
X_data=1; //
else
X_data=0; //
X_clk=1;
m=m<<1; //
}
P1=k;
delay(20); //此处一定要延时
X_store=1; //释放
delay(20); //此处一定要延时
}
}
//
/***************************************************
void sentdata(unsigned char dat)
{
for(i_=0;i_<8;i_++)
{
X_clk=0;
if(dat&0x80)
X_data=1;
else
X_data=0;
X_clk=1;
dat=dat<<1;
}
}
//*************************************/
void delay(unsigned int us)
{
while(us--);
} 展开
#include <intrins.h> //包含__nop();:函数
#define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char
#define uint unsigned int //宏的定义变量类型 uint 代替 unsigned int
unsigned char code tab [5][32]= {
{0x06,0x40,0x38,0x50,0x08,0x48,0x08,0x48,0x08,0x40,0xFF,0xFE,0x08,0x40,0x08,0x48,
0x0E,0x28,0x38,0x30,0xC8,0x20,0x08,0x50,0x09,0x92,0x08,0x0A,0x28,0x06,0x10,0x02},/*"我",0*/
}; // 阴码,高位在前,顺向
sbit X_data=P2^0; //595列数据串行输入脚
sbit X_clk=P2^1; //595列数据脉冲输入脚
sbit X_store=P2^2; //595列数据输出锁存
void delay(unsigned int us); //
void display(uchar i); //
// void senddata(unsigned char dat);
void main()
{
uchar i, j;
while(1)
{
for(i=0;i<5;i++) // 五个字循环显示
{
for(j=0;j<200;j++) //每个字显示的时间
{
display(i);
}
}
}
}
//*****************
void display(uchar i_i)
{
unsigned char i_;
uchar k;
uchar m,n;
for(k=0;k<16;k++) //
{
m=tab[i_i][2*k]; //
n=tab[i_i][2*k+1]; //
X_store=0; // 让锁存时钟变低电平
// 因为是高位在前所以要先送第二个数再送第一个数
for(i_=0;i_<8;i_++)
{ //为什么不能替换??? //
X_clk=0; //当本函数独立写在下方, //
if(n&0x80) //并被display函数调用时 //
X_data=1; //显示不能成功调用, //
else // 为什么??? //
X_data=0; // //
X_clk=1; // //
n=n<<1; //移位使分离为*******************//
}
for(i_=0;i_<8;i_++) //送第一个数
{
X_clk=0; //
if(m&0x80) //
X_data=1; //
else
X_data=0; //
X_clk=1;
m=m<<1; //
}
P1=k;
delay(20); //此处一定要延时
X_store=1; //释放
delay(20); //此处一定要延时
}
}
//
/***************************************************
void sentdata(unsigned char dat)
{
for(i_=0;i_<8;i_++)
{
X_clk=0;
if(dat&0x80)
X_data=1;
else
X_data=0;
X_clk=1;
dat=dat<<1;
}
}
//*************************************/
void delay(unsigned int us)
{
while(us--);
} 展开
3个回答
展开全部
函数原型与函数声明不符。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
肯定是可以的,多检查下程序。
追问
就是不可以啊,所以我才问,而且它的是警告,提示说不能连接上?
我表示郁闷
而且我把后面要调用的子函数复制到要调用的地方就能用了
追答
你在display(uchar i_i)子程序里先声明一下 delay()函数试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询