打印

picc ftoa的问题

[复制链接]
2815|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
king3306|  楼主 | 2012-12-8 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在我这边的项目是做个频率发生仪,上位机发送频率,

让上位机发送浮点点到串口 并要在1602上同步显示,浮点数我可以收到

现在我遇到的问题是:我要把接受到的浮点数在1602上显示,我不想用个位,十位分离的 办法

我想用ftoa这个函数

picc里自带有ftoa这个库函数,

我编译的时候 老是提示这个:


HI-TECH C Compiler for PIC10/12/16 MCUs (Standard Mode)  V9.80
Copyright (C) 2010 Microchip Technology Inc.
Serial number: HCPICP-11111 (PRO)
Error   [1098] C:\Program Files\HI-TECH Software\PICC\9.80\sources\ftoa.c; 7. conflicting declarations for variable "_ftoa" (G:\pic\example\1602\test.c:14)

********** Build failed! **********



貌似是说我申明的变量有冲突 ,调试了好几天和没找出原因,麻烦大家帮我看看,这个项目老板催的急啊,谢谢大家了



这个是我的程序,

**********************主函数**********************

#include <pic.h>
#include <stdio.h>
#include "1602.h"
#define uchar unsigned char
#define uint unsigned int
uchar *buff;
void main()
{

int state;
float ff=12.345f;
init_1602();
while(1)
{
  buff=ftoa(ff,&state);
  write_1602_xystr(6,1,buff);
}

}







下面是1602的程序,1602的程序是没问题的,我已经测试过

****************1602.c***********************

#include <pic.h>
#include "1602.h"
typedef unsigned char uchar ;
typedef unsigned int uint   ;
/***********************************************************************
*名称:void init_1602();
*功能:1602液晶初始化
*入口参数:无
*出口参数:无
*说明:
***********************************************************************/
void init_1602()
{
TRISC=0xf8;
TRISD=0;
write_1602_com(0x38);
write_1602_com(0x06);
write_1602_com(0x0c);
write_1602_com(0x01);

}



/***********************************************************************
*名称:void write_1602_dat(uchar dat)
*功能:1602液晶写数据
*入口参数:写入1602的数据:dat
*出口参数:无
*说明:
***********************************************************************/
void write_1602_dat(uchar dat)
{
while(check_1602_busy());
RS=1;
RW=0;
PORTD=dat;
EN=0;
EN=1;
EN=0;
}



/***********************************************************************
*名称:void write_1602_com(uchar com)
*功能:1602写指令的函数
*入口参数:需要发送的数据指令:com
*出口参数:无
*说明:
***********************************************************************/
void write_1602_com(uchar com)
{
while(check_1602_busy());
RS=0;
RW=0;
PORTD=com;
EN=0;
EN=1;
EN=0;

}



/***********************************************************************
*名称:void write_1602_xydat(uchar x,uchar y,uchar dat)
*功能:在1602的第X行,Y列写入数据dat
*入口参数:行数x(1-2),列数y(0-15),写入的数据dat
*出口参数:无
*说明:
***********************************************************************/
void write_1602_xydat(uchar x,uchar y,uchar dat)
{

if((y&0x01)==1)
write_1602_com(0x80+x);
if((y&0x02)==2)
write_1602_com(0xc0+x);
write_1602_dat(dat);
}



/***********************************************************************
*名称:void write_1602_xystr(uchar x,uchar y,uchar *str)
*功能:在1602的第X行,Y列写入字符串
*入口参数:行数x(1-2),列数y(0-15),写入的数据指针
*出口参数:无
*说明:
***********************************************************************/
void write_1602_xystr(uchar x,uchar y,uchar *str)
{
if((y&0x01)==1)
write_1602_com(0x80+x);
if((y&0x02)==2)
write_1602_com(0xc0+x);
while(*str!='\0')
{
  write_1602_dat(*str);
  str++;

}
}



/***********************************************************************
*名称:bit check_1602_busy()
*功能:检测忙函数
*入口参数:无
*出口参数:忙标志
*说明:在向1602中写数据或者指令时要检测忙标志
***********************************************************************/
bit check_1602_busy()
{
   static  bit result;
TRISD7=1;
EN=0;
RW=1;
RS=0;
EN=1;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
result=RD7;
EN=0;
TRISD7=0;
return result;
}





******************************1602.h*********************

#ifndef _1602_H
#define _1602_H
#include <pic.h>
typedef unsigned char uchar ;
typedef unsigned int uint   ;
#define  EN  RC2
#define  RW  RC1
#define  RS  RC0
extern  void init_1602();
extern  void write_1602_dat(uchar dat);
extern void write_1602_com(uchar com);
extern void write_1602_xydat(uchar x,uchar y,uchar dat);
extern void write_1602_xystr(uchar x,uchar y,uchar *str);
extern bit check_1602_busy();
#endif



1602.rar (33.28 KB)




沙发
king3306|  楼主 | 2012-12-10 21:44 | 只看该作者
哎 都没人

使用特权

评论回复
板凳
vincent325| | 2012-12-14 10:51 | 只看该作者
我试了一下,需要包含<stdlib.h><stdio.h>这个2个头文件才可以编译成功。

使用特权

评论回复
地板
yewuyi| | 2012-12-14 12:17 | 只看该作者
自己查清楚到底要包含哪些库函数头文件才能编译。

使用特权

评论回复
5
king3306|  楼主 | 2012-12-23 15:10 | 只看该作者
vincent325 发表于 2012-12-14 10:51
我试了一下,需要包含这个2个头文件才可以编译成功。

包含了还是一样  后来解决了 stdlib屏蔽一个预定义就好了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

38

帖子

2

粉丝