好文档 - 专业文书写作范文服务资料分享网站

超声波测距仪实验报告

天下 分享 时间: 加入收藏 我要投稿 点赞

. . . .

void main(void) { unsigned char i; unsigned char j; SYS_Init();

TSC_TSTOP=0;//允许开始计数 for(;;) {

DisableInterrupts; if(intflag=0) 产生

{

//如果有接收中断产生,则将其置位,如果没有,则为0,

//禁止所有的中断

//intflag标志是为了判断是否有超声波接收中断

此时数码管上显示\

dspbf[0]=0x0d; dspbf[1]=0x0c; dspbf[2]=0x0d; dspbf[3]=0x0c;

}

for(i=0;i<4;i++){ display(dspbf[i],i); } //分别送去显示

for(i=0;i<4;i++){ display(dspbf[i],i); } //分别送去显示

intflag2=0; intflag=0;

TSC_TOIE=0;

//禁止计数中断

.. .. ..

. . . .

backtime=0; TSC_TOIE=1;

//发射一个短脉冲

40KHz

for(i=0;i<5;i++) {

PTA^=0x12;

^为按位异或

_asm(nop);

//PTA1 和PTA4共同驱动超声波发射探头

}

for(i=0;i<10;i++) //发射完超声后,延时一小段时间禁止所有的接收中断,防止造成误接收 {

_asm(nop); //C语言中嵌入的空操作指令

}

EnableInterrupts; //开启所有的中断 intflag2=1; 接收后清0

//显示并等待较长的时间 等待接收回流中

//超声波的发射标志,在超声波发射后置位,在

for(j=0;j<20;j++)

断并处理距离值

{

for(i=0;i<4;i++){ display(dspbf[i],i); } //分别送去显示

for(i=0;i<4;i++){ display(dspbf[i],i); } //分别送去显示

for(i=0;i<4;i++){ display(dspbf[i],i); } //分别送去显示

}

}

.. .. ..

. . . .

}

/*************************************************************************/ /* */

/* 程序描述:包括config寄存器的设置、端口寄存器的设置、定时器寄存器的设置*/ /* */ /* */

/*************************************************************************/

void SYS_Init(void) {

CONFIG2=0x00; //使用部晶振,关闭复位引脚

CONFIG1=0x3d; //禁止看门狗,禁止LVI模块 禁止LVI复位 //INTSCR=0x00;

////////////////A B口的初始化

DDRB=0xff; //PTB7,PTB6为输入,其余为输出 PTBPUE=0xc0; //PTB7,PTB6 设置上拉电阻 PTB=0xff; //置B口全为1

DDRA=0x12; //A口为输入方式 PTA1 PTA4为输出方式 PTA=0x02; //A口全为0 /////////////////定时计数器的初始化

TSC=0x63; //设置允许定时器溢出中断,设置分频因子为32 n=t*f/p p为分频因子

.. .. ..

. . . .

TMOD=1;//设置预置寄存器值 定时器的部晶振频率为3.2Mhz //TMOD=0.00001*3.2M/32=1

/////////////////键盘控制状态寄存器的初始化

KBSCR=0x00; //键盘状态和控制寄存器 允许键盘中断 下降沿触发 KBIER=0x04; //键盘中断控制寄存器 禁止键盘中断自动唤醒 设定PTA2为中断输入口

EnableInterrupts; // 开总中断 }

/***************************************************************************/ /**/ /**/ /**/ /**/

:

pled

:

n

,

:

display

dspchar

:dspchar,n

/* dspchar:段选信号,输入用户要显示的数据 */ /* */ /*

:

n:

,

.. .. ..

. . . .

*/

/***************************************************************************/

void display(unsigned char dspchar,unsigned char n) {

unsigned char i,j,k=1;

for(j=0;j<(n+2);j++){ k*=2; }

pled(sgcode[dspchar]) ; //发送编码到LED PTB=0x00;

PTB+=k; //位选 for(i=0;i<25;i++)

{ //延时 _asm(nop); } PTB=0x00; }

/***************************************************************************/ /**/

/*程序描述:8位并行输出串行移位编程,PTB1为时钟信号,将PTB0的输出并行输出 */ /*

pled

k

.. .. ..

超声波测距仪实验报告

....voidmain(void){unsignedchari;unsignedcharj;SYS_Init();TSC_TSTOP=0;//允许开始计数
推荐度:
点击下载文档文档为doc格式
2l6dm4me4r9nplx1m54t1j03v4iv5u00asu
领取福利

微信扫码领取福利

微信扫码分享