找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7813|回复: 9
打印 上一主题 下一主题
收起左侧

制作容易的超声波测距板

[复制链接]
跳转到指定楼层
楼主
ID:76686 发表于 2015-4-12 02:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      这款简单的单片机超声波测距板,比较适合电子小制作爱好者仿 制,超声波测距硬件电路的设计主要包括单片机系统及显示电路、超声波发射电路和超声波接收电路三部分。超声波测距单片机采用AT89C2051。采用 12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。超声波测距单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.7端 口监测超声波接收电路输出的返回信号。显示电路采用简单实用的3位共阳LED数码管,段码输出端口为单片机的P1口,位码输出端口分别为单片机的 P3.2、P3.1、P3.0口,数码管位驱运用PNP三极管S9012三极管驱动。超声波测距测量范围25-300厘米,精度1厘米。


;           基于AT89C2051单片机超声波测距系统
;          测量范围35-300厘米
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;          中断入口程序              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
            ORG 0000H
            AJMP START
            ORG 000BH
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;          主 程 序                 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
START     : MOV R0,#70H     ;立即数70H送寄存器R0中
            MOV R7,#0BH     ;立即数0BH送寄存器R7中
            MOV 20H,#00H    ;立即数00H送20H单元中
CLEARDISP:  MOV @R0,#00H    ;立即数立即数00H送R0中的地址单元中
            INC R0          ;寄存器R0加1
            DJNZ R7,CLEARDISP;寄存器中的数值减1非零时转移
            MOV TMOD,#01H   ;置定时器T0工作方式样3,对内部机器周期计数
      CJZCX:MOV TL0,#00H    ;装入定时器初值
            MOV TH0,#00H
            MOV R0,#0FH
            MOV R1,#5bH
      puzel:MOV 14H,#08H    ;超声波发射持续200us
       Here:CPL P3.5        ;输出40kHz方波
            NOP             ;
            NOP             ;
            NOP             ;                             
            DJNZ 14H,Here   ;
            SETB TR0
            SETB P3.2
            MOV R6,#53H     ;延时1.5ms
DL0:        MOV R5,#03H
            DJNZ R5,$
            DJNZ R6,DL0
        QBA:JNB P3.7,QBC
            DJNZ R1,QBA
            DJNZ R0,QBA
        QBC:CLR P3.2
            CLR TR0                  
            MOV 70H,tl0
            MOV 71H,tH0
            MOV R2,71H
            MOV R3,70H
            MOV R6,#22H
            MOV R7,#0H
            LCALL MULD                        
            MOV R6,#64H
            MOV R7,#0H
            LCALL DIVD
            MOV 73H,R2
            MOV 74H,R3
            MOV R3,#0H
            MOV R4,#0H
            MOV R5,#0H
            MOV R6,73H
            MOV R7,74H   
            LCALL HB2                    
            MOV A,R4       ;分离BCD
            MOV B,#10H
            DIV AB
            MOV 78H,A
            MOV 77H,B
            MOV A,R5
            MOV B,#10H
            DIV AB
            MOV 76H,A
            MOV 75H,B
            MOV 7AH,#0EFH
        XXX:LCALL DISPLAY               
            DJNZ 7AH,XXX
            AJMP CJZCX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         乘34程序(乘声速)            ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      MULD: MOV A,R3  ;计算R3乘R7
            MOV B,R7
            MUL AB
            MOV R4,B        ;暂存部分积
            MOV R5,A
            MOV A,R3        ;计算R3乘R6
            MOV B,R6
            MUL AB
            ADD A,R4        ;累加部分积
            MOV R4,A
            CLR A
            ADDC A,B
            MOV R3,A
            MOV A,R2        ;计算R2乘R7
            MOV B,R7
            MUL AB
            ADD A,R4        ;累加部分积
            MOV R4,A
            MOV A,R3
            ADDC A,B
            MOV R3,A
            CLR A
            RLC A
            XCH A,R2        ;计算R2乘R6
            MOV B,R6
            MUL AB
            ADD A,R3        ;累加部分积
            MOV R3,A
            MOV A,R2
            ADDC A,B
            MOV R2,A
            RET
                  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;         除100程序(除法)             ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      DIVD: CLR C           ;比较被除数和除数
            MOV A,R3
            SUBB A,R7
            MOV A,R2
            SUBB A,R6
            JC DVD1
            SETB OV         ;溢出
            RET
      DVD1: MOV B,#10H      ;计算双字节商
      DVD2: CLR C           ;部分商和余数同时左移一位
            MOV A,R5
            RLC A
            MOV R5,A
            MOV A,R4
            RLC A
            MOV R4,A
            MOV A,R3
            RLC A
            MOV R3,A
            XCH A,R2
            RLC A
            XCH A,R2
            MOV F0,C        ;保存溢出位
            CLR C
            SUBB A,R7       ;计算(R2R3-R6R7)
            MOV R1,A
            MOV A,R2
            SUBB A,R6
            ANL C,/F0       ;结果判断
            JC DVD3
            MOV R2,A        ;够减,存放新的余数
            MOV A,R1
            MOV R3,A
            INC R5          ;商的低位置一
      DVD3: DJNZ B,DVD2     ;计算完十六位商(R4R5)
            MOV A,R4        ;将商移到R2R3中
            MOV R2,A
            MOV A,R5
            MOV R3,A
            CLR OV          ;设立成功标志
            RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           BCD转换                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
       HB2: CLR A           ;BCD码初始化
            MOV R3,A
            MOV R4,A
            MOV R5,A
            MOV R2,#10H     ;转换双字节十六进制整数
       HB3: MOV A,R7        ;从高端移出待转换数的一位到CY中
            RLC A
            MOV R7,A
            MOV A,R6
            RLC A
            MOV R6,A
            MOV A,R5        ;BCD码带进位自身相加,相当于乘2
            ADDC A,R5
            DA A            ;十进制调整
            MOV R5,A
            MOV A,R4
            ADDC A,R4
            DA A
            MOV R4,A
            MOV A,R3
            ADDC A,R3
            MOV R3,A         ;双字节十六进制数的万位数不超过6,不用调整
            DJNZ R2,HB3      ;处理完16bit
            RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           显示程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   DISPLAY: MOV R1,#76H      ;立即数76H送寄存器中
            MOV R5,#0FEH     ;立即数FEH送寄存器R5中
      PLAY: MOV A,R5         ;寄存器R5中的数值送累加器A中
            MOV P3,A         ;累加器A中的数值送P3口
            MOV A,@R1      ;以寄存器R1中的数为地址单元的数值送累加器中
            MOV DPTR,#TAB    ;16位地址送地址寄存器中
            MOVC A,@A+DPTR   ;以中的地址为基地变址寻址单元中的数送累加器
            MOV P1,A         ;累加器A中的数值送P1口
            MOV R6,#14H      ;立即数据14送寄存器R6中
        DL1:MOV R7,#19H      ;立即数据19送寄存器R7中
        DL2:DJNZ R7,DL2      ;寄存器中的数据减1,不为零时则转移
            DJNZ R6,DL1      ;寄存器中的数据减1,不为零时则转移
            INC R1           ;寄存器R1中的数值加1
            MOV A,R5         ;寄存器R5中的数值送累加器A中
            JNB ACC.2,ENDOUT ;地址位为0则转到ENDOUT
            RL A             ;累加器循环右移
            MOV R5,A         ;累加器A中的数值送寄存器R5中
            AJMP PLAY        ;绝对短转移
    ENDOUT: SETB P3.5        ;置P3.5口
            MOV P1,#0FFH     ;立即数0FEH送P1口
            RET              ;返回
       TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
            END              ;结束

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2015-4-12 11:16 | 只看该作者
本帖最后由 lxa0 于 2015-4-12 11:23 编辑

学习了
谢谢楼主

回复

使用道具 举报

板凳
ID:74784 发表于 2015-4-12 11:26 | 只看该作者
下面这段没看明白
请楼主讲解一下?

MOV R6,#53H     ;延时1.5ms
DL0:        MOV R5,#03H
            DJNZ R5,$
            DJNZ R6,DL0
        QBA:JNB P3.7,QBC
            DJNZ R1,QBA
            DJNZ R0,QBA
        QBC:CLR P3.2
            CLR TR0                  
            MOV 70H,tl0
            MOV 71H,tH0
            MOV R2,71H
            MOV R3,70H
            MOV R6,#22H
            MOV R7,#0H
            LCALL MULD                        
            MOV R6,#64H
            MOV R7,#0H
            LCALL DIVD
            MOV 73H,R2
            MOV 74H,R3
            MOV R3,#0H
            MOV R4,#0H
            MOV R5,#0H
            MOV R6,73H
            MOV R7,74H   
            LCALL HB2                    
            MOV A,R4       ;分离BCD
            MOV B,#10H
            DIV AB
            MOV 78H,A
            MOV 77H,B
            MOV A,R5
            MOV B,#10H
            DIV AB
            MOV 76H,A
            MOV 75H,B
            MOV 7AH,#0EFH
回复

使用道具 举报

地板
ID:78060 发表于 2015-4-26 23:06 | 只看该作者
谢谢分享!!收藏!!
回复

使用道具 举报

5#
ID:78611 发表于 2015-5-4 23:16 | 只看该作者
为啥输进程序都只显示8000,怎么弄都不好使
回复

使用道具 举报

6#
ID:78611 发表于 2015-5-4 23:17 | 只看该作者
还有乘37那段不是很懂
回复

使用道具 举报

7#
ID:44267 发表于 2015-12-26 08:04 | 只看该作者
顶一个
回复

使用道具 举报

8#
ID:138687 发表于 2016-9-7 10:06 | 只看该作者
很好,有用
回复

使用道具 举报

9#
ID:134692 发表于 2017-1-17 23:10 | 只看该作者
学习学习    谢谢分享  
回复

使用道具 举报

10#
ID:407940 发表于 2018-11-29 17:26 | 只看该作者
有没有c语言版的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

快速回复 返回顶部 返回列表