匯編程序編寫,分享給各位
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei圖片_20250623213624.png (201.45 KB, 下載次數(shù): 0)
下載附件
2025-6-23 21:32 上傳
單片機源程序如下:
- RS BIT P1.0 ;LCD1602引腳定義
- RW BIT P1.1
- EN BIT P1.2
-
- ECHO BIT P3.6 ;回波信號端
-
- NUM EQU 40H ;定時器用
- H EQU 41H ;距離高8位
- L EQU 42H ;距離低8位
- ORG 0000H
- LJMP MAIN
- ORG 000BH ;定時器0入口
- LJMP TIME0
- ORG 0030H
- MAIN:
- MOV SP,#60H
- MOV R0,#40H
- MOV A,#0
- MOV NUM,#0
- MOV H,#0
- MOV L,#0
-
-
- MOV H,#1
- MOV L,#0
- LCALL LCD1602_INIT ;1602初始化
- LCALL DELAY2
-
- MOV A,#80H
- LCALL WRITE_1602COM
- MOV DPTR,#CODE_PRINT
- LCALL PRINT
-
- MOV TMOD,#11H ;初始化定時器
- MOV TH0,#0;
- MOV TL0,#0;
- SETB EA
- SETB ET0
-
- ;主循環(huán)
- LOOP:
- SETB TR1
- LOOP1:
- JB ECHO,LOOP2
- SJMP LOOP1
- LOOP2:
- SETB TR0
- LOOP3:
- JNB ECHO,LOOP4
- SJMP LOOP3
- LOOP4:
- CLR TR0
- LCALL COUNT
- LCALL DISPLAY ;顯示距離
- SJMP LOOP6
- LOOP5:
- CLR TR0
- MOV TH0,#0;
- MOV TL0,#0;
- LOOP6:
- SJMP LOOP
-
- COUNT: ;計算距離 cm=us/58
- MOV R1,TH0
- MOV R0,TL0
- MOV L,#0
- MOV H,#0
- MOV TH0,#0
- MOV TL0,#0
- DIS1:
- CLR C ;循環(huán)被除數(shù)減去除數(shù)的次數(shù)就是這個商
- MOV A, R0
- SUBB A, #3AH
- MOV R0, A
- MOV A, R1
- SUBB A, #0
- MOV R1, A
- JC DIS2
- INC L
- MOV A,L
- CJNE A,#0,DIS1
- INC H
- SJMP DIS1
- DIS2:
- RET
-
- DISPLAY: ;顯示距離
- MOV R6,H
- MOV R7,L
- LCALL HB2 ;2字節(jié)16進制數(shù)轉換為3字節(jié)壓縮BCD碼
- MOV A,#089H
- MOV B,R4
- LCALL DIS_1BIT
- MOV A,R5
- LCALL DIS_2BIT
- CJNE R4,#3,DIS0
- CLR P3.7
- RET
- DIS0:
- SETB P3.7
- RET
-
-
- ;LCD1602初始化函數(shù)
- LCD1602_INIT:
- MOV A,#38H
- LCALL WRITE_1602COM
- MOV A,#0CH
- LCALL WRITE_1602COM
- MOV A,#06H
- LCALL WRITE_1602COM
- MOV A,#01H
- LCALL WRITE_1602COM
- RET
-
- WRITE_1602COM: ;寫命令
- CLR RS
- CLR RW
- MOV P0,A
- LCALL DELAY1
- SETB EN
- LCALL DELAY1
- CLR EN
- RET
- WRITE_1602DAT: ;寫數(shù)據(jù)
- SETB RS
- CLR RW
- MOV P0,A
- LCALL DELAY1
- SETB EN
- LCALL DELAY1
- CLR EN
- RET
-
-
- ;1602顯示字符串函數(shù)
- PRINT:
- MOV R0,#0
- PRINT1:
- MOV A,R0
- MOVC A,@A+DPTR
- CJNE A,#0,PRINT0
- RET
- PRINT0:
- LCALL WRITE_1602DAT
- INC R0
- SJMP PRINT1
-
-
- ;1602顯示2位整數(shù)
- DIS_2BIT:
- MOV B,#16
- DIV AB
- ADD A,#30H
- LCALL WRITE_1602DAT
- MOV A,B
- ADD A,#30H
- LCALL WRITE_1602DAT
- RET
-
- ;1602顯示1位整數(shù)
- DIS_1BIT: ;A是地址 B放數(shù)據(jù)
- LCALL WRITE_1602COM
- MOV A,B
- ADD A,#30H
- LCALL WRITE_1602DAT
- RET
-
- DELAY1: ;延時1
- MOV 30H,#20
- DJNZ 30H,$
- RET
-
- DELAY2: ;延時2
- MOV 30H,#50
- DELAY20:
- MOV 31H,#50
- DJNZ 31H,$
- DJNZ 30H,DELAY20
- RET
-
- ;定時器0中斷函數(shù)
- TIME0:
- RETI
-
-
- HB2:
- CLR A ;BCD碼初始化
- MOV R3,A
- MOV R4,A
- MOV R5,A
- MOV R2,#10H ;轉換雙字節(jié)十六進制整數(shù)
- HB3:
- MOV A,R7 ;從高端移出待轉換數(shù)的一位到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 ;雙字節(jié)十六進制數(shù)的萬位數(shù)不超過6,不用調整
- DJNZ R2,HB3 ;處理完16bit
- RET
-
- CODE_PRINT:
- DB "DISTANCE cm",0
- END
復制代碼
仿真程序下載:
01.7z
(52.24 KB, 下載次數(shù): 0)
2025-6-23 21:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|