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

專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

AT89S52與DS18B20數(shù)字溫度傳感器測(cè)試結(jié)束

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年10月11日   【字體:

/*********************************************************************** 
* 采用四位共陰極數(shù)碼管琒R42056K,P1口接數(shù)碼管段碼。P0.0接第一位
* P0.1接第二位,p0.2接第三位,p0.3接第四位。
* 單片機(jī)AR89S52,晶振7.3728M
*  DS18B20接P2.0。 
*
***********************************************************************/  
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
/*********************************************************************** 
* DS18B20 數(shù)據(jù)口 DQ
* 共陰極數(shù)碼管
*共陰極數(shù)碼管帶小數(shù)點(diǎn)
 ***********************************************************************/  
//#define DQ RC1
//#define DQ_HIGH() TRISC1=1
//#define DQ_LOW() TRISC1=0;DQ=0
//__CONFIG(0x3B31);
sbit DQ=P2^0;
//const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
 //                       0x07,0x7f,0x6f};
unsigned char code table[]={//共陰極0~f數(shù)碼管編碼
0x3f,0x06,0x5b,0x4f,     //0~3
0x66,0x6d,0x7d,0x07,    //4~7
0x7f,0x6f,0x77,0x7c,    //8~b
0x39,0x5e,0x79,0x71    //c~f
};
//const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
 //                       0x87,0xff,0xef};
const uchar table1[]={
0xbf,0x86,0xdb,0xcf,//0-3
0xe6,0xed,0xfd,0x87,//4-7
0xff,0xef//8-9
};
uint temper;//溫度值緩存
uchar a1,a2,a3,a4;//數(shù)碼管每個(gè)位上顯示的數(shù)字
uchar time=0;//延時(shí)緩存
uchar TH;   //判斷負(fù)值
void delay(uint x);
void delayus(uint,uchar);
void init();//初始化
void disp(uchar num1,uchar num2,uchar num3,uchar num4);//正值顯示
void disp1(uchar num1,uchar num2,uchar num3);//負(fù)值顯示
void write_byte(uchar date);
void delayms(uchar i);  //誤差 -0.651041666667us
uchar read_byte();
void get_tem();//獲取溫度
void delay20us();
void delay30us();
void delay45us();
void delay70us();
void delay750us();
void delay500us();
void InitTimer0(void);
void delay20us(void)   //誤差 -0.46875us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=3;a>0;a--);
}
void delay30us(void)   //誤差 -0.703125us
{
    unsigned char a,b;
    for(b=3;b>0;b--)
        for(a=1;a>0;a--);
}
void delay45us(void)   //誤差 -1.0546875us
{
    unsigned char a;
    for(a=12;a>0;a--);
}
void delay70us(void)   //誤差 -0.013020833333us
{
    unsigned char a;
    for(a=20;a>0;a--);
}
void delay750us(void)   //誤差 -1.302083333333us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=227;a>0;a--);
}
void delay500us(void)   //誤差 -0.325520833333us
{
    unsigned char a;
    for(a=152;a>0;a--);
}
void InitTimer0()
{
    TMOD = 0x01;
    TH0 = 0x88;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
}
void main()
{
 init();
    InitTimer0();
 while(1)
 {
  uchar num;
  for(num=100;num>0;num--)
  {
    if(TH<0X7F)
      disp(a1,a2,a3,a4);
      else
   disp1(a1,a2,a3);
  }
 } 
}
/***********************************************************************
*  復(fù)位18B20
 ***********************************************************************/
void reset()
{
 uchar st=1;
// DQ_HIGH();
    DQ=1;
// NOP();NOP();
   _nop_();
 while(st)
 {
 // DQ_LOW();
 DQ=0;
 // delayus(70,30);
 delay750us();
 // DQ_HIGH();
 DQ=1;
 // delayus(4,4);
 delay70us();
  if(DQ==1)
   st=1;
  else
   st=0;
  //delayus(50,10);
  delay500us();
 }
}
/***********************************************************************
* 寫(xiě)字節(jié)
 ***********************************************************************/
void write_byte(uchar date)
{
 uchar i,temp;
// DQ_HIGH();
DQ=1;
// NOP();NOP();
_nop_();
 for(i=8;i>0;i--)
 {
  temp=date&0x01;//01010101
 // DQ_LOW();
  DQ=0;
 // delayus(0,0);
 delay20us();
  if(temp==1)
  // DQ_HIGH();
   DQ=1;
 // delayus(2,2);
  delay45us();
 // DQ_HIGH();
 DQ=1;
  date=date>>1;//00101010
 }
}
/***********************************************************************
* 讀字節(jié)
 ***********************************************************************/
uchar read_byte()
{
 uchar i,date;
 static bit j;
 for(i=8;i>0;i--)
 {
  date=date>>1;
 // DQ_HIGH();
 DQ=1;
 // NOP();NOP();
 _nop_();
 // DQ_LOW();
 DQ=0;
 // NOP();NOP();NOP();NOP();NOP();NOP();
 _nop_();_nop_();
 // DQ_HIGH();
 DQ=1;
 // NOP();NOP();NOP();NOP();
 _nop_();
  j=DQ;
  if(j==1)
   date=date|0x80;//1000 0000
 // delayus(1,1);
     delay30us();
 }
 return (date);
}
/***********************************************************************
*  溫度獲取
 ***********************************************************************/
void get_tem()
{
 uchar tem1,tem2;
 float aaa;
 reset();  //復(fù)位
 write_byte(0xCC);//跳過(guò)ROM
 write_byte(0x44);//溫度轉(zhuǎn)換
    reset();
 write_byte(0xCC);
 write_byte(0xBE);
 tem1=read_byte();
 tem2=read_byte();
 TH=tem2;
    if(tem2>0x7f)
 tem2=~tem2;
 aaa=(tem2*256+tem1)*6.25;
 temper=(int)aaa;
 a1=temper/1000;
 a2=temper%1000/100;
 a3=temper%100/10;
 a4=temper%10;
}
/***********************************************************************
*  清屏
 ***********************************************************************/
void init()
{
P1=0x00;
P0=0xff;
}
/*********************************************************************** 
* 正溫度時(shí),顯示
*
 ***********************************************************************/
void disp(uchar num1,uchar num2,uchar num3,uchar num4)
{
    P1=table[num1];
    P0=0xfe;
 delayms(2);

    P1=table1[num2];
 P0=0xfd;
 delayms(2);

    P1=table[num3];
    P0=0xfb;
 delayms(2);
    P1=table[num4];
    P0=0xf7;
 delayms(2);
}
/*********************************************************************** 
* 負(fù)溫度時(shí),顯示
*
 ***********************************************************************/
void disp1(uchar num1,uchar num2,uchar num3)
{
    P1=0x40;//顯示負(fù)號(hào)
    P0=0xfe;
 delayms(2);

    P1=table[num1];
 P0=0xfd;
 delayms(2);

    P1=table1[num2];
    P0=0xfb;
 delayms(2);
    P1=table[num3];
    P0=0xf7;
 delayms(2);
}
/*********************************************************************** 
* 毫秒級(jí)的延時(shí)
* 晶振7.3728M
 ***********************************************************************/  
void delayms(uchar i)   //誤差 -0.651041666667us
{
    uchar a,b;
    for(;i>0;i--)
       for(b=47;b>0;b--)
          for(a=5;a>0;a--);
}
/*********************************************************************** 
* 定時(shí)器0中斷服務(wù)程序, 設(shè)置20毫秒計(jì)時(shí)器。每1秒鐘采集一次溫度值
*
 ***********************************************************************/
void Timer0Interrupt(void) interrupt 1
{
    TH0 = 0x88;
    TL0 = 0x00;
    //add your code here!
 time++;
 if(time==20)
 {
  time=0;
     get_tem();
 }
}
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 在线观看视频一区二区三区 | 黑人巨大精品欧美一区二区一视频 | 妞干网视频 | 91资源在线 | 岛国在线免费观看 | 国产色婷婷精品综合在线播放 | 精品免费国产一区二区三区 | 不卡av电影在线播放 | 日韩精品久久 | 超级乱淫av片免费播放 | 国产在线精品一区二区 | 免费在线成人网 | 欧美日韩黄色一级片 | 中文字幕精品一区二区三区精品 | 成人妇女免费播放久久久 | 亚洲精品久久久久久久久久久 | 伊人在线| 女女百合av大片一区二区三区九县 | 亚洲精品日韩一区二区电影 | 久久a久久| 国产一级视频在线观看 | 久久久久一区二区三区四区 | 精品国产一二三区 | 国产成人在线看 | 久久国| 亚洲综合久久久 | 精品国产久 | 五月婷婷丁香 | 午夜视频网站 | 国产va| 一区中文字幕 | 日韩欧美国产一区二区三区 | 国产精品av久久久久久毛片 | 在线观看免费毛片 | 国产精品亚洲一区 | 免费在线观看一区二区三区 | 国产精品久久片 | 亚洲91视频 | 亚洲视频免费播放 | 亚洲精品久久久久中文字幕二区 | 日本一区二区高清视频 |