Thiet ke may tinh cong tru nhan chia su dung vi xu ly 8051.

  • Số trang: 30 |
  • Loại file: PDF |
  • Lượt xem: 13 |
  • Lượt tải: 0
nganguyen

Đã đăng 34173 tài liệu

Mô tả:

CALCULATOR MICROPROCESSOR 8951 DIGITAL TECHNOLOGY DIGITAL TECHNOLOGY UNIVERSITY OF TRANSPORT IN HOCHIMINH CITY TD06-NHÓM VI-ĐỀ TÀI 12 CALCULATOR C1 GROUP VI - TD06 - HCMUTRANS LCD1 LM020L X1 D0 D1 D2 D3 D4 D5 D6 D7 7 8 9 10 11 12 13 14 RS RW E RS RW E 0 1 2 3 4 5 6 7 VSS VDD VEE 1 2 3 B 8 9 CLR CLR C 4 5 6 7 D 0 1 2 3 ON/C 4 3 ALL p1.3 AT89C51 p1.0 10k 10 11 12 13 14 15 16 17 = p1.2 R1 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD + A 2   P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 VCC p1.1 Reset 1 2 3 4 5 6 7 8 GND 1 C3 PSEN ALE EA 21 22 23 24 25 26 27 28 GROUP6-TD06-HCMUTRANS p1.7 10uF p1.7 p1.5 p1.4 p1.2p1.0 p1.6 p1.3 p1.1 29 30 31 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 10k p1.6 RST VCC RV1 39 38 37 36 35 34 33 32 p1.5 9 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 p1.4 18 30p XTAL1 7 6 5 4 32 1 0 19 4 5 6 U1 FREQ=12MHz RSRW E C2 CRYSTAL 81% 30p CALCULATOR CALCUL Y OF TRANSPORT I N HOCHI MI ALCUL Y  GVHD: HOÀNG XUÂN DƯƠNG  THỰC HIỆN: NHÓM VI - Nguyễn Công Long - Lê Văn Tình - Hoàng Ngọc Ninh -Trần Võ Ngọc Quỳnh - Nguyễn Văn Thắng(A) TD06025 TD06042 TD06034 TD06038 TD06046 Let’s make things better          HCM 25/4/2009 NHÓM 6 CALCULATOR BÁO CÁO BÀI TẬP LỚN VI XỬ LÝ  Nội dung: A. PHẦN MỀM: 1. 2. 3. 4. 5. GIAO TIẾP 8951 VÀ LCD GIAO TIẾP 8951 VÀ BÀN PHÍM CHƯƠNG TRÌNH CHÍNH CÁC CHƯƠNG TRÌNH CON MÔ PHỎNG TRÊN PROTUES B. PHẦN CỨNG: 1. BẢN VẼ MẠCH IN TRÊN ORCAD 2. MẠCH PHẦN CỨNG THỰC TẾ C. KẾT LUẬN:  Nhận xét của thầy giáo: …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… …………………………………………………………………………………… ………………………………………… Chữ ký: NHÓM 6 CALCULATOR A.PHẦN MỀM: 2. GIAO TIẾP 8951 VÀ LCD: a. Tổng quan LCD Trong những năm gần đây, LCD (Liquid Crystal Display) đã được sử dụng rộng rãi thay thế cho LED 7 đoạn hay các loại LED nhiều đoạn khác. Ngày nay LCD với những tính năng nổi trội của nó đã được sử dụng rất nhiều trong vi điều khiển. Khả năng hiện thị của LCD là rất đa dạng, trực quan (chữ, số và nhiều loại ký tự đồ họa khác), dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức khác nhau, giá thành rẻ… LCD sử dụng trong mạch: TC1602_01T - Hình dạng, kích thước: - Sơ đồ chân: b. Giao tiếp LCD với 8951: Nhóm chúng tôi thực hiện giao tiếp trực tiếp với 8951 (kết nối 8 bit): - P2.0  P2.7 (của 8951) nối với DB0  DB7 (của LCD) - P3.0 nối với E (chân 6 của LCD) - P3.1 nối với RW (chân 5 của LCD) - P3.2 nối với RS (chân 4 của LCD) Để thuận lợi cho việc viết chương trình, chúng tôi định nghĩa các chân và nhóm chân của LCD như sau (định nghĩa đầu chương trình): RS RW E D A T A_LC D BIT BIT BIT EQ U P3.2 P3.1 P3.0 P2 Các chương trình con khi giao tiếp với LCD:  Xử lý đường điều khiển E: NHÓM 6 CALCULATOR - Để thiết lập các lệnh hay gởi dữ liệu ký tự cho LCD, ta phải tạo ra một xung cạnh xuống trên chân E, do đó ta đưa chân E lên mức cao, tạo một đỗ trễ khoảng 200ms (để tạo độ rộng xung) và sau đó đưa E xuống thấp, ta có thể coi nó là một chương trình con để ra lệnh cho LCD đọc dữ liệu, coi nó là một chương trình con: LENH: SETB E LCALL DELAY2 CLR E RET - Đọc dữ liệu hay trạng thái từ LCD: tạo một xung cạnh lên, chương trình như sau: LENH2: - CLR E LCALL DELAY2 SETB E RET Chương trình delay: 200ms, timer1, chế độ 1 DELAY2: LL: MOV MOV MOV MOV SETB JNB CLR CLR DJNZ MOV RET TMOD,#10H R7,#4 TH1,#HIGH(-50000) TL1,#LOW(-50000) TR1 TF1,$ TR1 TF1 R7,LL R7,#00H  Kiểm tra trạng thái bận LCD: Trong khi viết chương trình ta phải kiểm tra xem LCD có còn bận thực hiện lệnh đã nhận trước đó hay không. Khi thực hiện các hoạt động bên trong chíp, mạch nội bên trong cần một khoảng thời gian để hoàn tất. Khi đang thực thi các hoạt động bên trong chip như thế, LCD bỏ qua mọi giao tiếp với bên ngoài và bật cờ BF (thông qua chân DB7 khi có thiết lập RS=0, R/W=1) lên để báo cho 8951 biết nó đang “bận”. Dĩ nhiên, khi xong việc, nó sẽ đặt cờ BF lại mức 0. Dựa trên nguyên tắc đó ta viết đoạn chương trình con kiểm tra trạng thái bận của LCD như sau: WAIT_LCD: CLR CLR SETB MOV SETB MOV JB CLR CLR RET E RS RW DATA_LCD,#0FFH E A,DATA_LCD ACC.7,WAIT_LCD RW RS  Khởi tạo LCD: chương trình khởi tạo LCD như sau: KHOITAO: CLR RS ;Chọn chế độ gởi lệnh NHÓM 6 CALCULATOR MOV LCALL LCALL CLR MOV LCALL LCALL RET DATA_LCD,#38H LENH WAIT_LCD RS DATA_LCD,#0FH LENH WAIT_LCD ;Chọn bus 8bit, font ký tự 5x8, 2 hàng ;Gọi lệnh thực thi xuất ra LCD ;Kiểm tra trạng thái bận của LCD ;Chọn chế độ gởi lệnh ;LCD on, bật cursor  Xóa màn hình hiển thị LCD: CLR_LCD: MOV DATA_LCD,#01H LCALL LENH LCALL WAIT_LCD RET  Ghi ra màn hình LCD: CÁCH 1: WRITE_TEXT: SETB SETB E RS MOV DATA_LCD,#’T’ CLR E LCALL WAIT_LCD RET ;E=1 bắt đầulệnh LCD ;RS=1 để chọn thanh chế độ xuất ;các dữ liệu ký tự để hiển thị lên LCD ;goi dữ liệu ký tự chữ T lên LCD ;E=0 tạo cạnh xuống ; Kiểm tra xem LCD còn bận hay không CACH2: WRITE_TEXT: SETB MOV LCALL LCALL RET RS DATA_LCD,#’T’ LENH WAIT_LCD Trong chương trình có một số đoạn chương trình xuất chữ, VD: WRITE_TEXT1: MOV A,R6 MOV DPTR,#TEN1 MOVC A,@A+DPTR SETB RS MOV DATA_LCD,A LCALL LENH LCALL WAIT_LCD MOV A,R6 INC A MOV R6,A CJNE A,#18,WRITE_TEXT1 RET TEN1: DB ‘!DH GTVT TPHCM! ‘ NHÓM 6 CALCULATOR 3. GIAO TIẾP 8951 VỚI BÀN PHÍM 4x4: Kết nối: NHÓM 6 CALCULATOR P1.7 C4 P1.6 C3 P1.7 P1.7 P1.5 C2 P1.4 C1 P1.3 H4 P1.2 3 7 B F 2 6 A E 1 5 9 D 0 4 8 C H3 P1.1 H2 P1.0 H1 Xác định mã các phím nhấn bằng phần mềm: - Khi nhấn phím thì hàng và cột tương ứng sẻ được nối với nhau - Để xác định được phím nhấn ta quét bàn phím: ta thực hiện quét từng hàng, đầu tiên cho hàng 1 ở mức logic 0, các hàng và cột khác ở mức logic 1, ta đoc giá trị hàng và cột thông qua Port 1. NHÓM 6 CALCULATOR - - Nếu 1 phím nào đó được nhấn: hàng và cột tương ướng nối với nhau và ở mức logic 0, tuân theo quy tắc sau ta xác định mã phím: +Ta có số hàng là 4: đếm theo thứ tự hi = 1(ứng với H4), 2( ứng với H3), 3(ứng với H2), 4(ứng với H1) ci = 0 (ứng với C1), 4(ứng với C2), 8(ứng với C3), 12(ứng với C4) Ta có thể thấy các cột hơn kém nhau 4 đơn vị Mã phími = (4-hi)+ci Ta thực hiện quét 4 lần, lần lượt 4 hàng Chương trình con quét bàn phím như sau: SCAN_KEY Mã quét hàng = 11111110 B Nạp (đếm hàng) = 4 Xuất (mã quét hàng) Ra port 1 Đọc giá trị hàng và cột ở Port1 vào A Xóa các bit hàng [4 bit thấp] Giữ lại các bit cột [4 bit cao] Có phím ấn? [Có bít cột nào =0] 1 Quay trái mã quét hàng [quét hàng kế] Giảm (đếm hàng) NHÓM 6 (Đếm hàng) = 0 Xóa (cờ) CALCULATOR 2 1 Xác định hàng có phím nhấn (hàng) = 4 – (đếm hàng) (mã phím) = (hàng) NHÓM 6 CALCULATOR Chuyễn mã cột về 4 bit thấp (đếm cột) = 4 Quay phải (A) qua cờ C [để xác định vị trí của cột = 0] (C) = 0 (mã phím) = (hàng) + 4 Giảm (đếm cột) (Đếm cột) = 0 Đặt (cờ) = 1 Cất mã phím vào A 2 Ret Chương trình con quét bàn phím được viết như sau: SCAN_KEY: MOV MOV SCAN: R1,#0FEH R6,#4 MOV MOV ANL CJNE XCH RL XCH P1,R1 A,P1 A,#0F0H A,#0F0H,GET_CODE A,R1 A A,R1 NHÓM 6 CALCULATOR EXIT: DJNZ CLR LJMP GET_CODE: PUSH MOV CLR SUBB MOV POP SWAP MOV LOOP2: RRC JNC XCH ADD XCH DJNZ SET_FLAG: SETB MOV MOV MOV RET R6,SCAN F0 EXIT ACC A,#4 C A,R6 R5,A ACC A R4,#4 A SET_FLAG A,R5 A,#4 A,R5 R4,LOOP2 F0 A,R5 R1,#00H R6,#00H Mạch thực tế được kết nối với Port1 như sau: + P1.7 A = P1.6 B 8 9 CLR CLR P1.5 C 4 5 6 7 P1.4 D 0 1 2 3 ON/C 1 2 3 4 ALL P1.0 P1.1 P1.2 P1.3 NHÓM 6 CALCULAT O R SƠ ĐỒ MẠCH KẾT NỐI NHƯ SAU: CALCULATOR C1 GROUP VI - TD06 - HCMUTRANS LCD1 LM020L X1 RS RW E D0 D1 D2 D3 D4 D5 D6 D7 7 8 9 10 11 12 13 14 0 1 2 3 4 5 6 7 RS RW E VSS VDD VEE 1 2 3 8 9 CLR CLR C 4 5 6 7 D 0 1 2 3 ON/C ALL 4 3 B 2 10 11 12 13 14 15 16 17 = 1 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD + A p1.3 AT89C51 p1.2 10k P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 VCC p1.1 R1 1 2 3 4 5 6 7 8 GND p1.0 C3 p1.7p1.6 p1.5 p1.4 p1.3p1.2 p1.1 p1.0 10uF Reset PSEN ALE EA 21 22 23 24 25 26 27 28 GROUP6-TD06-HCMUTRANS p1.7 29 30 31 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 10k p1.6 RST VCC RV1 39 38 37 36 35 34 33 32 p1.5 9 XTAL2 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 p1.4 18 30p XTAL1 7 6 5 4 3 2 1 0 19 4 5 6 U1 FREQ=12MHz RS RW E C2 CRYSTAL 81% 30p NHÓM 6 CALCULAT O R 4. CHƯƠNG TRÌNH CHÍNH START K h ởi tạo LCD Xuất chữ 1 Khởi tạo LCD Đặt vị trí cusor cuối dòng 1 của LCD Nạp (đếm chữ số) = 5 Các chữ số sau khi nhấn lưu vào các ô nhớ, bắt đầu là ô nhớ 30H, (R0) = 30H Gán nội dụng các ô nhớ từ 30H tới 33H là 0FFH để dùng khi hiệu chỉnh các số trước khi tính 2 Quét bàn phím Đưa Port1 vào R4 đề kiểm tra (R4) = 0F7H 3 NHÓM 6 CALCULATOR 3 (R4) = 077H Tắt mở chương trình 1 (R4)= 0BBH Gán số tràn phép tính trước = 0 (R4) = 0B7H Gán số tràn phép tính trước = 0 Xóa màn LCD Xóa màn LCD 1 (R4) = 07BH 1 Điều chỉnh và lưu số thứ nhất Xóa màn LCD (R4)= 07DH Điều chỉnh và lưu số thứ nhất Đánh dấu đây là phép tính cộng (60H)= 0FFh 1 Xóa màn LCD (R4) = 07EH Kết quả Đánh dấu đây là phép tính trừ (60H)= 0FFh 1 4 2 NHÓM 6 CALCULAT O R 4 X u ất số khi có phím nhấn Dịch hiển thị sang trái để đợi xuất số kế tiếp (đếm chữ số)= 0 2 Xóa màn LCD Đưa vị trí cursor về đầu dòng 1 Xuất chữ báo: ‘ Nhập 4 số thui! ’ Xóa màn LCD Xóa toàn bộ dữ liệu cũ 1 Đoạn mã chươORG ng trình0000H chính: JMP ORG MAIN 0030H START: MOV DATA_LCD,#0FFH MAIN: LCALL KHOITAO ;##################################################################################### ;CHUONG TRINH CHINH ;-------------------------------------------------------------------------------------------------------------------------LCALL XUATCHU ;Xuất chữ giới thiệu mạch NHAPSO: LCALL KHOITAO MOV DATA_LCD,#8FH LCALL LENH LCALL WAIT_LCD MOV R0,#30H MOV R3,#5 MOV 30H,#0FFH NHÓM 6 CALCULATOR KK: NEXT: MOV MOV MOV LCALL MOV 31H,#0FFH 32H,#0FFH 33H,#0FFH SCAN_KEY R4,P1 CJNE JMP CJNE LCALL R4,#0F7H,NEXT ;Tiep tuc scan key khi tin hieu vao tu ban phim ko co KK R4,#077H,XOATUNGKYTU TATMO ;stop tat mo ct ;Quet ban phim XOATUNGKYTU: CJNE R4,#0BBH,NEXT3 MOV 29H,#0 MOV 39H,#0 LCALL CLR_LCD LJMP NHAPSO NEXT3: CJNE MOV MOV LCALL JMP R4,#0B7H,NEXTCONG 29H,#0 39H,#0 CLR_LCD NHAPSO ;Xoa man hinh NEXTCONG: CJNE LCALL LCALL LCALL CLR MOV LJMP R4,#07BH,NEXTTRU DIEUCHINHSOTHU1 WAIT_LCD CLR_LCD A 60H,#0FFH NHAPSO ;Nhấn phím + ;Luu so vua nhap vao dung vi tri de tinh toan sau NEXTTRU: CJNE LCALL LCALL LCALL CLR MOV LJMP R4,#07DH,NEXTBANG DIEUCHINHSOTHU1 WAIT_LCD CLR_LCD A 60H,#00H NHAPSO ;Nhấn phím ;Luu so vua nhap vao dung vi tri de tinh toan sau NEXTBANG: CJNE R4,#07EH,XUATSO LCALL KETQUA LJMP KK XUATSO: LCALL MOV LCALL LCALL DJNZ LCALL MOV LCALL LCALL MOV LCALL WRITE1 DATA_LCD,#07H LENH WAIT_LCD R3,KK CLR_LCD DATA_LCD,#06H LENH WAIT_LCD R6,#0 WRITE_TEXT3 ;quay lai nhap lai so moi ;quay lai nhap lai so moi ;Nhấn phím = ;Xuất số ra màn hình LCD ;Dich hien thi sang trai de xuat so ke tiep ;Số chữ số có quá 4 không, quá thì báo ngay! ;Xuất báo nhập quá 4 chữ số NHÓM 6 CALCULATOR LCALL CLR_LCD LCALL XOA LJMP NHAPSO END 5. CÁC ĐOẠN CHƯƠNG TRÌNH CON: + Xuất chữ: WRITE_TEXT2 (Số ký tự xuất)=0 A = (số ký tự xuất) DPTR chỉ tới bảng TEN2 Lấy ký tự từ TEN2 vào A SETB RS chọn cđ xuất Xuất ký tự ra màn LCD Lệnh xuất Kiểm tra LCD còn bận không Tăng (số ký tự xuất) WRITE_TEXT2: MOV R6,#0 WW: MOV A,R6 MOV DPTR,#TEN2 MOVC A,@A+DPTR SETB RS MOV DATA_LCD,A LCALL LENH LCALL WAIT_LCD MOV A,R6 INC A MOV R6,A (Số ký tự xuất) = 16 RET NHÓM 6 CALCULATOR CJNE RET A,#16,WW NHÓM 6 CALCULATOR + Tắt mở: TATMO (R3)=(dấu hiệu đã tắt) (R3) = 22H Gán lại dấu hiệu đã mở (69H) = 00H Xuất chữ bye bye Xóa số tràn trong phép tính Xóa màn LCD clear RS Xóa màn LCD Tắt màn LCD (DATA_LCD) = 08H 1 Lệnh xuất TATMO: Kiệm tra LCD còn bận ko Gán lại dấu hiệu đã tắt (69H) = 22H TAT: Đưa Port1 vào R4 đề kiểm tra (R4) = 077H TAT1: MOV CJNE MOV MOV LCALL JMP R3,69H R3,#22H,TAT 69H,#00H 39H,#0 CLR_LCD NHAPSO LCALL MOV LCALL LCALL MOV LCALL LCALL MOV LCALL LCALL CLR_LCD DATA_LCD,#06H LENH WAIT_LCD R6,#0 WRITE_TEXT4 CLR_LCD DATA_LCD,#08H LENH WAIT_LCD MOV 69H,#22H MOV CJNE LJMP RET R4,P1 R4,#077H,TAT1 TATMO NHÓM 6 CALCULATOR +Điều chỉnh và lưu số thứ nhất: ĐIỀU CHỈNH SỐ THỨ 1 (33H) = 0FFH (43H) = (33H) (42H) = (32H) (32H) = 0FFH (43H) = (32H) (41H) = (31H) (40H) = (30H) (42H) = (31H) (39H) = (29H) (41H) = (30H) R (40H) = 0 (31H)= 0FFH (43H) = (31H) R (42H) = (30H) (43H) = (30H) (41H) = 0 (30H) = 0FFH (40H) = 0 (42H) = 0 R R E (41H) = 0 (40H) = 0 R RET DIEUCHINHSOTHU1: B4: B3: MOV CJNE MOV CJNE MOV CJNE MOV CJNE MOV MOV MOV MOV LJMP MOV A,33H A,#0FFH,B1 A,32H A,#0FFH,B2 A,31H A,#0FFH,B3 A,30H A,#0FFH,B4 43H,30H 42H,#00H 41H,#00H 40H,#00H EXIT1 43H,31H B2: B1: MOV MOV MOV LJMP MOV MOV MOV MOV LJMP MOV MOV MOV MOV EXIT1: 42H,30H 41H,#00H 40H,#00H EXIT1 43H,32H 42H,31H 41H,30H 40H,#00H EXIT1 43H,33H MOV 42H,32H 41H,31H 40H,30H 39H,29H RET NHÓM 6
- Xem thêm -