欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 數字溫度計 [打印本頁]

作者: wfc    時間: 2016-11-21 17:58
標題: 數字溫度計
//程序:ex6_2_1.c
//功能:數字溫度計
#include "reg51.h"
#include "intrins.h"  //包含內部函數頭文件intrins.h
#define uchar unsigned char
#define uint unsigned int
#define out P2
sbit smg1=P3^1;               //溫度個位位選端
sbit smg2=P3^0;                  //溫度十位位選端
sbit DQ=P3^7;            //溫度采集
void delay5us(uchar n);     //精確延時n*5us子程序
void delayms(uint j);
void init_ds18b20(void); //總線初始化復位
uchar readbyte(void);    // 讀取一個字節
void writebyte(uchar);   //寫一個字節
uchar readtemp(void);   //讀取溫度
unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//共陽數碼管顯示"0-9"字型碼
void main(void)
{uchar i;
uchar temp;
temp=readtemp();         //讀取轉換的溫度
delayms(1000);
while(1)
        {
                  temp=readtemp();         //讀取轉換的溫度
        for(i=0;i<10;i++)        //連續掃描數碼管10次
         {
                 out=led[temp/10];         //顯示溫度十位
                 smg1=0;
                 smg2=1;
                 delay5us(200);        //延時1ms
                 out=0xff;
                 out=led[temp%10];        //顯示溫度個位
                 smg1=1;
                 smg2=0;
                 delay5us(200);        //延時1ms
                 out=0xff;

        }

}
}
//函數名:delay5us
//函數功能:精確延時5us子程序
//形式參數:延時時間參數n,unsigned char 類型
//返回值:無       
void delay5us(unsigned char n)
{         do
         {
         _nop_();
         _nop_();
         _nop_();
         n--;
         }
         while(n);
}

//函數名:init_ds18b20
//函數功能:         總線初始化復位
//形式參數:無
//返回值:無
void init_ds18b20(void)
{
         uchar x=0;
         DQ=1;
         delay5us(10);
         DQ =0;   
         delay5us(120);                 //低電平480-960s
         DQ =1;                   
         delay5us(16);           //等待50-100s
         x=DQ;   
         delay5us(80);
         DQ=1;

         }

//函數名:readbyte
//函數功能:         讀取一個字節
//形式參數:無
//返回值:讀取字節數據date, unsigned char 類型
uchar readbyte(void)
{
        uchar i=0;
        uchar date=0;
        for (i=8;i>0;i--)
         {
                  DQ =0;
                  delay5us(1);
                  DQ =1;            //15微秒內拉釋放總線
                  date>>=1;
                  if(DQ)
                  date|=0x80;
                  delay5us(11);        //讀完需要45us的等待
         }
        return(date);
}

//函數名:writebyte
//函數功能:         寫一個字節
//形式參數:寫字節數據dat, unsigned char 類型
//返回值:無
void writebyte(uchar dat)
{
uchar i=0;
for(i=8;i>0;i--)
         {
          DQ =0;
          DQ =dat&0x01;  //寫"1" 在15微秒內拉低
          delay5us(12);           //寫"0" 拉低60微秒等待寫完
          DQ = 1;                   //恢復高電平,至少保持1us
          dat>>=1;                //下次寫作準備,移位數據
          delay5us(5);        //延時25us
          }
}
//函數名: readtemp
//函數功能:讀取溫度
//形式參數:無
//返回值:單字節的溫度值tt, unsigned char 類型

uchar readtemp(void)
{
        uchar templ,temph,tt;
        uint t;
        init_ds18b20();
        writebyte(0xCC);         
        writebyte(0x44);        //跳過ROM匹配,跳過讀序列號的操作,可節省操作時間
        init_ds18b20();                //開始操作前需要復位                 
        writebyte(0xCC);
        writebyte(0xBE);   //讀暫存器中的溫度值
        templ=readbyte();         //分別讀取溫度的低、高字節
        temph=readbyte();
        t=temph;
        t<<=8;
        t=t|templ;
        tt=t*0.0625;         //溫度轉換
        return(tt);
}//函數名:delayms(uint ms)
//函數功能:延時ms毫秒子函數
//形式參數:ms
//返回值:無

void delayms(uint ms)//延時ms毫秒子函數
{
        uint i,j;
        for(i=0;i<ms;i++)
           {
           for(j=0;j<110;j++);//延時1毫秒
       }

}






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1