立即注册 登录
返回首页

uid:434819的个人空间

日志

HC-SR04超声波测距

已有 786 次阅读2018-11-30 15:46 |个人分类:hc sr04

 

#include <reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

 

extern void cs_t(void);

extern void delay(uint);

extern void display(uchar*);

//data uchar 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)

   {

   time=TH0;

   time=(time<<8)| TL0;

   time*=172; 

   time/=10000;

   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);

 }

}

 

 

 

void cs_r(void) interrupt 0

{

 TR0=0;

 ET0=0;

 EX0=0;

 testok=1;

}

 

 

 

void overtime(void) interrupt 1

{

 EX0=0;

 TR0=0;

 ET0=0;

 testok=2;

}

                     NAME      CS_T

?PR?CS_T?CS_T         SEGMENT   CODE

                     PUBLIC   CS_T  

                             RSEG     ?PR?CS_T?CS_T

CS_T:                PUSH      ACC

                     MOV       TH0, #00H

                     MOV       TL0, #00H

                     MOV       A, #4D

                     SETB       TR0

CS_T1:               CPL        p1.0

                     NOP

                                  NOP

                                  NOP

                     NOP

                     NOP

                     NOP

                     NOP

                     NOP

                     NOP

                     NOP

                     DJNZ       ACC,CS_T1

                     POP        ACC

                     RET

 ;

                     END 

 name   delay

?pr?_delay?delay   segment   code

public   _delay

 rseg    ?pr?_delay?delay

_delay:    push   acc

           mov a,r7

           jz   dela1

           inc   r6

dela1:   mov   r5,#50d

         djnz   r5, $

         djnz   r7,dela1

         djnz    r6,dela1

            pop   acc

           ret

end

    NAME  DISPLAY

?PR?_DISPLAY?display   segment  code

?co?_DISPLAY?display    segment  data

                        EXTRN    CODE    (_DELAY)

                        PUBLIC    _DISPLAY

                        RSEG    ?CO?_DISPLAY?DISPLAY

?_display?byte:

dispbit:   ds  1

dispnum:   ds  1

           rseg    ?pr?_display?display

_display:  push acc

           push  dph

           push  dpl

          push  psw

           inc   dispnum

            mov a,dispnum

           cjne  a,#4d,disp1

DISP1:    JC  DISP2

           MOV  DISPNUM,#00H

           MOV  DISPBIT,#0FEH

DISP2:     MOV  A,R1

           ADD   A,DISPNUM

           MOV  R0,A

           MOV  A,@R0

           MOV  DPTR,#DISPTABLE

           MOVC   A,@A+DPTR

           MOV P0,A

           MOV A,DISPNUM

           CJNE  A,#2D,DISP3

           CLR   P0.7

DISP3:       MOV P2,DISPBIT

             MOV R5,#00H

             MOV  R7,#0AH

             LCALL  _DELAY

             MOV P0,#0FFH

             MOV  P2,#0FFH

             MOV A,DISPBIT

             RL   A

              MOV DISPBIT,A

             POP  PSW

             POP   DPL

            POP   DPH

             POP   ACC

              RET

DISPTABLE:     DB      0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFH

 END

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

返回顶部