当前位置:首页 > 超声波测距仪的设计
while(--cnt); } /*函数名称:display() **输入参数:uchar qian, uchar bai, uchar shi, uchar ge **输出参数:void **函数功能:数码管显示模块 */ void display(uchar qian,uchar bai,uchar shi,uchar ge) { SMG_q=1; //选择千位数码管 P0=table[qian]; //查找\定义好的数码管段值与P0口输出,显示相应的1 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_q=0; //关闭千位数码管 SMG_b=1; //选择百位数码管 P0=table[bai]; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_b=0; //关闭百位数码管 SMG_s=1; //选择十位数码管 P0=table[shi]&0x7f; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_s=0; //关闭十位数码管 SMG_g=1; //选择个位数码管 P0=table[ge]; //查找\定义好的数码管段值与P0口输出,显示相应的2 delay(100); //加入短暂延时 P0=0XFF; //清除数码管显示,因是共阳型,所以不是0 SMG_g=0; //关闭个位数码管 } /*函数名称:startmodule() **输入参数:void **输出参数:void **函数功能:超声波测距仪触发模块 */ void startmodule() { trig=1; //15us 启动一次模块 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=0; delay(10); } /*函数名称:main() **输入参数:void **输出参数:void **函数功能:控制模块 */ void main() { init(); //初始化子程序 while(1) { startmodule(); while(!echo) //起始为0,当为1时,开始计时 ; TR0=1; //开启计数 while(echo&&flag); //当echo为1计数并等待 //flag标志位,当检测超过65ms退出等待回波,继续下一次检测 time=(TH0*256+TL0)*(12/11.0592); TR0=0; //停止计时 TH0=0; TL0=0; //关闭计数 S=(time*17.4)/100; //算出来是mm,注意程序按mm处理显示的时候在十位加小数点,则以cm为单位显示且精度小于1cm if((S<1)||(S>4500)||(flag==0)) //大于1cm小于3m超出测量范围显示'----' { flag=1; qian=10; bai=10; shi=10; ge=10; } else { qian=S/1000; bai=S/100; shi=S0/10; ge=S; } for(a=0;a<100;a++) { display(qian,bai,shi,ge); } //扫描100次数码管,进行显示 } } void timer0() interrupt 1 { TH0=0; TL0=0; flag=0; //标志位,当检测超过65ms退出等待回波,继续下一次检测,非常必要 } 五、设计中遇到的问题及解决办法:
(1)在课程设计初期,我们组在一个现成的电路板(只有编码和位选与我们所
要设计的作品的接法不同)上进行编写和调试程序。于此同时,也开始在prteus中搭建电路:我们选用P0口作为‘段码’,连接SM410561D3B‘a,b,c,d,e,f,g,dp’,每一段的亮灭。选用P2.4~P2.7分别对应‘位码’,即连接 SM410561的‘S1,S2,S3,S4’分别控制每一位的亮灭。在程序初步
完成,用proteus和keil进行仿真后,数码管却不能正常显示,千位只能在0和1之中跳变,无法出现其他数字。经检查程序,发现计数初值的设置有问题,于是,经过反复调试,终于能使数码管在我们的设计范围内显示数字。
(2)在进行动态显示的时候延时是非常重要的。延时太长,四位数码管的显示
会有明显的闪烁感;延时太短,则有可能相邻几位显示同一个数码,因为时间太短还来不及变化,显示效果也很不理想。经过我们仿真调试,不断修改程序中的延时,在仿真环境下,动态显示已很稳定。
(3)在电路板焊接完成后,我们将编写好的程序下载到单片机中,开始进行测
试。这时,问题又出现了:数码管的每位的C段都不亮,而且个,十,百,千位的数据显示刚好相反。前者先考虑是电路板上出现的问题,经用万用表检查电路,发现与C段相连的P0.2被短接。修改好电路板后,C段正常显示,因宋英同学的认真细致,实际电路板上也就只出现了这一个问题。而后者经分析,发现程序中的定义未能和电路板上的接口相对应,于是我们又修改了个,十,百,千位的定义。至此,我们的作品设计成功了,整个过程很顺利。
六、设计心得体会和收获:
在这次试验中,我的主要工作是:搭建电路板。焊接电路。兼职工作
是帮王明友分析电路。有些同学认为焊接电路是没有技巧的工作,没有什么含金量,锻炼不出自己的真实能力。而我却不这么认为,在这项工作中,我还是学到了很多东西,我坚信这些知识是在课本当中学不到的,比如说;每个器件位置的合理安排,经过板子的每一条线的布置,让板子整体看起来比较美观,呈献给大家的是一个赏心悦目的板子。硬件的完美是我们的终极目标,我们始终要坚信的是:软件和硬件是相辅相成的。软件的简洁,硬件的完美是成功的必需品。这次课程设计我深深的体会了这点。在整个板子的焊接过程中,每个结点的焊接必须做到谨慎小心,一不小心就会出现短路现象,在焊接过程当中,时刻准备用万用表来检测电路。在这次的焊接过程当中,我每焊接一个结点,都会用万用表去检测。做到精益求精。
共分享92篇相关文档