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

📄 dianji.c

📁 基于S51单片机的C源码 对学习S51单片机的同学很有帮助 包含了实验室的和多模块程序
💻 C
📖 第 1 页 / 共 3 页
字号:
    }
while(i--);
return(0);        //4次检测失败返回无传感器
}
/*--------------------------------------*/
uchar inti2(void)
{
data uchar i=3;
do{                 //连续检测4次,看是否存在温度传感器
    Inda2=0;
    delay10(50);     //发511us复位脉冲
    Inda2=1;          //等待应答脉冲
    delay10(6);
    if (!Inda2)      //存在应答脉冲返回1
         return(1);
    delay10(250);
    }
while(i--);
return(0);        //4次检测失败返回无传感器
}
/*--------------------------------------*/
uchar inti3(void)
{
data uchar i=3;
do{                 //连续检测4次,看是否存在温度传感器
    Inda3=0;
    delay10(50);     //发511us复位脉冲
    Inda3=1;          //等待应答脉冲
    delay10(6);
    if (!Inda3)      //存在应答脉冲返回1
         return(1);
    delay10(250);
    }
while(i--);
return(0);        //4次检测失败返回无传感器
}
/*--------------------------------------*/
uchar inti4(void)
{
data uchar i=3;
do{                 //连续检测4次,看是否存在温度传感器
    Inda4=0;
    delay10(50);     //发511us复位脉冲
    Inda4=1;          //等待应答脉冲
    delay10(6);
    if (!Inda4)      //存在应答脉冲返回1
         return(1);
    delay10(250);
    }
while(i--);
return(0);        //4次检测失败返回无传感器
}
/*----------第一路启动-------------------*/
uchar T_inti(void)
{
    Inda=0;
    delay10(50);     //发511us复位脉冲
    Inda=1;          //等待应答脉冲
    delay10(6);
    if (!Inda)  return(1); //存在应答脉冲返回1
    return 0;
}
/*---------------第二路启动-----------------*/
uchar T_inti1(void)
{
    Inda1=0;
    delay10(50);     //发511us复位脉冲
    Inda1=1;          //等待应答脉冲
    delay10(6);
    if (!Inda1)     return(1); //存在应答脉冲返回1
    return 0;
}
/*----------------第三路启动--------------------*/
uchar T_inti2(void)
{
    Inda2=0;
    delay10(50);     //发511us复位脉冲
    Inda2=1;           //等待应答脉冲
    delay10(6);
    if (!Inda2)     return(1); //存在应答脉冲返回1
    return 0;
}
/*-----------------第四路启动--------------------*/
uchar T_inti3(void)
{
    Inda3=0;
    delay10(50);     //发511us复位脉冲
    Inda3=1;          //等待应答脉冲
    delay10(6);
    if (!Inda3)     return(1); //存在应答脉冲返回1
    return 0;
}
/*-----------------第五路启动--------------------*/
uchar T_inti4(void)
{
    Inda4=0;
    delay10(50);     //发511us复位脉冲
    Inda4=1;          //等待应答脉冲
    delay10(6);
    if (!Inda4)     return(1); //存在应答脉冲返回1
    return 0;
}
/*-----------第一路写命令---------------*/
void  Outwrite(uchar str)
{
data uchar i;
bc=str;
for(i=0;i<8;i++){
    Inda=0;
    delay10(1);
    Inda=bbit0;
    bc>>=1;
    delay10(4);
    Inda=1;
    _nop_();
    _nop_();
    }
}
/*-----------第二路写命令--------------*/
void  Outwrite1(uchar str)
{
data uchar i;
bc=str;
for(i=0;i<8;i++){
    Inda1=0;
    delay10(1);
    Inda1=bbit0;
    bc>>=1;
    delay10(4);
    Inda1=1;
    _nop_();
    _nop_();
    }
}
/*----------------第三路写命令--------------------*/
void  Outwrite2(uchar str)
{
data uchar i;
bc=str;
for(i=0;i<8;i++){
    Inda2=0;
    delay10(1);
    Inda2=bbit0;
    bc>>=1;
    delay10(4);
    Inda2=1;
    _nop_();
    _nop_();
    }
}
/*------------------第四路写命令--------------------*/
void  Outwrite3(uchar str)
{
data uchar i;
bc=str;
for(i=0;i<8;i++){
    Inda3=0;
    delay10(1);
    Inda3=bbit0;
    bc>>=1;
    delay10(4);
    Inda3=1;
    _nop_();
    _nop_();
    }
}
/*------------------第五路写命令--------------------*/
void  Outwrite4(uchar str)
{
data uchar i;
bc=str;
for(i=0;i<8;i++){
    Inda4=0;
    delay10(1);
    Inda4=bbit0;
    bc>>=1;
    delay10(4);
    Inda4=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++){
        bc>>=1;
        Inda=1;
        _nop_();
        _nop_();
        Inda=0;
        _nop_();
        _nop_();
        Inda=1;
        delay10(1);
        bbit7=Inda;
        }
        tt.tp[1-i]=bc;
    //temp[i]=ab;
    }
}
/*----------------第二路输出---------------------*/
void Outread1(void)  /*读失败时 str=[0xff,0xff]*/
{
data uchar i,j;
//data uchar f1,f2;
for (i=0;i<2;i++){
    for(j=0;j<8;j++){
        bc>>=1;
        Inda1=1;
        _nop_();
        _nop_();
        Inda1=0;
        _nop_();
        _nop_();
        Inda1=1;
        delay10(1);
        bbit7=Inda1;
        }
       tt.tp[3-i]=bc;
  }
}
/*----------------第三路输出------------------*/
void Outread2(void)  /*读失败时 str=[0xff,0xff]*/
{
data uchar i,j;
//data uchar f1,f2;
for (i=0;i<2;i++){
    for(j=0;j<8;j++){
        bc>>=1;
        Inda2=1;
        _nop_();
        _nop_();
        Inda2=0;
        _nop_();
        _nop_();
        Inda2=1;
        delay10(1);
        bbit7=Inda2;
        }
       tt.tp[5-i]=bc;
  }
}
/*----------------第四路输出------------------*/
void Outread3(void)  /*读失败时 str=[0xff,0xff]*/
{
data uchar i,j;
//data uchar f1,f2;
for (i=0;i<2;i++){
    for(j=0;j<8;j++){
        bc>>=1;
        Inda3=1;
        _nop_();
        _nop_();
        Inda3=0;
        _nop_();
        _nop_();
        Inda3=1;
        delay10(1);
        bbit7=Inda3;
        }
       tt.tp[7-i]=bc;
  }
}
/*----------------第五路输出------------------*/
void Outread4(void)  /*读失败时 str=[0xff,0xff]*/
{
data uchar i,j;
//data uchar f1,f2;
for (i=0;i<2;i++){
    for(j=0;j<8;j++){
        bc>>=1;
        Inda4=1;
        _nop_();
        _nop_();
        Inda4=0;
        _nop_();
        _nop_();
        Inda4=1;
        delay10(1);
        bbit7=Inda4;
        }
       tt.tp[9-i]=bc;
  }
}
/*--------------第一路ROM操作-------------------*/
void Wroutds()
{
  f_exit0=inti();
  if(f_exit0)
  {
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite(0xcc); //省去与ROM的有关操作
    Outwrite(0x44); //启动温度传感器
    EA=1;
  }
}
/*---------------第二路ROM操作----------------*/
void Wroutds1()
{
  f_exit1=inti1();
  if(f_exit1){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite1(0xcc); //省去与ROM的有关操作
    Outwrite1(0x44); //启动温度传感器
    EA=1;
    }
}
/*-----------------第三路ROM操作-----------------*/
void Wroutds2()
{
  f_exit2=inti2();
  if(f_exit2){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite2(0xcc); //省去与ROM的有关操作
    Outwrite2(0x44); //启动温度传感器
    EA=1;
    }
}
/*-----------------第四路ROM操作-----------------*/
void Wroutds3()
{
  f_exit3=inti3();
  if(f_exit3){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite3(0xcc); //省去与ROM的有关操作
    Outwrite3(0x44); //启动温度传感器
    EA=1;
    }
}
/*-----------------第五路ROM操作-----------------*/
void Wroutds4()
{
  f_exit4=inti4();
  if(f_exit4){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite4(0xcc); //省去与ROM的有关操作
    Outwrite4(0x44); //启动温度传感器
    EA=1;
    }
}
/*------------第一路输出命令--------------*/
void Rdoutds(void)
{
f_exit0=inti();
if(f_exit0){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite(0xcc);
    Outwrite(0xbe);
    Outread();
    EA=1;
    }
}
/*---------------第二路输出命令-----------------*/
void Rdoutds1(void)
{
f_exit1=inti1();
if(f_exit1){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite1(0xcc);
    Outwrite1(0xbe);
    Outread1();
    EA=1;
    }
}
/*----------------第三路输出命令------------------*/
void Rdoutds2(void)
{
f_exit2=inti2();
if(f_exit2){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite2(0xcc);
    Outwrite2(0xbe);
    Outread2();
    EA=1;
    }
}
/*------------第四路输出命令---------------*/
void Rdoutds3(void)
{
f_exit3=inti3();
if(f_exit3){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite3(0xcc);
    Outwrite3(0xbe);
    Outread3();
    EA=1;
    }
}
/*------------第五路输出命令---------------*/
void Rdoutds4(void)
{
f_exit4=inti4();
if(f_exit4){
    delay10(250);
    delay10(250);
    EA=0;
    Outwrite4(0xcc);
    Outwrite4(0xbe);
    Outread4();
    EA=1;
    }
}
/*-----------------------------------------------------------------*/
void Get_int_temp0(void)
{
switch(T_ptr){
    case 0:
        f_exit0=T_inti();       /*初始化*/
        if(f_exit0){ T_err=0;T_ptr=3; second1=0;   Wroutds(); }  //省去ROM操作,启动温度转换
            else T_ptr++;
        break;
    case 1:
        f_exit0=T_inti();      /*初始化*/
        if(f_exit0){ T_err=0;T_ptr=3; second1=0;  Wroutds(); }  //省去ROM操作,启动温度转换
            else T_ptr++;
        break;
    case 2:
        f_exit0=T_inti();       /*初始化*/
        if(f_exit0){ T_err=0;T_ptr=3;  second1=0;  Wroutds(); }  //省去ROM操作,启动温度转换
            else{ T_err=1; T_ptr=0;}//三次启动如没有响应  T_err=1;
        break;
    case 3:
        if(second1>2){//两秒
             T_ptr++;
             Rdoutds();
             if((0x7f|tt.tp[0])==0xff)flag_sign1=1;
             }
        break;
    case 4:
        T_ptr=0xff;
        break;
    default:
        T_ptr=0;
        break;
    }
}
/*-----------------------------------------------------------------*/
void Get_int_temp1(void)
{
switch(T_ptr1){
    case 0:
        f_exit1=T_inti1();       /*初始化*/
        if(f_exit1){ T_err1=0;T_ptr1=3; second2=0;   Wroutds1(); }  //省去ROM操作,启动温度转换
        else T_ptr1++;
        break;
    case 1:
        f_exit1=T_inti1();       /*初始化*/
        if(f_exit1){ T_err1=0;T_ptr1=3; second2=0;  Wroutds1(); }  //省去ROM操作,启动温度转换
        else T_ptr1++;
        break;
    case 2:

⌨️ 快捷键说明

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