参考文献
[1]谢维成,杨加国.单片机原理与应用及C51程序设计.北京:清华大学出版社,2006 [2]蔡菲娜.单片微型计算机原理和应用.杭州:杭州大学出版社,1995 [3]李建忠.单片机原理及应用.西安:西安电子科技大学出版社,2002
[4]张齐等.单片机应用系统设计技术----基于C语言编程.北京:电子工业出版社,2004 [5]吴延海.微型计算机接口技术.重庆:重庆大学出版社,1997 [6]李丽霞.单片机在超声波测距中的应用[J].电子技术,2002
[7]姜道连,宁延一,袁世良.用AT89C2051设计超声波测距仪[J].国外电子元器件,2000 [8]张鹏,张有志.一种新型超生测距系统[J].山东:山东大学学报,2003,33(1)
[9]李学海.PIC单片机实用教程-基础篇(第1版)[M].北京航天航空大学出版社.北京:2002 年2月。
[10]陈大新,胡学同,周杏鹏.利用FPGA改进超声波测距模块设计[J].传感器技术,2005,24(2): 57~59
[11]朱伟芳.一种便携式长度测量系统的硬件设计[J].江苏电器,2005,5:14-15
29
附录
附录1电路原理图
30
附录2程序源代码
超声测距器单片机程序 MCU AT89C51 XAL 12 MHz #include < reg51.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long extern void cs_t(void); extern void delay(unit); extern void display(uchar *); data uchar testok;
/ * 主程序 * / void main (void) {
data uchar dispram[5]; data uint i; data ulong time; p0=0xff; p2=0xff; TMOD=0x11; IE=0x80; while (1) {
cs_t(); delay(1); testok=0; EX0=1; ET0=1;
while ( ! testok ) display(dispram); if ( 1==testok) {
31
time = TH0;
time = (time<<8)|TL0; time * =172; time /=100000;
dispram[0]=(uchar) (time % 10); time /=10;
dispram[1]=(uchar) (time % 10); time /=10;
dispram[2]=(uchar) (time % 10); dispram[3]=(uchar) (time % 10); if(0==dispram[3]) dispram[3] =17; } else {
Dispram[0] = 16; Dispram[1] = 16; Dispram[2] = 16; Dispram[3] = 16; }
for (i=0; i<=300; i++) display(dispram); } }
/ * 超声波接收程序(外中断0)* / Void cs_r(void) interrupt 0 {
TR0 = 0; ET0 = 0; EX0 = 0; testok = 1; }
/ * 超声波清除程序(内中断 T0)*/
32
相关推荐: