基于89C51单片机的超声波测距系统设计与制作

 


程序如下

main.c

/*********************************************************************/
/*              超声波测距数码管显示                                 */
/*********************************************************************/
/*  温度补偿                                                         */
/*  用定时器0计数测量超声波发送接收时间                              */
/*  用定时器1给ds18b20定时发收温度信号                               */
/*  用外部中断0接收超声波返回的第一个脉冲                            */
/*********************************************************************/
#include<reg52.H> 
#include<intrins.h>
#include<wen.h>
#include<chao.h>
/*********************************************************************/
extern uint dis;
/*********************************************************************/
/***********************************/
/*        主函数     */
/***********************************/ 
void main(void) 

init(); 
// display(1234);
// delayms(100); 
while(1)           //循环测量并显示 

tran();        //发送超声波信号测距 
display(dis);  //显示距离
delayms(100); 
// wen();   //显示温度 

}


chao.c文件

#include<reg52.H> 
#include<intrins.h>
#include<wen.h>
#include<chao.h> 
/*********************************************************************/
uint dis;
uint H=100;
uint L=20; 
uchar flag=0;    //中断标志
uchar high_time;   //时间高位
uchar low_time;    //时间低位
uchar i,s1num;
/*************************** 
数码管为共阴数码管 
***************************/ 
#define seg P0   //数码管的数据口为P0口 
sbit s3=P2^0;  
sbit s0=P2^1;     
sbit s1=P2^2;   
sbit s2=P2^3; 
sbit dp=P0^7;    //小数点 
uchar shuzu[]={  
0x3F, //"0" 
0x06, //"1" 
0x5B, //"2" 
0x4F, //"3" 
0x66, //"4" 
0x6D, //"5" 
0x7D, //"6" 
0x07, //"7" 
0x7F, //"8" 
0x6F, //"9" 
/*0x77, //"A" 
0x7C, //"B" 
0x39, //"C" 
0x5E, //"D" 
0x79, //"E" 
0x71, //"F" 
0x76, //"H" 
0x38, //"L" 
0x37, //"n" 
0x3E, //"u" 
0x73, //"P" 
0x5C, //"o" 
0x40, //"-" */
0x00, //熄灭 
0x00  //自定义   
}; 
/*********************************************************************/
/***********************************/
/*       初始化函数     */
/***********************************/  
void init(void) 

TMOD=0x11;  //定时器0方式1用于计时 
TH0=0; 
TL0=0;
TH1=(65536-60000)/256;    //温度计时初值     
TL1=(65536-60000)%256;
ET1=1;                           //开定时器1中断
TR1=1;                            //启动定时器1   
EA=1; 
IT0=1;  //下降沿有效



/***********************************/
/*       显示函数         */
/***********************************/ 
void display(uint dat) 

uchar i,j,k,l;  //分别为百十个位的缓存
dat=dat-70;
i=dat/1000;     //百位 
j=dat/100%10;   //十位 
k=dat/10%10;    //个位
l=dat%10;       //十分位
// write_12864com(0x8b);
// write_12864dat(table[i]);
// delay_50us(1);
// write_12864dat(table[j]);
// delay_50us(1);
// write_12864dat(table[k]);
// delay_50us(1);
// write_12864dat(table[10]);

  • 7
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值