太原科技大学
wela=1; P0=0xfe; wela=0; delay (1); }
void Conut(void) {
time=TH0*256+TL0; TH0=0; TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=450)||flag==1) //超出测量范围显示“-” {
flag=0; qian=10; //“-” bai=10; //“-” ge=10; //“-” } else {
qian=S00/100; bai=S000/10; ge=S00 ; } }
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围 {
flag=1; //中断溢出 }
/********************************************************/
void zd3() interrupt 3 //T1中断用来扫描数码管和计800MS启动 {
TH1=0xf8; TL1=0x30;
display(qian,bai,ge); timer++;
if(timer>=400) {
timer=0;
TX=1; //800MS 启动一次 _nop_(); _nop_(); _nop_();
- 16 -
太原科技大学
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); TX=0; } }
/*********************************************************/ void main( void ) {
TMOD=0x11; //设T0为方式1,GATE=1; TH0=0; TL0=0;
TH1=0xf8; //2MS定时 TL1=0x30;
ET0=1; //允许T0中断 ET1=1; //允许T1中断 TR1=1; //开启定时器 EA=1; //开启总中断 while(1) {
while(!RX); //当RX为零时等待 TR0=1; //开启计数
while(RX); //当RX为1计数并等待 TR0=0; //关闭计数 Conut(); //计算 } }
- 17 -
太原科技大学
第五章 总结
一、问题
在连接电路的过程中出现了一些错误,总结如下: (1) 数码管不能正常显示
经检查后,发现程序中的“display()”子程序放的位置不对。 (2) 上电后,距离不对
经检查后,程序中的求距离函数不对,改正后正常显示。
二、测试结果分析:
测距仪能测的范围为0.03m—3.00m,测距仪最大误差不超过1cm。系统调试完后应对测量误差和重复一致性进行多次实验分析,不断优化系统使其达到实际使用的测量要求。由于条件有限,我们忽略温度的影响,不进行温度补偿,声速选取340m/s.
三、收获
通过这次课程设计,使我对单片机有了初步的了解,为以后进一步学习做了准备。同时,也使我了解到了一些电子元器件的应用。例如: 数码管可以用在显示屏、汽车用灯(包含汽车内部的仪表板、音响指示灯、开关的背光源、阅读灯和外部的刹车灯、尾灯、侧灯以及头灯等)、广告牌等,超声波模块则可用来做测距仪和物位测量仪等,利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在工农业生产上到了广泛的应用。
同时,经过这些天的实际动手操作,使我认识到看似简单的问题,真正做起来的时候,如果不认真、不按照确定的步骤进行,会产生很多问题。在动手操作时不能眼高手低,一定要养成良好的做事风格和习惯。
参考文献:
[1]徐爱钧,彭秀华.《Keil Cx51 V7.0 单片机高级语言编程与uVision2应用实践》,电子工业出版社,2004年6月 [2]郭天祥.《十天会单片机》视频教学。
- 18 -
太原科技大学
[3] 史东海.《单片机数据通信技术从入门到精通》,西安电子科技大学出版社,2002年11月
[4] 谭浩强.《C程序设计(第三版)》,清华大学出版社,2005年7月 [5]倪小军,章韵.《单片机原理与接口技术》,清华大学出版社,2009年9月
[6] 姜志海,黄玉清.《单片机原理及应用》,电子工业出版社,2005年7月
- 19 -
太原科技大学
附录
附录1 原理图
- 20 -
太原科技大学
附录2 实物图
- 21 -