久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1853|回復: 0
打印 上一主題 下一主題
收起左側

12864曲線顯示18B20溫度

[復制鏈接]
跳轉到指定樓層
樓主
ID:350005 發表于 2018-6-22 18:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

sbit rs=P3^5;      /*數據\指令 選擇*/
sbit rw=P3^6;      /*讀\寫 選擇*/
sbit e=P3^4;      /*讀\寫使能*/
sbit ds=P2^2;          //18B20信號腳
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()          // ds18b20初始化函數
{
     uint i;
         ds=0;         //拉低總線開始復位
         i=103;
         while(i>0)i--;
         ds=1;//釋放總線
         i=4;
         while(i>0)i--;
   // 省去了等待芯片返回應答的過程 。。。。。。
}
bit readbit(void)          //ds18b20讀取一個二進制位,參照時序圖
{
  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讀取一個字節的數據
{
  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)        //ds18b20寫入字節數據
{
uint i;uchar j;
bit testb;
for(j=1;j<=8;j++)
{
   testb=dat&0x01;
   dat=dat>>1;
   if(testb==1)           //        寫1
   {
     ds=0;                     //         拉低總線以開始一個寫時序
         i++;i++;
         ds=1;                         //         釋放總線
         i=8;while(i>0)i--;
   }
   else                                          //   寫0
   {
            ds=0;
         i=8;while(i>0)i--;
         ds=1;
         i++;i++;
   }
}
}
void tempchang(void)        //溫度轉換
{
dsreset();
delay50us(20);
tempwrite(0xcc);          //
tempwrite(0x44);         //
}
uint gettemp()         //        獲取溫度
{
  uchar a,b;
  dsreset();
  delay50us(2000);            //延時100毫秒消除恐怖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;                //   
}               

/*------------------檢查忙位-----------------------------*/
void chkbusy()
{
    rs=0;
    rw=1;
    e=1;
    P0=0xff ;
    while((P0&0x80)==0x80);
    e=0;
}
/*************讀數據************/
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);   
}
//增加畫點子程序
void DrawPoint(uchar X,uchar Y,uchar Color)
{
    uchar Row,Tier,Tier_bit ;
    uchar ReadOldH,ReadOldL ;
    //writecom(0x34);        //擴展指令開
    writecom(0x36);                //擴展指令加繪圖模塊
    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);
}
//寫命令
void writecom(uchar com)
{
  chkbusy();
  rw=0;
  rs=0;
  delay50us(1);
  P0=com;
  e=1;
  delay50us(10);
  e=0;
  delay50us(10);
}

//寫數據
void writedat(uchar dat)
{  
  chkbusy();
  rw=0;
  rs=1;
  delay50us(1);
  P0=dat;
  e=1;
  delay50us(10);
  e=0;
  delay50us(10);
}

//初始化
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);
        //行地址
        writecom(x+0x80);
        //列地址
        writecom(0x30);
        writedat(0x00);
        writedat(0x00);
    }
}
//------------------------------------------------------------
  //主函數
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 视频国产一区 | 欧美日韩1区2区 | 日韩国产欧美一区 | 国产一级片精品 | 欧美极品视频在线观看 | 国产亚洲精品综合一区 | 亚洲精品视频三区 | 羞羞视频免费在线观看 | 亚洲精品99 | 少妇特黄a一区二区三区88av | 天堂在线91 | 天天操夜夜爽 | 国产免费一区二区三区最新6 | 中文字幕一级 | 色片在线观看 | 婷婷一级片 | 久久国产精品免费视频 | 青青草综合 | 国产色婷婷久久99精品91 | 久久不射电影网 | 日本一二区视频 | 成人在线精品视频 | 国产精品18久久久久久久 | 色婷婷综合网 | 日本欧美大片 | 国产日韩一区二区三免费高清 | 午夜激情视频在线 | 日韩精品久久久久 | 国产成人网 | 欧美1区 | 日日噜噜噜夜夜爽爽狠狠视频, | 免费在线观看一区二区 | 天天操网| 精品国产三级 | 日韩小视频在线 | 亚洲成人久久久 | 日韩欧美中文 | av影音资源 | 一区二区三区国产 | 成人av资源在线 | 国产一级电影在线 |