找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2720|回复: 4
收起左侧

为什么定义了一个结构体过后1602上面就有一个乱码

[复制链接]
ID:187588 发表于 2017-4-10 19:02 | 显示全部楼层 |阅读模式
26.8后面的乱码和字符都是定义了一个结构体过后才有的 ,之前都没有。
#include <reg52.h>
#include<stdlib.h>
#include<intrins.h>

extern bit Start18B20();
extern bit Get18B20Temp(int *temp);
extern void InitLcd1602();
extern void LcdShowStr(unsigned char *str);
extern void LcdSetCursor(unsigned char addr);
extern void LcdWriteDat(unsigned char dat);
extern void LcdWriteCmd(unsigned char del);
extern void  keyscan();
extern unsigned char key,flag1;
unsigned char a[7];
/**************************************************************就是这个结构体*****/
struct        _pid{
float SV;//用户设定温度
float PV; //测量温度
float KP; //比例常数
float T;  //PID计算周期--采样周期
float TI;        //积分常数
float TD;         //微分常数               
float EK;  //本次偏差
float EK_1;//上次偏差
float SEK; //历史偏差之和       
float IOUT;//积分输出
float POUT; //比例输出
float DOUT;//微分输出       
float OUT0; //0值输出
float OUT;        //pid输出       
unsigned int  C10ms;//判断是否满足PID计算时间       
unsigned int  pwmcycle;//pwm周期       
}PID;

void main()
{       
  unsigned char i,e=0;
  unsigned char IntToString(unsigned char *str, int dat);
  unsigned char m;
  unsigned char code table[]={'0','1','2','3','4','5','6','7','8','9', '.','-',':',' ','=','.'};
  bit res;
  int temp;        //读取到的当前温度值
  int intT, decT;  //温度值的整数和小数部分
  unsigned char len;
  unsigned char str[5];
  unsigned char stt[16] = {"T1:"};
  unsigned char sty[16] = {"T2:"};
       
  EA = 1;            //开总中断
  Start18B20();      //启动DS18B20
  InitLcd1602();     //初始化液晶
  LcdWriteCmd(0x0C); //关闭光标闪烁

/*实时温度*/
  while(1)
   {             
       /*显示实时温度标识"T1:"*/
    LcdSetCursor(0x00);               
    m = 0;
    while(stt[m] != '\0')
     {                        
       LcdWriteDat(stt[m]);
       m++;
     }
/*显示设定温度标识"T2:"*/
        LcdSetCursor(0x40);               
    m = 0;
    while(sty[m] != '\0')
     {                        
       LcdWriteDat(sty[m]);
       m++;
     }         
     res = Get18B20Temp(&temp);  //读取当前温度
     if (res)                    //读取成功时,刷新当前温度显示
      {          
        intT = temp >> 4;             //分离出温度值整数部分
        decT = temp & 0xF;            //分离出温度值小数部分
        len = IntToString(str, intT); //整数部分转换为字符串
        str[len++] = '.';             //添加小数点
        decT = (decT*10) / 16;        //二进制的小数部分转换为1位十进制位
        str[len++] = decT + '0';      //十进制小数位再转换为ASCII字符
        LcdShowStr(str);        //显示到液晶屏上
        Start18B20();               
/*设定温度*/                      
           keyscan();                                  
           if(flag1==1)  
            {
         if(key<11)      //10以下是数字显示部分  
          {
               LcdSetCursor(0x43+e++) ;
               LcdWriteDat(table[key]);   
               a=table[key];   
               i++;
              }
             else if(key==11)
              {       
               LcdWriteCmd(0x01) ;         //删除设定值
                   e=0;
               for(i=0;i<7;i++)
               {         
                    a='0';
               }
              }
             flag1=0;        //键盘检测标志置0进行下一次检测        
             }
                                                       
  }       

}
}   

/* 整型数转换为字符串,str-字符串指针,dat-待转换数,返回值-字符串长度 */
unsigned char IntToString(unsigned char *str, int dat)
{
  signed char i = 0;
  unsigned char len = 0;
  unsigned char buf[6];
  if (dat < 0)  //如果为负数,首先取绝对值,并在指针上添加负号
   {
    dat = -dat;
    *str++ = '-';
    len++;
   }
    do
        {          //先转换为低位在前的十进制数组
     buf[i++] = dat % 10;
     dat /= 10;
    } while (dat > 0);
    len += i;     //i最后的值就是有效字符的个数
    while (i-- > 0)   //将数组值转换为ASCII码反向拷贝到接收指针上
    {
     *str++ = buf + '0';
    }
    *str = '\0';  //添加字符串结束符
    return len;   //返回字符串长度
}

回复

使用道具 举报

ID:187588 发表于 2017-4-10 19:09 | 显示全部楼层
本帖最后由 a512520a 于 2017-4-10 19:13 编辑

回复

使用道具 举报

ID:187588 发表于 2017-4-10 19:10 | 显示全部楼层
就这个
回复

使用道具 举报

ID:187588 发表于 2017-4-10 19:12 | 显示全部楼层
就这个
回复

使用道具 举报

ID:187588 发表于 2017-4-10 19:13 | 显示全部楼层
本帖最后由 a512520a 于 2017-4-10 19:15 编辑

IMG20170410185219.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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