日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

超声波测距仪编程_51单片机控制的超声波测距仪程序

發布時間:2024/3/7 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超声波测距仪编程_51单片机控制的超声波测距仪程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

展開全部

/*--------------------------------------

超聲測距器單片機程序e69da5e6ba9062616964757a686964616f31333262353436

MCU AT89C51 XAL 12MHz

2008.2.25

--------------------------------------*/

#include

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

}

}

//

/*超聲接收程序(外中斷0)*/

void cs_r(void) interrupt 0

{

TR0 = 0;

ET0 = 0;

EX0 = 0;

testok = 1;

}

/*超時清除程序(內中斷T0)*/

void overtime(void) interrupt 1

{

EX0 = 0;

TR0 = 0;

ET0 = 0;

testok = 2;

}

;-------------------------------------

;超聲發生子程序(12M晶振38.5Hz)

;-------------------------------------

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

;-------------------------------------

;延時100機器周期*參數(1~65535)

;-------------------------------------

NAME DELAY

?PR?_DELAY?DELAY SEGMENT CODE

PUBLIC _DELAY

RSEG ?PR?_DELAY?DELAY

_DELAY: PUSH ACC ;2

MOV A, R7 ;1

JZ DELA1 ;2

INC R6 ;1

DELA1: MOV R5, #50D ;2

DJNZ R5, $ ;2

DJNZ R7, DELA1 ;2

DJNZ R6, DELA1 ;2

POP ACC ;2

RET ;2

;

END

;---------------------------------------

; 四位共陽LED動態掃描顯示程序

; P0為段碼口,P2為位選口(低電平有效)

; 參數為要顯示的字符串指針

;---------------------------------------

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 R6, #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

; "0", "1", "2", "3","4", "5","6","7", "8","9","A","B","C", "D", "E","F", "-", " "

END

這個給你參考~

本回答由網友推薦

已贊過

已踩過<

你對這個回答的評價是?

評論

收起

總結

以上是生活随笔為你收集整理的超声波测距仪编程_51单片机控制的超声波测距仪程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。