Đề tài “mạch game đố vui sử dụng ledmatrix” đã giúp chúng em có những trải nghiệm vô cùng quý giá, chúng em có dịp ôn lại những kiến thức đã học, đồng thời tích lũy thêm cho mình môt số kiến thức, kỹ năng mới về lập trình vi xử lý. Tuy nhiên do khả năng và thời gian có hạn nên đề tài khi hoàn thành vẫn còn găp một số hạn chế nhất định như:
40 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2460 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế mạch Mạch game đố vui sử dụng ledmatrix, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 1: GIỚI THIỆU HOẠT ĐỘNG CỦA MẠCH
Mạch game đố vui sử dụng ledmatrix thể hiện 2 khả năng cơ bản nhất của các bảng điểm điện tử trong các chương trình gameshow đó là thể hiện đội nào giành được quyền trả lời và thể hiện phương án trả lời của các đội. Đây cũng là 2 chế độ hoạt động của mạch.
Chế độ 1: đối với các dạng câu hỏi buộc các đội phải nhấn nút để giành quyền trả lời. Đội nào nhấn trước thì sẽ được ưu tiên đồng thời màn hình led của đội đó sẽ sang lên, các đội nhấn nút sau sẽ không có tác dụng đồng nghĩa với việc kô giành được quyền trả lời.
Chế độ 2: đối với các dạng câu hỏi trắc nghiệm. Ở mỗi đội sẽ có 4 nút nhấn thể hiện 4 phương án trả lời A,B,C,D; các đội sẽ nhấn nút tương ứng để chọn đáp án của mình.
Lưu ý: việc chọn chế độ hoạt động của mạch (giành quyền trả lời hay trắc nghiệm) sẽ được thực hiện bởi người dẫn chương trình (MC), nhờ 2 nút nhấn để chọn chế độ được đặt tại bàn của MC.
CHƯƠNG 2: GIỚI THIỆU MỘT SỐ LINH KIỆN CHÍNH CỦA MẠCH
IC phân kênh 74154: được sử dụng để quét ledmatrix. Sau đây là sơ đồ chân và True Table của IC 74154
Ledmatix: được dùng để thể hiện phương án trả lời của các đội. Sau đây là sơ đồ chân của ledmatrix
Lưu ý: đây là loại led 2 màu xanh, đỏ nhưng do chỉ sử dụng các led màu đỏ nên có môt số chân không được sử dụng.
Vi điều khiển 89C51: Dùng để lậptrình điều khiển cho mạch.
CHƯƠNG 3: GIỚI THIỆU VI ĐIỀU KHIỂN 89C51:
3.1) TỔNG QUÁT:
MCS-51 là họ vi điều khiển của hãng Intel. Vi mạch tổng quát của họ MCS-51 là chip 8051. Chip 8051 có một số đặc trưng cơ bản sau:
- Bộ nhớ chương trình bên trong: 4 KB (ROM)
- Bộ nhớ dữ liệu bên trong: 128 byte (RAM)
- Bộ nhớ chương trình bên ngoài: 64 KB (ROM)
- Bộ nhớ dữ liệu bên ngoài: 64 KB (RAM)
- 4 port xuất nhập (I/O port) 8 bit
- 2 bộ định thời 16 bit
- Mạch giao tiếp nối tiếp
- Bộ xử lý bit (thao tác trên các bit riêng lẻ)
- 210 vị trí nhớ được định địa chỉ, mỗi vị trí 1 bit
- Nhân / Chia trong 4 us
Ngoài ra, trong họ MCS-51 còn có một số chip vi điều khiền khác có cấu trúc tương đương như:
Chip ROM trong RAM trong Bộ định thời
8031 0 KB 128 byte 2
8032 0 KB 256 byte 3
8051 4 KB PROM 128 byte 2
8052 8 KB PROM 256 byte 3
8751 4 KB UV-EPROM 128 byte 2
8752 8 KB UV-EPROM 256 byte 3
8951 4 KB FLASH ROM 128 byte
8952 8 KB FLASH ROM 256 byte 3
- CPU (Central Processing Unit): Đơn vị xử lý trung tâm _ tính toán và điều khiển quá trình hoạt động của hệ thống.
- OSC (Oscillator): Mạch dao động _ tạo tín hiệu xung clock cung cấp cho các khối trong chip hoạt động.
- Interrupt control: Điều khiển ngắt _ nhận tín hiệu ngắt từ bên ngoài (INT0\, INT1\), từ bộ định thời (TIMER0, TIMER1) và từ cổng nối tiếp (SERIAL PORT), lần lượt đưa các tín hiệu ngắt này đến CPU để xử lý.
- Other registers: Các thanh ghi khác _ lưu trữ dữ liệu của các port xuất/nhập, trạng thái làm việc của các khối trong chip trong suốt quá trình hoạt động của hệ thống.
- RAM (Random Access Memory): Bộ nhớ dữ liệu trong chip _ lưu trữ các dữ liệu.
- ROM (Read Only Memory): Bộ nhớ chương trình trong chip _ lưu trữ chương trình hoạt động của chip.
- I/O ports (In/Out ports): Các port xuất/nhập _ điều khiển việc xuất nhập dữ liệu dưới dạng song song giữa trong và ngoài chip thông qua các port P0, P1, P2, P3.
- Serial port: Port nối tiếp _ điều khiển việc xuất nhập dữ liệu dưới dạng nối tiếp giữa trong và ngoài chip thông qua các chân TxD, RxD.
- Timer 0, Timer 1: Bộ định thời 0, 1 _ dùng để định thời gian hoặc đếm sự kiện (đếm xung) thông qua các chân T0, T1.
- Bus control: Điều khiển bus _ điều khiển hoạt động của hệ thống bus và việc di chuyển thông tin trên hệ thống bus.
- Bus system: Hệ thống bus _ liên kết các khối trong chip lại với nhau.
SƠ ĐỒ CHÂN VÀ CHỨC NĂNG CỦA IC 89C51:
3.2.1. Port 0:
- Port 0 (P0.0 – P0.7) có số chân từ 32 – 39.
- Port 0 có hai chức năng:
• Port xuất nhập dữ liệu (P0.0 - P0.7) _ không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7) _ có sử dụng bộ nhớ ngoài.
Lưu ý: Khi Port 0 đóng vai trò là port xuất nhập dữ liệu thì phải sử dụng các điện trở kéo lên bên ngoài.
- Khi lập trình cho ROM trong chip thì Port 0 đóng vai trò là ngõ vào của dữ liệu (D0 – D7).
3.2.2. Port 1:
- Port 1 (P1.0 – P1.7) có số chân từ 1 – 8.
- Port 1 có một chức năng:
• Port xuất nhập dữ liệu (P1.0 – P1.7) _ sử dụng hoặc không sử dụng bộ nhớ ngoài.
- Khi lập trình cho ROM trong chip thì Port 1 đóng vai trò là ngõ vào của địa chỉ byte thấp (A0 – A7).
3.2.3. Port 2:
- Port 2 (P2.0 – P2.7) có số chân từ 21 – 28.
- Port 2 có hai chức năng:
• Port xuất nhập dữ liệu (P2.0 – P2.7) _ không sử dụng bộ nhớ ngoài.
• Bus địa chỉ byte cao (A8 – A15) _ có sử dụng bộ nhớ ngoài.
- Khi lập trình cho ROM trong chip thì Port 2 đóng vai trò là ngõ vào của địa chỉ byte cao (A8 – A11) và các tín hiệu điều khiển.
3.2.4. Port 3:
- Port 3 (P3.0 – P3.7) có số chân từ 10 – 17.
- Port 0 có hai chức năng:
• Port xuất nhập dữ liệu (P3.0 – P3.7) _ không sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
• Các tín hiệu điều khiển _ có sử dụng bộ nhớ ngoài hoặc các chức năng đặc biệt.
- Khi lập trình cho ROM trong chip thì Port 3 đóng vai trò là ngõ vào của các tín hiệu điều khiển.
- Chức năng của các chân Port 3:
3.2.5. Chân PSEN\:
- PSEN (Program Store Enable): cho phép bộ nhớ chương trình, chân số 29.
- Chức năng:
• Là tín hiệu cho phép truy xuất (đọc) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu xuất, tích cực mức thấp.
PSEN\ = 0 _ trong thời gian CPU tìm-nạp lệnh từ ROM ngoài.
PSEN\ = 1 _ CPU sử dụng ROM trong (không sử dụng ROM ngoài).
- Khi sử dụng bộ nhớ chương trình bên ngoài, chân PSEN\ thường được nối với chân OE\ của ROM ngoài để cho phép CPU đọc mã lệnh từ ROM ngoài.
3.2.6. Chân ALE:
- ALE (Address Latch Enable): cho phép chốt địa chỉ, chân số 30.
- Chức năng:
• Là tín hiệu cho phép chốt địa chỉ để thực hiện việc giải đa hợp cho bus địa chỉ byte thấp và bus dữ liệu đa hợp (AD0 – AD7).
• Là tín hiệu xuất, tích cực mức cao.
ALE = 0 _ trong thời gian bus AD0 – AD7 đóng vai trò là bus D0 – D7.
ALE = 1 _ trong thời gian bus AD0 – AD7 đóng vai trò là bus A0 – A7.
- Khi lập trình cho ROM trong chip thì chân ALE đóng vai trò là ngõ vào của xung lập trình (PGM\).
Lưu ý:fALE = → có thể dùng làm xung clock cho các mạch khác.
- Khi lệnh lấy dữ liệu từ RAM ngoài (MOVX) được thực hiện thì 1 xung ALE bị bỏ qua.
3.2.7. Chân EA\:
- EA (External Access): truy xuất ngoài, chân số 31.
- Chức năng:
• Là tín hiệu cho phép truy xuất (sử dụng) bộ nhớ chương trình (ROM) ngoài.
• Là tín hiệu nhập, tích cực mức thấp.
EA\ = 0 → Chip 8051 sử dụng chương trình của ROM ngoài.
EA\ = 1 →Chip 8051 sử dụng chương trình của ROM trong.
- Khi lập trình cho ROM trong chip thì chân EA đóng vai trò là ngõ vào của điện áp lập trình (Vpp = 12V/89xx, 21V/80xx,87xx).
Lưu ý: Chân EA\ luôn luôn phải được nối lên Vcc (sử dụng chương trình của ROM trong) hoặc xuống Vss (sử dụng chương trình của ROM ngoài).
3.2.8. Chân XTAL1, XTAL2:
- XTAL (Crystal): tinh thể thạch anh, chân số 18-19.
- Chức năng:
• Dùng để nối với thạch anh hoặc mạch dao động tạo xung clock bên ngoài, cung cấp tín hiệu xung clock cho chip hoạt động.
• XTAL1 → ngõ vào mạch tạo xung clock trong chip.
• XTAL2 → ngõ ra mạch tạo xung clock trong chip.
Lưu ý:
fTYP: tần số danh định fOSC: tần số mạch dao động trên chip
fCLK: tần số mạch dao động bên ngoài
3.2.9. Chân RST:
- RST (Reset): thiết lập lại, chân số 9.
- Chức năng:
• Là tín hiệu cho phép thiết lặp (đặt) lại trạng thái ban đầu cho hệ thống.
• Là tín hiệu nhập, tích cực mức cao.
RST = 0 → Chip 8051 hoạt động bình thường.
RST = 1 → Chip 8051 được thiết lặp lại trạng thái ban đầu.
Lưu ý:
tRESET: thời gian reset TOSC: chu kỳ dao động
TMACHINE: chu kỳ máy
3.2.10. Chân Vcc, GND:
- Vcc, GND: nguồn cấp điện, chân số 40-20.
- Chức năng:
• Cung cấp nguồn điện cho chip 8051 hoạt động.
• Vcc = +5V ± 10%.
• GND = 0V.
3.3) TỔ CHỨC CỦA CHIP 8051:
- Bộ vi xử lý có không gian nhớ chung cho cả chương trình và dữ liệu
→ chương trình và dữ liệu nằm chung trên RAM.
- Bộ vi điều khiển có không gian nhớ riêng cho dữ liệu và chương trình.
→chương trình và dữ liệu nằm riêng trên ROM và RAM.
Tổ chức bộ nhớ của chip 8051:
Tổ chức nhớ trong chip 8051:
3.3.1) Bộ nhớ chương trình (ROM):
- Dùng để lưu trữ chương trình điều khiển cho chip 8051 hoạt động.
- Chip 8051 có 4 KB ROM trong, địa chỉ truy xuất: 000H – FFFH.
3.3.2) Bộ nhớ dữ liệu (RAM):
- Dùng để lưu trữ các dữ liệu.
- Chip 8051 có 128 byte RAM trong, địa chỉ truy xuất: 00H – 7FH.
- RAM trong của chip 8051 được chia ra:
• RAM đa chức năng:
• RAM định địa chỉ bit:
→ cho phép xử lý từng bit dữ liệu riêng lẻ mà không ảnh hưởng đến các bit khác trong cả byte.
• Các dãy thanh ghi:
→ cho phép truy xuất dữ liệu nhanh, lệnh truy xuất đơn giản và ngắn gọn.
+ Lưu ý: Ở chế độ mặc định thì dãy thanh ghi tích cực (đang được sử
dụng) là dãy 0 và các thanh ghi trong dãy lần lượt có tên là R0 - R7. Có
thể thay đổi dãy tích cực (xem phần thanh ghi PSW).
3.3.4) Một số thanh ghi chức năng đặc biệt:
3.3.4.1) Thanh ghi A:
3.3.4.2) Thanh ghi B:
- Phép nhân 2 số 8 bit không dấu _ kết quả là số 16 bit.
• Byte cao _ chứa vào thanh ghi B.
• Byte thấp _ chứa vào thanh ghi A.
- Phép chia 2 số 8 bit _ thương số và số dư là số 8 bit.
• Thương số _ chứa vào thanh ghi A.
• Số dư _ chứa vào thanh ghi B.
3.3.4.3) Thanh ghi định thời:
3.4) Sơ lược về hoạt động của bộ định thời:
• Tần số: tần số xung ngõ ra bằng tần số xung ngõ vào chia cho 2N.
• Giá trị: giá trị nhị phân trong các FF của bộ định thời là số đếm của các xung clock tại ngõ vào từ khi bộ định thời bắt đầu đếm.
• Tràn: xảy ra hiện tượng tràn (cờ tràn = 1) khi số đếm chuyển từ giá trị lớn nhất xuống giá trị nhỏ nhất của bộ định thời.
Ví dụ: Bộ định thời 16 bit (chứa 16 FF bên trong).
*Tần số:
*Giá trị: số đếm nằm trong khoảng 0 (0000H) _ 65535 (FFFFH).
*Tràn: cờ tràn bằng 1 khi số đếm từ FFFFH chuyển xuống 0000H.
Hình minh họa đơn giản hoạt động của bộ định thời 3 bit:
• Ứng dụng định thời gian (TIMER): bộ định thời được lập trình sao cho sẽ tràn sau một khoảng thời gian đã qui định và khi đó cờ tràn của bộ định thời sẽ bằng 1.
• Ứng dụng đếm sự kiện (COUNTER): để xác định số lần xuất hiện của một kích thích từ bên ngoài tới 1 chân của chip 8051 (kích thích chuyển trạng thái từ 1 xuống 0).
3.4.1) Thanh ghi chế độ định thời (TMOD):
• Thanh ghi TMOD (Timer Mode Register) chứa các bit dùng để thiết lập chế độ hoạt động cho bộ định thời 0 và bộ định thời 1.
• Thanh ghi TMOD được nạp giá trị một lần tại thời điểm bắt đầu của chương trình để qui định chế độ hoạt động của các bộ định thời.
• Cấu trúc thanh ghi TMOD:
3.4.2) Thanh ghi điều khiển định thời (TCON):
• Thanh ghi TCON (Timer Control Register) chứa các bit dùng để điều khiển và báo trạng thái của bộ định thời 0 và bộ định thời 1.
• Cấu trúc thanh ghi TCON:
3.4.3) Chế độ định thời 13bit (Chế độ 0):
Chế độ 0 (Mode 0):
• Chế độ định thời 13 bit.
• Sử dụng 8 bit của thanh ghi THx và 5 bit thấp của thanh ghi TLx để tạo ra bộ định thời.
• Số đếm: 0000H → 1FFFH nghĩa là từ 0 → 8191. Thời gian định thời: từ 0 → (213–1)TTimer nghĩa là từ 0 → 8191TTimer.
• Thanh ghi THx và TLx chứa giá trị của bộ định thời.
• Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa trong THx/TLx.
• Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ 1FFFH sang 0000H và việc đếm sẽ tiếp tục đếm lên từ giá trị 0000H.
3.4.4) Chế độ định thời 16bit (Chế độ 1):
Chế độ 1 (Mode 1):
• Chế độ định thời 16 bit.
• Sử dụng thanh ghi THx và TLx để tạo ra bộ định thời.
• Số đếm: 0000H → FFFFH nghĩa là từ 0 → 65535. Thời gian định thời: từ 0 → (216–1)TTimer nghĩa là từ 0 → 65535TTimer.
• Thanh ghi THx và TLx chứa giá trị của bộ định thời.
• Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa trong THx/TLx.
• Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ FFFFH sang 0000H và việc đếm sẽ tiếp tục đếm lên từ giá trị 0000H.
3.4.5) Chế độ định thời 8bit tự nạp lại (Chế độ 2):
Chế độ 2 (Mode 2):
• Chế độ định thời 8 bit tự nạp lại.
• Sử dụng thanh ghi TLx để tạo ra bộ định thời.
• Số đếm: 00H → FFH nghĩa là từ 0 → 255. Thời gian định thời: từ 0 → (28–1)TTimer nghĩa là từ 0 → 255TTimer.
• Thanh ghi TLx chứa giá trị của bộ định thời và thanh ghi THx chứa giá trị sẽ được dùng để nạp lại cho bộ định thời.
• Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa trong TLx.
• Xảy ra tràn (cờ tràn TFx=1) khi số đếm chuyển từ FFH sang 00H và việc đếm sẽ tiếp tục đếm lên từ giá trị chứa trong thanh ghi THx.
3.4.6) Chế độ định thời chia xẻ (Chế độ 3):
Chế độ 3 (Mode 3) là:
• Chế độ định thời chia xẻ.
* Bộ định thời 0 được chia ra:
+ Bộ định thời 8 bit thứ I:
→ Sử dụng thanh ghi TL0 để tạo ra bộ định thời.
→ Số đếm: 00H → FFH nghĩa là từ 0 → 255. Thời gian định thời: từ 0 → (28–1)TTimer nghĩa là từ 0 → 255TTimer .
→ Thanh ghi TL0 chứa giá trị của bộ định thời.
→ Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa trong TL0.
→ Xảy ra tràn (cờ tràn TF0=1) khi số đếm chuyển từ FFH sang 00H và việc đếm sẽ tiếp tục đếm lên từ giá trị 00H.
+ Bộ định thời 8 bit thứ II:
→ Sử dụng thanh ghi TH0 để tạo ra bộ định thời.
→ Số đếm: 00H → FFH nghĩa là từ 0 → 255. Thời gian định thời: từ 0 → (28–1)TTimer nghĩa là từ 0 → 255TTimer.
→ Thanh ghi TH0 chứa giá trị của bộ định thời.
→ Khi có xung clock, bộ định thời bắt đầu đếm lên từ giá trị chứa trong TH0.
→ Xảy ra tràn (cờ tràn TF1=1) khi số đếm chuyển từ FFH sang 00H và việc đếm sẽ tiếp tục đếm lên từ giá trị 00H.
* Bộ định thời 1:
- Là bộ định thời 16 bit.
- Không hoạt động ở chế độ 3 nhưng có thể hoạt động các chế độ khác (chế độ 0, 1, 2).
- Không có cờ báo tràn như các bộ định thời khác.
3.4.7) Nguồn xung clock cho bộ định thời:
Nguồn xung cho bộ định thời được tạo ra từ:
• Mạch dao động trên chip → dùng cho tính năng định thời gian.
• Xung kích thích bên ngoài → dùng cho tính năng đếm sự kiện.
3.4.7.1) Trường hợp định thời gian:
Nếu C/T=0 thì:
• Bộ định thời được dùng để định thời gian (Timer).
• Nguồn xung clock định thời được lấy từ mạch dao động trên chip.
Lưu ý:
- Tần số xung clock cung cấp cho bộ định thời bằng 1/12 tần số của mạch dao động trên chip 8051.
- Thời gian định thời là khoảng thời gian tính từ lúc bộ định thời bắt đầu đếm cho đến lúc bộ định thời bắt đầu tràn (thời gian này phụ thuộc vào giá trị ban đầu được nạp cho các thanh ghi THx và TLx).
3.4.7.2) Trường hợp đếm sự kiện:
Nếu C/T=1 thì:
• Bộ định thời được dùng để đếm sự kiện (Counter).
• Nguồn xung clock định thời được lấy từ xung kích thích bên ngoài tại hai chân T0 và T1 của chip 8051.
Lưu ý:
- Tần số kích thích tối đa cho phép tại chân T0 và T1 là 500KHz (trong trường hợp chip 8051 dùng thạch anh 12MHz).
- Số lượng sự kiện (số xung) mà bộ định thời đếm được sẽ được chứa trong các thanh ghi THx và TLx.
- Một kích thích được gọi là một sự kiện khi xảy ra sự chuyển trạng thái từ 1 xuống 0 ở ngõ vào T0 và T1.
CHƯƠNG 4: SƠ ĐỒ KHỐI CỦA MẠCH
KHỐI BÀN PHÍM MATRIX
KHỐI NÚT NHẤN
KHỐI VI XỬ LÝ
KHỐI HIỂN THỊ
KHỐI IC PHÂN KÊNH
CHƯƠNG 5: SƠ ĐỒ NGUYÊN LÝ
Khối hiển thị:
Khối ledmartix sử dụng 4 ledmatrix để hiển thị cho 4 đội chơi. Sử dụng Port 2 của 89C51 để xuất mã và Port 1 nối vào IC phân kênh để quét led hiển thị. Các transistor Ạ1015 được sử dụng để kéo dòng.
KHỐI IC PHÂN KÊNH:
Khối phân kênh sử dụng 2 IC 74154 nối vào port 1 của 89C51 để quét 4 ledmatrix. Sử dụng chương trình để làm cho trong cùng một thời điểm chỉ có một IC 74154 hoạt động (khi chân G1 ở mức 0 thì IC sẽ hoạt đông, ngươc lại chân G1 ở mức 1 thì IC sẽ không hoạt động)
KHỐI BÀN PHÍM MATRIX:
Khối bàn phím Matrix sử dụng 16 nút nhấn để thể hiện phương án trả lời của các đội. Sự dụng chương trình quét phím để kiểm tra xem nút nào đươợ nhấn
KHỐI NÚT NHẤN:
KHỐI VI XỬ LÝ:
CHƯƠNG 6: LƯU ĐỒ GIẢI THUẬT
6.1. LƯU ĐỒ GIẢI THUẬT CỦA CHƯƠNG TRÌNH CHÍNH
MAIN
KIỂM TRA NÚT TRẮC NGHIỆM
CHẠY CHƯƠNG TRÌNH TRẮC NGHIỆM
KIỂM TRA NÚT TRẢ LỜI
CHẠY CHƯƠNG TRÌNH TRẢ LỜI
6.2.LƯU ĐỒ GIẢI THUẬT CỦA CHƯƠNG TRÌNH TRẢ LỜI
TRẢ LỜI
KT NÚT NHẤN 4 ĐỘI
P0.2=0
HIỂN THỊ ĐỘI A
P0.3=0
HIỂN THỊ ĐỘI B
P0.4=0
HIỂN THỊ ĐỘI C
P0.5=0
HIỂN THỊ ĐỘI D
6.3.LƯU ĐỒ GIẢI THUẬT CHƯƠNG TRÌNH TRẮC NGHIỆM
TRẮC NGHIỆM
GỌI CHƯƠNG TRÌNH QUÉT PHÍM
C=1
(CÓ PHÍM NHẤN)
KIỂM TRA PHÍM NÀO ĐƯỢC NHẤN
HIỆN THỊ ĐÁP ÁN RA LEDMATRIX
CHƯƠNG 7: PHẦN LỆNH
$MOD51
ORG 00H
MAIN:
MOV 30H,#00H
MOV 31H,#00H
MOV 32H,#00H
MOV 33H,#00H
JNB P0.0,TRACNGHIEM
JNB P0.1,TRALOI
SJMP MAIN
TRALOI:
JNB P0.2,DOIA
JNB P0.3,DOIB
JNB P0.4,DOIC
JNB P0.5,DOID
SJMP TRALOI
DOIA:
MOV DPTR,#CODEDISP
MOV R7,#07H
LCALL MATRIX
LJMP DOIA
DOIB:
MOV DPTR,#CODEDISP
MOV R7,#87H
LCALL MATRIX
LJMP DOIB
DOIC:
MOV DPTR,#CODEDISP
MOV R7,#0BH
LCALL MATRIX
LJMP DOIC
DOID:
MOV DPTR,#CODEDISP
MOV R7,#8BH
LCALL MATRIX
LJMP DOID
TRACNGHIEM:
LCALL SCANKEYPAD
JC XUAT1
LJMP DOIA1
XUAT1:
CJNE A,#00H,XUAT2
MOV 30H,#0FEH
LJMP DOIA1
XUAT2:
CJNE A,#01H,XUAT3
MOV 30H,#01H
LJMP DOIA2
XUAT3:
CJNE A,#02H,XUAT4
MOV 30H,#02H
LJMP DOIA3
XUAT4:
CJNE A,#03H,XUAT5
MOV 30H,#03H
LJMP DOIA4
XUAT5:
CJNE A,#04H,XUAT6
MOV 31H,#04H
LJMP DOIB1
XUAT6:
CJNE A,#05H,XUAT7
MOV 31H,#05H
LJMP DOIB2
XUAT7:
CJNE A,#06H,XUAT8
MOV 31H,#06H
LJMP DOIB3
XUAT8:
CJNE A,#07H,XUAT9
MOV 31H,#07H
LJMP DOIB4
XUAT9:
CJNE A,#08H,XUAT10
MOV 32H,#08H
LJMP DOIC1
XUAT10:
CJNE A,#09H,XUAT11
MOV 32H,#09H
LJMP DOIC2
XUAT11:
CJNE A,#0AH,XUAT12
MOV 32H,#0AH
LJMP DOIC3
XUAT12:
CJNE A,#0BH,XUAT13
MOV 32H,#0BH
LJMP DOIC4
XUAT13:
CJNE A,#0CH,XUAT14
MOV 33H,#0CH
LJMP DOID1
XUAT14:
CJNE A,#0DH,XUAT15
MOV 33H,#0DH
LJMP DOID2
XUAT15:
CJNE A,#0EH,XUAT16
MOV 33H,#0EH
LJMP DOID3
XUAT16:
CJNE A,#0FH,DOIA1 ;CHU Y CHO~ NAY`
MOV 33H,#0FH
LJMP DOID4
DOIA1:
MOV A,30H
CJNE A,#0FEH,DOIA2
MOV DPTR,#CODEDISP1
MOV R7,#07H
LCALL MATRIX
DOIA2:
MOV A,30H
CJNE A,#01H,DOIA3
MOV R7,#07H
MOV R3,#8
MOV DPTR,#CODEDISP1
DOIA22:
INC DPTR
DJNZ R3,DOIA22
LCALL MATRIX
DOIA3:
MOV A,30H
CJNE A,#02H,DOIA4
MOV R7,#07H
MOV R3,#16
MOV DPTR,#CODEDISP1
DOIA33:
INC DPTR
DJNZ R3,DOIA33
LCALL MATRIX
DOIA4:
MOV A,30H
CJNE A,#03H,DOIB1
MOV R7,#07H
MOV R3,#24
MOV DPTR,#CODEDISP1
DOIA44:
INC DPTR
DJNZ R3,DOIA44
LCALL MATRIX
DOIB1:
MOV A,31H
CJNE A,#04H,DOIB2
MOV DPTR,#CODEDISP1
MOV R7,#87H
LCALL MATRIX
DOIB2:
MOV A,31H
CJNE A,#05H,DOIB3
MOV R7,#87H
MOV R3,#8
MOV DPTR,#CODEDISP1
DOIB22:
INC DPTR
DJNZ R3,DOIB22
LCALL MATRIX
DOIB3:
MOV A,31H
CJNE A,#06H,DOIB4
MOV R7,#87H
MOV R3,#16
MOV DPTR,#CODEDISP1
DOIB33:
INC DPTR
DJNZ R3,DOIB33
LCALL MATRIX
DOIB4:
MOV A,31H
CJNE A,#07H,DOIC1
MOV R7,#87H
MOV R3,#24
MOV DPTR,#CODEDISP1
DOIB44:
INC DPTR
DJNZ R3,DOIB44
LCALL MATRIX
DOIC1:
MOV A,32H
CJNE A,#08H,DOIC2
MOV R7,#0BH
MOV DPTR,#CODEDISP1
LCALL MATRIX
DOIC2:
MOV A,32H
CJNE A,#09H,DOIC3
MOV R7,#0BH
MOV R3,#8
MOV DPTR,#CODEDISP1
DOIC22:
INC DPTR
DJNZ R3,DOIC22
LCALL MATRIX
DOIC3:
MOV A,32H
CJNE A,#0AH,DOIC4
MOV R7,#0BH
MOV R3,#16
MOV DPTR,#CODEDISP1
DOIC33:
INC DPTR
DJNZ R3,DOIC33
LCALL MATRIX
DOIC4:
MOV A,32H
CJNE A,#0BH,DOID1
MOV R7,#0BH
MOV R3,#24
MOV DPTR,#CODEDISP1
DOIC44:
INC DPTR
DJNZ R3,DOIC44
LCALL MATRIX
DOID1:
MOV A,33H
CJNE A,#0CH,DOID2
MOV R7,#8BH
MOV DPTR,#CODEDISP1
LCALL MATRIX
DOID2:
MOV A,33H
CJNE A,#0DH,DOID3
MOV R7,#8BH
MOV R3,#8
MOV DPTR,#CODEDISP1
DOID22:
INC DPTR
DJNZ R3,DOID22
LCALL MATRIX
DOID3:
MOV A,33H
CJNE A,#0EH,DOID4
MOV R7,#8BH
MOV R3,#16
MOV DPTR,#CODEDISP1
DOID33:
INC DPTR
DJNZ R3,DOID33
LCALL MATRIX
DOID4:
MOV A,33H
CJNE A,#0FH,KETTHUCTN
MOV R7,#8BH
MOV R3,#24
MOV DPTR,#CODEDISP1
DOID44:
INC DPTR
DJNZ R3,DOID44
LCALL MATRIX
KETTHUCTN:
LJMP TRACNGHIEM
SCANKEYPAD:
PUSH 03H
MOV R3,#50
BACK:
ACALL GETKEY
JNC NOPRESSED
DJNZ R3,BACK
NOPRESSED:
POP 03H
RET
;***************************
GETKEY:
PUSH 05H
PUSH 06H
PUSH 07H
MOV A,#0EFH
MOV R6,#4
TEST:
MOV P3,A
MOV R7,A
MOV A,P3
ANL A,#0FH
CJNE A,#0FH,KEYPRESSED
MOV A,R7
RL A
DJNZ R6,TEST
CLR C
SJMP EXIT
KEYPRESSED:
MOV R7,A
MOV A,#4
CLR C
SUBB A,R6
MOV R6,A
MOV A,R7
MOV R5,#4
AGAIN:
RRC A
JNC DONE
INC R6
INC R6
INC R6
INC R6
DJNZ R5,AGAIN
DONE:
SETB C
MOV A,R6
EXIT:
POP 07H
POP 06H
POP 05H
RET
MATRIX:
PUSH ACC
PUSH 00H
PUSH 01H
MOV R0,#00H
MOV A,R7
MOV R1,A
SCAN:
MOV A,R0
MOVC A,@A+DPTR
MOV P2,A
MOV P1,R1
LCALL DELAY
INC R0
MOV A,R1
ADD A,#10H
MOV R1,A
CJNE R0,#8,SCAN
POP 01H
POP 00H
POP ACC
RET
DELAY:
PUSH 00H
PUSH 01H
MOV R1,#5
DEL:
MOV R0,#250
DJNZ R0,$
DJNZ R1,DEL
POP 01H
POP 00H
RET
CODEDISP:
DB 00H,00H,00H,00H,00H,00H,00H,00H
CODEDISP1:
DB 0FFH,83H,0F5H,0F6H,0F5H,83H,0FFH,0FFH ;CHU A
DB 0FFH,80H,80H,0B6H,0B6H,0C9H,0FFH,0FFH ;CHU B
DB 0FFH,83H,7DH,7DH,7DH,0BBH,0FFH,0FFH ;CHU C
DB 0FFH,01H,7DH,7DH,7DH,83H,0FFH,0FFH ;CHU D
END
KẾT LUẬN:
Đề tài “mạch game đố vui sử dụng ledmatrix” đã giúp chúng em có những trải nghiệm vô cùng quý giá, chúng em có dịp ôn lại những kiến thức đã học, đồng thời tích lũy thêm cho mình môt số kiến thức, kỹ năng mới về lập trình vi xử lý. Tuy nhiên do khả năng và thời gian có hạn nên đề tài khi hoàn thành vẫn còn găp một số hạn chế nhất định như:
Sử dụng quá nhiều Bus nên làm cho mạch trở nên rườm rà, mất đi tính thẩm mỹ
Các ký tự xuất hiện trên led xảy ra hiện tượng nhấp nháy do chỉ quét đơn lẻ từng led một.
Hướng khắc phục:
Hạn chế số dây Bus sử dụng trên mạch
Lập trính cho vi xử lý quét đồng thời cả 4 ledmatrix
Hướng phát triển của đề tài:
Các ledmatrix có thể hiển thị điểm số của các đội
DANH MỤC TÀI LIỆU THAM KHẢO:
“Giáo trình vi xử lý” trường Đại Học Công Nghiệp TPHCM
“Giáo trình thực hành vi xử lý” trường Đại Học Công Nghiệp TPHCM