Đề tài Bảng thông tin điện tử dùng vi điều khiển PIC16F88

Sự ra đời và phát triển của máy vi tính là một b-ớc đột phá của con ng-ời . Nó đ-ợc sử dụng nh- một công cụ không thể thiếu trong cuộc sống cũng nh- trong sản xuất . Đây chính chính là một vídụ điển hình nhất về ứng dụng của các bộ vi xử lý trong đời sống . Với những tính năng v-ợt trội nh- kích th-ớc nhỏ gọn , cho phép lập trình đ-ợc , giao tiếp đ-ợc với các thiết bị ngoại vi . các bộ vi xử lý chính là một công cụ đầy sức mạnh trong lĩnh vực điện tử .

pdf36 trang | Chia sẻ: tuandn | Lượt xem: 2206 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Bảng thông tin điện tử dùng vi điều khiển PIC16F88, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 1 Trường Đại Học Bỏch Khoa Hà Nội Khoa Điện Tử Viễn Thụng ====o0o==== Báo cáo bài tập lớn Môn :vi xử lí đề tài: Bảng thông tin điện tử dùng vi điều khiển pic16f88 Giảng viên h−ớng dẫn: Hàn Huy Dũng Nhóm sinh viên thực hiện: Lớp Điện Tử 1&2 –K48 Khoa : ĐT-VT Hà nội 2006 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 2 Báo cáo bài tập lớn môn vi xử lý Nhóm sinh viên thực hiện: Nguyên Đức Toàn ( Điện tử1-K48) Nguyễn Tiến C−ờng ( Điện tử2-K48) L−ơng Hồng Thắng ( Điện tử2-K48) Nguyễn Bá Chiến ( Điện tử2-K48) Nguyễn Huy Quang ( Điện tử2-K48) Trần Huy Du ( Điện tử2-K48) Lời nói đầu Sự ra đời và phát triển của máy vi tính là một b−ớc đột phá của con ng−ời . Nó đ−ợc sử dụng nh− một công cụ không thể thiếu trong cuộc sống cũng nh− trong sản xuất . Đây chính chính là một ví dụ điển hình nhất về ứng dụng của các bộ vi xử lý trong đời sống . Với những tính năng v−ợt trội nh− kích th−ớc nhỏ gọn , cho phép lập trình đ−ợc , giao tiếp đ−ợc với các thiết bị ngoại vi .. các bộ vi xử lý chính là một công cụ đầy sức mạnh trong lĩnh vực điện tử . Và sau đây chúng em xin đ−ợc trình bày ứng dụng của bộ vi xử PIC 16F88 để hiển thị dòng chữ chạy bằng ma trận led . Đây là chỉ là một trong những ứng dụng nhỏ của vi xử lý nh−ng nó đg giúp chúng em hiểu rõ hơn về bộ vi xử lý PIC16F88 . Tuy đg rất cố gắng nh−ng do kiến thức vi xử lý , kĩ thuật lập trình , lắp ráp phần cứng còn nhiều hạn chế , nên chúng em còn nhiều thiếu sót , rất mong đ−ợc sự đóng góp của thầy giáo . Cuối cùng em xin đ−ợc cảm ơn thầy đg giúp đỡ chúng em trong quá trình thực hiện bài tập lớn . A)Mục đích thiết kế - Dùng bộ vi điều khiển PIC16F88 hoặc PIC16F84 để hiển thị chữ chạy trên 2 ma trận led(8ì8) . - Phần cứng bao gồm • PIC16F88 Hoặc PIC16F84 là phần tử điều khiển chính Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 3 • 74LS154 để quét 16 cột( giải mg côt) • 74HC595 để gửi dữ liệu hàng • A1015 để đệm dòng cho hàng • Ma trận led (8ì8) để hiển thị Sơ đồ khối của mạch điện: - Chức năng chính của phần mềm * Hiển thị nội dung bản tin đ−ợc l−u trong Flash * Copy nội dung bản tin vào EEPROM và hiển thị nội dung đó * Tốc độ chữ chạy đ−ợc xác định bởi biến time , giá trị đ−ợc thay đổi thông qua giá trị ADC – 8bit đ−ợc lấy tại chân RA4 ( kênh AN4) B) Giới thiệu các linh kiện dùng trong mạch 1. Ma trận led (8ì8) 1.1 Nguyên lí hoạt động : Gồm 64 điôt phát quang (LED) đ−ợc sắp xếp thành một ma trận 8 cột và 8 hàng . Các LED trên cùng một hàng đ−ợc nối chung Anốt , các LED trên cùng một cột đ−ợc nối chung catốt . Một LED ở vị trí hàng thứ i và cột j chỉ sáng khi có tín hiệu chọn hàng I ở mức cao (5V) và tín hiệu chọn cột j ở mức thấp (0V) . VĐK PIC16F88 GiảI mg cột Hiển thị LED Khối giải mg Cột Khối hút dòng Nguồn VCC 5V Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 4 1.2 Sơ đồ nguyên lý Sơ đồ nguyên lý của ma trận LED 8*8 t−ơng tự nh− sau - Ma trận LED đ−ợc đóng vỏ dạng DIP ( Dual In – line Pakage) gồm 16 chân chia làm hai hàng - Sơ đồ chân của ma trận LED: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 5 2. Bộ giải mã / phân kênh 74154 Đây là IC giải mg địa chỉ 4 đ−ờng vào 16 đ−ờng ra: D−ới đây là sơ đồ chân kết nối và sơ dồ khối logic của IC Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 6 74LS154 có 24 chân gồm : 4 chân đầu vào A , B , C, D , 16 đầu ra 0 .. 15 , đầu cấp nguồn Vcc = +5V ( chân 24 ) , chân GND nối đất ( chân 12 ) , hai đầu chọn chip là G1 và G2. Mỗi địa chỉ 4 bit đầu vào kích thích một đầu ra ở mức thấp, các đầu ra còn lại ở mức cao. Các đầu vào chọn chip cần phải đặt thấp để vi mạch làm việc. Nếu một hoặc cả hai đầu G1, G2 ở mức cao thì tất cả các đầu ra sẽ ở mức cao. D−ới đây là bảng chân lý của IC 74LS154: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 7 G 1 G 2 D C B A 0 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 0 x x x x 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 x x x x 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 1 1 1 A 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 8 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 9 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 10 3.Giới thiệu IC 74HC595 - Sơ đồ chân IC: Đây là IC dùng để giải mg hàng, các chân 11,12,14 đ−ợc cấp điện áp( hay mức logic) từ PIC16F88 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 11 -Sơ đồ logic của 74LS595: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 12 Các chân ra từ QA ->QH lần l−ợt đ−ợc đ−a đến các hàng của LED 74LS595 có nguồn cung cấp 5V , các mức điện áp và dòng vào ra nh− sau : Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 13 4.PIC16F88 a.Sơ đồ chân của VĐK PIC16F88: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 14 - Một số thông tin về PIC16F88: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 15 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 16 Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 17 Vi xử lý PIC16F88 có 18 chân : - chân 17 , 18 , 1 , 2 , 3 là các chân vào\ra của PIC đ−ợc qui định bởi thanh ghi TRISA , PORTA . - chân 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 là các chân vào\ra của PIC đ−ợc qui định bởi thanh ghi TRISB , PORTB . - chân 15,16 nối với thạch anh dao động ngoài . - chân 14 nối với nguồn để cung cấp cho PIC . Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 18 - chân 5 nối đất . b) Tổ chức bộ nhớ của PIC • Vùng con trỏ ( Pointer ) đ−ợc đặt ở địa chỉ 0x0004 • Vùng ngăn xếp ( Stack ) có 8 mức ( Stack level 1 .. Stack level 8 ) • Vùng véctơ ngắt ( Interrupt vector ) • Vùng nhớ ch−ơng trình ( Program memory ) đ−ợc đặt ở địa chỉ 0x0005 . c) Vùng nhớ ch−ơng trình - Vùng nhớ ch−ơng trình của PIC16F88 đ−ợc chia thành 4 bank • Bank0 : 00h .. 7Fh • Bank1 : 80h .. FFh • Bank2 : 100h .. 17Fh • Bank3 : 180h .. 1FFh - 4 bank này ( gồm các thanh ghi 8 bit ) đ−ợc chia làm 3 phần • Phần các thanh ghi có địa chỉ xác định và đg đ−ợc đặt tên . Đây là những thanh ghi đặc biệt của PIC Vd : thanh W( work register ) , thanh STATUS , thanh TRISA , thanh TRISB , thanh PORTA , thanh PORTB .. • Phần các thanh ghi dùng chung ( General Perpose Register ) là các thanh ghi ch−a đ−ợc định nghĩa , ch−a có tên . Những thanh ghi này có tác dụng nh− các biến trong ch−ơng trình . • Phần các thanh ghi nằm ở bank 1 , 2 , 3 t−ơng thích với các thanh ghi từ 70h đến 7Fh ở bank 0 . d) Tóm tắt tập lệnh của PIC16F88 - cấu trúc lệnh : NHN LệNH tham số 1 , tham số 2 ; chú thích • Lệnh xoá một thanh ghi bất kì CLRF (tên thanh ghi ) Vd: CLRF TRISB ; trisb = 00000000 quy định portb là đầu ra • Lệnh ghi một giá trị bất kì vào thanh ghi W MOVLW ( giá trị ) Vd : MOVLW b’11110000’ ; ghi giá trị nhị phân b’11110000’ vào thanh ghi W . • MOVWF ghi giá trị của thanh ghi W vào một thanh ghi khác MOVWF ( tên thanh ghi ) Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 19 Vd : MOVWF PORTB ; ghi giá trị hiện tại trong thanh ghi W vào thanh ghi PORTB . • Bật một bít trong một thanh ghi bất kì BSF ( thanh ghi ) , ( vị trí bít) Vd : BSF PORTB , 0 ; bật bít 0 của thanh PORTB , tức là RB0=1 • Nhảy đến một nhgn bất kì GOTO ( nhgn ) • Nhảy tại chỗ GOTO $ • Định địa chỉ trong bộ nhớ ch−ơng trình ORG ( địa chỉ ) • Chọn bank trong bộ nhớ ch−ơng trình BANKSEL (tên bank hoặc tên của thanh ghi nằm trong bank ) Vd : BANKSEL TRISB ; chuyển đến bank 1 là bank chứa TRISB . • Gọi một ch−ơng trình con CALL ( nhgn ) Vd : CALL DELAY ; gọi ch−ơng trình con DELAY • Trở về ch−ơng trình chính từ ch−ơng trình con RETURN • Tắt một bít trong một thanh ghi bất kì BCF ( thanh ghi ) , ( vị trí bít) Vd : BCF PORTB , 0 ; tắt bít 0 của thanh PORTB , tức là RB0=0 • DECSZ (Decrement File , Skip if Zero ) : giảm giá trị một thanh ghi nào đó đI một đơn vị . Nếu sau khi giảm mà kết quả là 0 thì nó sẽ nhảy cách ra một ô nhớ trong bộ nhớ ch−ơng trình và thực hiện lệnh ngay sau nó . Nếu giá trị khác không thì nó sẽ thực hiện lệnh liền kề nó . DECSZ [ thanh ghi ] , F\W C. Giải thuật của mạch thông tin điện tử 1.Ph−ơng pháp quét ma trận LED: Chúng ta sẽ dùng ph−ơng pháp quét LED theo hàng và cột. Khi hàng m đ−ợc cung cấp mức điện áp cao (3-5V) thi ở cột n nào đó nếu có mức điện áp thấp (0-0.5V) thì LED ở vị trí [m,n] sẽ sáng. D−ới đây là mạch mô tả quét một điểm LED sáng: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 20 Hình ảnh mô tả giải thuật quét ma trận LED Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 21 Mỗi LED trên ma trận cần một áp tối thiểu khoảng 2.5V, và dòng tiêu thụ là 10 mA vì vậy ta cần dùng thêm Tranzitor trong mỗi hàng để đệm dòng. Dùng các PortA của VĐK (gồm có RA0 ,RA1, RA2, RA3) để đ−a tín hiệu giải mg cột cho 74LS154 .Dùng PortB (RB0, RB1, RB3) để xuất dữ liệu hàng của ma trận LED. 2.Kĩ thuật hiển thị LED Ta dùng các chu kì xung nhịp để hiển thị LED. Ta cần quết LED để đạt đ−ợc tốc độ quét nhỏ hơn 25 hình/s thì mắt ng−ời mới có thể nhìn thấy đ−ợc Để thực thi xong một lệnh, vi điều khiển PIC cần dến 4 chu kì xung clock. Nh− vậy thời gian thực thi xong 1 lệnh đ−ợc tính bằng: 04 tt i ì= với 0t là chu kì xung nhịp của VĐK PIC Từ đây ta có thể dùng hàm delay để đạt đ−ợc tốc độ quét LED nh− mong muốn. 3.Sơ đồ khối của giải thuât: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 22 D) Sơ đồ khối của mạch quang báo Trong mạch trên thì 74LS154 co thể đ−ợc thay thế bằng 2 con giải mg 74LS138 theo sơ đồ sau: Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 23 D) Thiết kế phần mềm #include #include #device *=16 ADC=8 #FUSES NOWDT, HS, NOPUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT, NOFCMEN, NOIESO #use delay(clock=20000000) //#use rs232(baud=9600,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9) //Baud_min=4800 Baud_max=115200 #include #include //File chua bo font ma hoa ky tu ASCII // Dinh nghia cac chan cho ket noi 74595 #bit data = 0x06.1 //RB1 #bit clk = 0x06.0 //RB0 #bit latch = 0x06.3 //RB3 // Bo nho dem man hinh hien thi int8 buff_disp[17]; //Bo nho dem cho man hinh LED int8 max_char=117; //SO ky tu hien thi toi da int8 time=5; //Bien quy dinh toc do chu chay Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 24 //=========KHAI_BAO_CAC_CHUONG_TRINH _CON====== int8 doc_eeprom(int8 addr); void send_2_595(int8 temp); void display(); void copy_2_ram1(int8 index_char); void copy_2_ram2(int8 index_char); void update_eeprom(); void convert_bcd(int8 x); //============================================= //===========Chuong trinh chinh================ void main() { int8 i,j; #bit update_flag = 0x06.4 char const a[119]=" TRUONG DHBKHN KHOA DTVT BANG THONG TIN DIEN TU DUNG PIC16F88 CHUC THANH CONG DT 1+2 :K48 ";// Chuỗi hiển thị bảng mạch điện tử char const adc[6] = " ADC="; 1 //=========================================== TRISA=0x10; // Thiet lap chan vao ra TRISB=0b00100100; setup_adc_ports(sAN4); //Chon kenh AN4 nhung ko hieu sao can them phan khai bao setup_adc(ADC_CLOCK_INTERNAL);// ben duoi dechon dung kenh AN4 cho no chay dung //Chon kenh AN4 clear cac bit tai thang ghi ADCON1 (chs0 : 2) chs0=0; //Clear bit 1f.3 chs1=0; //Clear bit 1f.4 chs2=1; //Clear bit 1f.5 delay_ms(10); //=========================================== for(i=0;i<6;++i) write_eeprom(0xf0+i,adc[i]); for(i=0;i<117;++i) write_eeprom(i,a[i]); write_eeprom(0xff,max_char); // Luu so ky tu toi da vao ROM //=======BEGIN DISPLAY FUNCTION============== //Doanchuong trinh nay se hien thi noi dung ban tin luu trong EEPROM while(1){ for (i=0;i<=16;i++) // Clear RAM of buff_disp Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 25 buff_disp[i]=0xff; if(update_flag==1) //Kiem tra cong tac cap nhat du lieu update_eeprom(); //Goi chuong trinh con cap nhat(giao tiep qua cong COM) // time = read_adc()/10; //Cap nhat bien quy dinh toc do chu chay tren man hinh for (i=0;i<=max_char;i++) // Begin of text { j=read_eeprom(i)-32; //Lay gia tri ASCII cua ky tu //if(j==51) copy_2_ram1(51); if(j < 51) copy_2_ram1(j); else { j=j-51; copy_2_ram2(j); } } j=read_adc(); convert_bcd(j); for(i=0;i<8;++i) { j = doc_eeprom(0xf0 + i)-32; copy_2_ram1(j); } } } //========= END MAIN ============== // === CAC CHUONG TRINH CON ========= //=======Gui du lieu theo duong noi tiep toi 595============ void send_2_595(int8 temp) { #bit flag_bit = temp.7 // bien temp la du lieu 8-bit can gui int8 i; clk=0; for(i=0;i<8;i++) { if(flag_bit) data=1; //bit 1 else data=0; //bit 0 clk=1; clk=0; Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 26 temp<<=1; // Dich trai 1 bit } latch=1; //Chot du lieu latch=0; } //===========Chuong trinh con hien thi========= void display() { int8 count,column_count; int8 i; time = read_adc()/10; // Viec doc gia tri ADC truoc khi hien thi lam cho viec thay doi // toc do chu chay linh hoat hon, truc tiep tha doi for (i=0;i<=time;i++) //Toc do chu chay thay doi boi bien time { column_count=0; //Bien dem so cot, xem da quet het 16 cot chua for(count=16;count>0;count--) { send_2_595(buff_disp[count]); PORTA=column_count; delay_ms(1); column_count++; } } } //========Copy to Ram1===================== void copy_2_ram1(int8 index_char) { int8 i,j; for (j=0;j<=5;j++) { // Dich RAM for (i=16;i>0;i--) buff_disp[i]= buff_disp[i-1]; // Dich RAM sang trai buff_disp[0]= font[index_char].b[j]; // Luu ma ascii vao RAM display(); // Goi hien thi } buff_disp[0]=0xff; } //========Copy to Ram 2=================== Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 27 void copy_2_ram2(int8 index_char) { int8 i,j; for (j=0;j<=5;j++) { for (i=16;i>0;i--) // Dich RAM buff_disp[i]= buff_disp[i-1]; //Dich RAM sang trai buff_disp[0]=font2[index_char].b[j]; //Luu ma ascii vao RAM display(); // Goi hien thi } buff_disp[0]=0xff; // Them mot khoang trang giua hai ky tu } //=========Update EEPROM=================== void update_eeprom() { byte i,j,addr,max; char temp; char string[64]; // Hien thi noi dung cua EEPROM printf("\r\n256 byte EEPROM of PIC16F88:\r\n"); // Display contents of the first 64 for(i=0; i<=15; ++i) // bytes of the data EEPROM in hex { for(j=0; j<=15; ++j) printf( "%2x ", doc_eeprom( i*16+j ) ); printf("\n\r"); } // Hien thi noi dung ban tin i=0; do { temp = doc_eeprom(i); printf( "%C", temp); i++; } while (temp != 0xff); //--------Ket thuc ---------- printf("\r\nTong so chu: %2u", doc_eeprom(0xff)); printf("\r\n\nCo thay doi ban tin ko(Y/N)? "); temp=getc();//temp = getc(); if (temp == 'y' || temp == 'Y') Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 28 { printf("\r\nSo chu hien thi moi la: "); max_char=gethex(); write_eeprom(0xff,max_char); printf("\r\nDia chi EEPROM can thay doi: "); addr = gethex(); if (addr >= max_char) write_eeprom(0xff,addr); printf("\r\nSo ky tu them vao: "); max = gethex(); // Tra ve gia tri Hexa if(max >= max_char) write_eeprom(0xff,max); // Cap nhat so ky tu printf("\r\nNew: "); get_string(string,max+1); for (i=0;i<max;i++) //bat dau qua trinh ghi vao ROM (cap nhat du lieu moi) { write_eeprom(addr,string[i]); addr=addr+1; } } else printf("Tro ve !"); // Ket thuc viec cap nhat, tro ve hien thi } //=============READ EEPROM===================== int8 doc_eeprom(int8 addr) { EEADR=addr; RD=1; return(EEDATA); } //=======Chuyen gia tri hex ra so ASCII========= void convert_bcd(int8 x) { int8 temp; int8 a; temp=x%10; //chia lay phan du, so hang don vi write_eeprom(0xf7,temp+0x30); //Cong them 0x30 de tra ve gia tri SCII a=x/10; //tach hang tram va hang chuc temp=a%10; //tach so hang chuc write_eeprom(0xf6,temp+0x30); temp=x/100; Bài tập lớn VXL – Bảng thông tin điện tử Giảng viên h−ớng dẫn:Hàn Huy Dũng ĐHBKHN Thực hiện :nhóm ĐT 1+2 K48 5/6/2006 29 write_eeprom(0xf5,temp+0x30); } =========== Kết thúc ============= * Mã hóa bảng mã ASCII: const byte font[51][5]={ //******************BANG MA ASCII**************** //ascii_code: 0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE 0 0xFF,0xFF,0xA0,0xFF,0xFF,//! 1 0xFF,0xFF,0xF8,0xF4,0xFF,//' 2 0xEB,0x80,0xEB,0x80,0xEB,//# 3 0xDB,0xD5,0x80,0xD5,0xED,//$ 4 0xD8,0xEA,0x94,0xAB,0x8D,//% 5 0xC9,0xB6,0xA9,0xDF,0xAF,//& 6 0xFF,0xFF,0xF8,0xF4,0xFF,//' 7 0xFF,0xE3,0xDD,0xBE,0xFF,//( 8 0xFF,0xBE,0xDD,0xE3,0xFF,//) 9 0xD5,0xE3,0x80,0xE3,0xD5,//* 10 0xF7,0xF7,0xC1,0xF7,0xF7,//+ 11 0xFF,0xA7,0xC7,0xFF,0xFF,//, 12 0xF7,0xF7,0xF7,0xF7,0xF7,//- 13 0xFF,0x9F,0x9F,0xFF,0xFF,//x 14 0xFF,0xC9,0xC9,0xFF,0xFF,//