找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1682|回复: 0
打印 上一主题 下一主题
收起左侧

分享 123864曲线显示温度

[复制链接]
跳转到指定楼层
楼主
ID:291224 发表于 2018-3-13 14:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uint unsigned int
#define uchar unsigned char       

sbit rs=P3^5;      /*êy¾Y\Ö¸áî Ñ¡Ôñ*/
sbit rw=P3^6;      /*¶á\D′ Ñ¡Ôñ*/
sbit e=P3^4;      /*¶á\D′ê1Äü*/
sbit ds=P2^2;          //18B20DÅoŽÅ
sbit PSB = P3^7;
sbit WE = P2^6;
sbit DU = P2^7;

uint temp;
float ftemp;
uchar code table[]="0123456789.¶è";

void writecom(uchar com);
void writedat(uchar dat);
void initinal(void);

//12MHZ¾§Õñ Ñóê±50΢Ãë
void delay50us(uint t)   
{
   uchar j;
for(;t>0;t--)
   for(j=19;j>0;j--);
}
void dsreset()          // ds18b203õê¼»ˉoˉêy
{
     uint i;
         ds=0;         //à-μí×üÏß¿a꼸′λ
         i=103;
         while(i>0)i--;
         ds=1;//êí·Å×üÏß
         i=4;
         while(i>0)i--;
   // ê¡è¥áËμè′yD¾Æ¬·μ»Øó|′eμÄ1y3ì ¡£¡£¡£¡£¡£¡£
}
bit readbit(void)          //ds18b20¶áè¡ò»¸ö¶t½øÖÆ룬2ÎÕÕê±Dòí¼
{
  uint i;
  bit dat;
  ds=0;i++;
  ds=1;i++,i++;
  dat=ds;
  i=8;while(i>0)i--;
  return(dat);
}
uchar tempread(void)  //ds18b20¶áè¡ò»¸ö×Ö½úμÄêy¾Y
{
  uchar i,j,dat;
  dat=0;
  for(i=0;i<8;i++)
  {
         j=readbit();
         dat=(j<<7)|(dat>>1);  //
  }
  return(dat);
}
void tempwrite(uchar dat)        //ds18b20D′èë×Ö½úêy¾Y
{
uint i;uchar j;
bit testb;
for(j=1;j<=8;j++)
{
   testb=dat&0x01;
   dat=dat>>1;
   if(testb==1)           //        D′1
   {
     ds=0;                     //         à-μí×üÏßòÔ¿aê¼ò»¸öD′ê±Dò
         i++;i++;
         ds=1;                         //         êí·Å×üÏß
         i=8;while(i>0)i--;
   }
   else                                          //   D′0
   {
            ds=0;
         i=8;while(i>0)i--;
         ds=1;
         i++;i++;
   }
}
}
void tempchang(void)        //ζè×a»»
{
dsreset();
delay50us(20);
tempwrite(0xcc);          //
tempwrite(0x44);         //
}
uint gettemp()         //        »ñè¡Î¶è
{
  uchar a,b;
  dsreset();
  delay50us(2000);            //Ñóê±100oáÃëÏû3y¿Ö2à85¶è
  tempwrite(0xcc);          //
  tempwrite(0xbe);         //
  a=tempread();                 //
  b=tempread();                   //
  temp=b;
  temp<<=8;       //////
  temp=temp|a;
  ftemp=temp*0.0625;      //
  temp=ftemp*10+0.5;                 //
  ftemp=ftemp+0.05;                         //
  return temp;                //   
}               

/*------------------¼ì2éÃ|λ-----------------------------*/
void chkbusy()
{
    rs=0;
    rw=1;
    e=1;
    P0=0xff ;
    while((P0&0x80)==0x80);
    e=0;
}
/*************¶áêy¾Y************/
uchar read()
{
uchar shuju;
chkbusy();
P0=0xff;
rs=1;                        
rw=1;   
e=0;
delay50us(1);                    
e=1;
shuju=P0;
// delay(5);               
e=0;
return(shuju);   
}
//Ôö¼ó»-μã×ó3ìDò
void DrawPoint(uchar X,uchar Y,uchar Color)
{
    uchar Row,Tier,Tier_bit ;
    uchar ReadOldH,ReadOldL ;
    //writecom(0x34);        //à©Õ1Ö¸áî¿a
    writecom(0x36);                //à©Õ1Ö¸áî¼ó»æí¼Ä£¿é
    Tier=X>>4 ;
    Tier_bit=X&0x0f ;
    if(Y<32)
    {
        Row=Y ;
    }
    else
    {
        Row=Y-32 ;
        Tier+=8 ;
    }
    writecom(Row+0x80);
    writecom(Tier+0x80);
    read();
    ReadOldH=read();
    ReadOldL=read();
    writecom(Row+0x80);
    writecom(Tier+0x80);
    if(Tier_bit<8)
    {
        switch(Color)
        {
            case 0 :
            ReadOldH&=(~(0x01<<(7-Tier_bit)));
            break ;
            case 1 :
            ReadOldH|=(0x01<<(7-Tier_bit));
            break ;
            case 2 :
            ReadOldH^=(0x01<<(7-Tier_bit));
            break ;
            default :
            break ;
        }
        writedat(ReadOldH);
        writedat(ReadOldL);
    }
    else
    {
        switch(Color)
        {
            case 0 :
            ReadOldL&=(~(0x01<<(15-Tier_bit)));
            break ;
            case 1 :
            ReadOldL|=(0x01<<(15-Tier_bit));
            break ;
            case 2 :
            ReadOldL^=(0x01<<(15-Tier_bit));
            break ;
            default :
            break ;
        }
        writedat(ReadOldH);
        writedat(ReadOldL);
    }
    writecom(0x30);
}
//D′Ãüáî
void writecom(uchar com)
{
  chkbusy();
  rw=0;
  rs=0;
  delay50us(1);
  P0=com;
  e=1;
  delay50us(10);
  e=0;
  delay50us(10);
}

//D′êy¾Y
void writedat(uchar dat)
{  
  chkbusy();
  rw=0;
  rs=1;
  delay50us(1);
  P0=dat;
  e=1;
  delay50us(10);
  e=0;
  delay50us(10);
}

//3õê¼»ˉ
void initinal(void)
{
  delay50us(2);
  writecom(0x30);
  delay50us(4);
  writecom(0x30);
  delay50us(4);
  writecom(0x0e);
  delay50us(4);
  writecom(0x01);
  delay50us(240);
  writecom(0x06);
  delay50us(10);
}
void clrscreen()
{
    writecom(0x01);
    delay50us(10);
}
//------------------ÇåÕû¸öGDRAM¿Õ¼ä----------------------------
void clrgdram()
{
    unsigned char x,y ;
    for(y=0;y<64;y++)
    for(x=0;x<16;x++)
    {
        writecom(0x34);
        writecom(y+0x80);
        //DDμØÖ·
        writecom(x+0x80);
        //áDμØÖ·
        writecom(0x30);
        writedat(0x00);
        writedat(0x00);
    }
}
//------------------------------------------------------------
  //Ö÷oˉêy
void main()
{         
    uchar i,j,e,colour=1;
//        uint a ;
          rw=0;
    WE = DU = 0;
        initinal();
    clrgdram();
  //  delay50us(2);
        clrscreen();
//        writecom(0x34);
       
                
    while(1)
        {
          uint a,b,c,d;
           DrawPoint(18,6,colour);
           DrawPoint(18,22,colour);
           DrawPoint(18,38,colour);
           DrawPoint(18,54,colour);
                for(j=17;j<128;j++)
    {            
          
                DrawPoint(17,j-17,colour);
                DrawPoint(j,63,colour);
            writecom(0x80);
            writedat(table[6]);
            writedat(table[7]);
                writecom(0x90);
            writedat(table[5]);
                writedat(table[1]);
                writecom(0x88);
            writedat(table[3]);
                writedat(table[5]);
                writecom(0x98);
            writedat(table[1]);
                writedat(table[9]);       
    }

        for(i=17;i<128;i++)
    {            
           tempchang();
       a=gettemp();
           delay50us(1000);
           e=73-a/10;       
       DrawPoint(i,e,colour);
          
             b=a/100;
          c=a%100/10;
          d=a%100%10;
          writecom(0x83);
          writedat(table[b]);
          delay50us(1);
          writedat(table[c]);
          delay50us(1);
          writedat(table[10]);
          delay50us(1);
          writedat(table[d]);
          delay50us(1);
          writedat(table[11]);
          writedat(table[12]);
          delay50us(4);
          writecom(0x83);             
    }
    clrgdram();
/*        writecom(0x36);
    delay50us(5);
        clrgdram();
        clrscreen();          
      tempchang();
          a=gettemp();
                                            */
        }

}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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