Upload
tran-thanh-hoang
View
25
Download
3
Embed Size (px)
DESCRIPTION
t
Citation preview
Thiết kế cân điện tử
Yêu cầu:
Sử dụng vi xử lý 8051 thiết kế cân điện tử :
+có thể tuỳ chỉnh đơn giá(từ 0 lên 20.0$),
+nhận giá trị từ cảm biến,hiển thị khối lượng ra lcd
+hiển thị số tiền cần thanh toán ra lcd(khối lượng X đơn giá)
+hiển thị đơn giá,giá tiền,khối lượng ra máy tính
+tuỳ chỉnh lại đơn giá rồi tiếp tục cân hoặc tiếp tục cân lại mà không cần chỉnh lại đơn giá
Phương pháp:
+Dùng p1.0 và p1.1 đề điểu chỉnh đơn giá.
+điều chỉnh xong thì dùng p1.2 để bắt đầu cân
+Nhận tín từ adc (tương cảm biến khối lượng của cân điện tử). Điều chỉnh giá trị của adc bằng biến trở(tương đương việc thay đổi khối lượng của vật cần cân)
+Hiển thị số tiền cần thanh toán =khối lượng X đơn(=r1 x giá trị lấy từ adc) giá ra lcd
+Hiển thị ra màn hình máy tính qua cổng com(rs232) nối tiếp tốc độ baud 19200
+bấm nút p1.4 để điều chỉnh giá rồi tiếp tục thực hiện như bươc đầu hoặc p1.5 để cân tiếp vs giá cũ
Sơ đồ giải thuật
Start
R1=0(đơn giá)
P1.0 =0 Inc r1
=1
P1.1 =0 dec r1 =1
=1 P1.2
=0
Adc
Hiển thị Lcd
nhân giá trị adc vs r1 (khối lượng X đơn giá)
Hiển thị Lcd
=1 P1.3
=0
Hiển thị cái giá trị ra máy tính
P1.4 =0
=1
=0 P1.5 =1
Thiết kế phần cứng
+LCD:
+ADC
+RS232:
Code:
ORG 2000H
MOV SCON,#52H ;chế độ uart 8bit chỉnh (chỉnh bằng timer),chế độ phát
MOV TMOD,#21H ,timer 0 chế độ 16bit,timer 1 chế độ 8bit tự nạp giá trị đầu
MOV DPTR,#8000H
ACALL CLEAR
MOV DPTR,#8000H
call hienthican
main: call DATgia
can: call nhap_adc
call hienmaytinh
laphet2: mov c,p1.4 ;có đặt lại giá không?
jc laphet1
jmp main
laphet1: mov c,p1.5 ;cân lại mà không đặt lại giá
jc laphet2
jmp can
sjmp $
hienmaytinh: ;chương trình con xuất các thông tin qua máy tính
MOV TH1,#-3
SETB TR1
MOV R7,#4
MOV A,#0
PUSH ACC
lapmay1:
mov dptr,#MESS3
MOVC A, @A+DPTR
CALL OUT_CHAR
POP ACC
INC ACC
PUSH ACC
DJNZ R7, Lapmay1
MOV A,R6
CALL OUT_CHAR
MOV A,R5
CALL OUT_CHAR
MOV A,R4
CALL OUT_CHAR
MOV A,R3
CALL OUT_CHAR
mov a,#2ch
CALL OUT_CHAR
MOV A,R2
CALL OUT_CHAR
mov a,#24h
CALL OUT_CHAR
MOV R7,#2
MOV A,#0
PUSH ACC
taotrong1:
MOV DPTR, #MESS4
MOVC A, @A+DPTR
CALL OUT_CHAR
POP ACC
INC ACC
PUSH ACC
DJNZ R7,taotrong1
MOV R7,#3
MOV A,#0
PUSH ACC
lapmay2:
mov dptr,#MESS1
push acc
MOVC A, @A+DPTR
CALL OUT_CHAR
POP ACC
INC ACC
PUSH ACC
DJNZ R7, Lapmay2
MOV DPTR,#4000H
MOV A,#0
MOVX @DPTR,A
CALL DELAY_2
MOVX A,@DPTR
push acc
CALL BINTOASCII
MOV A,R4
CALL OUT_CHAR
MOV A,R3
CALL OUT_CHAR
MOV A,R2
CALL OUT_CHAR
mov a,#47h
CALL OUT_CHAR
MOV R7,#2
MOV A,#0
PUSH ACC
taotrong2:
MOV DPTR, #MESS4
MOVC A, @A+DPTR
CALL OUT_CHAR
POP ACC
INC ACC
PUSH ACC
DJNZ R7,taotrong2
MOV R7,#3
MOV A,#0
PUSH ACC
lapmay4:
MOV DPTR, #MESS3
MOVC A, @A+DPTR
CALL OUT_CHAR
POP ACC
INC ACC
PUSH ACC
DJNZ R7, Lapmay4
mov a,r1
CALL BINTOASCII
MOV A,R4
CALL OUT_CHAR
MOV A,R3
CALL OUT_CHAR
mov a,#2ch
CALL OUT_CHAR
MOV A,R2
CALL OUT_CHAR
mov a,#24h
CALL OUT_CHAR
mov a,#2fh
CALL OUT_CHAR
mov a,#47h
CALL OUT_CHAR
jmp laphet2
hienthican: MOV DPTR,#8000H ;chương trình con hiện các chú thích lên lcd
ACALL LCD_INIT
ACALL CLEAR
MOV A,#80H
ACALL WRITE_COMMAND
mov r0,#3
MOV DPTR,#MESS3
ACALL XUAT_CHUOI_1
mov a,#086h
CALL WRITE_COMMAND
mov a,#24h
ACALL WRITE_CHAR
mov a,#2fh
ACALL WRITE_CHAR
mov a,#47h
ACALL WRITE_CHAR
MOV A,#8aH
ACALL WRITE_COMMAND
mov r0,#3
MOV DPTR,#MESS1
ACALL XUAT_CHUOI_1
mov a,#08fh
CALL WRITE_COMMAND
mov a,#47h
ACALL WRITE_CHAR
mov a,#0c0h
CALL WRITE_COMMAND
MOV DPTR,#MESS2
MOV R0,#4
CALL XUAT_CHUOI_1
mov a,#0c9h
CALL WRITE_COMMAND
mov a,#24h
ACALL WRITE_CHAR
ret
OUT_CHAR: ;chương trình con xuất 1 ký tự qua máy tính
JNB TI, $
CLR TI
MOV SBUF, A
RETi
DATgia: ;chương trình con cài đặt đơn giá
gia: mov c,p1.0
jc gia1
inc r1
gia1: mov c,p1.1
jc gia2
dec r1
gia2:
CALL LCD_INIT
MOV A,#82H
CALL WRITE_COMMAND
mov a,r1
CALL BINTOASCII
MOV A,R4
CALL WRITE_CHAR
MOV A,R3
CALL WRITE_CHAR
mov a,#2ch
CALL WRITE_CHAR
MOV A,R2
CALL WRITE_CHAR
mov c,p1.2
jc gia
ret
CLEAR: MOV A,#01H ;chương trình con xoá lcd
ACALL WRITE_COMMAND
RET
LCD_INIT: MOV DPTR,#8000H ; ;chương trình con khởi động lcd
MOV A,#38H
CALL WRITE_COMMAND
MOV A,#0EH
CALL WRITE_COMMAND
MOV A,#06H
CALL WRITE_COMMAND
mov a,#0ch
CALL WRITE_COMMAND
RET
nhap_adc: ;chương trình thực hiện nhận giá trị adc và tính toán giá tiền
CALL LCD_INIT
MOV A,#8cH
CALL WRITE_COMMAND
MOV DPTR,#4000H
MOV A,#0
MOVX @DPTR,A
CALL DELAY_2
MOVX A,@DPTR
push acc
CALL BINTOASCII
MOV A,R4
CALL WRITE_CHAR
MOV A,R3
CALL WRITE_CHAR
MOV A,R2
CALL WRITE_CHAR
pop acc
mov b,r1
call thanhtien
CALL LCD_INIT
MOV A,#0c3H
CALL WRITE_COMMAND
MOV A,R6
CALL WRITE_CHAR
MOV A,R5
CALL WRITE_CHAR
MOV A,R4
CALL WRITE_CHAR
MOV A,R3
CALL WRITE_CHAR
mov a,#2ch
CALL WRITE_CHAR
MOV A,R2
CALL WRITE_CHAR
mov c,p1.3
jc nhap_adc
ret
XUAT_CHUOI_1: ;chương trình con xuất 1 chuỗi mong muốn ra lcd
MOV A,#0
LAP_CHUOI1:
push dph
push dpl
push acc
MOVC A,@A+DPTR
MOV DPTR,#8000H
ACALL WRITE_CHAR
pop acc
inc a
pop dpl
pop dph
djnz r0,LAP_CHUOI1
RET
WRITE_COMMAND: ;chương trình con xuất 1 lệnh cho lcd
MOV DPTR,#8000H
SETB P3.4
CLR P3.5
MOVX @DPTR,A
CLR P3.4
ACALL DELAY_1
RET
BINTOASCII: ;chương trình con chuyển 1 hex trong acc ra 3 số hàng trăm,chục,đơn vị.rồi chuyển sang mã ASCII tương ứng của 3 số đó vào r2,r3,r4
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV R3,B
MOV R4,A
MOV A,#30H
ADD A,R2
MOV R2,A
MOV A,#30H
ADD A,R3
MOV R3,A
MOV A,#30H
ADD A,R4
MOV R4,A
RET
WRITE_CHAR:
MOV DPTR,#8000H
SETB P3.4
SETB P3.5
MOVX @DPTR,A
CLR P3.4
CALL DELAY_1
RET
DELAY_1:
MOV TH0,#HIGH(-50000)
MOV TL0,#LOW(-50000)
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
RET
DELAY_2: MOV R6,#2
LAP1: MOV R5,#255
LAP2: MOV R4,#250
DJNZ R4,$
DJNZ R5,LAP2
DJNZ R6,LAP1
RET
thanhtien: ,chương trình con thực hiện nhân 2 số hex rồi chuyển thành thập phân với các ký số riêng biệt,chuyển sang mã ASCII tương ưng rồi lưu trong r2,r3,r3,r5,r6.
mul ab
push acc
mov a,b
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV R3,B
MOV R4,A
pop acc
mov b,a
mov a,r4
push acc
mov a,r3
push acc
mov a,r2
push acc
mov a,b
MOV B,#10
DIV AB
MOV R2,B
MOV B,#10
DIV AB
MOV R3,B
MOV R4,A
pop acc
push acc
mov b,#6
mul ab
add a,r2
MOV B,#10
DIV AB
MOV R2,B
mov r7,a
pop acc
mov r0,a
mov b,#5
mul ab
add a,r3
add a,r7
mov r7,a
pop acc
mov b,a
push acc
mov a,r0
push acc
mov a,b
mov b,#6
mul ab
add a,r7
MOV B,#10
DIV AB
MOV R3,B
mov r7,a
pop acc
mov b,#2
mul ab
add a,r7
add a,r4
mov r4,a
pop acc
mov r5,a
mov b,#5
mul ab
add a,r4
mov r4,a
pop acc
mov b,a
push acc
mov a,r5
push acc
mov a,b
mov b,#6
mul ab
add a,r4
MOV B,#10
DIV AB
MOV R4,B
mov r7,a
pop acc
mov b,#2
mul ab
add a,r7
mov r7,a
pop acc
mov b,a
push acc
mov a,b
mov b,#5
mul ab
add a,r7
MOV B,#10
DIV AB
MOV R5,B
mov r7,a
pop acc
mov b,#2
mul ab
add a,r7
MOV B,#10
DIV AB
MOV R6,B
MOV A,#30H
ADD A,R2
MOV R2,A
MOV A,#30H
ADD A,R3
MOV R3,A
MOV A,#30H
ADD A,R4
MOV R4,A
MOV A,#30H
ADD A,R5
MOV R5,A
MOV A,#30H
ADD A,R6
MOV R6,A
ret
MESS1: DB 'w: '
MESS2: DB 'tt: '
MESS3: DB 'p: '
Mess4: db ' '
END