LabVIEWwilliam hill官网
直播中

summer204

12年用户 17经验值
擅长:测量仪表
私信 关注
[问答]

温度进度曲线

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

自己弄了好久没弄出来,求大神赐教~感激不尽··········

回帖(4)

summer204

2013-5-31 15:27:28
波形图弄出来了   就是不知道为啥-20度显示的是0度,然后进度条不知道咋弄呀
举报

summer204

2013-5-31 16:02:47
进度怎么搞呀,有木有专家哦
举报

★遥★臻★

2013-5-31 16:59:32
曲线显示方式的设置
进度条首先确定总的进度比如总的显示时间,根据所用的时间可确定进度
没法显示负的温度值可能是由于你的波形图表相关的属性设置的不对
举报

刘义莉

2013-6-2 18:14:50
引用: ★遥★臻★ 发表于 2013-5-31 16:59
曲线显示方式的设置
进度条首先确定总的进度比如总的显示时间,根据所用的时间可确定进度
没法显示负的温度 ...

帮忙改一下这程序吧,怎么错误越改越多
#include
#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;
***it rs=P2^0;//H=data;L="command"
***it rw=P2^1;//H=read;L=write
***it e=P2^2;//input enable
***it PSB=P2^3; //H=关口;L=串口
***it rst=P2^5;  //reset signal 低电平有效
***it busy=P2^4; //lcd busy bit
***it 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]);
     }
   
   }
}
举报

更多回帖

×
20
完善资料,
赚取积分