找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11062|回复: 8
打印 上一主题 下一主题
收起左侧

程序错误G:\KESHE.C(31): warning C206: 'lcd1602_init': missing function-prototype

[复制链接]
跳转到指定楼层
楼主
ID:276150 发表于 2018-1-17 10:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P2^0; //1602:0写指令,1写数据
sbit lcdwr=P2^1; //1602读写信号
sbit lcden=P2^2; //1602片选信号
sbit TLC549_CS = P3^1;  //TLC549片选,低电平有效
sbit TLC549_DO = P3^5;  //TLC549数字量输出
sbit TLC549_CLK = P3^0;  //TLC549片外独立时钟
sbit sta7=P0^7;
unsigned char data1_convert(unsigned char dat_temp)
{
unsigned char data1;  
data1=(unsigned char)(((float)dat_temp/255)*5); //换算为电压值的个位值
data1=data1+48; //转换为对应的ASCII码,因为0对应ASCII码的48,以此类推
return data1;   
}
unsigned char data0_convert(unsigned char dat_temp)
{  
unsigned char data0,data1;  data1=(unsigned char)(((float)dat_temp/255)*5);     //换算为电压值的个位值
data0=(unsigned char)((((float)dat_temp/255)*5-data1)*10);//换算为为电压值的小--  
                                                        //--数点后第一位的那个?
data0=data0+48;            
return data0;             //转换为对应的ASCII码
}
/**********************主函数*********************/
void main()  
{  
unsigned char dat;   //用于接收从8591中读到的数据
lcd1602_init();
lcd_write_cmd(0x80);  
lcd_write_data('C');  
lcd_write_data('H');  
lcd_write_data('1');  
lcd_write_data(':');  
lcd_write_cmd(0x85);
lcd_write_data('.');
lcd_write_cmd(0x87);
lcd_write_data('V');  //上面的这些都是为了在1602中显示"CH1: : V"   
while(1)  
{   
iic_start();   
iic_write(0x90);     //对8591进行写操作
iic_ack();   
iic_write(0x01);  //设置为4路独立信号输入,并关闭通道自动加1,只用通道1  
iic_ack();
iic_start();      //重新开始,为读数据作准备
iic_ack();   
iic_write(0x91);  //对8591进行读操作
iic_ack();   
dat=iic_read();   //这还只是一个8位的数据(需进一步转换为实际电压值)
iic_send_no_ack();   
iic_stop();
lcd_write_cmd(0x84);                 //将要显示的字符显示在此地址处
lcd_write_data(data1_convert(dat));  //显示电压的整数部分
lcd_write_cmd(0x86);                //将要显示的字符显示在此地址处
lcd_write_data(data0_convert(dat));  //显示电压的小数部分
}
}
/***********************1ms延时函数**********************/
void delayms(uint ms)
{
uint y;
while(ms--)
{
for(y=0;y<125;y++);
}
}
//******************判忙*********************
void lcd_busy_check(void)   //1602忙信号检测,忙则等待
{  
P0=0xff;   
do  
{   
lcdrs=0;   //读状态操作,为0   
lcdwr=1;      //读操作为1   
lcden=0;   
lcden=1;   //读状态,需为高电平
}   
while (sta7==1);  //如果为1则忙,等待...直到为0   
lcden=0;
}
/***********************LCD写指令 写数据**********************/
void lcd_write_comdata(unsigned char cmd) //液晶写?
{  
lcd_busy_check(); //每次操作之前都要进行忙信号检测
lcdrs=0;   //执行数据操作,为1  
lcdwr=0;   //写操作,为0  
P0=cmd;    //送数据到液晶数据端口P0,准备执行数据操?
lcden=1;   //高电平,数据送入液晶液晶数据RAM  
  //保持一会儿,使显示数据可靠地送入液晶数据RAM  
lcden=0;   //低电平,显示数据
}
void lcd_write_data(unsigned char dat) //液晶写数据函数
{  
lcd_busy_check(); //每次操作之前都要进行忙信号检测
lcdrs=1;   //执行数据操作,为1  
lcdwr=0;   //写操作,为0  
P0=dat;    //送数据到液晶数据端口P0,准备执行数据操作

lcden=1;   //高电平,数据送入液晶液晶数据RAM  
  //保持一会儿,使显示数据可靠地送入液晶数据RAM  
lcden=0;   //低电平,显示数据
}
/***********************LCD初始化*********************/
void  lcd1602_init()
{
P0=0x00;
lcden=0;
lcd_write_cmd(0,0x38); //显示模式5*7
lcd_write_cmd(0,0x0c);
lcd_write_cmd(0,0x06); //设置指针+1 屏幕不移动
lcd_write_cmd(0,0x01); //清屏
lcd_write_cmd(0,0x80); //初始化显示地址
}

评分

参与人数 1黑币 +60 收起 理由
admin + 60

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:276150 发表于 2018-1-17 10:05 | 只看该作者
G:\KESHE.C(31): warning C206: 'lcd1602_init': missing function-prototype
G:\KESHE.C(32): warning C206: 'lcd_write_comdata': missing function-prototype
G:\KESHE.C(32): error C267: 'lcd_write_comdata': requires ANSI-style prototype
回复

使用道具 举报

板凳
ID:276150 发表于 2018-1-17 16:53 | 只看该作者
已经解决了
回复

使用道具 举报

地板
ID:1 发表于 2018-1-17 20:33 | 只看该作者

问题出在哪里 能分享一下吗?
回复

使用道具 举报

5#
ID:276150 发表于 2018-1-17 21:57 | 只看该作者
改正好的程序
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcdrs=P2^0; //1602:0写指令,1写数据
sbit lcdwr=P2^1; //1602读写信号
sbit lcden=P2^2; //1602片选信号
sbit TLC549_CS = P3^1;  //TLC549片选,低电平有效
sbit TLC549_DO = P3^5;  //TLC549数字量输出
sbit TLC549_CLK = P3^0;  //TLC549片外独立时钟
sbit sta7=P0^7;

unsigned char data1_convert(unsigned char dat_temp)
{
unsigned char data1;  
data1=(unsigned char)(((float)dat_temp/255)*5); //换算为电压值的个位值
data1=data1+48; //转换为对应的ASCII码,因为0对应ASCII码的48,以此类推
return data1;   
}




unsigned char data0_convert(unsigned char dat_temp)
{  
unsigned char data0,data1;  
data1=(unsigned char)(((float)dat_temp/255)*5);     //换算为电压值的个位值
data0=(unsigned char)((((float)dat_temp/255)*5-data1)*10);//换算为为电压值的小--                                                          //--数点后第一位的那个?
data0=data0+48;            
return data0;             //转换为对应的ASCII码
}





/***********************1ms延时函数**********************/
void delayms(uint ms)
{
uint y;
while(ms--)
{
for(y=0;y<125;y++);
}
}




//******************判忙*********************
void lcd_busy_check(void)   //1602忙信号检测,忙则等待
{  
P0=0xff;   
do  
{   
lcdrs=0;   //读状态操作,为0   
lcdwr=1;      //读操作为1   
lcden=0;   
lcden=1;   //读状态,需为高电平
}   
while (sta7==1);  //如果为1则忙,等待...直到为0   
lcden=0;
}


/***********************LCD写指令 写数据**********************/
void lcd_write_cmd(unsigned char cmd) //液晶写?
{  
lcd_busy_check(); //每次操作之前都要进行忙信号检测
lcdrs=0;   //执行数据操作,为1  
lcdwr=0;   //写操作,为0  
P0=cmd;    //送数据到液晶数据端口P0,准备执行数据操?
lcden=1;   //高电平,数据送入液晶液晶数据RAM  
  //保持一会儿,使显示数据可靠地送入液晶数据RAM  
lcden=0;   //低电平,显示数据
}
void lcd_write_data(unsigned char dat) //液晶写数据函数
{  
lcd_busy_check(); //每次操作之前都要进行忙信号检测
lcdrs=1;   //执行数据操作,为1  
lcdwr=0;   //写操作,为0  
P0=dat;    //送数据到液晶数据端口P0,准备执行数据操作

lcden=1;   //高电平,数据送入液晶液晶数据RAM  
  //保持一会儿,使显示数据可靠地送入液晶数据RAM  
lcden=0;   //低电平,显示数据
}


/**********************主函数*********************/
void main()  
{
unsigned char dat;   //用于接收从8591中读到的数据
lcd_init();
lcd_write_cmd(0x80);  
lcd_write_data('C');
lcd_write_cmd(0x81);
lcd_write_data('H');
lcd_write_cmd(0x82);   
lcd_write_data('1');
lcd_write_cmd(0x83);   
lcd_write_data(':');  
lcd_write_cmd(0x85);
lcd_write_data('.');
lcd_write_cmd(0x87);
lcd_write_data('V');  //上面的这些都是为了在1602中显示"CH1: : V"   
while(1)  
{   
lcd_write_cmd(0x84);                 //将要显示的字符显示在此地址处
lcd_write_data(data1_convert(dat));  //显示电压的整数部分
lcd_write_cmd(0x86);                //将要显示的字符显示在此地址处
lcd_write_data(data0_convert(dat));  //显示电压的小数部分
}
}
回复

使用道具 举报

6#
ID:276150 发表于 2018-1-17 22:03 | 只看该作者
解决方案:
1、main函数放到最后
2、删去1602 改为lcd_init
3、声明lcd_write_comdata 改为lcd_write_cmd
4、删去了main函数中所有含有iic_的语句
其他细节见楼上
回复

使用道具 举报

7#
ID:276150 发表于 2018-1-17 22:15 | 只看该作者
missing function-prototype
requires ANSI-style prototype
就是声明的函数名和主函数中调用的函数名不一致
回复

使用道具 举报

8#
ID:723577 发表于 2020-4-16 04:20 | 只看该作者
感谢,我就是因为main函数放前面了,找了一天了也没找到问题
回复

使用道具 举报

9#
ID:626275 发表于 2021-1-28 09:22 | 只看该作者
vktpas 发表于 2018-1-17 22:15
missing function-prototype
requires ANSI-style prototype
就是声明的函数名和主函数中调用的函数名不 ...

谢谢,解决了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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