Tai lieu thuc hanh VXL

15 504 7
Tai lieu thuc hanh VXL

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

thuc hanh vxl

1 Bài 1 : LED đơn trang 2 Bài 2 : ĐÈN GIAO THÔNG HIỂN THỊ THỜI GIAN .trang 3 Bài 3 : ĐẾM TỪ 1 SỐ XXXX à 1 SỐ XXXX .trang 5 Bài 4 : HIỂN THỊ 1 SỐ XXXX LÊN LED 7 .trang 7 Bài 5 : HIỂN THỊ MATRIX 8x16 ( nối trực tiếp ) .trang 8 Bài 6 : HIỂN THỊ LCD 20x4 .trang 13 2 Bài 1 : LED đơn (LED SÁNG MỨC ‘ 0 ‘) #include <16f877a.h> #use delay (clock=4000000) //khai báo thông số của thạch anh #fuses xt // khai báo dùng thạch anh #use fast_io(b) //khai báo dùng portb ( quan trọng : khi dùng port nào thì khai báo tên port đó ) #use fast_io(c) //khai báo dùng portc #byte portb=0x06 //địa chỉ của portb trong PIC ( xem datasheet) #byte portc=0x07 //địa chỉ của portc trong PIC int8 i; //khai báo biến i là biến 8bit int8 effect01[17]={0b11111111,0b01111111,0b00111111,0b00011111,0b00001111, 0b00000111,0b00000011,0b00000001,0b00000000,0b10000000, 0b11000000,0b11100000,0b11110000,0b11111000,0b11111100, 0b11111110,0b11111111}; //hiệu ứng chạy đèn sáng dần à tắt dần int8 effect02[17]={0b11111111,0b01111111,0b00111111,0b00011111,0b00001111, 0b00000111,0b00000011,0b00000001,0b00000000,0b11111110, 0b11111100,0b11111000,0b11110000,0b11100000,0b11000000, 0b10000000,0b00000000}; //hiệu ứng sáng đèn từ dưới lên à từ trên xuống void main() // hàm chính ( dùng thực thi các lệnh chính ) { set_tris_b(0x00); //khai báo portb xuất (0) hay nhập (1) , tại đây tất cả portb đều xuất nên tất cả = 0 set_tris_c(0x00); //khai báo portc xuất (0) hay nhập (1) , tại đây tất cả portc đều xuất nên tất cả = 0 while (true) //hàm lặp vô hạn các lệnh trong ngoặc { } { for(i=0;i<17;i++) //hàm FOR là hàm lặp theo số lần quy định , ở đây hàm for dùng làm để thay đổi thứ tự { //hiển thị đèn ứng với các effect bên trên , i lần lượt đếm từ 0 à 16 ứng với 17 giá trị trong effect output_b(effect01[i]); //sau khi i chọn giá trị nào trong effect được hiển thị thì lệnh này sẽ xuất ra đèn theo output_c(effect02[i]); //port mình chọn , tại đây dùng port b&c nên ghi lệnh vậy , nếu đổi port thì sửa lại delay_ms(200); //thời gian trễ để thực hiện lệnh tiếp theo } } } 3 Bài 2 : ĐÈN GIAO THÔNG HIỂN THỊ THỜI GIAN Thứ tự cắm chân B0 à chân G C0 à chân chọn LED 4 cắm LED giao thông theo port d , B6 à chân A C3 à chân chọn LED 1 cắm chiều nào cũng OK (P/S: B0 , C0 là ký hiệu tên của các port . VD : B0 là portb.0 ; C0 là portc.0 ) P/S: Để ý chiều của 2 port b và port c , nếu thấy chữ sáng ngược thứ tự thì đổi chiều cắm chân chọn LED , nếu đèn sáng theo thứ tự chọn LED nhưng sáng ko ra số thì thử đổi chiều port b điều khiển LED . Còn phần LED giao thông của port d thì cắm sao cũng dc , nếu cắm ngược trên hình thì chỉ thay đổi thứ thứ tự của 2 hệ thống đèn giao thông. NẾU DÙNG CODE NÀY TRONG PROTEUS THÌ GẮN THÊM CỔNG LOGIC NOT TRƯỚC KHI GẮN DÂY VÀO LED GIAO THÔNG GIỐNG NHƯ GẮN Ở CÁC CHÂN ABCDEFG . ( DO ĐÈN GIAO THÔNG TRONG PROTEUS SÁNG MỨC ‘ 1 ‘ ) Có thể thay đổi thời gian tùy ý nhưng phải theo công thức nếu ko sẽ hiển thị sai ĐỎ 1 = XANH 2 + VÀNG 2 ĐỎ 2 = XANH 1 + VÀNG 1 CODE #include <16f877a.h> #use delay(clock=4000000) #fuses xt #use fast_io(b) //dùng port b cho 7 chân LED 7 đoạn #use fast_io(c) //dùng port c cho phần chọn LED 7 #use fast_io(d) //dùng port d cho phần hiển thị đèn LED giao thông #byte portb=0x06 //địa chỉ của 3 port trong PIC ( datasheet ) #byte portc=0x07 4 #byte portd=0x08 int8 so[10]={0b00000001,0b11001111,0b10010010,0b10000110,0b11001100, 0b10100100,0b10100000,0b10001111,0b10000000,0b10000100}; // mức ‘ 0 ‘ thì LED 7 sáng int8 i,j,k,chuci,chucj,dvi,dvj; //các biến 8 bit dùng trong code Void doibcd(); //khai báo hàm con Void hienthi(); //khai báo hàm con void main() //hàm chính { set_tris_b(0x00); //cực kỳ quan trọng , xem phần này kỹ , lệnh này dùng để khai báo xem port đó dùng để Set_tris_c(0x00); //xuất hay nhập , ở đây 3 port đều xuất cho nên khai báo tất cả đều ‘ 0 ‘ Set_tris_d(0x00); //không có phần này thì mạch sẽ ko chạy While(true) { for(i=33,j=30;j>0;j--,i--) // ĐỎ 1 = 33s , XANH 2 = 30s // hàm for đếm xuống dùng để cấp giá trị cho hàm // doibcd làm việc // thay đổi thời gian hiển thị đèn giao thông ở đây // quy ước : i là của hệ thống đèn giao thông 1 , j là của hệ thống đèn giao thông 2 { output_d(0b00110111); //theo hình thì chân nào = 0 thì chân đó làm đèn sáng doibcd(); //căn cứ theo giá trị i , j để đổi ra giá trị cần hiển thị cho LED 7 For(k=0;k<50;k++) //lenh này làm cho LED 7 đếm nhanh hay chậm ( tăng k lên thì chậm ) Hienthi(); //hiển thị ra LED 7 đoạn các giá trị tương ứng } for(i=3,j=3;j>0,i>0;j--,i--) //ĐỎ 1 = 3s , VÀNG 2 = 3s // thay đổi thời gian hiển thị đèn giao thông ở đây { output_d(0b01010111); doibcd(); For(k=0;k<50;k++) Hienthi(); } for(i=25,j=28;i>0;j--,i--) // XANH 1 = 25s , ĐỎ 2 = 28 // thay đổi thời gian hiển thị đèn giao thông ở đây { output_d(0b11101100); doibcd(); For(k=0;k<50;k++) Hienthi(); } for(i=3,j=3;j>0,i>0;j--,i--) // VÀNG 1 = 3s , ĐỎ 2 = 28 // thay đổi thời gian hiển thị đèn giao thông ở đây { output_d(0b11101010); doibcd(); For(k=0;k<50;k++) Hienthi(); } } } Void doibcd() // lấy các giá trị i , j phía trên để đổi ra giá trị cho phần hàm hienthi() hoạt động { dvi=i%10; // làm tròn các giá trị i chuci=i/10; 5 dvj=j%10; // làm tròn các giá trị j Chucj=j/10; } Void hienthi() lấy giá trị từ phần đổi bcd để hiển thị ra LED 7 { output_c(0b11111101); // chon LED 7 thứ 2 à ứng với hàng chục của hệ thống đèn giao thông 1 Output_b(so[chuci]); // xuất giá trị hiển thị ra LED 7 ứng với giá trị chuci do hàm doibcd() cung cấp Delay_ms(2); output_c(0b11111110); // chon LED 7 thứ 1 à ứng với hàng đơn vị của hệ thống đèn giao thông 1 Output_b(so[dvi]); // xuất giá trị hiển thị ra LED 7 ứng với giá trị dvi do hàm doibcd() cung cấp Delay_ms(2); output_c(0b11110111); // chon LED 7 thứ 4 à ứng với hàng chục của hệ thống đèn giao thông 2 Output_b(so[chucj]); // xuất giá trị hiển thị ra LED 7 ứng với giá trị chucj do hàm doibcd() cung cấp Delay_ms(2); output_c(0b11111011); // chon LED 7 thứ 3 à ứng với hàng đơn vị của hệ thống đèn giao thông 2 Output_b(so[dvj]); // xuất giá trị hiển thị ra LED 7 ứng với giá trị dvj do hàm doibcd() cung cấp Delay_ms(2); } Bài 3 : ĐẾM TỪ 1 SỐ XXXX à 1 SỐ XXXX Phần nối dây và lưu ý tương tự phần LED 7 đoạn của ĐÈN GIAO THÔNG CODE #include <16f877a.h> 6 #use delay(clock=4000000) #fuses xt #use fast_io(b) #use fast_io(c) #byte portb=0x06 #byte portc=0x07 int8 so[10]={0b00000001,0b11001111,0b10010010,0b10000110,0b11001100,0b10100100, 0b10100000,0b10001111,0b10000000,0b10000100}; // LED 7 sáng mức ‘ 0 ‘ int8 donvi,chuc,tram,ngan; //các biến 8 bit dùng trong code int16 sodem; // vì sodem có giá trị =1000 , nên phải khai báo bằng int16 // nếu <= 255 thì khai báo là int8 // nếu <=65535 thì khai báo là int16 Void Main() { Set_tris_b(0x00); //quan trọng Set_tris_c(0x00); While(true) { For(sodem=0;sodem<10000;sodem++) // ĐẾM LÊN // xem P/S bên dưới // cần thay đổi chỉ cần sửa dòng này { Donvi=sodem%10; // tương tự như phần doibcd() của đèn giao thông , dùng cung cấp giá trị cho LED 7 Chuc=(sodem/10)%10; // làm việc Tram=(sodem/100)%10; Ngan=(sodem/1000)%10; output_c(0b11111110);;//chon led don vi Output_b(so[donvi]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay chậm ( càng lớn càng chậm ) output_c(0b11111101);;//chon led chuc Output_b(so[chuc]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay chậm ( càng lớn càng chậm ) output_c(0b11111011);;//chon led tram Output_b(so[tram]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay chậm ( càng lớn càng chậm ) output_c(0b11110111);//chon led ngan Output_b(so[ngan]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay chậm ( càng lớn càng chậm ) } } } P/S: hàm for có nhiệm vụ cung cấp giá trị cho phần đổi ra đơn vị , chục , trăm , ngàn làm việc Với hàm trên là hàm đếm lên từ 0 à 9999 , để thay đổi giá trị đếm theo ý thích thì làm khai báo theo hàm tổng quát như sau : Nếu đếm lên 7 For(sodem=xxxx;sodem<yyyy;sodem+ +) Với xxxx: số lúc đầu yyyy: số cần đếm đếm + 1 VD: 1) Đếm từ 0 à 1234 ( tương ứng xxxx=0 ; yyyy=1235 ) For(sodem=0;sodem<1235;sodem+ +) 2)Đếm từ 542 à 2145 ( tương ứng xxxx=542 ; yyyy=2146 ) For(sodem=542;sodem<2146;sodem+ +) Nếu đếm xuống For(sodem=xxxx;sodem>yyyy;sodem- -) Với xxxx: số lúc đầu yyyy: số cần đếm đến - 1 VD: 1)Đếm từ 999 à 0 ( tương ứng xxxx=999 ; yyyy=0 ) For(sodem=999;sodem>0;sodem- -) 2)Đếm từ 4512 à 123 ( tương ứng xxxx= 4512; yyyy=122) For(sodem=4512;sodem>122;sodem- -) Bài 4 : HIỂN THỊ 1 SỐ XXXX LÊN LED 7 Hình & nối dây & mức sáng đèn như của bài 3 CODE: #include <16f877a.h> #use delay(clock=4000000) #fuses xt #use fast_io(b) #use fast_io(c) #byte portb=0x06 #byte portc=0x07 int8 so[10]={0b00000001,0b11001111,0b10010010,0b10000110,0b11001100, 0b10100100,0b10100000,0b10001111,0b10000000,0b10000100}; void main() { set_tris_b(0); Set_tris_c(0); While(true) { output_c(0b11110111); // hàng ngàn Output_b(so[4]); // thay đổi giá trị hiển thị hàng ngàn thì thay đổi số ‘4’ thành số theo ý thích delay_ms(4); output_c(0b11111011); // hàng trăm Output_b(so[3]); // thay đổi giá trị hiển thị hàng trăm thì thay đổi số ‘3’ thành số theo ý thích delay_ms(4); output_c(0b11111101); // hàng chục Output_b(so[2]); // thay đổi giá trị hiển thị hàng chục thì thay đổi số ‘2’ thành số theo ý thích delay_ms(4); 8 output_c(0b11111110); // hàng đơn vị Output_b(so[1]); // thay đổi giá trị hiển thị hàng đơn vị thì thay đổi số ‘1’ thành số theo ý thích delay_ms(4); } } Bài 5 : HIỂN THỊ MATRIX 8x16 ( nối trực tiếp ) Phần nối dây cũng tương tự các phần trước , nếu khi nối thấy hiệu ứng đèn ngược với khi test trên protues thì đổi chiều dây cắm. Để ý phần port sữ dụng , đặc biệt là port hàng ( port b ) , vì nếu sai port này thì đèn matrix sẽ ko hoạt động. Sau đây là 1 vài hiệu ứng cơ bản , tuy nhiên các hiệu ứng này là hiệu ứng tĩnh , cho nên chỉ duy trỉ duy nhất 1 trạng thái nhất định và ko thay đổi. 9 EFFECT 01 output_b(hang[1]); output_c(0b01010101); output_d(0b01010101); delay_ms(1); output_b(hang[2]); output_c(0b10101010); output_d(0b10101010); delay_ms(1); output_b(hang[3]); output_c(0b01010101); output_d(0b01010101); delay_ms(1); output_b(hang[4]); output_c(0b10101010); output_d(0b10101010); delay_ms(1); output_b(hang[5]); output_c(0b01010101); output_d(0b01010101); delay_ms(1); output_b(hang[6]); output_c(0b10101010); output_d(0b10101010); delay_ms(1); output_b(hang[7]); output_c(0b01010101); output_d(0b01010101); delay_ms(1); output_b(hang[8]); output_c(0b10101010); output_d(0b10101010); delay_ms(1); EFFECT 02 output_b(hang[1]); output_c(0b10101111); output_d(0b11110101); delay_ms(1); output_b(hang[2]); output_c(0b10101000); output_d(0b00010101); delay_ms(1); output_b(hang[3]); output_c(0b10101011); output_d(0b11010101); delay_ms(1); output_b(hang[4]); output_c(0b10101010); output_d(0b01010101); delay_ms(1); output_b(hang[5]); output_c(0b10101010); output_d(0b01010101); delay_ms(1); output_b(hang[6]); output_c(0b10101011); output_d(0b11010101); delay_ms(1); output_b(hang[7]); output_c(0b10101000); output_d(0b00010101); delay_ms(1); output_b(hang[8]); output_c(0b10101111); output_d(0b11110101); delay_ms(1); EFFECT 03 output_b(hang[1]); output_c(0b00011011); output_d(0b11101110); delay_ms(1); output_b(hang[2]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[3]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[4]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[5]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[6]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[7]); output_c(0b10111011); output_d(0b11101110); delay_ms(1); output_b(hang[8]); output_c(0b00011000); output_d(0b01100000); delay_ms(1); 10 EFFECT 01 ( ‘ 0 ‘ là đèn sáng ) Hiệu ứng sáng xen kẽ EFFECT 02 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 1 0 1 EFFECT 03 0 0 0 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 . để đếm nhanh hay chậm ( càng lớn càng chậm ) output_c(0b11111101);;//chon led chuc Output_b(so[chuc]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay. để đếm nhanh hay chậm ( càng lớn càng chậm ) output_c(0b11110111);//chon led ngan Output_b(so[ngan]); Delay_ms(10); //thay đổi giá trị để đếm nhanh hay

Ngày đăng: 14/07/2013, 03:03

Hình ảnh liên quan

Còn phần LED giao thông của portd thì cắm sao cũng d c, nếu cắm ngược trên hình thì chỉ thay đổi thứ thứ tự của 2 hệ thống đèn giao thông - Tai lieu thuc hanh VXL

n.

phần LED giao thông của portd thì cắm sao cũng d c, nếu cắm ngược trên hình thì chỉ thay đổi thứ thứ tự của 2 hệ thống đèn giao thông Xem tại trang 3 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan