⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20.txt

📁 串口调试程序(vb)版本
💻 TXT
字号:
#pragma SMALL
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*----------------------------------------*/
/*温度值 二进制数据输出 16进制输出
+125℃ 0000011111010000 07D0H
+85℃ 0000010101010000 0550H*
+25.0625℃ 0000000110010001 0191H
+10.125℃ 0000000010100010 00A2H
+0.5℃ 0000000000001000 0008H
0℃ 0000000000000000 0000H
-0.5℃ 11111111111111000 FFF8H
-10.125℃ 1111111101011110 FF5EH
-25.0625℃ 1111111001101111 FE6FH
-55℃ 1111110010010000 FC90H*/
/*----7219----*/
sbit load=P1^2;
sbit clk=P1^3;
sbit din=P1^1;
data union{
	uchar tp[2];
	uint temp;
	}tt;
//uchar temp[2];
bit f_exit;
bit flag_sign;
sbit Inda=P0^1;
bdata uchar ab;
sbit abit0=ab^0;sbit abit1=ab^1;sbit abit2=ab^2;sbit abit3=ab^3;
sbit abit4=ab^4;sbit abit5=ab^5;sbit abit6=ab^6;sbit abit7=ab^7;
/*----------------------------------------*/
void delay10(uchar j)    /*  time=j*10+7  延时函数*/
{
uchar ch;
    while(j--)
    {
    ch++; ch++;
    }
    /*
    _nop_();
     _nop_();};
     */
}
/*---------------------------------------*/
uchar inti(void)       //检验是否存在1820,传感器自检
{
data uchar i=3;
do{                 //连续检测4次,看是否存在温度传感器
    Inda=0;
    delay10(50);     //发511us低复位脉冲
    Inda=1;          //等待应答脉冲
    delay10(6);      //发60us高电平
    if (!Inda)      //存在应答脉冲返回1
         return(1);
    delay10(250);
    }
while(i--);
return(0);        //4次检测失败返回无传感器
}
/*----------------------------------------*/
void  Outwrite(uchar str)   //写一个字节
{
data uchar i;
ab=str;
for(i=0;i<8;i++){
    Inda=0;
    delay10(1);
    Inda=abit0;
    ab>>=1;
    delay10(4);
    Inda=1;
    _nop_();
    _nop_();
    }
}
/*----------------------------------------*/
void Outread(void)  /*读失败时 str=[0xff,0xff]。读两个字节*/
{
data uchar i,j;
for (i=0;i<2;i++){
    for(j=0;j<8;j++){
        ab>>=1;
        Inda=1;
        _nop_();    //一个_nop_延时多长时间呢?
        _nop_();
        Inda=0;
        _nop_();
        _nop_();
        Inda=1;
        delay10(1);
        abit7=Inda;
        }
    tt.tp[1-i]=ab;
    //temp[i]=ab;
    }
}
/*----------------------------------------*/
void Wroutds()     //写操作
{
  f_exit=inti();
  if(f_exit)
  {
    delay10(250);
    delay10(250);
    Outwrite(0xcc); //省去与ROM的有关操作 ,
    Outwrite(0x44); //启动温度传感器A/D转换
  }
}
/*----------------------------------------*/
void Rdoutds(void)   //读操作
{
f_exit=inti();
if(f_exit){
    delay10(250);
    delay10(250);
    Outwrite(0xcc);
    Outwrite(0xbe);  //读出9字节的数据
    Outread();
    }
}
/*---------------------------------------------------------*/
void dis_7219(uchar iw,uchar ix)                  /*串性数据发送*/
{
uchar i,j,nc;

clk=0;
for(j=0;j<10;j++)nc=0;

load=0;
ab=iw;
for(i=0;i<8;i++){
	din=abit7;
	ab<<=1;

        clk=1;
	for(j=0;j<10;j++)nc=0;

        clk=0;
	}
ab=ix;
for(i=0;i<8;i++){
	din=abit7;
	ab<<=1;

        clk=1;

	for(j=0;j<10;j++)nc=0;

        clk=0;
	}

load=1;
}
/*---------------------------------------*/
void dis_set(void)
{
        data uchar i;
	dis_7219(0x0f,0x0);/*不测试*/
	dis_7219(0x0a,0x04);/*亮度选择*/
	dis_7219(0x09,0xff);/*译码选择*/
	dis_7219(0x0b,0x07);/*扫描LED的个数*/
	dis_7219(0x0c,0x01);/*启动*/
	for(i=1;i<9;i++)dis_7219(i,0x0f);
}
/*----------------------------------------*/
void dis_play(void)
{
uchar bw,sw,gw,n,m;
data long  int xx;
uint aa;
if(flag_sign)xx=~xx+1;
xx=85*tt.temp;
xx=xx/136;
aa=xx;
//qw=xx/1000;
bw=xx/100;
sw=xx/10%10;
gw=xx%10;
if(flag_sign){
    dis_7219(1,0x0a);
    flag_sign=0;
    }
else dis_7219(5,0x0f);
dis_7219(3,bw);
dis_7219(2,sw|0xf0);
dis_7219(1,gw);
for(n=0;n<100;n++){        //  延时等待温度转换完成
            for(m=0;m<10;m++)delay10(250);
            }
for(n=0;n<100;n++){        //  延时等待温度转换完成
            for(m=0;m<10;m++)delay10(250);
            } 
}
/*----------------------------------------*/
void main(void)
{
uchar n,m;
flag_sign=0;
//temp[0]=0;
//temp[1]=0;
dis_set();
//dis_7219(3,0x04);
//dis_7219(2,0x04);
//dis_7219(1,0x04);
//dis_7219(1,0x03);
for(;;){
    f_exit=inti();       /*初始化*/
    if(f_exit){
        Wroutds();   //省去ROM操作,启动温度转换
        for(n=0;n<100;n++){        //  延时等待温度转换完成
            for(m=0;m<10;m++)delay10(250);
            }
       Rdoutds();
        if((0x7f|tt.tp[0])==0xff)flag_sign=1;
        dis_play();
        //ch=9;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -