温度进度曲线

2019-07-18 09:35发布

做一个波形图,横轴是时间,比如一个小时,纵轴是温度,比如一直都是70度,然后有一根竖着的细线,随着时间的推移从左到右,显示当前的状态,这个LV可以做到吧?

自己弄了好久没弄出来,求大神赐教~感激不尽··········
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
summer204
1楼-- · 2019-07-18 10:54
波形图弄出来了   就是不知道为啥-20度显示的是0度,然后进度条不知道咋弄呀
summer204
2楼-- · 2019-07-18 11:12
进度怎么搞呀,有木有专家哦
★遥★臻★
3楼-- · 2019-07-18 13:48
曲线显示方式的设置
进度条首先确定总的进度比如总的显示时间,根据所用的时间可确定进度
没法显示负的温度值可能是由于你的波形图表相关的属性设置的不对
玛丽她
4楼-- · 2019-07-18 15:12
★遥★臻★ 发表于 2013-5-31 16:59
曲线显示方式的设置
进度条首先确定总的进度比如总的显示时间,根据所用的时间可确定进度
没法显示负的温度 ...

帮忙改一下这程序吧,怎么错误越改越多
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y1 0x80
#define comm 0
#define dat  1
bit flag=0;
sbit rs=P2^0;//H=data;L="command"
sbit rw=P2^1;//H=read;L=write
sbit e=P2^2;//input enable
sbit PSB=P2^3; //H=关口;L=串口
sbit rst=P2^5;  //reset signal 低电平有效
sbit busy=P2^4; //lcd busy bit
sbit DQ=P3^3; //18b20数据线引脚
uchar temper[2];//存放温度的数组
void wr_lcd(uchar dat_comm,uchar content);
void delay(uint us);
//void chk_busy(void);
//void set_dot(uchar x,uchar y);
void init_lcd(void)
{
   rst=1;
   PSB=1;
   wr_lcd(comm,0x30);/**** ***30基本指令动作********/
   wr_lcd(comm,0x31);/**** ***清屏,地址指针指向00H********/
   wr_lcd(comm,0x06);/**** ***光标的移动方向********/
   wr_lcd(comm,0x0c);/**** ***开显示,关游标********/
}
void wr_lcd(uchar dat_comm,uchar content)
{
  chk_busy();
  if(dat_comm)
  {
   rs=1;//data
rw=0;//write
  }
  else
{
   rs=0;//command
   rw=0;//write
  }
  P0=content;//output dator comm
  e=1;
  e=0;
}
/**** ***************************读数据*******************/
read_lcd()
{
uchar content;
chk_busy();
delay(3);
P0=0xff;
delay(3);
rs=1;//data
rw=1;//read
e=1;
content=P0;//位置可能不对头影响结果
delay(3);
return(content);
}

void chk_busy(void)
{
   P0=0xff;
   rs=0;
   rw=1;
   e=1;
   while(busy==1);
   e=0;
}

void delay(uint us)//delay time
     {
   while(us--);
  }
delay1(uint ms)
  {
   uint i,j;
   wr_lcd(comm,0x30);
   //wr_lcd(comm,www);
   for(j=0;j<4;j++)
     for(i=0;i<16;i++);
  // wr_lcd(dat,chk[j*16+i]);
  }
void set_dot(uchar x,uchar y)//连续打点成功
{
  uchar x_byt;uchar x_bit;
  uchar y_byt;uchar y_bit;
  uchar tmph,tmpl; //定义两个临时变量存放
  x_byt=x/16;
  x_bit=x%16;
  y_byt=y/32;
  y_bit=y%32;
  wr_lcd(comm,0x34);
  wr_lcd(comm,0x80+y_bit);
  wr_lcd(comm,0x80+y_byt+8*y_byt);
  read_lcd();
  
  tmph=read_lcd();
  tmpl=read_lcd();
  wr_lcd(comm,0x80+y_bit);
  wr_lcd(comm,0x80+y_byt+8*y_byt);
  if(x_bit<8)
  {
     wr_lcd(dat,tmph|(0x01<<(7-x_bit)));
  wr_lcd(dat,tmpl);
  }
   else
   {
     wr_lcd(dat,tmpl);
     wr_lcd(dat,tmpl|(0x01<<(15-x_bit)));
   
    }
   wr_lcd(comm,0x36);
}
void set_dot(uchar x,uchar y)//连续打点成功
{
  uchar x_byt;uchar x_bit;
  uchar y_byt;uchar y_bit;
  uchar tmph,tmpl; //定义两个临时变量存放
  x_byt=x/16;
  x_bit=x%16;
  y_byt=y/32;
  y_bit=y%32;
  wr_lcd(comm,0x34);
  wr_lcd(comm,0x80+y_bit);
  wr_lcd(comm,0x80+y_byt+8*y_byt);
  read_lcd();
  
  tmph=read_lcd();
  tmpl=read_lcd();
  wr_lcd(comm,0x80+y_bit);
  wr_lcd(comm,0x80+y_byt+8*y_byt);
  if(x_bit<8)
  {
     wr_lcd(dat,tmph&(~0x01<<(7-x_bit)));
  wr_lcd(dat,tmpl);
  }
   else
   {
     wr_lcd(dat,tmpl);
     wr_lcd(dat,tmpl&(~0x01<<(15-x_bit)));
   
    }
   wr_lcd(comm,0x36);
}
/**** ***************************清除整个gdram中的数据*******************/
void BMP_clear(void)
{
  uchar i,k;
  unsigned char L[1]={0};
  wr_lcd(comm,0x34);// 8bit扩充指令集,即使是36H也要写两次
  wr_lcd(comm,0x34);// 绘图on,基本指令集里面36H不能开绘图
  for(i=0;i<32;i++) //32行
  {
    for(k=0;k<16;k++) //16列
    {
    wr_lcd(comm,0x80|i);//行位置,垂直坐标Y
       wr_lcd(comm,0x80|k); //列位置,水平坐标X
   // wr_lcd(comm,0x30);
     wr_lcd(dat,L[0]);
   wr_lcd(dat,L[0]);
  }
  
  }
wr_lcd(comm,0x34);//关绘图
//wr_lcd(comm,0x30);
}
/**** ***************************延时函数*******************/
void delay2(uint us)
{
while(us--);
}
void reset(void)//复位
{
  uchar x=0;
  DQ=1;
  delay2(8);//稍做延时
  DQ=1;//  拉高总线
  delay2(14);
  x=DQ;
  delay2(20);
}
/**** ***************************从ds18b20读一字节*******************/
uchar readbyte(uchar date)//读一字节
{
   uchar i=0;
   uchar date=0;
   for(i=8;i>0;i--)
   {
    DQ=0;
  date>>=1;
  DQ=1;
  if(DQ)
  {
   date|=0x80;
   delay2(4);
  }
   }
    return(date);
}
/**** ***************************从ds18b20读一字节*******************/
uchar readbyte(void)//读一字节
{
  uchar i=0;
  uchar date=0;
  for(i=8;i>0;i--)
  {
   DQ=0;
date>>=1;
DQ=1;
if(DQ)
{
  date|=0x80;
  delay2(4);
}
  }
}
/**** ***************************向ds18b20写一字节*******************/
uchar writebyte(uchar date)//写一字节
{
  uchar i=0;
  for(i=8;i>0;i--)
  {
   DQ=0;
   DQ=dat&0x01;
delay2(5);
DQ=1;
date>>=1;
  }
  delay2(4);
}
/**** ***************************cpu获取温度值*******************/
void readtenp(void)//读取温度
{
  uchar a=0;
  uchar b=0;
  reset();
  writebyte(0xcc);//跳过序列号
  writebyte(0x44);//启动温度转换
  reset();
  writebyte(0xcc);//
  writebyte(0xbe);//读9个寄存器,前2个为温度
  a=readbyte();//低温
  b=readbyte();//高位
  temper[0]=a&0x0f;
  a=a>>4;
  temper[1]=b<<4;
  temper[1]=temper[1]|a;
}

zuobiao_tu()
{
uchar i;
for(i=0;i<64;i++)//da Y zhou
{
  set_dot1(4,i);

}
for(i=0;i<128;i++)//da X zhou
{
  set_dot1(i,57);

}
for(i=115;i<120;i++)// da T xing
{
  set_dot1(i,59);

}
for(i=59;i<64;i++)//
{
  set_dot1(117,i);
}
  set_dot1(126,58);//da jian tou
  set_dot1(125,59);
  set_dot1(124,60);
  set_dot1(123,61);
  set_dot1(3,1);
  set_dot1(2,2);
  set_dot1(1,3);
  set_dot1(0,4);
  set_dot1(8,0);//da du
  set_dot1(9,0);
  set_dot1(8,1);
  set_dot1(9,1);
  for(i=11;i<14;i++)//da C xing zhuang
  {
   set_dot1(i,1);
   set_dot1(i,4);
  }
  for(i=1;i<5;i++)//
  {
   set_dot1(11,i);
  }
  for(i=94;i<128;i++)// da ying xing kuang
  {
   set_dot1(i,14);
  }
  for(i=6;i<9;i++)//
  {
   set_dot1(i,59);
   set_dot1(i,62);
  }
  for(i=1;i<5;i++)//
  {
   set_dot1(16,i);
   set_dot1(18,i);
  }
}
void main()
{
  uchar xdata huanzuobiao[61];
  uchar temp,tm1,tm2,tm3,tm4,m1,i=6,m2;
  float backbit;
  uchar dispbuf[]={0,1,2,3,4,5,6,7,8,9};
  sp=0x5f;
  TCON=0x05;
  EX0=1;
  EX1=1;
  EA=1;
  init_lcd();
  BMP_clear();
  zuobiao_tu();
  for(i=0;i<60;;i++)
   {
    huanzuobiao=20;
   }
  while(1)
   {
     readtemp();
     backbit=temper[0];
     backbit= backbit*6.25;
     temp=backbit;
     tm1=temp%10;
     temp=temp/10;
     tm2=temp%10;
     temp=temper[1];
     tm3=temp%10;
     temp=temp/10;
     tm4=temp%10;
     if(flag==0)
     {
      for(i=120;i>=6;i--)
   {
    if((i%2)==0)
    {
      set_dot2(i,57-huanzuobiao[i/2-3]);
    }
   }
      for(i=1;i<60;i++)
   {
      huanzuobiao[i-1]=huanzuobiao;
   
   }
       huanzuobiao[60]=tm4&10+tm3;

    for(i=126;i>=6;i--)
    {
      if((i%2)==0)
      {
        
         set_dot1(i,57-huanzuobiao[i/2-3]);
      }
   
    }
   wr_lcd(comm,0x30);
   wr_lcd(comm,0x86);
   wr_lcd(dat,dispbuf[tm4]);
   wr_lcd(dat,dispbuf[tm3]);
   wr_lcd(dat,0x2e);
   wr_lcd(dat,dispbuf[tm2]);
   delay1(2500);
   wr_lcd(comm,0x01);
           }
     else
     {
    wr_lcd(dat,dispbuf[tm4]);
    wr_lcd(dat,dispbuf[tm3]);
    wr_lcd(dat,0x2e);
    wr_lcd(dat,dispbuf[tm2]);
    wr_lcd(dat,dispbuf[tm1]);
     }
   
   }
}

一周热门 更多>