NỘI DUNG
Chương I: Giới thiệu các linh kiện dùng trong mạch
Chương II: Thiết kế mạch
Chương III:Kết luận và hướng phát triển của đề tài Phụ lục và tài liệu tham khảo
GIỚI THIỆU CÁC LINH KIỆN TRONG MẠCH
Giới thiệu chung về họ vi điều khiển 89c51
1.1.1 Cấu trúc phần cứng MSC-51 (89C51)
1.1.1.1 Các đặc điểm của 89C51 được tóm tắt như sau :
+ 64 KB vùng nhớ mã ngoài
+ 64 KB vùng nhớ dữ liệu ngoài
+ Xử lí Boolean (hoạt động trên bit đơn)
+ 210 vị trí nhớ có thể định vị bit
+ 4 s cho hoạt động nhân hoặc chia
1.1.2 Sơ đồ khối và chức năng của từng khối
1.1.2.1 Khối xử lý trung tâm CPU:
Phần chính của bộ vi xử lý là khối xử lý trung tâm (CPU), khối này có chứa các thành phần chính :
1 Thanh chứa ACC ( ký hiệu là A)
2 Thanh ghi chứa phụ ( ký hiệu là B) thường được dùng cho phép nhân và chia
3 Khối logic số học ( ALU=Arithmetic Logical Unit)
4 Từ trạng thái chương trình ( PSW= Program Status Word)
5 Bốn băng thanh ghi ( Blank)
6 Con trỏ ngăn xếp ( SP = Stack Point) cũng như con trỏ dữ liệu để định địa chỉ cho bộ nhớ dữ liệu ở bên ngoài
Hình 1.1: Sơ đồ khối của 89C51
Khối đ.khiển quản lý Bus
/PSEN/ALE Cổng I/O 8 bit CổngI/O Địa chỉ cao Dữ liệu 8 bit
Cổng I/O Địa chỉ thấp Dữ liệu 8 bít
Cổng I/O Các chức năng đặc biệt Dữ liệu 8 bit
Nguồn ngắt Đếm sự kiện
Ngoài ra, khối xử lý trung tâm còn chứa:
1 Thanh ghi đếm chương trình (PC= Progam Counter )
3 Bộ điều khiển thời gian và logic
Sau khi được Reset, CPU khởi động tại địa chỉ 0000h, địa chỉ đầu tiên được lưu trong thanh ghi chương trình (PC) Sau đó, thanh ghi này sẽ tăng lên 1 đơn vị, dẫn đến các lệnh tiếp theo của chương trình.
Khối xử lý trung tâm nhận xung nhịp trực tiếp từ bộ tạo dao động, có thể là một khung dao động bằng tụ gốm hoặc thạch anh Ngoài ra, tín hiệu giữ nhịp từ bên ngoài cũng có thể được đưa vào.
Chương trình có thể dừng lại nhờ khối logic ngắt bên trong, với các nguồn ngắt từ biến cố bên ngoài, sự tràn bộ đếm hoặc giao diện nối tiếp Tất cả các ngắt đều có thể được thiết lập chế độ hoạt động thông qua hai thanh ghi: ngắt IE (Interrupt Enable) và ngắt ưu tiên IP (Interrupt Priority).
1.1.1.3 Khối điều khiển và quản lý Bus :
Các khối trong vi điều khiển liên lạc với nhau thông qua hệ thống Bus nội bộ được điều khiển bởi khối điều khiển quản lý Bus
1.1.1.4 Các bộ đếm/ định thời:
Vi điều khiển 89C51 sở hữu hai bộ đếm tiến 16 bit, có khả năng hoạt động như bộ định thời, bộ đếm sự kiện bên ngoài hoặc bộ phát tốc độ Baud cho giao diện nối tiếp Trạng thái tràn của bộ đếm có thể được kiểm tra trực tiếp hoặc xoá bằng một ngắt.
Vi điều khiển 89C51 sở hữu bốn cổng vào/ra (P0 đến P3), mỗi cổng có khả năng xử lý 8 bit và hoạt động độc lập Những cổng này có thể được áp dụng cho nhiều mục đích điều khiển khác nhau, và ngoài chức năng chung, một số cổng còn tích hợp thêm các chức năng đặc biệt.
Giao diện nối tiếp bao gồm một bộ truyền và một bộ nhận không đồng bộ hoạt động độc lập Bằng cách kết nối các bộ đệm thích hợp, có thể tạo ra một cổng nối tiếp RS-232 đơn giản Tốc độ truyền qua cổng này có thể điều chỉnh trong một phạm vi rộng, tùy thuộc vào bộ định thời và tần số dao động của thạch anh.
Bộ nhớ chương trình, thường được gọi là ROM (Read Only Memory), là loại bộ nhớ dùng để lưu trữ chương trình điều khiển hoạt động của vi điều khiển.
Bộ nhớ số liệu, thường được gọi là RAM (Random Access Memory), là loại bộ nhớ dùng để lưu trữ thông tin tạm thời trong quá trình hoạt động của vi điều khiển.
1.1.2 Sơ đồ và chức năng các chân
1.1.2.2 Chức năng các chân của 89C51
- 89C51 có tất cả 40 chân có chức năng như các đường xuất nhập Trong đó có
24 chân có tác dụng kép, với mỗi chân đảm nhận hai chức năng khác nhau Mỗi đường có khả năng hoạt động như đường xuất nhập, đường điều khiển, hoặc là thành phần của các bus dữ liệu và bus địa chỉ.
Port 0 của vi điều khiển 89C51 có hai chức năng quan trọng tại các chân 32 – 39 Trong các thiết kế nhỏ không sử dụng bộ nhớ mở rộng, Port 0 hoạt động như các đường IO Ngược lại, trong các thiết kế lớn có bộ nhớ mở rộng, Port 0 kết hợp giữa bus địa chỉ và bus dữ liệu.
- Port 1 là port IO trên các chân 1-8 Các chân được ký hiệu P1.0, P1.1, P1.2,
Cổng 1 chỉ được sử dụng cho giao tiếp với các thiết bị bên ngoài và không có chức năng khác.
Port 2 là một cổng đa chức năng, với các chân từ 21 đến 28, được sử dụng để xuất nhập dữ liệu hoặc làm byte cao của bus địa chỉ cho các thiết bị sử dụng bộ nhớ mở rộng.
Port 3 là cổng có chức năng kép trên các chân 10-17, với nhiều chức năng đa dạng Các chân của port này thực hiện các công dụng chuyển đổi liên quan đến các đặc tính đặc biệt của vi điều khiển 89C51, như được trình bày trong bảng dưới đây.
Bit Tên Chức năng chuyển đổi
P3.0 RXT Ngõ vào dữ liệu nối tiếp
P3.1 TXD Ngõ xuất dữ liệu nối tiếp
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thư 1
Ngõ vào củaTIMER/COUNTER thứ 0
Ngõ vào củaTIMER/COUNTER thứ 1
Tín hiệu ghi dữ liệu lên bộ nhớ ngoài
Tín hiệu đọc bộ nhớ dữ liệu ngoài b Các ngõ tín hiệu điều khiển:
Ngõ tín hiệu PSEN (Program store enable):
PSEN, tín hiệu ngõ ra tại chân 29, cho phép đọc bộ nhớ chương trình mở rộng, thường được gọi là chân 0E (output enable) của Eprom, giúp truy xuất các byte mã lệnh.
Trong quá trình Microcontroller 89C51 lấy lệnh, tín hiệu PSEN sẽ ở mức thấp Các mã lệnh của chương trình được đọc từ Eprom qua bus dữ liệu và được lưu vào thanh ghi lệnh bên trong 89C51 để thực hiện việc giải mã Khi 89C51 thi hành chương trình trong ROM nội, tín hiệu PSEN sẽ ở mức logic 1.
Ngõ tín hiệu điều khiển ALE (Address Latch Enable):
Led ma trận
1.2.1 Hình dạng và cấu tạo của led ma trận
Ma trận led bao gồm nhiều led đơn bố trí thành hàng và cột trong một vỏ
Các tín hiệu điều khiển cột kết nối với Anode của tất cả các LED trong cùng một cột, trong khi các tín hiệu điều khiển hàng được kết nối với Cathode của tất cả các LED trong cùng một hàng.
Khi có tín hiệu điều khiển tại cột và hàng, chỉ có một LED sáng tại giao điểm của chúng nhờ vào việc cấp điện áp cao cho chân Anode và điện áp thấp cho chân Cathode Các bảng quang báo lớn hơn cũng hoạt động theo nguyên tắc này Để hiển thị một ký tự với nhiều LED sáng đồng thời, cần cấp điện áp cao cho Anode và thấp cho Cathode của các LED tương ứng, tuy nhiên, điều này có thể dẫn đến việc một số LED không mong muốn cũng sáng lên.
Để điều khiển led ma trận, cần sử dụng phương pháp quét (hiển thị động) thay vì hiển thị tĩnh, vì các led chỉ sáng khi nằm tại vị trí giao nhau của các cột và hàng được cấp nguồn Tín hiệu điều khiển phải được cấp theo dạng xung quét trên các hàng và cột có led cần hiển thị Để mắt người không cảm nhận được sự nháy, tần số quét tối thiểu cho mỗi chu kỳ phải đạt khoảng 20Hz (50ms) Trong lập trình điều khiển led ma trận bằng vi xử lý, phương pháp quét cũng là cần thiết.
Led 7 đoạn (Anot chung )
Dòng điện tối thiểu cần thiết để LED sáng là 10mA, và khi cấp dòng cho chân nào, chân đó sẽ phát sáng LED 7 đoạn được cấu tạo từ 7 LED đơn được sắp xếp theo hình dạng cụ thể, và có thể có thêm một LED đơn hình tròn nhỏ để thể hiện dấu chấm ở góc dưới bên phải.
Với 8 led đơn trên led 7 đoạn có Anode (cực +) được nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch điện 8 cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa ra ngoài để kết nối với mạch điện Vì là led 7 đoạn có Anode (cực +) chung nên đầu chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0.
Ic 74ls245
Hình 1.4: Hình dạng và sơ đồ nguyên lý của led 7 đoạn cực dương chung
IC 74LS245 là IC đệm có tác dụng ổn định dòng và áp cung cấp cho Led hiển thị
+ Điện áp cung cấp Vcc = 4,74 – 5,55V
+ Nhiệt độ làm việc: 0 – 70 oC
- Chân số 19 ( G\_Enable): đây là chân cho phép IC hoạt động, IC chỉ hoạt động khi chân này nối với âm nguồn
Chân số 1 (DIR) của IC xác định chế độ hoạt động Khi chân này được nối xuống âm nguồn, tín hiệu đầu vào sẽ được chuyển đến các chân B (từ chân 11 đến chân 18), và tín hiệu đầu ra sẽ được phát ở các chân A (từ chân số 2 đến chân số 9).
Hình 1.5: Sơ đồ chân của IC74LS245
THIẾT KẾ MẠCH
Thiết kế phần cứng
2.1.1 Sơ đồ khối toàn mạch và chức năng các khối
Khối hiển thị LED 7 ĐOẠN
Khối hiển thị LED MATRIX
Hình 2.1: Sơ đồ khối toàn mạch
P0.7/AD7 P0.6AD6 P0.5/AD5 P0.4/AD4 P0.3/AD3 P0.2/AD2 P0.1/AD1 P0.0/AD0
Hình 2.2: Khối điều khiển trung tâm
- Các chân P1.0 đến P1.2 được nối với các nút nhấn điều khiển chương trình
Các chân của Port0 được kết nối với IC 74LS245 và điều khiển hàng của đèn LED ma trận, trong khi các chân của Port 2 kết nối với cột của đèn LED ma trận.
- Các chân P3.0 đến P3.7 được nối với IC 74LS245 và kết nối với led 7 đoạn
Khối nguồn đóng vai trò quan trọng trong việc cung cấp điện áp ổn định cho toàn mạch, vì điện áp không ổn định có thể ảnh hưởng đến các IC Điện áp 12 VAC từ biến áp được chuyển đổi qua bộ nắn điện cầu diode thành điện DC, sau đó được lọc và ổn định thành 5 VDC để cung cấp cho toàn bộ mạch.
Khối hiển thị led ma trận
P0.0 – P0.7 nối đến R0 –R7 ( tích cực mức 1 )
P2.0 – P2.7 nối đến C0 – C7 ( tích cực mức 1 )
Hiển thị hình ảnh cần thay đổi thời gian hiển thị
BỘ NẮN LỌC ĐIỆN ỔN ÁP
Hình 2.3: Sơ đồ khối nguồn
Hình 2.4: Sơ đồ khối hiển thị led ma trận
Tính toán trở trong khối led ma trận:
Trong khối led ma trận ta sử dụng 8 transistor loại pnp
Vì 8 transistor nối với 8 led, mỗi led đơn có Iled = 20 mA và Vled = 2V
Khối hiển thị led 7 đoạn
1 led 7 đoạn loại anot chung
P3.0 – P3.6 nối đến a – g (Tích cực mức 0 )
Hiển thị thời gian bằng cách đếm lên xuống theo giây để giúp ta có cái nhìn trực quan hơn về đề tài
Hình 2.5: Sơ đồ khối hiển thị led 7 đoạn
Để bảo vệ các LED đơn bên trong đèn LED 7 đoạn, cần đảm bảo dòng điện qua mỗi LED đơn nằm trong khoảng 10mA-20mA, vì vậy chúng ta chọn dòng I = 15mA Khi kết nối với nguồn 5V, cần sử dụng một điện trở để hạn dòng.
Giúp ta lựa chọn chương trình cần thực hiện
- Nhấn Sw1 vi điều khiển sẽ hoạt động theo hiển thị 1: led matran hiển thị chữ
Hình 2.6: Sơ đồ khối nút nhấn mỗi ký tự sẽ hiển thị trong vòng 5s
- Nhấn Sw2 vi điều khiển sẽ hoạt động theo hiển thị 2: led ma trận hiển thị các số từ
0 đến 9 , mỗi số sẽ được hiển thị trong vòng 1s
- Nhấn Sw3 vi điều khiển sẽ hoạt động theo hiển thị 3: led ma trận chạy hiệu ứng mũi tên chạy từ dưới lên sau đó hiển thị trong vòng 5s
2.1.2 Sơ đồ nguyên lý mạch
P0.0/AD0 39 P0.1/AD1 38 P0.2/AD2 37 P0.3/AD3 36 P0.4/AD4 35 P0.5/AD5 34 P0.6/AD6 33 P0.7/AD7 32
Thiết kế phần mềm
LCALL CHUA LCALL CHUA LCALL CHUA LCALL CHUA
; Hiển thị số 5 ra led 7 đoạn
; Hiển thị số 4 ra led 7 đoạn
; Hiển thị số 3 ra led 7 đoạn
; Hiển thị số 2 ra led 7 đoạn
; Hiển thị số 1 ra led 7 đoạn
; Hiển thị số 0 ra led 7 đoạn
LCALL CHUY LCALL CHUY LCALL CHUY LCALL CHUY
LCALL CHUL LCALL CHUL LCALL CHUL LCALL CHUL
; Hiển thị số 0 ra led 7 đoạn
; Hiển thị số 1 ra led 7 đoạn
; Hiển thị số 2 ra led 7 đoạn
; Hiển thị số 3 ra led 7 đoạn
; Hiển thị số 4 ra led 7 đoạn
; Hiển thị số 5 ra led 7 đoạn
; Hiển thị số 1 ra led matran
; Hiển thị số 0 ra led Matran
; Hiển thị số 2 ra led Matran
; Hiển thị số 3 ra led Matran
; Hiển thị số 4 ra led Matran
; Hiển thị số 5 ra led 7 đoạn
; Hiển thị số 4 ra led 7 đoạn
; Hiển thị số 3 ra led 7 đoạn
; Hiển thị số 2 ra led 7 đoạn
; Hiển thị số 1 ra led 7 đoạn
; Hiển thị số 0 ra led 7 đoạn
JNB P1.0, HIENTHI1 ; Nhấn nút P1.0 hiển thị chương trình 1
JNB P1.1, HIENTHI2 ; Nhấn nút P1.1 hiển thị chương trình 2
JNB P1.2, HIENTHI3 ; Nhấn nút P1.2 hiển thị chương trình 3
;************* Chương trình gọi dài hiển thị 2 và 3 ****************
LCALL CT2 ;Gọi dài chương trình 2
LCALL CT3 ;Gọi dài chương trình 3
;********** Chương trình hiển thị 1- hiển thị chữ V A T L Y ************
Đoạn mã này thực hiện một chuỗi lệnh gọi hàm (LCALL) với các giá trị khác nhau được gán cho thanh ghi P3 Cụ thể, các giá trị lần lượt là 79H, 40H, 12H, 19H, 30H, và 24H Sau khi hoàn thành các lệnh LCALL với các giá trị này, mã tiếp tục gọi hàm CHUY với các giá trị 19H, 30H, 24H, 79H, và 40H Cuối cùng, chương trình kết thúc với lệnh nhảy đến nhãn MAIN.
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH MOV P0,#03H LCALL DELAYS3MS MOV P2,#0FBH MOV P0,#01H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#0CCH LCALL DELAYS3MS MOV P2,#0EFH MOV P0,#0CCH LCALL DELAYS3MS MOV P2,#0DFH MOV P0,#01H LCALL DELAYS3MS MOV P2,#0BFH MOV P0,#03H LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
MOV R2,#40 LOOPT: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS
LCALL DELAYS3MS MOV P2,#0FBH
MOV P0,#00H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#00H LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#3FH LCALL DELAYS3MS MOV P2,#0DFH
MOV P0,#3FH LCALL DELAYS3MS MOV P2,#0BFH
MOV P0,#3FH LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
MOV R2,#40 LOOPY: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH MOV P0,#0F8H LCALL DELAYS3MS MOV P2,#0FBH
;**Chương trình hiển thị số 0 – 9**
MOV P3,#12H CALL SO5 MOV P3,#02H CALL SO6 MOV P3,#78H CALL SO7 MOV P3,#00H CALL SO8 MOV P3,#10H CALL SO9 MOV P3,#40H RET
MOV R2,#40 LOOP00: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FBH
MOV P0,#83H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#7DH LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#7DH LCALL DELAYS3MS MOV P2,#0DFH
MOV P0,#7FH LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
MOV R2,#40 LOOP22: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FBH
MOV P0,#3BH LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#5DH LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#5DH LCALL DELAYS3MS MOV P2,#0DFH
MOV P0,#63H LCALL DELAYS3MS MOV P2,#0BFH
MOV P0,#0FFH LCALL DELAYS3MS
MOV R2,#40 LOOP44: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FBH
MOV P0,#0E7H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#0EBH LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#0EDH LCALL DELAYS3MS MOV P2,#0DFH
MOV P0,#01H LCALL DELAYS3MS MOV P2,#0BFH
MOV P0,#0EFH LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
MOV R2,#40 LOOP66: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FBH
MOV P0,#83H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#6DH LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#6DH LCALL DELAYS3MS MOV P2,#0DFH
MOV P0,#9BH LCALL DELAYS3MS MOV P2,#0BFH
MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
LCALL DELAYS3MS MOV P2,#0FDH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FBH MOV P0,#93H LCALL DELAYS3MS MOV P2,#0F7H
MOV P0,#6DH LCALL DELAYS3MS MOV P2,#0EFH
MOV P0,#6DH LCALL DELAYS3MS MOV P2,#0DFH MOV P0,#93H LCALL DELAYS3MS MOV P2,#0BFH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#07FH
MOV P0,#0FFH LCALL DELAYS3MS DEC R2
MOV R2,#40 LOOP99: MOV P2,#0FEH MOV P0,#0FFH LCALL DELAYS3MS MOV P2,#0FDH
;*Chương trình hiển thị hình ảnh*
MOV P3,#24H CALL HINH6 MOV P3,#79H CALL HINH6 MOV P3,#40H CALL HINH6
The assembly code initializes a loop by loading the value 20 into register R2 Within the loop, it repeatedly sets port P2 to various hexadecimal values, starting with 0FFH, and port P0 to 0FFH, followed by a delay of 3 milliseconds This pattern continues with P2 being assigned values 0FDH, 0FBH, 0F7H, and 0EFH, while P0 is adjusted accordingly, including setting it to 7FH before invoking the delay function again Each iteration of the loop alters the values of P2 and P0, creating a sequence of outputs with timed intervals.
MOV P2,#0BFH MOV P0,#0FFH CALL DELAYS3MS MOV P2,#0FFH MOV P0,#0FFH CALL DELAYS3MS DEC R2
The code initializes a loop with a register value of 20, setting the output ports P1 and P2 to high It then executes a series of commands that change the values of P2 and P0, followed by a delay of 3 milliseconds after each change The values of P2 and P0 are altered in a specific sequence, creating a pattern of output signals This process is repeated, demonstrating a structured approach to controlling digital outputs with precise timing.
MOV P0,#0FFH CALL DELAYS3MS DEC R2
The assembly code snippet initializes a loop with the instruction "MOV R2,#20" to set a counter Within the loop, it configures the ports P2 and P0 to various hexadecimal values, such as 0FFH, 0FDH, and 0FBH, followed by a delay function "CALL DELAYS3MS" to create pauses between the changes This sequence continues with different values for P2 and P0, including 0F7H, 0EFH, and 0DFH, ensuring a systematic output pattern The loop concludes with the ports reset to 0FFH, followed by another delay, effectively creating a repetitive cycle of signals for each iteration.
MOV R6,#03 LOOPA: MOV R7,#00H LOOPB: INC R7
NOP CJNE R7,#0FAH,LOOPB DJNZ R6,LOOPA