找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2|回復: 0
打印 上一主題 下一主題
收起左側

單片機匯編語言超聲波測距報警程序和Proteus仿真

[復制鏈接]
跳轉到指定樓層
樓主
ID:663806 發(fā)表于 2025-6-23 21:32 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
匯編程序編寫,分享給各位
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1.         RS BIT P1.0  ;LCD1602引腳定義
  2.         RW BIT P1.1
  3.         EN BIT P1.2
  4.                
  5.         ECHO BIT P3.6       ;回波信號端
  6.                
  7.                 NUM        EQU 40H   ;定時器用
  8.         H        EQU 41H    ;距離高8位
  9.         L        EQU 42H    ;距離低8位

  10.                 ORG 0000H
  11.         LJMP MAIN
  12.         ORG 000BH         ;定時器0入口
  13.         LJMP TIME0
  14.         ORG 0030H
  15.         MAIN:
  16.         MOV SP,#60H
  17.         MOV R0,#40H     
  18.         MOV A,#0
  19.         MOV NUM,#0
  20.         MOV H,#0
  21.         MOV L,#0
  22.    
  23.         
  24.         MOV H,#1
  25.         MOV L,#0
  26.         LCALL  LCD1602_INIT  ;1602初始化
  27.         LCALL DELAY2
  28.         
  29.         MOV A,#80H
  30.         LCALL WRITE_1602COM
  31.         MOV DPTR,#CODE_PRINT
  32.         LCALL PRINT
  33.      
  34.         MOV TMOD,#11H               ;初始化定時器
  35.         MOV TH0,#0;
  36.         MOV TL0,#0;
  37.         SETB EA
  38.         SETB ET0
  39.         
  40.         ;主循環(huán)
  41. LOOP:  
  42.         SETB TR1
  43. LOOP1:
  44.         JB ECHO,LOOP2
  45.         SJMP LOOP1
  46. LOOP2:
  47.         SETB TR0
  48. LOOP3:
  49.         JNB ECHO,LOOP4
  50.         SJMP LOOP3
  51. LOOP4:
  52.         CLR TR0
  53.         LCALL COUNT
  54.         LCALL DISPLAY     ;顯示距離
  55.         SJMP LOOP6
  56. LOOP5:
  57.         CLR TR0
  58.         MOV TH0,#0;   
  59.         MOV TL0,#0;
  60. LOOP6:
  61.         SJMP LOOP        
  62.                
  63. COUNT:  ;計算距離 cm=us/58
  64.         MOV R1,TH0
  65.         MOV R0,TL0
  66.         MOV L,#0
  67.         MOV H,#0
  68.         MOV TH0,#0
  69.         MOV TL0,#0
  70. DIS1:
  71.       CLR  C             ;循環(huán)被除數(shù)減去除數(shù)的次數(shù)就是這個商
  72.       MOV  A, R0
  73.       SUBB A, #3AH
  74.       MOV  R0, A
  75.       MOV  A, R1
  76.       SUBB A, #0
  77.       MOV  R1, A
  78.       JC   DIS2
  79.       INC  L
  80.           MOV A,L
  81.       CJNE A,#0,DIS1
  82.           INC H
  83.       SJMP DIS1
  84. DIS2:
  85.       RET

  86.         
  87. DISPLAY:                ;顯示距離
  88.         MOV R6,H   
  89.         MOV R7,L
  90.         LCALL HB2           ;2字節(jié)16進制數(shù)轉換為3字節(jié)壓縮BCD碼
  91.         MOV A,#089H
  92.         MOV B,R4
  93.         LCALL DIS_1BIT
  94.         MOV A,R5
  95.         LCALL DIS_2BIT
  96.                 CJNE R4,#3,DIS0
  97.                 CLR P3.7
  98.         RET
  99. DIS0:
  100.                 SETB P3.7
  101.         RET
  102.                
  103.         
  104.         ;LCD1602初始化函數(shù)
  105. LCD1602_INIT:
  106.         MOV A,#38H
  107.         LCALL WRITE_1602COM
  108.         MOV A,#0CH
  109.         LCALL WRITE_1602COM
  110.         MOV A,#06H
  111.         LCALL WRITE_1602COM
  112.         MOV A,#01H
  113.         LCALL WRITE_1602COM
  114.         RET
  115.         
  116.         WRITE_1602COM:  ;寫命令
  117.         CLR RS
  118.         CLR RW
  119.         MOV P0,A
  120.         LCALL DELAY1
  121.         SETB EN
  122.         LCALL DELAY1
  123.         CLR EN
  124.         RET
  125.         WRITE_1602DAT: ;寫數(shù)據(jù)
  126.         SETB RS
  127.         CLR RW
  128.         MOV P0,A
  129.         LCALL DELAY1
  130.         SETB EN
  131.         LCALL DELAY1
  132.         CLR EN
  133.         RET
  134.         
  135.         
  136.         ;1602顯示字符串函數(shù)
  137. PRINT:
  138.         MOV R0,#0
  139. PRINT1:
  140.         MOV A,R0
  141.         MOVC A,@A+DPTR
  142.         CJNE A,#0,PRINT0
  143.         RET
  144. PRINT0:
  145.         LCALL WRITE_1602DAT
  146.         INC R0
  147.         SJMP PRINT1
  148.         
  149.         
  150.         ;1602顯示2位整數(shù)
  151. DIS_2BIT:
  152.         MOV B,#16
  153.         DIV AB
  154.         ADD A,#30H
  155.         LCALL WRITE_1602DAT
  156.         MOV A,B
  157.         ADD A,#30H
  158.         LCALL WRITE_1602DAT
  159.         RET
  160.         
  161.         ;1602顯示1位整數(shù)
  162. DIS_1BIT:                ;A是地址 B放數(shù)據(jù)
  163.         LCALL WRITE_1602COM
  164.         MOV A,B
  165.         ADD A,#30H
  166.         LCALL WRITE_1602DAT
  167.         RET
  168.         
  169.         DELAY1:       ;延時1
  170.         MOV 30H,#20
  171.         DJNZ 30H,$
  172.         RET
  173.         
  174.         DELAY2:       ;延時2
  175.         MOV 30H,#50
  176.         DELAY20:
  177.         MOV 31H,#50
  178.         DJNZ 31H,$
  179.         DJNZ 30H,DELAY20
  180.         RET
  181.         
  182.         ;定時器0中斷函數(shù)
  183. TIME0:
  184.         RETI
  185.            
  186.         
  187. HB2:
  188.         CLR        A        ;BCD碼初始化
  189.         MOV        R3,A
  190.         MOV        R4,A
  191.         MOV        R5,A
  192.         MOV        R2,#10H        ;轉換雙字節(jié)十六進制整數(shù)
  193. HB3:        
  194.         MOV        A,R7        ;從高端移出待轉換數(shù)的一位到CY中
  195.         RLC        A
  196.         MOV        R7,A
  197.         MOV        A,R6
  198.         RLC        A
  199.         MOV        R6,A
  200.         MOV        A,R5        ;BCD碼帶進位自身相加,相當于乘2
  201.         ADDC        A,R5
  202.         DA        A        ;十進制調整
  203.         MOV        R5,A
  204.         MOV        A,R4
  205.         ADDC        A,R4
  206.         DA        A
  207.         MOV        R4,A
  208.         MOV        A,R3
  209.         ADDC        A,R3
  210.         MOV        R3,A        ;雙字節(jié)十六進制數(shù)的萬位數(shù)不超過6,不用調整
  211.         DJNZ        R2,HB3        ;處理完16bit
  212.         RET        
  213.         
  214. CODE_PRINT:
  215.         DB "DISTANCE     cm",0

  216.         END
復制代碼

仿真程序下載: 01.7z (52.24 KB, 下載次數(shù): 0)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表