温度进度曲线

2019-07-18 09:35发布

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

自己弄了好久没弄出来,求大神赐教~感激不尽··········
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
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]);
     }
   
   }
}

一周热门 更多>