找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1292|回复: 1
收起左侧

光敏电阻嵌套超声波

[复制链接]
ID:471928 发表于 2019-5-27 22:20 | 显示全部楼层 |阅读模式
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned int  time=0;
unsigned int  timer=0;
unsigned char posit;
unsigned long S;
bit   flag =0;

sbit RX=P1^1;
sbit TX=P1^0;

sbit DOUT=P3^7;          //输出
sbit CLK =P3^6;          //时钟
sbit DIN =P3^4;          //输入
sbit CS  =P3^5;          //片选
sbit led=P2^6;
uint temp;

void delayms(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i < 120; i++);

}

}

void delay(uint i)
{
        while(i--);       
}

void Conut()
        {
         time=TH0*256+TL0;
         TH0=0;
         TL0=0;
          
         S= (long)(time*0.17);     //算出来是CM
       
         
         }
       
void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  {
    flag=1;                                                         //中断溢出标志
  }

void  zd3()  interrupt 3                  //T1中断用来扫描数码管和计800MS启动模块
  {

         TH1=0xf8;
         TL1=0x30;
         
         
         timer++;
         if(timer>=100)
         {
          timer=0;
          TX=1;
                                                 //800MS  启动一次模块
          
         
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          
          TX=0;

         }
  }

void SPI_Start(void)
{
        CLK = 0;
        CS  = 1;
        DIN = 1;
        CLK = 1;
        CS  = 0;               
}
void SPI_Write(uchar dat)
{
        uchar i;
        CLK = 0;
        for(i=0; i<8; i++)
        {
                DIN = dat >> 7;          //放置最高位
                dat <<= 1;
                CLK = 0;                        //上升沿放置数据

                CLK = 1;

        }
}
uint SPI_Read(void)
{
        uint i, dat=0;
        CLK = 0;
        for(i=0; i<12; i++)                //接收12位数据
        {
                dat <<= 1;

                CLK = 1;
                CLK = 0;

                dat |= DOUT;

        }
        return dat;       
}
uint Read_AD_Data(uchar cmd)
{
        uchar i;
        uint AD_Value;
        CLK = 0;
        CS  = 0;
        SPI_Write(cmd);
        for(i=6; i>0; i--);         //延时等待转换结果
        CLK = 1;          //发送一个时钟周期,清除BUSY
        _nop_();
        _nop_();
        CLK = 0;
        _nop_();
        _nop_();
        AD_Value=SPI_Read();
        CS = 1;
        return AD_Value;       
}
void datapros()
{
        static uchar i;
       
        SPI_Write(2);

        Read_AD_Data(1);
        if(i==2)
        {       
                i=0;
                temp = Read_AD_Data(0xA4);       
       
        }
        i++;
               
}



void main()
{
        SPI_Start();
    TMOD=0x11;                  
        TH0=0;
        TL0=0;         
        TH1=0xf8;                   //2MS定时
        TL1=0x30;
        ET0=1;             //允许T0中断
        ET1=1;                           //允许T1中断
        TR1=1;                           //开启定时器
        EA=1;                           //开启总中断

while(1)
{

  datapros();
  if(temp>3600)
  {
     delayms(10);
         while(!RX);                //当RX为零时等待
         TR0=1;                            //开启计数
         while(RX);                        //当RX为1计数并等待
         TR0=0;
         Conut();
         if((S>=4000)||flag==1)
         {         
          flag=0;
          led=1;
         }
         else
         {
          led=0;
          delay(60000);
        }
        }
        else
        {
                led=1;
        }         
        }          
}

       









回复

使用道具 举报

ID:1 发表于 2019-5-28 05:05 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表