. . . .
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
.. .. ..