Đồ án Kit Thực Tập Pic 16f887a

Đây là đồ án tốt nghiệp của mình, có đầy đủ code, mô phỏng, schematic và layout các khối và mạch nạp. Mục Lục PHẦN I KHẢO SÁT VI ĐIỀU KHIỂN PIC 16F877A 12 PHẦN II CÁC THÀNH PHẦN CỦA KIT THỰC TÂP PIC 16F877A . 67 + led đơn + led 7 đoạn +đèn giao thông +led ma trận +LCD +ADC ( Analog to Digital) +Đo nhiệt độ dung Lm35 +I2C PHẦN III CÁC BÀI TẬP THỰC HÀNH 120 PHẦN VI GIẢI CÁC BÀI TẬP THỰC HÀNH 141 +BÀI 1 HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN 142 +BÀI 2 HIỂN THỊ TRẠNG THÁI CÁC PORT VÀ THAY ĐỔI THỜI GIAN DELAY 144 +BÀI 3 HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 . 146 +BÀI 4 HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 149 +BÀI 5 CHƯƠNG TRÌNH ĐÈN GIAO THÔNG 151 +BÀI 6 CHẠY CHỮ LED MA TRẬN 153 +BÀI 7 HIỂN THỊ KÝ TỰ TRÊN LCD 156 +BÀI 8 GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD .161 +BÀI 9 ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN 165 +BÀI 10 ĐO NHIỆT ĐỘ 166 PHẦN VI PHỤ LỤC 170 Phụ lục 1 : 16F877A 171 Phụ lục 2 : DEFS_16F877A . 177

pdf180 trang | Chia sẻ: lvcdongnoi | Lượt xem: 8181 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đồ án Kit Thực Tập Pic 16f887a, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH: L6 1 2 L5 1 2 4R2 330 1 23456789 L2 1 2 L3 1 2 VCC L7 1 2 L1 1 2 LEDDON 12345678 L0 1 2 L4 1 2 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 124 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 4 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED 7 đoạn theo nhiều phương pháp khác nhau. • Điều khiển việc hiển thị các thông tin và số liệu bằng cách sử dụng các bộ hiển thị dùng LED 7 đoạn. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED 7 đoạn. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED 7 đoạn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED 7 đoạn ở các chế độ khác nhau. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 6 nối Port A với chân B transistor • Dùng dây bus 8 nối Port B với LED 7. ỨNG DỤNG: Sử dụng phương pháp quét thể hiện ngày, tháng , năm ( 2 số cuối) từng số chạy từ LED 1 đến LED 6 và hiển thị đầy đủ trên 6 LED. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 125 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : Q4 A1015 g 6LED1 A B C D E F G H VC C VC C f b af 6LED5 A B C D E F G H VC C VC C eggc hd h a 6LED3 A B C D E F G H VC C VC C e 6LED4 A B C D E F G H VC C VC C b Q1 A1015 fc e 60PC 1 2 3 4 5 6 7 8 dd ce f Q5 A1015 d g 60PA 1 2 3 4 5 6 e ea c g 6LED2 A B C D E F G H VC C VC C c aca 6RN3 4.7K 123456 7 8 9 10 11 12 h b b Q3 A1015 e g 6RN2 330 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fh a c Q2 A1015 VCC h a d d b bh Q6 A1015 hf gb d 6LED6 A B C D E F G H VC C VC C f SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 126 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 4 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED 7 đoạn theo nhiều phương pháp khác nhau. • Điều khiển việc hiển thị các thông tin và số liệu bằng cách sử dụng các bộ hiển thị dùng LED 7 đoạn. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED 7 đoạn. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED 7 đoạn trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED 7 đoạn ở các chế độ khác nhau. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 6 nối Port A với chân B transistor • Dùng dây bus 8 nối Port B với LED 7. ỨNG DỤNG: Viết chương trình đồng hồ đơn giản xuất ra led 7(hai led đầu hiển thị giờ, hai led kế hiển thị phút , hai led cuối hiển thị giây). SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 127 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : Q4 A1015 g 6LED1 A B C D E F G H VC C VC C f b af 6LED5 A B C D E F G H VC C VC C eggc hd h a 6LED3 A B C D E F G H VC C VC C e 6LED4 A B C D E F G H VC C VC C b Q1 A1015 fc e 60PC 1 2 3 4 5 6 7 8 dd ce f Q5 A1015 d g 60PA 1 2 3 4 5 6 e ea c g 6LED2 A B C D E F G H VC C VC C c aca 6RN3 4.7K 123456 7 8 9 10 11 12 h b b Q3 A1015 e g 6RN2 330 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 fh a c Q2 A1015 VCC h a d d b bh Q6 A1015 hf gb d 6LED6 A B C D E F G H VC C VC C f SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 128 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 5: CHƯƠNG TRÌNH ĐÈN GIAO THÔNG Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED đơn và LED 7 đoạn. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Nắm được sơ đồ và nguyên lý hoạt động của khối mạch đèn giao thông trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển mạch đèn giao thông. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 6 nối PortA với các LED đơn. • Dùng dây bus 8 nối PortB với LED 7 đoạn phía dưới. • Dùng dây bus 8 nối PortD với LED 7 đoạn phía trên. ỨNG DỤNG: Viết chương trình điều khiển mạch đèn giao thông có đếm ngược. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 129 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : H G F E D C B AVC C VCC PORTD 1 2 3 4 5 6 7 8D1 PORTB 1 2 3 4 5 6 7 8 330 X2 V1 330 4R2 330 1 23456789 D2 PORTA 123456 X1V2 A B C D E F G H VC C SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 130 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 6 : CHẠY CHỮ TRÊN LED MA TRẬN Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển việc hiển thị bằng cách sử dụng LED ma trận. • Ứng dụng thực hiện việc hiển thị các thông tin tĩnh và động trên LED ma trận dạng quang báo. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LED ma trận ở các chế độ khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối LED ma trận trên mô hình thí nghiệm. • Nắm được nguyên lý điều khiển LED ma trận ở các chế độ khác nhau. • Biết cách viết chương trình quang báo để hiển thị các thông tin được yêu cầu (thông tin dạng tĩnh và dạng động). TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 8 nối PortB với hàng của Led Ma Trận. • Dùng dây bus 8 nối PortC với cột của Led Ma Trận 1. • Dùng dây bus 8 nối PortD với cột Led Ma Trận 2. ỨNG DỤNG: Viết chương trình chạy chữ “ KIT THUC TAP PIC KHOA DIEN TU – TIN HOC ”. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 131 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : h1 h3 b14 h5 c6 c16 b2 h6 c1 Q5 A1015 c2 h7 c6 MTRAN2 16 15 14 13 12 11 10 987 6 5 4 3 2 1 b8 Q14 A1015 b3 b12 c11 c11 9RN3 330 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 b4 h3 90PC 1 2 3 4 5 6 7 8 Q6 A1015 Q11 A1015 90PB 1 2 3 4 5 6 7 8 c16 b10 h2 Q12 A1015 c2 h1 Q9 A1015 c15 h6 b16 VCC c5 c10 c12 h1 h4 b13 c7 Q13 A1015 b4 c8 b11Q10 A1015 b1 h7 Q15 A1015 b6 h8 c3 Q16 A1015 b11 h4 b3 h2 b9 b15 c9 c13 MTRAN1 16 15 14 13 12 11 10 987 6 5 4 3 2 1 c14 b15 c8 b5 9RN2 4k7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Q3 A1015 b10 h8 h6 b1 b12 c1 c4 Q4 A1015 h4 c4 90PD 1 2 3 4 5 6 7 8 b14 b7 b16 Q2 A1015 c7 Q7 A1015 Q8 A1015 c13 b6 c9 Q1 A1015 c14 h2 h5 h3 b9 c5 b8 h5 9RN 4k7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 h8 b13 b2 c3 VCC c15 b5 b7 c12 c10 h7 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 132 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 7: HIỂN THỊ KÍ TỰ TRÊN LCD Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Khảo sát nguyên lý hoạt động và nguyên lý điều khiển LCD. • Điều khiển để hiển thị các thông tin trên màn hình tinh thể lỏng LCD ( loại 2 hàng x 16 ký tự). YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển LCD. • Nắm được sơ đồ và nguyên lý hoạt động của khối LCD trên mô hình thí nghiệm. • Nắm được nguyên lý và các kỹ thuật điều khiển để hiển thị các thông tin trên LCD. • Biết cách viết các chương trình ứng dụng để hiển thị các dạng thông tin khác nhau trên LCD tùy theo nhu cầu sử dụng. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 3 nối PortE với RS,RW,E ( RS = RE0, RW = RE1, E = RE2 ) • Dùng dây bus 8 nối PortB với D0 đến D7. ỨNG DỤNG: Viết chương trình xuất dữ liệu lên LCD Line 1 : “ DO AN TOT NGHIEP “ Line 2 : “ KIT THUC TAP PIC 16F877A” SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 133 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : J3 CON8 1 2 3 4 5 6 7 8 J4 CON5 1 2 3 4 5 3VR 10K 1 3 2 VSS VDD V0 RS R/W E A K D0 D1 D2 D3 D4 D5 D6 D7 LCD LCD 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 VCC SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 134 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 8: GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Điều khiển thiết bị ngoại vi bằng bàn phím (bàn phím thiết kế theo kiểu ma trận). • Trình bày kỹ thuật quét phím cho dạng bàn phím ma trận 16 phím ( 4 hàng x 4 cột). • Trình bày một số ứng dụng trong kỹ thuật điều khiển bàn phím. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển bàn phím ma trận. • Nắm được sơ đồ và nguyên lý hoạt động của khối bàn phím ma trận trên mô hình thí nghiệm. • Nắm được nguyên lý và kỹ thuật quét phím cho các dạng bàn phím ma trận. • Biết cách viết các chương trình ứng dụng có sử dụng bàn phím ma trận để điều khiển các thiết bị ngoại vi khác nhau. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 3 nối PortE với RS, RW, E ( RS = RE0, RW = RE1, E = RE2 ) • Dùng dây bus 8 nối PortB với D0 đến D7 • Dùng dây bus 8 nối PortD với bàn phím số hex ỨNG DỤNG: Viết chương trình mỗi khi có phím nhấn thì hiển thị số đó lên LCD. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 135 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : SW2 VCC R4 R VCC SW4 1R47 100 R5 R R6 R SW3 SW10 SW13 1DX 1Y1 VCC 1C8 33p 1C9 33p 1RS 1C7 104 SW14 R7 10k SW8 SW15 R6 R SW1 U1 lcd 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1R46 10K SW6 SW1 SW5 SW7 1U1 PIC16F877A 15 16 17 18 23 24 25 26 31 12 1 13 11 32 2 3 4 5 6 7 33 34 35 36 37 38 39 40 19 20 21 22 27 28 29 30 8 9 10 14 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT GND GND MCLR/VPP OSC1/CLKI VDD VDD RA0/AN0 RA1/AN1 RA2/AN2/VRef -/CVRef RA3/AN3/VRef + RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 RE0/RD/AN5 RE1/WR/AN6 RE2/CSAN7 OSC2/CLKO SW11 SW12 VCC SW9 VCC SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 136 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 9: ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Giả lập tín hiệu tương tự cung cấp cho khối ADC. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình điều khiển ADC. • Nắm được sơ đồ và nguyên lý hoạt động của khối ADC trên mô hình thí nghiệm. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM: • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 2 nối khối ADC với PortA.0 (chân AN0). • Dùng dây bus 8 nối PortB với LED đơn. ỨNG DỤNG: Tạo mức điện áp thay đổi liên tục từ 0V đến 5V cho VĐK xử lý sau đó hiển thị ra LED đơn. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 137 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH : 1R47 1001C7 104 1C9 33p 1Y1 1C8 33p VR 10K L5 12 VCC 1U1 PIC16F877A 15 16 17 18 23 24 25 26 31 12 1 13 11 32 2 3 4 5 6 7 33 34 35 36 37 38 39 40 19 20 21 22 27 28 29 30 8 9 10 14 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT GND GND MCLR/VPP OSC1/CLKI VDD VDD RA0/AN0 RA1/AN1 RA2/AN2/VRef -/CVRef RA3/AN3/VRef + RA4/T0CKI/C1OUT RA5/AN4/SS/C2OUT RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3 RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7 RE0/RD/AN5 RE1/WR/AN6 RE2/CSAN7 OSC2/CLKO L7 12 L0 12 L4 12 L2 12 1RS 1R46 10K VCC1DX 4R2 330 1 2 3 4 5 6 7 8 9 L6 12 VCC VCC L1 12 L3 12 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 138 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35 Ngày …… Tháng…….Năm 2008 Thời Gian Thực Hiện : 5 Giờ Sinh Viên Thực Hiện : ĐÁNH GIÁ - ĐIỂM ¾ Kỹ thuật ¾ Thao tác ¾ Tổ chức NHẬN XÉT MỤC ĐÍCH: • Thực hành lập trình ứng dụng trên máy tính, biên dịch chương trình, nạp vào VĐK và sử dụng mô hình thí nghiệm để kiểm chứng. • Điều khiển thiết bị ngoại vi bằng các Port của VĐK. • Đo nhiệt độ môi trương và khống chế nhiệt độ bằng VĐK. YÊU CẨU: • Nắm vững các tập lệnh của VĐK PIC16F877A. • Biết cách viết các chương trình ứng dụng có sử dụng LM35 để điều khiển các thiết bị ngoại vi khác nhau. • Nắm được sơ đồ và nguyên lý hoạt động của khối đo nhiệt độ trên mô hình thí nghiệm. • Nắm được nguyên lý nguyên lý hoạt động của LM35. TRÌNH TỰ TIẾN HÀNH THÍ NGHIỆM • Tắt nguồn cấp cho mô hình thí nghiệm. • Dùng dây bus 2 nối chân 2 của LM35 với PortA.0 (chân AN0). • Dùng dây bus 3 nối PortE với RS,RW,E ( RS = RE0, RW = RE1, E = RE2 ) • Dùng dây bus 8 nối PortB với D0 đến D7. ỨNG DỤNG: Viết chương trình hiển thị nhiệt độ trên LCD. SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 139 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha SƠ ĐỒ MẠCH: VCC J2 CON1 1 U1403 LM35 1 2 3 VDD VOUT GND SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 140 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha PHẦN IV GIẢI CÁC BÀI TẬP THỰC HÀNH ¾ BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN. ¾ BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY ¾ BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 ¾ BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 ¾ BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG ¾ BÀI 6: CHẠY CHỮ TRÊN LED MA TRẬN ¾ BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD ¾ BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD ¾ BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN ¾ BÀI 10: ĐỘ NHIỆT ĐỘ DÙNG LM35 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 141 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 1 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED ĐƠN //***********CHUONG TRINH LED DON ********** //***************XUAT RA PORTB *************** //*********************************************** #include #fuses nowdt,noprotect,nolvp,xt,put #use delay(clock=4000000) #use fast_io(b) void main() { set_tris_b(0); output_b(0); while(true) { output_b(0b11111110); delay_ms(250); output_b(0b11111101); delay_ms(250); output_b(0b11111011); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11101111); delay_ms(250); output_b(0b11011111); delay_ms(250); output_b(0b10111111); delay_ms(250); output_b(0b01111111); delay_ms(250); output_b(0b10111111); delay_ms(250); output_b(0b11011111); delay_ms(250); output_b(0b11101111); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11110111); delay_ms(250); output_b(0b11111011); delay_ms(250); SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 142 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha output_b(0b11111101); delay_ms(250); output_b(0b11111110); delay_ms(250); output_b(0b01111110); delay_ms(250); output_b(0b10111101); delay_ms(250); output_b(0b11011011); delay_ms(250); output_b(0b11100111); delay_ms(250); output_b(0b11011011); delay_ms(250); output_b(0b10111101); delay_ms(250); output_b(0b01111110); delay_ms(250); output_b(0b11111111); output_b(0b00000000); } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 143 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 2 : HIỂN THỊ TRẠNG THÁI PORT TRÊN LED VÀ THAY ĐỔI THỜI GIAN DELAY //********CHUONG TRINH LED DON****** //**********CO THAY DOI DELAY********* //*********XUAT DU LIEU RA PORTC***** //*************************************** #include #fuses XT,NOWDT #use delay(clock = 4000000) #use fast_io(c) int a=300; int i; void main() { set_tris_c(0); output_c(255); while (true) { for(i=10;i>=1;i--) { output_c(0b11111110); delay_ms(a); output_c(0b11111100); delay_ms(a); output_c(0b11111000); delay_ms(a); output_c(0b11110000); delay_ms(a); output_c(0b11100000); delay_ms(a); output_c(0b11000000); delay_ms(a); output_c(0b10000000); delay_ms(a); output_c(0x00); delay_ms(a); a=a-30; } a=300; for(i=10;i>=1;i--) { SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 144 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha output_c(0b01111111); delay_ms(a); output_c(0b00111111); delay_ms(a); output_c(0b00011111); delay_ms(a); output_c(0b00001111); delay_ms(a); output_c(0b00000111); delay_ms(a); output_c(0b00000011); delay_ms(a); output_c(0b00000001); delay_ms(a); output_c(0x00); delay_ms(a); a=a-30; } a=300; for(i=10;i>=1;i--) { output_c(0b01010101); delay_ms(a); output_c(0b10101010); delay_ms(a); a=a-30; } } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 145 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 3: HIỂN THỊ NGÀY THÁNG NĂM SINH TRÊN LED 7 //********CHUONG TRINH LED 7*********** //*****PORTA QUET, PORTB DU LIEU******* //************************************* #include #fuses xt,nowdt #use delay (clock =4000000) #use fast_io(a) #use fast_io(b) int so[] = {255,255,255,255,255,255,192,144,249,192,192,128,255,255,255,255,255, 255}; int a,b,c,d=1,e,f; void main() { set_tris_b(0); set_tris_a(0); while (true) { a=0; //*****kieu_1, nhap nhay 5 lan***** while(a<5) { for (b=0;b<=150;b++) { d=1; for (c=0;c<=5;c++) { e=63-d; output_b(so[c+6]); output_a(e); delay_us(500); output_b(255); d=d*2; } } output_b(255); delay_ms(300); a++; } //*****kieu_2; dich so sang trai***** SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 146 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha a=0; f=0; while(a<13) { for (b=0;b<=200;b++) { d=1; for (c=0;c<=5;c++) { e=63-d; output_b(so[c+f]); output_a(e); delay_us(500); output_b(255); d=d*2; } } a++; f++; } output_b(255); delay_ms(300); //*****kieu_3; nhap nhay 3 lan***** a=0; while(a<5) { for (b=0;b<=150;b++) { d=1; for (c=0;c<=5;c++) { e=63-d; output_b(so[c+6]); output_a(e); delay_us(500); output_b(255); d=d*2; } } output_b(255); delay_ms(300); a++; } //******kieu_3; dich so sang phai***** a=0; f=12; SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 147 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha while(a<13) { for (b=0;b<=200;b++) { d=1; for (c=0;c<=5;c++) { e=63-d; output_b(so[c+f]); output_a(e); delay_us(500); output_b(255); d=d*2; } } a++; f--; } } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 148 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 4: HIỂN THỊ ĐỒNG HỒ TRÊN LED 7 //***********CHUONG TRINH DONG HO********** //*************HIEN THI TREN LED 7************* //*********QUET PORTA, DU LIEU PORTC********* //*********************************************** #include #use delay (clock=4000000) #fuses xt,nowdt #use fast_io(a) #use fast_io( b) int a,b,c,d,e,f,g,h; int const so[]={64,121,36,48,25,18,2,120,0,16}; void main () {set_tris_b(0); set_tris_a(0); while(true) { for (a=0;a<=2;a++)//h { for (b=0;b<=h;b++)//h { for (c=0;c<=5;c++)//m { for (d=0;d<=9;d++)//m { for (e=0;e<=5;e++)//s { for (f=0;f<=9;f++)//s { for (g=0;g<=100;g++) { output_b(so[f]); output_a(0b011111); delay_us(1500); output_b(255); output_b(so[e]); output_a(0b101111); delay_us(1500); output_b(255); output_b(so[d]); output_a(0b110111); SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 149 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha delay_us(1500); output_b(255); output_b(so[c]); output_a(0b111011); delay_us(1500); output_b(255); output_b(so[b]); output_a(0b111101); delay_us(1500); output_b(255); output_b(so[a]); output_a(0b111110); delay_us(1500); output_b(255); if (a==2) h=3; else h=9; } } } } } } } } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 150 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 5 : CHƯƠNG TRÌNH ĐÈN GIAO THÔNG //******CHUONG TRINH DEN GIAO THONG ******** //******QUET PORTA, DU LIEU RTB,PORTD******** //************************************************* #include #fuses NOWDT,XT #use delay(clock=4000000) #use fast_io(b) #use fast_io(A) #use fast_io(d) int8 i; int const led_tren[]={0b00001001,0b10011111,0b00110001, 0b00010101,0b10000111 ,0b01000101,0b01000001, 0b00011111,0b00000001,0b00000101}; int const led_duoi[]={0b00001100,0b11001111,0b10011000, 0b10001010,0b01001011,0b00101010,0b00101000, 0b10001111,0b00001000,0b00001010}; void main () { set_tris_A(0);output_A(255); set_tris_b(0);output_b(255); set_tris_d(0);output_d(255); while(true) { output_a(0b11011011); for (i=9;i>=3;i--) { output_b(led_duoi[i-3]); output_d(led_tren[i]); delay_ms(1500); output_b(255); output_d(255); } //xanh1 + do2 output_a(0b11011101); for (i=3;i>=1;i--) { output_b(led_duoi[i-1]); output_d(led_tren[i-1]); delay_ms(1500); output_b(255); output_d(255); } //vang1 + do2 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 151 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha if (i=0) { i=9; } output_a(0b11110110); for (i=9;i>=3;i--) { output_b(led_duoi[i]); output_d(led_tren[i-3]); delay_ms(1500); output_b(255); output_d(255); } //xanh2 + do1 output_a(0b11101110); for (i=3;i>=1;i--) { output_b(led_duoi[i-1]); output_d(led_tren[i-1]); delay_ms(1500); output_b(255); output_d(255); } //vang2 + do1 } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 152 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 6: CHẠY CHỮ TRÊN LED MA TRẬN //******CHAY CHU TREN LED MA TRAN******* //***************PORTB DU LIEU************** //************PORTD,PORTC QUET************* #include #fuses xt,nowdt #use delay(clock = 4000000) #use fast_io(c) #use fast_io(b) #use fast_io(d) int16 i,j,a=0,b=0,c=1,d=0,e=1,f=0; int8 const kytu[] = { 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XE1,0XDE,0XDE,0XED,0XFF, //CHU C 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XE1,0XDE,0XDE,0XE1,0XFF //CHU O 0XFF,0XFF,0XFF,0XFF 0XDF,0XDF,0XC0,0XDF,0XDF,0XFF //CHU T 0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF //CHU G 0XFF,0XFF,0XFF,0XFF 0XC0,0XD6,0XD6,0XE9,0XFF //CHU B 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XFF,0XFF,0XFF,0XFF 0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XC1,0XFE,0XFE,0XC1,0XFF // CHU U 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XE1,0XDE,0XDA,0XC8,0XFB,0XFF // CHU G 0XFF,0XFF,0XFF,0XFF 0XE1,0XDE,0XDE,0XED,0XFF, //CHU C 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XFF,0XFF,0XFF,0XFF 0XC0,0XEF,0XF7,0XEF,0XC0,0XFF //CHU M 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A 0XC1,0XFE,0XFE,0XC1,0XFF //CHU U 0XFF,0XFF,0XFF,0XFF 0XCE,0XF5,0XFB,0XF5,0XCE,0XFF //CHU X 0XF0,0XEB,0XDB,0XEB,0XF0,0XFF //CHU A SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 153 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha 0XC0,0XEF,0XF7,0XC0,0XFF //CHU N 0XC0,0XF7,0XF7,0XC0,0XFF //CHU H 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF 0XFF,0XFF,0XFF,0XFF,0XFF,0XFF}; void hienthi(); void main() { set_tris_b(0); output_b(0); set_tris_d(0);output_d(0); set_tris_c(0);output_c(0); while (true) { for (i =0;i<17*10;i++) {hienthi();} if (b==170) b=0; else b++; } } void hienthi() { e=255-c; f=255-d; output_b(kytu[a]); output_d(e); output_c(f); c=c*2; d=d*2; if (c>=1) d=0; if (c==256) { c=0; d=1; } if (d>=1) c=0; if (d==256) { d=0; c=1; a=b; } if (a==170) a=0; else SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 154 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha a++; delay_us(1500); output_d(255); output_c(255); } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 155 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 7 : HIỂN THỊ KÍ TỰ TRÊN LCD //*********CHUONG TRINH CHAY CHU TREN LCD********* //*******PORTB XUAT DU LIEU, PORTD,PORTC QUET****** //******************************************************** #include #include #fuses XT,NOWDT #use delay(clock=4000000) #define RS RE0 #define RW RE1 #define E RE2 #define LCD PORTB const unsigned char line1[]={'D','O',' ','A','N' ,' ','T','O','T',' ', 'N','G','H','I','E','P','#'}; const unsigned char line2[]={'K','I','T',' ','T','H','U','C' ,' ','T','A','P', ' ','P','I','C',' ', '1','6','F','8','7','7','A','#'}; const unsigned char line3[]={' ',' ','K','H','O','A' ,' ','D','T',' ','-',' ','T','H','#'}; const unsigned char line4[]={' ',' ','G','V','H','D',':' ,' ','L','E',' ','D','I','N','H',' ','K','H','A','#'} ; const unsigned char line5[]={ 'S','V',' ','T','H','U','C' ,' ','H','I','E','N','#'}; const unsigned char line6[]={'H','A',' ','X','U','A','N' ,' ','B','I','N','H',' ','&'} ; const unsigned char line7[]={'V','U',' ,'T','H','A','N','H' ,' ','H','U','N','G','#'}; /**************************/ void command(void) { RS = 0; // GHI LENH RW = 0; E = 1; E = 0; delay_ms(6); } /**************************/ void send(void) { RS = 1;// GHI DU LIEU RW = 0; E = 1; SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 156 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha E = 0; delay_ms(6); } /*************************/ void main(void) { while(true) { int i = 0,y=0,k=0,z=0,a=0,b=0,c=0,d=0,e=0,f=0; set_tris_B(0); set_tris_E(0); delay_ms(100); LCD = 0x38; command(); LCD = 0x0C; command(); LCD = 0x80; command(); while (line1[y]!='#') { LCD=line1[y]; send(); delay_ms(100); y++; } lcd=0xC0; command(); while(i<16) { lcd=line2[i]; send(); i++; delay_ms(200); } i=2; while (line2[z]!='#') { LCD = 0x38; command(); LCD = 0x0C; command(); LCD = 0x80; command(); y=0; while (line1[y]!='#') { lcd=line1[y]; SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 157 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha send(); y++; } lcd=0xc0; command(); k=i+16; for(z=i;z<k;z++) { lcd=line2[z]; send(); } delay_ms(100); i++; delay_ms(500); lcd=0x01; command(); LCD = 0x82; command(); } while (line3[d]!='#') { LCD=line3[d]; send(); delay_ms(100); d++; } i=0; while (line4[e]!='#') { LCD = 0x80; command(); a=0; while (line3[d]!='#') { lcd=line3[d]; send(); d++; } lcd=0xc0; command(); k=i+16; for(e=i;e<k;e++) { lcd=line4[e]; send();} delay_ms(100); SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 158 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha i++; delay_ms(500); } lcd=0x01; command(); lcd=0x0e; command(); LCD = 0x82; command(); while (line5[a]!='#') { LCD=line5[a]; send(); delay_ms(100); a++; } lcd=0xC2; command(); while(b<12) { lcd=line6[b]; send(); b++; delay_ms(100); } lcd=0x01; command(); lcd=0x38; command(); LCD = 0x0C; command(); LCD = 0x88; command(); lcd=line6[b+1]; send(); delay_ms(200); lcd=0x38; command(); LCD = 0x0C; command(); lcd=0xc2; command(); while (line7[c]!='#') { LCD=line7[c]; send(); SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 159 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha delay_ms(200); c++; } delay_ms(500); lcd=0x01; command(); } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 160 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 8 : GIAO TIẾP BÀN PHÍM SỐ HEX HIỂN THỊ LCD // ******GIAO TIEP BAN PHIM VOI LCD****** // *********RS,RW,E POTRE***************** // ***********LCD PORT B****************** // **********KEYPAD PORT D*************** //***************************************** #include "16F877A.h" #include #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #byte portD=0x08 #byte portB=0x06 #byte portE=0x09 const unsigned char dig[]= {'X','I','N',' ','N','H','A','P',' ','S','O','#'}; int8 i,j,a=0; void lenh(void) { output_low(pin_e0); output_low(pin_e1); output_high(pin_e2); output_low(pin_e2); delay_ms(6); } void du_lieu(void) { output_high(pin_e0); output_low(pin_e1); output_high(pin_e2); output_low(pin_e2); delay_ms(6); } void main(void) { output_b(0x38); lenh(); output_b(0x0E); lenh(); output_b(0x80); lenh(); While (dig[a]!='#') { SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 161 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha portb=dig[a]; du_lieu(); delay_ms(100); a++; } output_b(0XC0); lenh(); delay_ms(100); output_d(0b11111111); while(1) { //**************************************************** output_d(0b11111110); delay_ms(10); if( input(pin_D4)==0 ) { output_b(0x37); //ghi 7 du_lieu(); delay_ms(150); } if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 { output_b(0x38); //ghi 8 du_lieu(); delay_ms(150); } if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 { output_b(0x39); //ghi 9 du_lieu(); delay_ms(150); } if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 { output_b('A'); // ghi a du_lieu(); delay_ms(150); } //**************************************************** output_D(0b11111101); delay_ms(10); if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 { output_b(0x34); //ghi 4 du_lieu(); delay_ms(150); SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 162 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha } if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 { output_b(0x35); //ghi 5 du_lieu(); delay_ms(150); } if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 { output_b(0x36); //ghi 6 du_lieu(); delay_ms(150); } if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 { output_b('B'); //ghi b du_lieu(); delay_ms(150); } //**************************************************** output_D(0b11111011); delay_ms(10); if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 { output_b(0x31); //ghi 1 du_lieu(); delay_ms(150); } if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 { output_b(0x32); //ghi 2 du_lieu(); delay_ms(150); } if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 { output_b(0x33); //ghi 3 du_lieu(); delay_ms(150); } if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 { output_b('C'); //ghi c du_lieu(); delay_ms(150); } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 163 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha //**************************************************** output_D(0b11110111); delay_ms(10); if( input(PIN_D4)==0 ) //cho khi D4 xuong 0 { output_b('*'); //ghi * du_lieu(); delay_ms(150); } if( input(PIN_D5)==0 ) //cho khi D5 xuong 0 { output_b(0x30); //ghi 0 du_lieu(); delay_ms(150); } if( input(PIN_D6)==0 ) //cho khi D6 xuong 0 { output_b(0X01); //CLEAR lenh(); delay_ms(150); } if( input(PIN_D7)==0 ) //cho khi D7 xuong 0 { portb='D'; //ghi d du_lieu(); delay_ms(150); } } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 164 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 9 : ĐIỀU CHỈNH ADC HIỂN THỊ LED ĐƠN //***********ADC Hien Thi Led Don************* //*********** Led noi voi portB****************** //**** ********AN0 lay mau tin hieu************** #include #fuses XT,NOWDT,NOPROTECT,NOLVP #device 16F877*=16 ADC=8 #use delay(clock=4000000) Int8 adc; main() { setup_adc(adc_clock_internal); setup_adc_ports(AN0); set_adc_channel(0); delay_ms(10); while(true) { adc=read_adc(); output_B(adc); } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 165 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha BÀI 10: ĐO NHIỆT ĐỘ DÙNG LM35 //*****CHUONG TRINH DO NHIET DO DUNG LM35********* //*****************HIEN THI LCD************************* //***PORTB DU LIEU,PORTE DIEU KHIEN,AN0 LAY MAU*** //******************************************************** #include #fuses xt,nowdt #device *=16 adc =8 #use delay (clock=4000000) #use fast_io(e) #use fast_io(b) #bit rs = 0x09.0 #bit rw = 0x09.1 #bit e = 0x09.2 #byte LCD = 0X06 const char line_1[ ]="CHUONG TRINH DO NHIET DO SU DUNG LM35 #"; const char line_2[ ]="0001020304050607080910111213141516 17181920 212223242526272829303132333435363738394041424344454647484950"; const char line_3[]="NHIET DO:#"; const char line_4[]=" DO C#"; int i,b,a,adc; //********************************************** void command() { rs = 0; rw =0; e=1; e=0; delay_ms(1); } //********************************************** void write_data() { rs =1; RW = 0; e=1; e=0; delay_ms(1); } //********************************************** void main() { SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 166 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha Setup_ADC ( ADC_clock_internal ) ; Setup_ADC_ports (AN0); Set_ADC_channel ( 0 ) ; Delay_us (10 ); // delay 10 us set_tris_e(0);output_e(0); set_tris_b(0);output_b(0); set_tris_c(0);output_c(0); WHILE(TRUE) { lcd=0x38; command(); lcd =0x0e; command(); lcd=0X01; command(); LCD =0x80; command(); a=0; LCD =0xc0; command(); while(line_3[a]!='#') { lcd = line_3[a]; write_data(); delay_ms(50); a++; } adc =4* read_adc ( ) ;//doc gia tri adc lcd=0xc9; command(); for (i=1;i<=2;i++) { lcd = line_2[adc]; write_data(); delay_us(50); adc++; } lcd=0xcb; command(); a=0; while(line_4[a]!='#') { lcd = line_4[a]; write_data(); delay_ms(100); a++; SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 167 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha } lcd=0x80; command(); a=0; while (a<=16) { LCD = line_1[a]; write_data(); delay_ms(100); a++; } b=0; LCD =0xc0; command(); while (line_1[a]!='#') { a=0; while(line_3[a]!='#') { lcd = line_3[a]; write_data(); a++; } adc = 4*read_adc ( ) ; lcd=0xc9; command(); for (i=1;i<=2;i++) { lcd = line_2[adc]; write_data(); adc++; } lcd=0xcb; command(); a=0; while(line_4[a]!='#') { lcd = line_4[a]; write_data(); a++; } b++; a=b; i=0; LCD =0X80; SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 168 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha command(); while (I<=16) { LCD = line_1[a]; write_data(); a++; i++; } delay_ms(300); } a=0; } } SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 169 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha PHẦN V PHỤ LỤC ¾ Phụ lục 1 : 16F877A.H ¾ Phụ lục 2 : DEFS_16F877A.H SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 170 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha 16FF877A.H //////// Standard Header file for the PIC16F877 device //////////////// #device PIC16F877 #nolist //////// Program memory: 8192x14 Data RAM: 367 Stack: 8 //////// I/O: 33 Analog Pins: 8 //////// Data EEPROM: 256 //////// C Scratch area: 77 ID Location: 2000 //////// Fuses: LP,XT,HS,RC,NOWDT,WDT,NOPUT,PUT,PROTECT,PROTECT_5% //////// Fuses: PROTECT_50%,NOPROTECT,NOBROWNOUT,BROWNOUT,LVP,NOLVP,CPD //////// Fuses: NOCPD,WRT,NOWRT,DEBUG,NODEBUG //////// ////////////////////////////////////////////////////////////////// I/O // Discrete I/O Functions: SET_TRIS_x(), OUTPUT_x(), INPUT_x(), // PORT_x_PULLUPS(), INPUT(), // OUTPUT_LOW(), OUTPUT_HIGH(), // OUTPUT_FLOAT(), OUTPUT_BIT() // Constants used to identify pins in the above are: #define PIN_A0 40 #define PIN_A1 41 #define PIN_A2 42 #define PIN_A3 43 #define PIN_A4 44 #define PIN_A5 45 #define PIN_B0 48 #define PIN_B1 49 #define PIN_B2 50 #define PIN_B3 51 #define PIN_B4 52 #define PIN_B5 53 #define PIN_B6 54 #define PIN_B7 55 #define PIN_C0 56 #define PIN_C1 57 #define PIN_C2 58 #define PIN_C3 59 #define PIN_C4 60 #define PIN_C5 61 #define PIN_C6 62 #define PIN_C7 63 #define PIN_D0 64 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 171 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #define PIN_D1 65 #define PIN_D2 66 #define PIN_D3 67 #define PIN_D4 68 #define PIN_D5 69 #define PIN_D6 70 #define PIN_D7 71 #define PIN_E0 72 #define PIN_E1 73 #define PIN_E2 74 ////////////////////////////////////////////////////////////////// Useful defines #define FALSE 0 #define TRUE 1 #define BYTE int #define BOOLEAN short int #define getc getch #define fgetc getch #define getchar getch #define putc putchar #define fputc putchar #define fgets gets #define fputs puts ////////////////////////////////////////////////////////////////// Control // Control Functions: RESET_CPU(), SLEEP(), RESTART_CAUSE() // Constants returned from RESTART_CAUSE() are: #define WDT_FROM_SLEEP 3 #define WDT_TIMEOUT 11 #define MCLR_FROM_SLEEP 19 #define MCLR_FROM_RUN 27 #define NORMAL_POWER_UP 24 #define BROWNOUT_RESTART 26 ////////////////////////////////////////////////////////////////// Timer 0 // Timer 0 (AKA RTCC)Functions: SETUP_COUNTERS() or SETUP_TIMER_0(), // SET_TIMER0() or SET_RTCC(), // GET_TIMER0() or GET_RTCC() // Constants used for SETUP_TIMER_0() are: #define RTCC_INTERNAL 0 #define RTCC_EXT_L_TO_H 32 #define RTCC_EXT_H_TO_L 48 #define RTCC_DIV_1 8 #define RTCC_DIV_2 0 #define RTCC_DIV_4 1 #define RTCC_DIV_8 2 #define RTCC_DIV_16 3 #define RTCC_DIV_32 4 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 172 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #define RTCC_DIV_64 5 #define RTCC_DIV_128 6 #define RTCC_DIV_256 7 #define RTCC_8_BIT 0 // Constants used for SETUP_COUNTERS() are the above // constants for the 1st param and the following for // the 2nd param: ////////////////////////////////////////////////////////////////// WDT // Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above) // RESTART_WDT() #define WDT_18MS 0x8008 #define WDT_36MS 9 #define WDT_72MS 10 #define WDT_144MS 11 #define WDT_288MS 12 #define WDT_576MS 13 #define WDT_1152MS 14 #define WDT_2304MS 15 ////////////////////////////////////////////////////////////////// Timer 1 // Timer 1 Functions: SETUP_TIMER_1, GET_TIMER1, SET_TIMER1 // Constants used for SETUP_TIMER_1() are: // (or (via |) together constants from each group) #define T1_DISABLED 0 #define T1_INTERNAL 0x85 #define T1_EXTERNAL 0x87 #define T1_EXTERNAL_SYNC 0x83 #define T1_CLK_OUT 8 #define T1_DIV_BY_1 0 #define T1_DIV_BY_2 0x10 #define T1_DIV_BY_4 0x20 #define T1_DIV_BY_8 0x30 ////////////////////////////////////////////////////////////////// Timer 2 // Timer 2 Functions: SETUP_TIMER_2, GET_TIMER2, SET_TIMER2 // Constants used for SETUP_TIMER_2() are: #define T2_DISABLED 0 #define T2_DIV_BY_1 4 #define T2_DIV_BY_4 5 #define T2_DIV_BY_16 6 ////////////////////////////////////////////////////////////////// CCP // CCP Functions: SETUP_CCPx, SET_PWMx_DUTY // CCP Variables: CCP_x, CCP_x_LOW, CCP_x_HIGH // Constants used for SETUP_CCPx() are: #define CCP_OFF 0 #define CCP_CAPTURE_FE 4 #define CCP_CAPTURE_RE 5 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 173 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #define CCP_CAPTURE_DIV_4 6 #define CCP_CAPTURE_DIV_16 7 #define CCP_COMPARE_SET_ON_MATCH 8 #define CCP_COMPARE_CLR_ON_MATCH 9 #define CCP_COMPARE_INT 0xA #define CCP_COMPARE_RESET_TIMER 0xB #define CCP_PWM 0xC #define CCP_PWM_PLUS_1 0x1c #define CCP_PWM_PLUS_2 0x2c #define CCP_PWM_PLUS_3 0x3c long CCP_1; #byte CCP_1 = 0x15 #byte CCP_1_LOW= 0x15 #byte CCP_1_HIGH= 0x16 long CCP_2; #byte CCP_2 = 0x1B #byte CCP_2_LOW= 0x1B #byte CCP_2_HIGH= 0x1C ////////////////////////////////////////////////////////////////// PSP // PSP Functions: SETUP_PSP, PSP_INPUT_FULL(), PSP_OUTPUT_FULL(), // PSP_OVERFLOW(), INPUT_D(), OUTPUT_D() // PSP Variables: PSP_DATA // Constants used in SETUP_PSP() are: #define PSP_ENABLED 0x10 #define PSP_DISABLED 0 #byte PSP_DATA= 8 ////////////////////////////////////////////////////////////////// SPI // SPI Functions: SETUP_SPI, SPI_WRITE, SPI_READ, SPI_DATA_IN // Constants used in SETUP_SPI() are: #define SPI_MASTER 0x20 #define SPI_SLAVE 0x24 #define SPI_L_TO_H 0 #define SPI_H_TO_L 0x10 #define SPI_CLK_DIV_4 0 #define SPI_CLK_DIV_16 1 #define SPI_CLK_DIV_64 2 #define SPI_CLK_T2 3 #define SPI_SS_DISABLED 1 #define SPI_SAMPLE_AT_END 0x8000 #define SPI_XMIT_L_TO_H 0x4000 ////////////////////////////////////////////////////////////////// UART // Constants used in setup_uart() are: // FALSE - Turn UART off // TRUE - Turn UART on #define UART_ADDRESS 2 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 174 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #define UART_DATA 4 ////////////////////////////////////////////////////////////////// ADC // ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A), // SET_ADC_CHANNEL(), READ_ADC() // Constants used for SETUP_ADC() are: #define ADC_OFF 0 // ADC Off #define ADC_CLOCK_DIV_2 0x100 #define ADC_CLOCK_DIV_8 0x40 #define ADC_CLOCK_DIV_32 0x80 #define ADC_CLOCK_INTERNAL 0xc0 // Internal 2-6us // Constants used in SETUP_ADC_PORTS() are: #define NO_ANALOGS 7 // None #define ALL_ANALOG 0 // A0 A1 A2 A3 A5 E0 E1 E2 #define AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF 1 // A0 A1 A2 A5 E0 E1 E2 VRefh=A3 #define AN0_AN1_AN2_AN3_AN4 2 // A0 A1 A2 A3 A5 #define AN0_AN1_AN2_AN4_VSS_VREF 3 // A0 A1 A2 A4 VRefh=A3 #define AN0_AN1_AN3 4 // A0 A1 A3 #define AN0_AN1_VSS_VREF 5 // A0 A1 VRefh=A3 #define AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF 0x08 // A0 A1 A5 E0 E1 E2 VRefh=A3 VRefl=A2 #define AN0_AN1_AN2_AN3_AN4_AN5 0x09 // A0 A1 A2 A3 A5 E0 #define AN0_AN1_AN2_AN4_AN5_VSS_VREF 0x0A // A0 A1 A2 A5 E0 VRefh=A3 #define AN0_AN1_AN4_AN5_VREF_VREF 0x0B // A0 A1 A5 E0 VRefh=A3 VRefl=A2 #define AN0_AN1_AN4_VREF_VREF 0x0C // A0 A1 A4 VRefh=A3 VRefl=A2 #define AN0_AN1_VREF_VREF 0x0D // A0 A1 VRefh=A3 VRefl=A2 #define AN0 0x0E // A0 #define AN0_VREF_VREF 0x0F // A0 VRefh=A3 VRefl=A2 #define ANALOG_RA3_REF 0x1 //!old only provided for compatibility #define A_ANALOG 0x2 //!old only provided for compatibility #define A_ANALOG_RA3_REF 0x3 //!old only provided for compatibility #define RA0_RA1_RA3_ANALOG 0x4 //!old only provided for compatibility #define RA0_RA1_ANALOG_RA3_REF 0x5 //!old only provided for compatibility SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 175 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #define ANALOG_RA3_RA2_REF 0x8 //!old only provided for compatibility #define ANALOG_NOT_RE1_RE2 0x9 //!old only provided for compatibility #define ANALOG_NOT_RE1_RE2_REF_RA3 0xA //!old only provided for compatibility #define ANALOG_NOT_RE1_RE2_REF_RA3_RA2 0xB //!old only provided for compatibility #define A_ANALOG_RA3_RA2_REF 0xC //!old only provided for compatibility #define RA0_RA1_ANALOG_RA3_RA2_REF 0xD //!old only provided for compatibility #define RA0_ANALOG 0xE //!old only provided for compatibility #define RA0_ANALOG_RA3_RA2_REF 0xF //!old only provided for compatibility // Constants used in READ_ADC() are: #define ADC_START_AND_READ 7 // This is the default if nothing is specified #define ADC_START_ONLY 1 #define ADC_READ_ONLY 6 ////////////////////////////////////////////////////////////////// INT // Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(), // EXT_INT_EDGE() // Constants used in EXT_INT_EDGE() are: #define L_TO_H 0x40 #define H_TO_L 0 // Constants used in ENABLE/DISABLE_INTERRUPTS() are: #define GLOBAL 0x0BC0 #define INT_RTCC 0x0B20 #define INT_RB 0xFF0B08 #define INT_EXT 0x0B10 #define INT_AD 0x8C40 #define INT_TBE 0x8C10 #define INT_RDA 0x8C20 #define INT_TIMER1 0x8C01 #define INT_TIMER2 0x8C02 #define INT_CCP1 0x8C04 #define INT_CCP2 0x8D01 #define INT_SSP 0x8C08 #define INT_PSP 0x8C80 #define INT_BUSCOL 0x8D08 #define INT_EEPROM 0x8D10 #define INT_TIMER0 0x0B20 #list SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 176 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha DEFS_16F877A.H //======== Register Definitions ============= //-----Register Files---------------------------------------- #byte PORTA = 0x05 #byte PORTB = 0x06 #byte PORTC = 0x07 #byte PORTD = 0x08 #byte PORTE = 0x09 #byte EEDATA = 0x10C #byte EEADR = 0x10D #byte EEDATH = 0x10E #byte EEADRH = 0x10F #byte EECON1 = 0x18C #byte EECON2 = 0x18D #byte PR2 = 0x92 #bit RA4 = 0x05.4 #bit RA3 = 0x05.3 #bit RA2 = 0x05.2 #bit RA1 = 0x05.1 #bit RA0 = 0x05.0 #bit RB7 = 0x06.7 #bit RB6 = 0x06.6 #bit RB5 = 0x06.5 #bit RB4 = 0x06.4 #bit RB3 = 0x06.3 #bit RB2 = 0x06.2 #bit RB1 = 0x06.1 #bit RB0 = 0x06.0 #bit RC7 = 0x07.7 #bit RC6 = 0x07.6 #bit RC5 = 0x07.5 #bit RC4 = 0x07.4 #bit RC3 = 0x07.3 #bit RC2 = 0x07.2 #bit RC1 = 0x07.1 #bit RC0 = 0x07.0 #bit RD7 = 0x08.7 #bit RD6 = 0x08.6 #bit RD5 = 0x08.5 #bit RD4 = 0x08.4 #bit RD3 = 0x08.3 #bit RD2 = 0x08.2 #bit RD1 = 0x08.1 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 177 Đồ Án Tốt Nghiệp Khóa 2005 – 2008 GVHD:Thạc sỹ Lê Đình Kha #bit RD0 = 0x08.0 #bit RE2 = 0x09.2 #bit RE1 = 0x09.1 #bit RE0 = 0x09.0 //----- INTCON ------------------------------------------ #bit GIE = 0x0b.7 #bit PEIE = 0x0b.6 #bit TMR0IE = 0x0b.5 #bit INTE = 0x0b.4 #bit RBIE = 0x0b.3 #bit TMR0IF = 0x0b.2 #bit INTF = 0x0b.1 #bit RBIF = 0x0b.0 //----- PIR1 ------------------------------------------------- #bit PSPIF = 0x0c.7 #bit ADIF = 0x0c.6 #bit RCIF = 0x0c.5 #bit TXIF = 0x0c.4 #bit SSPIF = 0x0c.3 #bit CCP1IF = 0x0c.2 #bit TMR2IF = 0x0c.1 #bit TMR1IF = 0x0c.0 //----- PIR2 ------------------------------------------ #bit CMIF = 0x0d.6 #bit EEIF = 0x0d.4 #bit BCLIF = 0x0d.3 #bit CCP2IF = 0x0d.0 //----- PIE1 ------------------------------------------ #bit PSPIE = 0x8c.7 #bit ADIE = 0x8c.6 #bit RCIE = 0x8c.5 #bit TXIE = 0x8c.4 #bit SSPIE = 0x8c.3 #bit CCP1IE = 0x8c.2 #bit TMR2IE = 0x8c.1 #bit TMR1IE = 0x8c.0 //----- PIE2 ------------------------------------------- #bit CMIE = 0x8d.6 #bit EEIE = 0x8d.4 #bit BCLIE = 0x8d.3 #bit CCP2IE = 0x8d.0 SVTH :Hà Xuân Bình & Vũ Thanh Hưng Trang 178

Các file đính kèm theo tài liệu này:

  • pdfvan ban hoan chinh.pdf
  • jpgBIA.jpg
  • pdfBIA.pdf
  • docluu do giai thuat.doc
  • pdfNHAN XET.pdf
  • docso do mach.doc