您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页超声波传感器(电路图和程序)

超声波传感器(电路图和程序)

来源:华佗小知识
用2051做超声波测距的源程序和电路图

贴子发表于:2008/11/3 17:58:04

一个从别的网站上下的,用2051做超声波测距的源程序和电路图 当中这一句 P1=~buffer ; //显示数据送P1口 改为 P1= buffer ; //显示数据送P1口

就能在Keil 中编译通过,但是烧进单片机后,三位数码管显示是一样的. 请问是什么原因? 如果不改这一句,在Keil 中编译就不能通过!! 源程序要怎么样改才能正常???

我的邮箱是: baiyni888@163.com 万分感谢!!!!!! 下面是有问题的源程序: 此主题相关图片如下:

#include #define k1 P3_4

#define csbout P3_5 //超声波发送 #define csbint P3_7 //超声波接收 #define csbc=0.034 #define bg P3_3

unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识

unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码 unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1; bit cl; void csbcj();

void delay(j); //延时函数 void scanLED(); //显示函数 void timeToBuffer(); //void keyscan(); void k1cl(); void k2cl(); void k3cl(); void k4cl(); void offmsd();

void main() //{

EA=1; // TMOD=0x11; // ET0=1; // ET1=1; // TH0=0x00; TL0=0x00; TH1=0x9E; TL1=0x57; csbds=0; csbint=1; csbout=1; cl=0; opto=0xff; jpjs=0; sj1=45; sj2=200; sj3=400; k4cl();

TR1=1; while(1)

显示转换函数 主函数 开中断

设定时器0为计数,设定时器1定时 定时器0中断允许 定时器1中断允许 {

keyscan(); if(jpjs <1) { csbcj(); if(s> sj3) {

buffer[2]=0x76; buffer[1]=0x76; buffer[0]=0x76; }

else if(s buffer[2]=0x40; buffer[1]=0x40; buffer[0]=0x40; }

else timeToBuffer(); }

else timeToBuffer(); //将值转换成LED段码 offmsd();

scanLED(); //显示函数 if(s void scanLED() //显示功能模块 {

digit=0x04;

for( i=0; i <3; i++) //3位数显示 {

P3=~digit&opto; //依次显示各位数 P1=~buffer; //显示数据送P1口 delay(20); //延时处理

P1=0xff; //P1口置高电平(关闭) if((P3&0x10)==0) //判断3位是否显示完

key=0;

digit> > =1; //循环右移1位 } }

void timeToBuffer() //转换段码功能模块 {

xm0=s/100; xm1=(s-100*xm0)/10; xm2=s-100*xm0-10*xm1; buffer[2]=convert[xm2]; buffer[1]=convert[xm1]; buffer[0]=convert[xm0]; }

void delay(i) {

while(--i); }

void timer1int (void) interrupt 3 using 2 {

TH1=0x9E; TL1=0x57; csbds++; if(csbds> =40) {

csbds=0; cl=1; } }

void csbcj() {

if(cl==1) {

TR1=0; TH0=0x00; TL0=0x00; i=10; while(i--)

{

csbout=!csbout; }

TR0=1;

i=mqs; //盲区 while(i--) { } i=0; while(csbint) { i++;

if(i> =2450) // csbint=0; } TR0=0; TH1=0x9E; TL1=0x57; t=TH0; t=t*256+TL0; s=t*csbc/2; TR1=1; cl=0; } }

void keyscan() //{ xx=0;

if(k1!=1) // {

delay(400); // if(k1!=1) // { while(!k1) {

delay(30); xx++; }

上限值 健盘处理函数 判断开关是否按下 延时去抖动

判断开关是否按下 if(xx> 2000) { jpjs++; if(jpjs> 4) jpjs=0; } xx=0; switch(jpjs) {

case 1: k1cl();break; case 2: k2cl();break; case 3: k3cl();break; case 4: k4cl();break; } } } }

void k1cl() { sj1=sj1+5; if(sj1> 100) sj1=30; s=sj1; } void k2cl() { sj2=sj2+5; if(sj2> 500) sj2=40; s=sj2; } void k3cl() {

sj3=sj3+10; if(sj3> 500) sj3=100;

s=sj3; } void k4cl() { sx1=sj1-1; sx1=sx1/csbc; mqs=sx1/4.5; }

void offmsd() {

if (buffer[0] == 0x3f) buffer[0] = 0x00; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务