基于51单片机的超声波测距系统的毕业设计报告 下载本文

内容发布更新时间 : 2024/5/20 18:54:13星期一 下面是文章的全部内容请认真阅读。

中北大学毕业论文

Write_Comm(0x01); //清显示 Write_Comm(0x80); //写首地址 for(a=0;a<16;a++) {

d=dispBUF[a];

if((a>11)&&(a<14)) {

d=numcode[num[a]]; }

if(14==a) { d=0xdf; }

Write_Data(d); }

Write_Comm(0xc0); for(b=16;b<33;b++) {

d=dispBUF[b]; if((b>24)&&(b<29)) {

d=numcode[num[b]]; }

Write_Data(d); } }

/*********检查LCD忙状态***********/ bit LCD_BUSY() { bit BS; RW = 1; RS = 0; E = 1; delay1ms(1); BS =(bit)(P0&0x80);

//如果是结果位到num[]里面读取

//待显示的结果

//写入要显示的数据

//换行,换到第二行

//写入要显示的数据(数据传输)

//lcd_busy为1时,忙,等待。lcd-busy

为0时,闲,可写指令与数据

41

中北大学毕业论文

E = 0; return BS; }

/*******************写指令函数******************************/ void Write_Comm(uchar lcdcomm) //写指令

{

while(LCD_BUSY()); RS = 0; RW = 0; E = 1; delay1ms(1); P0= lcdcomm; delay1ms(1); E = 0; }

/*********************写数据函数****************************/ void Write_Data(uchar lcddata)//写数据 {

while(LCD_BUSY()); RS = 1; RW = 0; E = 1; delay1ms(1); P0= lcddata;

delay1ms(1); //判断是否忙状态 E = 0; }

/*********************初始化LCD****************************/ void Init_LCD() {

delay(); //稍微延时,等待LCD进入工作状态 Write_Comm(0x01); //清显示 Delay(2);

Write_Comm(0x38); //8位2行 5*8 Delay(2);

Write_Comm(0x06); //文字不动,光标右移

42

中北大学毕业论文

Delay(2);

Write_Comm(0x0c); //显示开/关,光标开闪烁开 Delay(2); }

/*************************延时n*15US函数*************************/ void delay15(uchar us) { do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); us--; }

while(us); }

/************************18b20延时函数************************/ void Delay(uint time) {

while( time-- ); }

/****************************延时1MS*************************/ void delay1ms(uint ms) {

uint i,j;

for(i=0;i

43

中北大学毕业论文

for(j=0;j<100;j++); }

/***************************显示延时函数*********************/ void delay() { uchar y;

for(y=0;y<0xff;y++); }

/*********************导通即可驱动蜂鸣器*********************/ void beep(uint bp)

{

uchar i, j;

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

BUZZER=!BUZZER; //BEEP取反 for (j = 0 ; j

}

BUZZER=0; //关闭蜂鸣器 }

/*******************系统主函数******************/ void main(void) {

uchar i,j;

for(i=0;i<255;i++)

for(j=0;j<255;j++); //延时 SYS_INIT(); //初始化 while(!START ) {

beep(150); //调用beep()函数,使喇叭发声

delay1ms(500);

LCD_DISP(); //显示

sta_flag=0; //标准位复位 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 TESTTEMP(); //启动温度转换

44

中北大学毕业论文

while(1) {

if(sta_flag) //10MS到了(sta_flag=1) {

while(0==CSBIN); //收到回波

TR1=0;

//关闭计数器1

jsh=TH1; jsl=TL1;

//读取计数器高低位的数值

HEXtoBCD(); //转换成BCD码 JULIJS(); //计算距离

if(15==count) //900MS到,检测温度 {

temp=GET_WD(); //读取温度 count=0;

TESTTEMP(); //重新启动转换 LCD_DISP(); //刷新显示 }

sta_flag=0;

//标准位复位

}

if(distance<=110) { beep(150); } }

} }

45