- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机超声波测距程序
//超声波测距,测距范围2cm-400cm;#includereg52.h#includeintrins.h#define uint unsigned int#define uchar unsigned charsbit trig=P1^0;sbit echo=P3^2;sbit test=P1^1;//测试灯sbitdula=P2^6;sbitwela=P2^7;sbit BEEP=P2^3;uinttimeh,timel,distance;uintge,shi,bai,xiaoshu,flag,time;/*共阴极数码管不带小数点代码表*/uchar code list[]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,0x39 , 0x5e , 0x79 , 0x71 };/*共阴极数码管带小数点代码表*/uchar code listtwo[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};/*长延时函数*/void delay(uint z){uintx,y;for(x=z;x0;x--)for(y=100;y0;y--);}/*短延时函数*/void delay20us(){uchar a;for(a=0;a100;a++);}/*报警函数*/void beer(){//BEEP=0;delay(10);}/*定时器初始化*/void initime0(){TMOD=0x01;TH0=0;TL0=0;EA=0;ET0=0;EX0=0;}/*外部中断函数*/voidestern() interrupt 0{timeh=TH0;timel=TL0;beer();flag=1;//进入中断,标志位就置1EX0=0;//同时关断外部中断和定时器 TR0=0;}/*显示函数*/void display(distance){bai=distance/1000;shi=distance%1000/100;ge=distance%100;xiaoshu=distance%10;dula=1;P0=list[xiaoshu];dula=0;P0=0xff;wela=1;P0=0xf7;wela=0;delay(2);dula=1;P0=listtwo[ge];dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(2);dula=1;P0=list[shi];dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=list[bai];dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(1);}/*被调用子函数*/voiddiaoyong(){uinti;EA=0;echo=1;//为了检测电平的高低,首先必须拉高trig=1;delay20us();trig=0;while(echo==0);//如果进入中断即接收到超声波就向下执行flag=0;//接收到就清除标志位EA=1;//同时打开总中断EX0=1;//打开外部中断TR0=1;//开定时器TH0=0;//定时器清零TL0=0;for(i=0;i100;i++)//等待测量的结果{display(distance);//用100次显示循环来延时,解决数码管显示不亮问题}//delay(50);//用延时函数数码管闪烁TR0=0;//延时一段时间后关断定时器EX0=0;//延时一段时间后关断外部中断if(flag==1)//如果进入中断,说明测距已经测好{time=timeh*256+timel;//计算测定距离,并显示distance=time*0.1720;display(distance);}if(flag==0)//如果没有进入中断,距离为0,同时灯闪烁{distance=0;test=!test;}}/*主函数*/void main(){initime0();test=0;trig=0;EA=1;while(1){diaoyong();display(distance);}}
您可能关注的文档
最近下载
- 信号与系统(第三版)上下册郑君里课后习题答案详解.pdf
- 2025年3月-7月深入贯彻中央八项规定精神学习教育进度计划表+八项规定精神学习教育学习计划表格.doc VIP
- 七猫中文网投稿申请表.pdf
- 2024年全球及中国锂电铜箔行业头部企业市场占有率及排名调研报告djs.docx
- 更换引流袋技术操作.pptx VIP
- ISO22000-2018食品安全管理体系:食品链中各类组织的要求(内部翻译稿).docx
- 《2014土木工程建筑工程技术毕业设计任务书.doc VIP
- 2024益阳市安化县事业单位招聘考试真题及答案.docx
- 2019快速动态响应同步调相机组验收规范第7部分:润滑油系统.pdf
- 九年级物理电学综合复习课件-苏科版.ppt VIP
文档评论(0)