Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 83 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
83
Dung lượng
2,35 MB
Nội dung
TR NG I H C M THÀNH PH H CHÍ MINH KHOA XÂY D NG VÀ I N K S ÁN T T NGHI P NGÀNH CÔNG NGHI P THI T K B D NG C TH C HÀNH PIC 16F877A N GI N SVTH : HU NH V N QUANG MSSV : 20702025 GVHD : ThS PHAN V N TP H Chí Minh, tháng n m 2012 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P L IM U Ngày k thu t vi u n tr nên quen thu c ngành k thu t dân d ng Các b vi u n có kh n ng x lý nhi u ho t đ ng ph c t p mà ch c n m t chip vi m ch nh , thay th t u n l n ph c t p b ng nh ng m ch n g n nh , d dàng thao tác s d ng Vi u n khơng nh ng góp ph n vào k thu t u n mà cịn góp ph n to l n vào vi c phát tri n thơng tin Chính lý trên, vi c tìm hi u, kh o sát vi u n u mà sinh viên ngành n mà đ c bi t chuyên ngành k thu t n-đi n t ph i h t s c quan tâm đ tài đ ó m t nhu c u c n thi t c p bách đ i v i m i sinh viên, c th c hi n đáp ng nhu c u Các b u n s d ng vi u n đ n gi n nh ng đ v n hành s d ng đ ng c l i m t u r t ph c t p Ph n cơng vi c x lý v n ph thu c vào i, ch ng trình hay ph n m m Do v y nói đ n vi u n c ng gi ng nh máy tính bao g m ph n ph n c ng ph n m m M c dù vi u n đ c nh ng b k thu t khơng th m t vi c có đ c dài nh v y nh ng đ ti p c n đ c m t s m m t chi u cv i tìm hi u b vi u n m t cách khoa h c mang l i hi u qu cao làm n n t n cho vi c xâm nh p vào nh ng h th ng t i tân h n Vi c trang b nh ng ki n th c v vi u n cho sinh viên h t s c c n thi t Xu t phát t th c ti n em đ n quy t đ nh thi t k b Kit th c hành Vi i u Khi n PIC 16F877A đ n gi n nh m đáp ng nhu c u ham mu n h c h i c a b n thân giúp cho b n sinh viên d ti p c n hi u sâu h n v Vi i u Khi n PIC 16F877A Trong trình th c hi n đ tài v n cịn nhi u sai sót, mong nh n đ c nhi u ý ki n đóng góp t th y cô b n.Xin chân thành c m n! Tp HCM, ngày 19 tháng n m 2012 Hu nh V n Quang HU NH V N QUANG - 20702025 ÁN T T NGHI P K S CÔNG NGHI P L IC M GVHD: ThS PHAN V N HI P N Tr c tiên em xin g i l i cám n chân thành sâu s c t i th y cô giáo tr ng i h c M Thành ph H Chí Minh nói chung th y cô giáo khoa Xây D ng i n nói riêng t n tình gi ng d y,truy n đ t cho em nh ng ki n th c, kinh nghi m quý báu su t th i gn qua c bi t em xin g i l i c m n đ n th y Phan V n Hi p, th y t n tìnhgiúp đ , tr c ti p ch b o, h ng d n em su t trình làm đ án t t nghi p Trong th i gian làm vi c v i th y, em không ng ng ti p thu thêm nhi u ki n th c b ích mà cịn h c t p đ c tinh th n làm vi c, thái đ nghiên c u khoa h c nghiêm túc, hi u qu , nh ng u r t c n thi t cho em q trình h c t p cơng tác sau Sau xin g i l i c m n chân thành t i gia đình, b n bè đ ng viên,đóng góp ý ki n giúp đ trình h c tâp, nghiên c u hoàn thành đ án HU NH V N QUANG - 20702025 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P M CL C CH NG 1: T NG QUAN V VI I U KHI N Error! Bookmark not defined 1.1 Gi i thi u chung Error! Bookmark not defined 1.1.2Phân lo i Error! Bookmark not defined 1.1.3C u trúc t ng quan c a VDK Error! Bookmark not defined 1.2 Khái quát v vi u n pic Error! Bookmark not defined 1.2.1PIC ? Error! Bookmark not defined 1.2.2Ki n trúc PIC Error! Bookmark not defined 1.2.3RISC CISC Error! Bookmark not defined 1.2.4Ngơn ng l p trình cho PIC Error! Bookmark not defined 1.2.5Các dòng PIC cách l a ch n vi u n PICError! Bookmark not defined CH NG 2: VI I U KHI N PIC16F877A 2.1 Các d ng s đ chân Error! Bookmark not defined 2.2 Ch c n ng chân c a PIC16F877A Error! Bookmark not defined 2.3 c m vi u n PIC16F877A Error! Bookmark not defined 2.4.1 B nh ch ng trình Error! Bookmark not defined 2.4.2 B nh d li u Error! Bookmark not defined 2.5 Các c ng xu t nh p c a PIC16F877A Error! Bookmark not defined 2.5.1PORT A Error! Bookmark not defined 2.5.2PORT B Error! Bookmark not defined 2.5.3PORT C Error! Bookmark not defined 2.5.4PORT D Error! Bookmark not defined 2.5.5PORT E Error! Bookmark not defined 2.6 TIMER Error! Bookmark not defined 2.7 TIMER Error! Bookmark not defined 2.8 TIMER Error! Bookmark not defined 2.9 ADC Error! Bookmark not defined 2.10COMPARATOR – B so sánh Error! Bookmark not defined 2.11CCP (CAPTURE/COMPARE/PWM) Error! Bookmark not defined 2.12Giao ti p n i ti p Error! Bookmark not defined 2.13C ng giao ti p song song PSP (PARALLEL SLAVE PORT)Error! Bookmark not defined HU NH V N QUANG - 20702025 ÁN T T NGHI P K S 2.14T 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 CÔNG NGHI P GVHD: ThS PHAN V N HI P ng quan v m t s đ c tính c a CPU Error! Bookmark not defined B dao đ ng (OSCILLATOR) Error! Bookmark not defined RESET Error! Bookmark not defined Ng t (INTERRUPT) Error! Bookmark not defined WATCHDOG TIMER (WDT) Error! Bookmark not defined Ch đ SLEEP Error! Bookmark not defined CH NG 3: THI T K VÀ THI CÔNG B KIT TH C HÀNH VI I U KHI N PIC 16F8777A Error! Bookmark not defined 3.1 Gi i thi u chung Error! Bookmark not defined 3.2 S đ kh i c a b kit nguyên t c v n hành Error! Bookmark not defined 3.2.1 S đ kh i b KIT Error! Bookmark not defined 3.2.2 S đ b trí b KIT Error! Bookmark not defined 3.2.3 Nguyên t c v n hành b KIT Error! Bookmark not defined 3.3 Hình nh th c t b KIT 33 3.4 Nguyên lý ho t đ ng c a t ng kh i Error! Bookmark not defined 3.4.1Kh i x lý trung tâm Error! Bookmark not defined 3.4.2Kh i quét LED đo n Error! Bookmark not defined 3.4.3Kh i quét LED ma tr n Error! Bookmark not defined 3.4.4Kh i hi n th LCD Error! Bookmark not defined 3.4.5Kh i bàn phím KEYPAD Error! Bookmark not defined 3.4.6Kh i u n đ ng c DC Error! Bookmark not defined 3.4.7Hi n th vào b ng LED đ n Error! Bookmark not defined 3.4.8Kh i nút nh n( Button): Error! Bookmark not defined 3.4.9 Kh i ADC 49 3.4.10Kh i RTC: Error! Bookmark not defined 3.4.11Kh i ngu n Error! Bookmark not defined CH NG 4: DEMO M T S CH NG TRÌNH 52 4.1Xu t d li u lên 74HC595 u n 32 LED đ n 52 4.2 ng h th i gian th c hi n th LED đo n 53 4.3Quang báo v i LED ma tr n 54 4.4Hi n th chu i ký t lên LCD 55 4.5 i u n LED đ n b ng ADC đ n gi n 55 4.6Gi i mã bàn phím hi n th LED đo n 56 CH NG 5: H NG M RÔNG TÀI 58 5.1Thay th b LED ma tr n m t màu b ng LED ma tr n màu 58 5.2Thay th dãy 32 LED d n b ng dãy LED đ n màu 59 HU NH V N QUANG - 20702025 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P PH L CCÁC CH NG TRÌNH DEMO 60 i u n 32 led đ n 60 ng h th i gian th c hi n th led đo n 61 Quang báo 68 Xu t ký t lên lcd 71 ADC 73 G i mã bàn phím 74 TÀI LI U THAM KH O 77 HU NH V N QUANG - 20702025 ÁN T T NGHI P K S CÔNG NGHI P CH GVHD: ThS PHAN V N HI P NG 1: T NG QUAN V VI I U KHI N 1.1 Gi i thi u chung B Vi x lỦ có kh n ng v tốn, x lỦ, vƠ thay đ i ch t b c so v i h th ng khác v kh n ng tính ng trình linh ho t theo m c đích ng i dùng, đ c bi t hi u qu đ i v i bƠi toán vƠ h th ng l n Tuy nhiên đ i v i ng d ng nh , t m tính tốn khơng địi h i kh n ng tính tốn l n vi c ng d ng vi x lỦ c n nh c B i h th ng dù l n hay nh , n u dùng vi x lỦ c ng địi h i kh i m ch n giao ti p ph c t p nh Các kh i nƠy bao g m b nh đ ch a d li u vƠ ch ng trình th c hi n, m ch n giao ti p ngo i vi đ xu t nh p vƠ u n tr l i, kh i nƠy liên k t v i vi x lỦ m i th c hi n đ hi u bi t tinh t th ng đ c công vi c k t n i kh i nƠy đòi h i ng i thi t k ph i ng v thƠnh ph n vi x lỦ, b nh , thi t b ngo i vi H c t o ph c t p, chi m nhi u không gian, m ch in ph c t p vƠ v n đ lƠ trình đ ng i thi t k K t qu lƠ giá thƠnh s n ph m cu i r t cao, không phù h p đ áp d ng cho h th ng nh Vì m t s nh c m nên nhƠ ch t o tích h p m t b nh vƠ m t s m ch giao ti p ngo i vi v i vi x lỦ vƠo m t IC nh t đ c g i lƠ MICrocontroller- Vi u n Vi u n đ c ng d ng dơy chuy n t đ ng lo i nh , robot có ch c n ng đ n gi n, máy gi t, ôtô v.v 1.1.2 Phơn lo i dài ghi D a vƠo đ dƠi c a ghi vƠ l nh c a V K mƠ ng i ta chia lo i V K 8bit, 16bit, hay 32bit Ki n trúc CISC RISC VXL ho c V K CISC lƠ V K có t p l nh ph c t p Các V K nƠy có m t s l ng l n l nh nên giúp cho ng h n vi t ch m ts l i l p trình có th linh ho t vƠ d dƠng ng trình V K RISC lƠ V K có t p l nh đ n gi n Chúng có ng nh l nh đ n gi n DO đó, chúng địi h i ph n c ng h n, HU NH V N QUANG - 20702025 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P giá thƠnh th p h n, vƠ nhanh h n so v i CISC Tuy nhiên địi h i ng trình ph i vi t ch il p ng trình ph c t p h n, nhi u l nh h n Ki n trúc Harvard ki n trúc Vonneumann Ki n trúc Harvard s d ng b nh riêng bi t cho ch ng trình vƠ d li u Bus đ a ch vƠ bus d li u đ c l p v i nên trình truy n nh n d li u đ n gi n h n Ki n trúc Vonneumann s d ng chung b nh cho ch ng trình vƠ d li u i u nƠy lƠm cho V K g n nh h n, giá thƠnh nh h n 1.1.3 C u trúc t ng quan c a VDK CPU: LƠ trái tim c a h th ng LƠ n i qu n lí t t c ho t đ ng c a V K Bên CPU g m: - ALU lƠ b ph n thao tác d li u - B gi i mã l nh vƠ u n, xác đ nh thao tác mƠ CPU c n th c hi n - Thanh ghi l nh IR, l u gi opcode c a l nh đ c th c thi - Thanh ghi PC, l u gi đ a ch c a l nh k ti p c n th c thi - M t t p ghi dùng đ l u thông tin t m th i ROM: ROM lƠ b nh dùng đ l u gi ch ng trình ROM cịn dùng đ ch a s li u b ng, tham s h th ng, s li u c đ nh c a h th ng Trong trình ho t đ ng n i dung ROM lƠ c đ nh, không th thay đ i, n i dung ROM ch thay đ i ROM ch đ xóa ho c n p ch ng trình RAM: RAM lƠ b nh d li u B nh RAM dùng lƠm môi tr ng x lỦ thông tin, l u tr k t qu trung gian vƠ k t qu cu i c a phép toán, x lí thơng tin Nó c ng dùng đ t ch c vùng đ m d li u, thao tác thu phát, chuy n đ i d li u BUS: BUS đ HU NH V N QUANG - 20702025 ng d n dùng đ di chuy n d li u Bao g m: bus đ a ch , ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P bus d li u , vƠ bus u n B NH TH I: c s d ng cho m c đích chung v th i gian WATCHDOG: B ph n dùng đ reset l i h th ng h th ng g p s c ắb t th ng” ADC: B ph n chuy n tín hi u analog sang tín hi u digital Các tín hi u bên ngoƠi vƠo VDK th ng d ng analog ADC s chuy n tín hi u nƠy v d ng tín hi u digital mƠ VDK có th hi u đ 1.2 1.2.1 c Khái quát v vi u n pic PIC ? PIC lƠ vi t t t c a ắProgramable Intelligent Computer”, có th t m d ch lƠ ắmáy tính thơng minh kh trình” hãng Genenral Instrument đ t tên cho vi u n đ u tiên c a h : PIC1650 đ c thi t k đ dùng lƠm thi t b ngo i vi cho vi u n CP1600 Vi u n nƠy sau đ c nghiên c u phát tri n thêm vƠ t hình thƠnh nên dịng vi u n PIC ngày 1.2.2 Ki n trúc PIC C u trúc ph n c ng c a m t vi u n đ c thi t k theo hai d ng ki n trúc: ki n trúc Von Neuman vƠ ki n trúc Havard Hình 1.1: Ki n trúc Havard ki n trúc Von-Neuman T ch c ph n c ng c a PIC đ HU NH V N QUANG - 20702025 c thi t k theo ki n trúc Havard i m khác ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P bi t gi a ki n trúc Havard vƠ ki n trúc Von-Neuman lƠ c u trúc b nh d li u vƠ b nh ch ng trình i v i ki n trúc Von-Neuman, b nh d li u vƠ b nh ch ng trình n m chung m t b nh , ta có th t ch c, đ i m t cách linh ho t b nh ch ng trình vƠ b nh d li u Tuy nhiên u nƠy ch có Ủ ngh a t c đ x lí c a CPU ph i r t cao, v i c u trúc đó, m t th i m CPU ch có th t ng tác v i b nh d li u ho c b nh ch ng trình Nh v y có th nói ki n trúc Von-Neuman khơng thích h p v i c u trúc c a m t vi u n i v i ki n trúc Havard, b nh d li u vƠ b nh ch ng trình tách thành hai b nh riêng bi t Do m t th i m CPU có th t tác v i c hai b nh , nh v y t c đ x lí c a vi u n đ ng c c i thi n đáng k M t m c n Ủ n a lƠ t p l nh ki n trúc Havard có th đ ct i u tùy theo yêu c u ki n trúc c a vi u n mƠ không ph thu c vƠo c u trúc d li u Ví d , đ i v i vi u n dòng 16F, đ dƠi l nh lƠ 14 bit (trong d li u đ c t ch c thƠnh t ng byte), đ i v i ki n trúc Von- Neuman, đ dƠi l nh lƠ b i s c a byte (do d li u đ c t ch c thƠnh t ng byte) 1.2.3 RISC CISC Qua vi c tách r i b nh ch ng trình vƠ b nh d li u, bus ch vƠ bus d li u, CPU có th m t lúc truy xu t c b nh ch ng trình ng trình vƠ b nh d li u, giúp t ng t c đ x lí c a vi u n lên g p đôi ng th i c u trúc l nh khơng cịn ph thu c vƠo c u trúc d li u n a mƠ có th linh đ ng u ch nh tùy theo kh n ng vƠ t c đ c a t ng vi u n VƠ đ ti p t c c i ti n t c đ th c thi l nh, t p l nh c a h vi u n PIC đ c thi t k cho chi u dƠi mã l nh ln c đ nh (ví d đ i v i h 16Fxxxx chi u dƠi mã l nh lƠ 14 bit) vƠ cho phép th c thi l nh m t chu kì c a xung clock ( ngo i tr m t s tr HU NH V N QUANG - 20702025 ng h p đ c bi t nh l nh nh y, l nh g i ch ng ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P keyscan(); }} void set_blink() { switch (mode) { case 1: blink_sec= 1; break; case 2: {blink_min= 1;blink_sec= 0;} break; case 3: {blink_hour= 1;blink_min= 0;} break; case 4: { blink= 0;mode = 0;blink_sec= 0; blink_min= 0;blink_hour= 0; } break; }} void change_time() { if(mode = = 1) {blink_sec= 1;set_sec();} if(mode = = 2) {blink_min= 1;set_min();} if(mode = = 3) {blink_hour= 1;set_hour();} if(mode = = 4) { blink= 0;mode = 0; blink_sec= 0; blink_min= 0; blink_hour= 0; }} void update_1307() { write_DS1307(0,sec); write_DS1307(1,min); } HU NH V N QUANG - 20702025 63 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P void keyscan() { RD0= 1;RD1= 1;RD2= 1;RD3= 1; if(SW1 != 1) { key= 0;SW1= 1;delay_ms(150);} if(SW2 != 1) { key= 1;SW2= 1;delay_ms(150);} if(SW3 != 1) { key= 2;SW3= 1;delay_ms(150);} if(SW4 != 1) { key= 3;SW4= 1;delay_ms(150);} if(key != 5) { switch (key) { case 0: {mode+ + ;key = 5;blink= 1;set_blink();} break; case 1: {change_time();key = 5;update_1307();} break; case 2: {clear_status();key = 5;} break; } } } void set_sec() { sec= read_ds1307(0); if (sec> = 0x30) {sec= 0; min+ + ; write_ds1307(1,min);} else sec= 0; write_ds1307(0,sec); } void set_min() { byte j; min= read_ds1307(1); min+ + ; j= & 0x0F; HU NH V N QUANG - 20702025 64 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P if (j> = 0x0A) min= min+ 0x06; if (min> = 0x60) min= 0; write_ds1307(1,min); } void set_hour() { hour= hour & 0x1F; hour+ + ; if(hour= = 0x0a) hour = hour+ 0x06; if(hour = = 0x13) { hour = 0x00; if (ampm = = 0) ampm = 1; else ampm = 0; } } void clear_status() { mode= 4; set_blink(); } void read_time() { sec = read_DS1307(0); = read_DS1307(1); hour = read_DS1307(2); update_time(); } void update_time() { ampm = bit_test(hour,5); //test AM PM if(ampm = = 0) {RD2 = 0;RD3= 1;} //AM HU NH V N QUANG - 20702025 65 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P if(ampm = = 1) {RD2 = 1;RD3= 0;} // PM TG1= sec & 0x0F; TG2= (sec & 0xF0)> > 4; //convert to BCD SEC TG3= & 0x0F; TG4= (min & 0xF0)> > 4; //convert to BCD MIN TG5= hour & 0x0F; TG6= (hour & 0x10)> > 4; //convert to BCD HOUR } void display() { TRISB= 0x00; TRISA= 0x00; if(blink= = 0) goto hienthi; if(on_off= = 0) goto LED_blink; hienthi: PortB= MAP[TG6]; RA5= 0; delay_ms(1); RA5= 1; PortB= MAP[TG5]; RA4= 0; delay_ms(1); RA4= 1; PortB= MAP[TG4]; RA3= 0; delay_ms(1); RA3= 1; PortB= MAP[TG3]; RA2= 0; HU NH V N QUANG - 20702025 66 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P delay_ms(1); RA2= 1; PortB= MAP[TG2]; RA1= 0; delay_ms(1); RA1= 1; PortB= MAP[TG1]; RA0= 0; delay_ms(1); RA0= 1; if(count!= 0) goto exit; else { count= 15; on_off= 0; } goto exit; LED_blink: PortB= MAP[TG1]; if (blink_sec= = 1) RA5= 1; else RA5= 0; delay_ms(3); RA0= 1; PortB= MAP[TG2]; if (blink_sec= = 1) RA4= 1; else RA4= 0; delay_ms(3); RA4= 1; PortB= MAP[TG3]; HU NH V N QUANG - 20702025 67 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P output_low(PIN_B7); if(blink_min= = 1) delay_ms(3); RA3= 1; else RA3= 0; RA3= 1; PortB= MAP[TG4]; if(blink_min= = 1) delay_ms(3); RA2= 1; else RA2= 0; RA2= 1; PortB= MAP[TG5]; output_low(PIN_B7); if(blink_hour= = 1) RA1= 1; delay_ms(3); else RA1= 0; RA1= 1; PortB= MAP[TG6]; if(blink_hour= = 1) RA0= 1; delay_ms(3); else RA0= 0; RA0= 1; if(count= = 0) { count= 15;on_off= 1; } exit: count ; } Quang báo #include < 16f877a.h> #include < font5x7.c> #use delay(clock= 20m) #byte Port_B = 0x06 // Dinh nghia ghi Port B #byte Port_C #byte TRIS_B = 0x86 // Dinh nghia ghi Tris B #byte TRIS_C #byte LED_data = Port_B #bit = 0x07 // Dinh nghia ghi Port C = 0x87 // Dinh nghia ghi Tris B data = Port_C.4 // Dinh nghia chan data la pin C.4 HU NH V N QUANG - 20702025 68 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P #bit clock = Port_C.6 // Dinh nghia chan data la pin C.5 #bit latch = Port_C.5 // Dinh nghia chan data la pin C.6 char LED[32];//4LED matran char font_buffer[6]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};// unsigned char string1[]= "DO AN TOT NGHIEP NAM 2012 LED matrix 8x32 HUYNH VAN QUANG 20702025"; char dem_ngat, addr, leng, ky_tu, vi_tri; void HC595(char cot) { char i; for(i= 0;i< cot;i+ + ) { //DUA CAC BIT VAO` TRUOC data= 1; // Dua bit vao 595 clock= 1; // Tao xung o chan Clock de dua du lieu vao 595 clock= 0; } data= 0; // Dua bit vao vi tri cot can hien thi clock= 1; clock= 0; for(i= (cot+ 1);i< = 31;i+ + ) { data= 1; //Tiep tuc dua bit vao 595 cho du 32bit clock= 1; clock= 0; } latch= 1; // Tao xung o chan Latch de day du lieu cac cong va chot latch= 0; } #int_timer0 // Khai bao su dung timer HU NH V N QUANG - 20702025 69 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P void Scan(void){ set_timer0(200); //cai dat gia tri ban dau cho timer0 if((+ + dem_ngat)= = 5) { LED_data= 0xff; HC595(addr); LED_data= LED[addr]; addr+ + ; if(addr> = 32) addr= 0; dem_ngat= 0; }} void leng_string(void){ leng= 0; while((string1[leng])!= '\1') // Chay tu dau cho toi ket thuc chuoi leng+ + ; } void copy_font(void){ char j; for(j= 0;j< = 4;j+ + ) font_buffer[j]= font[(string1[ky_tu] -32)].b[j]; font_buffer[j]= 0xff; } void kieu_1(void) { char j; for(j= 31;j> 0;j ) LED[j]= LED[j-1]; if(vi_tri> 5) { HU NH V N QUANG - 20702025 70 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P vi_tri= 0; copy_font(); ky_tu+ + ; } else{ LED[0]= font_buffer[vi_tri]; vi_tri+ + ; }} void main() { int i; TRIS_B= 0x00; TRIS_C= 0x00; Port_B= 0x00; Port_C= 0x00; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); //tan so timer0 set_timer0(20); enable_interrupts(global);//cho phep ngat toan cuc enable_interrupts(int_rtcc); leng_string(); // Lay dai ky_tu= 0; while(true) { for (i= 0;i< = 32;i+ + ) LED[i]= 0xFF; while(ky_tu< = leng){ kieu_1(); delay_ms(40); } } } Xu t ký t lên lcd #include < 16f877a.h> #use delay(clock= 20000000) #fuses HS HU NH V N QUANG - 20702025 71 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P #use fast_io(d) #use fast_io(c) void ghilenh(); void xuatdulieu(); char ten[]= "Met lam roi";// char ten1[]= "Muon nghi ngoi"; int8 i; void main() {set_tris_c(0b00000000);//0x00 set_tris_d(0b00000000); output_d(0x38); ghilenh(); output_d(0x0e); ghilenh(); output_d(0x80); ghilenh(); while(true) {for(i= 0;i< = 12;i+ + ) {output_d(ten[i]); xuatdulieu(); } output_d(0xC0); ghilenh(); for(i= 0;i< = 14;i+ + ) {output_d(ten1[i]); xuatdulieu(); } do{} while(true); HU NH V N QUANG - 20702025 72 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P } } void ghilenh() { output_low(pin_C0); output_low(pin_C1); output_high(pin_C2); output_low(pin_C2); delay_ms(5); } void xuatdulieu() { output_high(pin_C0); output_low(pin_C1); output_high(pin_C2); output_low(pin_C2); delay_ms(5); } ADC #include < 16F877.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #devICe 16F877*= 16 ADC= #use delay(clock= 20000000) Int8 adc; main() { setup_adc(adc_clock_internal); setup_adc_ports(AN0); set_adc_channel(0); delay_ms(10); HU NH V N QUANG - 20702025 73 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P while(true) { adc= read_adc(); output_B(adc); } } Gi i mƣ bƠn phím #include < 16f877a.h> #include "def_877a.h” #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, #use delay(clock= 20000000) #use fast_io(b) #DEFINE KEYPORT PORTC #DEFINE TRISKEYPORT TRISC #DEFINE BASEKEY PIN_C4 ConstcharLED7[16]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //CAC HAM CO BAN CHO QUET PHIM char xoayTrai(char value);//XOAY VONG MOT BIEN BIT char readKey(); void main(void) { char key= 0; TRISB= 0X00;//OUPUT CHO PORTB DE DEBUG PORTB= 0XF0;//DANH DAU XUAT PORT OK delay_ms(1000); while(true) { key= readKey();//DOC PHIM HU NH V N QUANG - 20702025 74 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P if(key!= 0) PORTB= LED7[key-1];//HIEN THI PHIM NEU CO MOT PHIM NHAN } } char xoayTrai(char value) { char temp; temp= value; temp= temp> > 7; value= value< < 1; value= value|temp; return value; } char readKey() { char temp;//LUU GIA TRI XOAY CHO PORT QUET PHIM char key;//LUU GIA TRI KEY DA NHAN int i;//BIEN DEM VONG TRISKEYPORT= 0XF0; KEYPORT= 0X00; temp= 0x7F; for( i= 0;i< 4;i+ + ) { temp= xoayTrai(temp);//XOAY MOT BIT KEYPORT= temp;//DUA RA PORT DE QUET QUA HANG/COT MOI KEY= 0; if( input_state(BASEKEY)= = ) { HU NH V N QUANG - 20702025 75 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P KEY= i*4+ 1; break; } else if( input_state(BASEKEY+ 1)= = ) { KEY= i*4+ 2; break; } else if( input_state(BASEKEY+ 2)= = ) { KEY= i*4+ 3; break; } else if( input_state(BASEKEY+ 3)= = ) { KEY= i*4+ 4; break; } } return KEY; } HU NH V N QUANG - 20702025 76 ÁN T T NGHI P K S CÔNG NGHI P GVHD: ThS PHAN V N HI P TÀI LI U THAM KH O Datasheet PIC16F877a www.PICvietnam.com www.dientuvietnam.net www.mICrochip.com www.ccsinfo.com www.engineersgarage.com VƠ nhi u đ a ch khác Internet HU NH V N QUANG - 20702025 77