找回密码
 立即注册

QQ登录

只需一步,快速开始

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

各位大佬,小弟看了4,5天实在是不知道该怎么改这个单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:680170 发表于 2020-4-13 21:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
15黑币
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  _INTTOSTR
    MODULE:  main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  _READ_DATA
    MODULE:  main.obj (MAIN)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?_READ_DATA?BYTE
    MODULE:  main.obj (MAIN)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ?_READ_DATA?BYTE
    MODULE:  main.obj (MAIN)
    ADDRESS: 0D84H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _READ_DATA
    MODULE:  main.obj (MAIN)
    ADDRESS: 0DAFH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _INTTOSTR
    MODULE:  main.obj (MAIN)
    ADDRESS: 0DC4H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _INTTOSTR
    MODULE:  main.obj (MAIN)
    ADDRESS: 0DF0H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _INTTOSTR
    MODULE:  main.obj (MAIN)
    ADDRESS: 0E1CH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  _INTTOSTR
    MODULE:  main.obj (MAIN)
    ADDRESS: 0E48H




#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "18b20.h"
#include "1602.h"
#include "delay.h"
#include "i2c.h"
   
unsigned char dis0[17];      //打印数组初始化
unsigned long time_20ms=0;     //定时器计数
unsigned char sendata[22]={0};     //串口发送数组
unsigned char tempdata[4]={0};     //临时变量数组
unsigned char Read_Data(int *SuDu,int *Send_temperature,int *Send_Volt,int *Send_Acurrent);


unsigned char ReadTempFlag=0;//定义读时间标志
int temp1;      //读取温度初始值
float temperature;    //实际温度值
float Volt=0.0;     //检测电压
float Acurrent=0.0;      //检测电流
unsigned int PluNum;   //脉冲计数
unsigned char ReadSuDu=0;  //读取速度标志
int SuDu;       //速度值
int Send_temperature ;    //发送上位机的温度*10
int Send_Volt;        // 发送上位机的电压*10
int Send_Acurrent;       // 发送上位机的电流*100
void Init_Timer0(void);  //函数声明
void uartSendStr(unsigned char *s,unsigned char length);
void UART_Init(void);
void uartSendByte(unsigned char dat);
void IntToStr(int value, unsigned char *buf);    //int型转字符串



void main (void)
{     
Init_Timer0();        //定时器0初始化
UART_Init();
EX0=1;         //外部中断0开
IT0=1;         //边沿触发
    EA=1;          //全局中断开  
LCD_Init();           //初始化液晶
DelayMs(20);          //延时有助于稳定
LCD_Clear();
DelayMs(200);
uartSendStr("reday ok!!",10);
while (1)         //主循环
{
  Volt=(float)ReadADC(1)*5.0/255*5;  //计算出电压 *5表示分压值 八位ad转换
  DelayMs(2);          //延时有助于稳定
  Acurrent=(float)ReadADC(0)*5.0/255;  //计算出电流
  if(Acurrent>2.6)    //如果电流转换后的电压值超过2.62
  {Acurrent=(Acurrent-2.6)*2/0.185;}  //电流模块 电压转换计算  
  else
  {Acurrent=0;}
  Send_temperature=temperature *10;
  Send_Volt=Volt *10;
  Send_Acurrent=Acurrent *100;

    {
   sprintf(dis0,"S:%3dr/m T:%4.1fC",SuDu,temperature);//打印电压电流值
   LCD_Write_String(0,0,dis0);//显示第二行
   sprintf(dis0,"V:%3.1fv A:%3.2fA ",Volt*76,Acurrent*2);//打印电压电流值
   LCD_Write_String(0,1,dis0);//显示第二行

            Read_Data(&SuDu,&Send_temperature,&Send_Volt,&Send_Acurrent);
   sendata[0] = 0xFE;
   IntToStr(SuDu, tempdata);//   速度数据封包函数
   sendata[1]= tempdata[0];
   sendata[2]= tempdata[1];
   sendata[3]= tempdata[2];
   sendata[4]= tempdata[3];
   sendata[5] = 0x0A;
   IntToStr(Send_temperature, tempdata);//   温度数据封包函数
   sendata[6]= tempdata[0];
   sendata[7]= tempdata[1];
   sendata[8]= tempdata[2];
   sendata[9]= tempdata[3];
   sendata[10] = 0x0A;
     IntToStr(Send_Volt, tempdata);//   电压数据封包函数
   sendata[11] = tempdata[0];
   sendata[12] = tempdata[1];
   sendata[13] = tempdata[2];
   sendata[14] = tempdata[3];
   sendata[15] = 0x0A;
   IntToStr(Send_Acurrent, tempdata);//   电流数据封包函数
   sendata[16] = tempdata[0];
   sendata[17] = tempdata[1];
   sendata[18] = tempdata[2];
   sendata[20]=  tempdata[3];
   sendata[21] = 0x0D;
   

   if(sendata[1]==0x30)    //对速度高位是否为零进行判断
   {
     sendata[1]=' ';
   }
   if(sendata[6]==0x30)    //对温度高位是否为零进行判断
   {
     sendata[6]=' ';
   }
   if(sendata[11]==0x30)       //对电压高位是否为零进行判断
   {        
     sendata[11]=' ';
   }
   if(sendata[16]==0x30)    //对电流高位是否为零进行判断
   {
     sendata[16]=' ';
   }
   uartSendStr(sendata,22);

  }
  if(ReadTempFlag==1)  //读取温度标志
  {
   ReadTempFlag=0;
   temp1=ReadTemperature(); //读取温度
   temperature=(float)temp1*0.0625;   //温度值转换
  }
  if(ReadSuDu==1)     //处理速度
  {
   ReadSuDu=0;
   SuDu=(float)PluNum*15;  //1个脉冲1圈   5s一次
   PluNum=0;       //周期脉冲清空
  }
  
  DelayMs(40);          //延时有助于稳定
}
}
/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
PluNum++;   //外部中断清空计数
}
void Init_Timer0(void)
{
TMOD |= 0x01;   //使用方式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响      
TH0=(65536-20000)/256;    //重新赋值 20ms
TL0=(65536-20000)%256;
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}
void Timer0_isr(void) interrupt 1
{
TH0=(65536-20000)/256;    //重新赋值 20ms
TL0=(65536-20000)%256;

time_20ms++;
   if(time_20ms%200==0)    //定时处理速度
  {
  ReadSuDu=1; //读标志位置1
  }
if(time_20ms%10==0)   //读取温度
{
  ReadTempFlag=1; //读标志位置1
}
}

void UART_Init(void)
{
    SCON  = 0x50;          // SCON: 模式 1, 8-bit UART, 使能接收  
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重装
    TH1   = 0xFD;               // TH1:  重装值 9600 波特率 晶振 11.0592MHz
TL1 = TH1;  
    TR1   = 1;                  // TR1:  timer 1 打开                        
    EA    = 1;                  //打开总中断
    ES    = 1;                  //打开串口中断
}
void uartSendByte(unsigned char dat)
{
unsigned char time_out;
time_out=0x00;
SBUF = dat;     //将数据放入SBUF中
while((!TI)&&(time_out<100))  //检测是否发送出去
{time_out++;DelayUs2x(10);} //未发送出去 进行短暂延时
TI = 0;      //清除ti标志
}
void uartSendStr(unsigned char *s,unsigned char length)
{
unsigned char NUM;
NUM=0x00;
while(NUM<length) //发送长度对比
{
  uartSendByte(*s);  //放松单字节数据
  s++;    //指针++
  NUM++;    //下一个++
    }
}
void UART_SER (void) interrupt 4  //串行中断服务程序
{
if(RI)                        //判断是接收中断产生
{
  RI=0;                      //标志位清零
}
if(TI)  //如果是发送标志位,清零
TI=0;
}

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

使用道具 举报

沙发
ID:235200 发表于 2020-4-14 00:12 | 只看该作者
要修改别人的程序,先要把程序的思路理清楚,然后进行仿真调试,不是拷贝编译没错就不知道如何进行了
回复

使用道具 举报

板凳
ID:680170 发表于 2020-4-14 09:07 | 只看该作者
csmyldl 发表于 2020-4-14 00:12
要修改别人的程序,先要把程序的思路理清楚,然后进行仿真调试,不是拷贝编译没错就不知道如何进行了

他总说,我读数据的时候,有read_data函数,和 inttostr函数没有定义,可是我定义了啊,还是不对啊,还求各位大神帮帮忙
回复

使用道具 举报

地板
ID:277550 发表于 2020-4-14 09:15 | 只看该作者
看好几个提示,都是缺少函数体的,所以应该知道如何处理了吧
回复

使用道具 举报

5#
ID:680170 发表于 2020-4-14 09:29 | 只看该作者
devcang 发表于 2020-4-14 09:15
看好几个提示,都是缺少函数体的,所以应该知道如何处理了吧

多谢多谢&#128076;我试试,可是我看一个人的教程他好像并没有对这两个函数进行函数体的编写啊
回复

使用道具 举报

6#
ID:584814 发表于 2020-4-26 12:26 | 只看该作者
unsigned char Read_Data(int *SuDu,int *Send_temperature,int *Send_Volt,int *Send_Acurrent);
这句日单片机看不懂的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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