pic,ftoa转化asic码遇到的问题

2019-03-25 19:23发布

现在我这边的项目是做个频率发生仪,上位机发送频率,
让上位机发送浮点点到串口 并要在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 FilesHI-TECH SoftwarePICC9.80sourcesftoa.c; 7. conflicting declarations for variable "_ftoa" (G:picexample1602 est.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!='')
{
  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
此帖出自小平头技术问答
0条回答

一周热门 更多>