打印
[国产单片机]

51单片机超声波测距热释红外等程序下载

[复制链接]
1376|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hongbinglin|  楼主 | 2011-11-7 21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*****************************************************************************
/*  Name:  LCD12864(St7920/St7921)+超声波测距模块+STC89C52                  
/*  HC-SR04 超声波测距模块 DEMO 程序










/*  晶振:11.0592M                                                            */
/*  Designed by : Tvrostar          Date:2007/09/16


              */
/*  程序编写:新科电子
            QQ:  114872428






/*  taobao店铺:http://shop58463218.taobao.com/






  */
/*  接线:模块TRIGP1.2  ECH0 P1.1











/*      RS(CS)    接  P3.3;












      *
/*      RW(SID)   接  P3.4;











/*      E(SCLK)   接  P3.5;












/*      PSB       接  GND 串行模式











/******************************************************************************/
    #include   <AT89X51.H>

#include   <intrins.h>

//引脚定义
    sbit     RX    =  P1 ^ 1;
    sbit     TX    =  P1 ^ 2;
    sbit     CS    =  P3 ^ 3;
//片选 高电平有效 单片LCD使用时可固定高电平
    sbit     SID   =  P3 ^ 4;
//数据
    sbit     SCLK  =  P3 ^ 5;
//时钟

//Function Definition 函数声明
void Delay(int num);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
unsigned int ReadTemperature(void);
void clock_out(unsigned char dd);
unsigned char clock_in(void);
unsigned char read_clock(unsigned char ord);
void write_clock(unsigned char ord, unsigned char dd);
void Disp(void);
void id_case1_key(void);
void id_case2_key(void);
void Set_time(unsigned char sel,bit sel_1);
void Timer0_Init(void);
void Init_1302(void);
void Set_Bell(unsigned char sel, bit sel_1);
void Bell(void);
//12864
void Write_char(bit start, unsigned char ddata);
void Send_byte(unsigned char bbyte);
void Delaynms(unsigned int di);
void Lcd_init(void);
void Disp_img(unsigned char *img);
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_set_xy( unsigned char x, unsigned char y );
unsigned char code num[]={"0123456789 :.-"};
unsigned char code waves[]={"超声波测距系统"};
unsigned char code znwk[] ={"智能微控工作室"};
unsigned char code CM[] =  {"M"};
unsigned int  time=0;
         long S=0;
         bit  flag =0;
unsigned char disbuff[4]
   ={ 0,0,0,0,};

/******************************************************************************


/******************************************************************************/
void Send_byte(unsigned char bbyte) //发送一个字节
{

unsigned char i;


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


{



SID=bbyte&0x80; //取出最高位



SCLK=1;



SCLK=0;



bbyte<<=1; //左移


}  
}

/******************************************************************************/
void Delaynms(unsigned int di) //延时
{

unsigned int da,db;


for(da=0;da<di;da++)



for(db=0;db<10;db++);
}

/******************************************************************************/
/******************************************************************************/
void Clr_Scr(void)//清屏函数
{

Write_char(0,0x01);
}

/******************************************************************************/
void LCD_set_xy( unsigned char x, unsigned char y )
{
//设置LCD显示的起始位置,X为行,Y为列
    unsigned char address;

switch(x)

{


case 0: address = 0x80 + y; break;   


case 1: address = 0x80 + y; break;


case 2: address = 0x90 + y; break;




case 3: address = 0x88 + y; break;


case 4: address = 0x98 + y; break;


default:address = 0x80 + y; break;

}
    Write_char(0, address);
}

/******************************************************************************/
void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
{
//
中英文字符串显示函数

LCD_set_xy( X, Y );


    while (*s)
    {


Write_char( 1, *s );

    s ++;


Delaynms(1);

}
}

/******************************************************************************/
void LCD_Write_number(unsigned char s)//
数字显示函数
{


Write_char(1,num);

Delaynms(1);
}
/******************************************************************************/
void Lcd_Mark2(void)
{

Clr_Scr();//清屏

LCD_Write_string(1,0,znwk);//

LCD_Write_string(2,0,waves);//


LCD_Write_string(3,7,CM);//

}

/********************************************************/
    void Conut(void)

{

   time=TH0*256+TL0;

   TH0=0;

   TL0=0;

   S=time*1.87/100;       //算出来是CM
  110592M晶振

   if(flag==1)

      //超出测量

  {



   flag=0;

   LCD_set_xy( 3, 4 );

   LCD_Write_number(13);

   LCD_Write_number(12);

   LCD_set_xy( 3, 5 );

   LCD_Write_number(13);

   LCD_Write_number(13);




   }

else

  {

   disbuff[1]=S%1000/100;

   disbuff[2]=S%1000%100/10;

   disbuff[3]=S%1000%10 %10;

   LCD_set_xy( 3, 4 );

   LCD_Write_number(disbuff[1]);

   LCD_Write_number(12);

   LCD_set_xy( 3, 5 );

   LCD_Write_number(disbuff[2]);

   LCD_Write_number(disbuff[3]);

  }

}
/********************************************************/
void delayms(unsigned int ms)
{

unsigned char i=100,j;

for(;ms;ms--)

{


while(--i)


{



j=10;



while(--j);


}

}
}
/********************************************************/
     void zd0() interrupt 1

//T0中断用来计数器溢出,超过测距范围
  {
    flag=1;






//中断溢出标志
  }
/********************************************************/
   void  StartModule()

         //T1中断用来扫描数码管和计800MS启动模块
  {

  TX=1;


                 //800MS  启动一次模块

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  TX=0;
  }
/********************************************************/
void main(void)
{  
    TMOD=0x01;

   //T0为方式1GATE=1

TH0=0;

TL0=0;

TR0=1;


Lcd_init();       //设置液晶显示器

Clr_Scr();        //清屏


Disp_img(**);
  //显示欢迎使用本产品**

Delaynms(1000);

Lcd_init();       //从图形显示状态下返回
    Lcd_Mark2();



while(1)

{

StartModule();








//计算

while(!RX);

//RX为零时等待

TR0=1;


    //开启计数

while(RX);


//RX1计数并等待

TR0=0;



//关闭计数

Conut();

delayms(80);

//80MS


}

}      

与程序对应的硬件系统非常MINI见:http://shop58463218.taobao.com/

超声波测距51C程序.rar

2.18 KB

相关帖子

沙发
老鱼探戈| | 2011-11-10 22:07 | 只看该作者
广告!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

2

帖子

1

粉丝