我的超声波程序总是出错,不知道哪儿有问题,请高手帮忙解决!!!非常感谢
[复制链接]
#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int
sbit echo=P3^2;//接收端 sbit clk=P2^0;//脉冲输入 sbit lcdrs=P1^0;//液晶命令数据选择端 sbit lcdrw=P1^1;//读写选择端 sbit lcden=P1^2;//使能端 uint distance; uchar num,flag1,flag2,timeh,timel; uchar code table[]="distance: cm";
void delay(uint z)//延时1ms { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void write_com(uchar com)//液晶写命令 { lcdrs=0; lcden=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }
void write_data(uchar date) //液晶写数据 { lcdrs=1; lcden=0; P0=date; delay(5); lcden=1; delay(5); lcden=0; }
void display(uint distance)//液晶显示函数 { uchar bai,shi,ge; bai=distance%1000/100; shi=distance%1000%100/10; ge=distance%10; write_com(0x89); write_data(0x30+bai); delay(2); write_data(0x30+shi); delay(2); write_data(0x30+ge); delay(2); }
void csb_fs()//超声波发送 { clk=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();//延时21us clk=0; } void get_distance() { csb_fs(); delay(1); while(echo==0);//等待接收信号 flag1=0; flag2=0; TH0=0X00; TL0=0X00; IT0=1;//下降沿触发 EX0=1;//开外部中断 ET0=1;//开定时器中断 TR0=1;//开始计时 while(echo==1) { if(flag2==1) break; } if(flag1==1) { distance=(timeh*256+timel)*0.0172; display(distance); } if((flag1==0)&&(flag2==1)) { distance=0; display(distance); } }
void init() { lcdrw=0; lcden=0; distance=0; clk=0; EA=1; EX0=0; TMOD=0X01; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<14;num++) { write_data(table[num]); delay(2); } }
void main() { init(); while(1) { get_distance(); delay(10); } }
void extenr0()interrupt 0 { EX0=0; TR0=0; timeh=TH0; timel=TL0; flag1=1; }
void timer0()interrupt 1 { TF0=0; TR0=0; TH0=0; TL0=0; EX0=0; flag2=1; }
|