标题:
为什么定义了一个结构体过后1602上面就有一个乱码
[打印本页]
作者:
a512520a
时间:
2017-4-10 19:02
标题:
为什么定义了一个结构体过后1602上面就有一个乱码
[attach]56365[/attach]2
6.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; //返回字符串长度
}
作者:
a512520a
时间:
2017-4-10 19:09
本帖最后由 a512520a 于 2017-4-10 19:13 编辑
[attach]56366[/attach]
作者:
a512520a
时间:
2017-4-10 19:10
[attach]56367[/attach]就这个
作者:
a512520a
时间:
2017-4-10 19:12
就这个
作者:
a512520a
时间:
2017-4-10 19:13
本帖最后由 a512520a 于 2017-4-10 19:15 编辑
IMG20170410185219.jpg
(3.8 MB, 下载次数: 86)
下载附件
2017-4-10 19:15 上传
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1