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ử .
36 trang |
Chia sẻ: tuandn | Lượt xem: 2320 | Lượt tải: 1
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,//