Professional Documents
Culture Documents
PHẦN I
GIỚI THIỆU
LỜI MỞ ĐẦU
---¹±º---
Ngày nay với sự phát triển vượt bậc của xã hội, đặc biệt là trong các ngành kỹ
thuật. Khi mà các sản phẩm mới liên tục ra đời, những vât liệu nổi trội hơn, công nghệ
mới cũng ra đời… Song song đó thì nhu cầu của con người đối với sự tiến bộ của xã hội
cũng ngày càng khắc khe hơn. Đặc biệt khi ngành công nghệ số, trí tuệ nhân tạo ra đời nó
cũng len lõi mọi lĩnh vực của xã hội. Ví dụ điển hình là tronh lĩnh vực quản bá truyền
thông. Khi nhu cầu của các nhà kinh doanh ngày càng cao hơn về việc quảng cáo các sản
phẩm, dịch vụ của mình đến với người tiêu dùng khắp mọi nơi và từ đó lĩnh vực này cũng
liên tục cải thiện. Khi máy tính ra đời đặc biệt là công nghệ số thì lĩnh vực truyền thông
đã có những bước phát triển đáng kể, các loại hình quảng cáo như pano, apphich, bản
hiệu,…đã dần nhường chỗ cho các bảng điện tử đầy đủ màu sắc. Và đặc biệt hơn chúng
có thể gửi đến mọi người các thông điệp đặc sắc, phong phú mà trước đây thì công nghệ
chưa cho phép. Chẳng hạn như: nhiều màu sắc, linh động, hình ảnh đẹp, có thể nhảy múa
với đầy đủ các hiệu ứng mới lạ trước mắt người xem. Khi mà quá trình đô thị hoá ngày
càng nhanh cùng với sự phát triển của các toà nhà, cao ốc,…thì không gian ngày càng thu
hẹp và tất nhiên những biển quảng cáo khổ rộng đã dần được thay thế bằng các bảng điện
tử, led, LCD,…
Khi bạn bước vào một ngân hàng, một cửa hiệu hay bất chợt đi trên đường bạn
cũng có thể bắt gặp những dòng chữ đầy màu sắc chạy qua chạy lại thể hiện đầy đủ các
thông điệp mà nhà kinh doanh muốn gửi đến tất cả mọi người. Đáp ứng nhu cầu đó và
cũng để hiểu thêm về công nhệ cũng như quá trình thiết kế thi công các loại bảng led
quảng cáo, tôi quyết định chọn đề tài VI ĐIỀU KHIỂN VỚI QUANG BÁO để phục vụ
cho môn đồ án 2. Trong quá trình thực hiện đề tài do lượng kiến thức khổng lồ nhưng sự
hiểu biết của tôi là có hạn nên không thể khai thác được hết các công năng của vi điều
khiển mà chỉ sử dụng một vài chức năng cơ bản. Và cũng chưa có nhiều kinh nghiệm
trong quá trình thực hiện các đề tài, tất nhiên cũng không thể tránh được những sai xót.
Rất mong nhận được những đóng góp chân thành của quý thầy cô và các bạn để có thể
thực hiện tốt hơn cho các lần tiếp theo.
Xin chân thành cảm ơn./.
Tp Hồ Chí Minh tháng 01 - 2011
Sinh viên thực hiện
MỤC LỤC
PHẦN I GIỚI THIỆU ..............................................................................................1
Nhận xét của giáo viên hướng dẫn ..........................................................................4
Nhận xét của giáo viên phản biện ............................................................................5
Lời nói đầu .................................................................................................................6
Mục lục.......................................................................................................................7
PHẦN II NỘI DUNG ................................................................................................9
Chương I Giới thiệu các linh kiện dùng trong đề tài .....................................10
I. Khối xử lý trung tâm – vi điều khiển ........................................................10
I.1 Khái niệm vi điều khiển .....................................................................10
I.2 Giới thiệu họ vi điều khiển PIC 16F887 ...........................................10
I.2.1 PIC là gì? ....................................................................................10
I.2.2 Tại sao là PIC mà không là các họ vi điều khiển khác ..........10
I.2.3 Bộ vi điều khiển 8bit PIC 16F887 ............................................11
II. IC giao tiếp máy tính MAX 232...............................................................29
II.1 Tổng quan chuẩn RS232 ..................................................................29
II.1.1 Đặt vấn đề .................................................................................29
II.1.2 Ưu điểm của chuẩn RS232 .....................................................30
II.1.3 Những đặc điểm cần lưu ý trong chuẩn RS232.....................30
II.1.4 Các mức điện áp đường truyền ..............................................30
II.1.5 Chuẩn RS232 trên máy tính ...................................................30
II.1.6 Quá trình truyền nhận dữ liệu................................................31
II.2 Sơ đồ kết nối IC MAX232 ................................................................32
III. Ram mở rộng ...........................................................................................33
III.1 Giới thiệu..........................................................................................33
III.2 Sơ đồ chân IC HM62256ALP.........................................................33
III.3 Giải thích sơ đồ chân.......................................................................34
III.4 Sơ đồ khối HM62256ALP ...............................................................35
III.5 Nguyên lý hoạt động truy xuất dữ liệu của HM62256ALP .........35
III.5.1 Quá trình ghi dữ liệu vào Ram .............................................35
III.5.2 Quá trình đọc dữ liệu từ ram ................................................36
IV. IC ghi dịch 74HC595 ...............................................................................36
IV.1 Giới thiệu ..........................................................................................36
IV.2 Sơ đồ chân ........................................................................................36
IV.3 Giải thích sơ đồ chân .......................................................................37
V. Led ma trận ...............................................................................................38
V.1 Hình dạng và cấu tạo ........................................................................38
V.2 Nguyên lý hoạt động .........................................................................39
Chương II Nguyên lý hoạt động của đề tài ...........................................................41
I. Sơ đồ khối hiễn thị ......................................................................................41
I.1 Bộ nguồn..............................................................................................41
I.2 Bộ dao động thạch anh.......................................................................41
PHẦN II
NỘI DUNG
CHƯƠNG I
GIỚI THIỆU CÁC LINH KIỆN DÙNG TRONG
ĐỀ TÀI
·n¸
Hiện nay trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC,
AVR, ARM,… Ngoài họ 8051 được hướng dẫn một cách căn bản ở một số trường đại
học, bản thân người viết đã chọn họ vi điều khiển PIC để mở rộng vốn kiến thức và phát
triển các ứng dụng trên công cụ này vì các nguyên nhân sau:
- Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam.
- Giá thành không quá đắt
- Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập.
- Là sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho hơ vi điều khiển
mang tính truyền thống: họ vi điều khiển 8051
- Số lượng người sử dụng họ vi điều khiển PIC: hiện nay tại Việt Nam cũng như
trên thế giới, họ vi điều khiển này sử dụng khá rộng rãi. Điều này tạo thuận lợi
trong quá trình tìm hiểu và phát triển các ứng dụng như: số lượng tài liệu, số các
ứng dụng mở đã được phát triển thành công, dễ dàng trao đổi, học tập, dễ dàng
tìm được sự chỉ dẫn khi gặp khó khăn,…
- Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình, nạp chương
trình từ đơn giản đến phức tạp,…
- Các tính năng đa dạng của vi điều khiển PIC, và các t1inh năng này không ngừng
phát triển.
Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi trong các lĩnh
vực kỹ thuật và đời sống xã hội, đặc biệt là trong kỹ thuật tự động hóa và điều khiển từ
xa. Giờ đây với nhu cầu chuyên dụng hóa, tối ưu (thời gian, không gian, giá thành), bảo
mật, tính chủ động trong công việc…ngày càng đòi hỏi khắt khe. Việc đưa ra công nghệ
mới trong lĩnh vực chế tạo mạch điện tử để đáp ứng những yêu cầu trên là hoàn toàn cấp
thiết mang tính thực tế cao
I.2.3 Bộ vi điều khiển 8 bit PIC16F887
I.2.3.a Đặc tính nổi bật của bộ vi xử lý
+ Sử dụng công nghệ tích hợp cao RISC CPU
+ Người sử dụng có thể lập trình với 35 câu lệnh đơn giản.
+ Tất cả các câu lệnh thực hiện trong một chu kỳ lệnh ngoại trừ một số câu lệnh rẽ
nhánh thực hiện trong hai chu ký lệnh.
+ Tốc độ hoạt động là : - Xung đồng hồ vào là DC – 20MHz - Chu kỳ lệnh thực
hiện trong 200ns
+ Bộ nhớ chương trình Flash 8Kx14 words
+ Bộ nhớ SRAM 368x8 bytes
+ Bộ nhớ EFPROM 256x8 bytes
+ Số port I/O 35 ports
Khả năng của bộ vi xử lý này
+ Khả năng ngắt (lên tới 14 nguồn ngắt trong và ngắt ngoài)
+ Ngăn nhớ Stack được phân chia làm 8 mức
+ Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.
+ Nguồn khởi động lại ( POR)
+ Bộ tạo thời gian (PWRT) và bộ tạo dao động (OST|)
+ Bộ đếm xung thời gian (WDT) với nguồn dao động trên chip (nguồn dao động
RC) hoạt động đáng tin cậy.
+ Có mã chương trình bảo vệ.
+ Phương thức cất giữ Sleep
+ Thiết kế hoàn toàn tĩnh.
+ Dải điện thế hoạt động rộng: 2.0V đến 5.5V
+ Nguồn điện sử dụng hiện tại 25mA
Các đặt tính nổi bật của thiết bị ngoại vi trên chip
+ TIMER0: 8 bit của bộ định thời, bộ đếm với hệ số tỷ lệ trước.
+ TIMER1: 16 bit của bộ định thời, bộ đếm với hệ số tỷ lệ trước, có khả năng tăng
trong khi ở chế độ Sleep qua xung đồng hồ được cung cấp bên ngoài.
+ TIMER2: 8 bit của bộ định thời, bộ đếm với 8 bit của hệ số tỷ lệ trước, hệ số tỷ lệ
sau.
+ Bộ chuyển đổi tín hiệu số sang tương tự với 10 bit.
2
+ Cổng truyền thông tin nối tiếp SSP với SPI phương thức chủ và I C(chủ / phụ).
Sơ đồ chân vi điều khiển PIC16F877A
page 3). Như vậy bộ nhớ chương trình có khả năng chứa được 8*1024 = 8192 lệnh (vì
một lệnh sau khi mã hoá sẽ có dung lượng 1 word (14 bit))
Để mã hóa được địa chỉ của 8K word bộ nhớ chương trình, bộ đếm chương trình
có dung lượng 13 bit
Khi vi điều khiển được reset, bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h
(Interrupt vector).
Bộ nhớ chương trình không bao gồm bộ nhớ stack và không được địa chỉ hoá bởi
bộ đếm chươ trình.
Bảng bộ nhớ chương trình và các ngăn xếp
¾ Thanh ghi OPTION_REG (81h, 181h) thanh ghi này cho phép đọc và ghi,
cho phép điều khiển chức năng puled ma trận-up của các chân PORTB, xác lập các tham
số về xung tác động, cạnh tác động của ngắt ngoại vi và bộ đếm Timer0.
¾ Thanh ghi INTCON (0Bh, 8Bh, 10Bh, 18Bh) thanh ghi cho phép đọc và ghi,
chứa các bit điều khiển và các bit cờ hiệu khi Timer0 bị tràn, ngắt ngoại vi RB0/INT và
ngắt interrupt-on-change tại các chân của PORTB.
¾ Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt của các khối
chức năng ngoại vi.
¾ Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng ngọai vi, các ngắt
này được cho phép bởi các bit điều khiển chứa trong thanh ghi PEI1.
¾ Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các khối chức
năng CCP2, SSP bus, ngắt của bộ so sánh và nga81t ghi vào bộ nhớ EEPROM.
¾ Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức năng ngoại vi, các
ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2.
¾ Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái các chế độ reset
của vi điều khiển.
RETLW được thực thi, giá trị PC sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ
thực hiện tiếp chương trình theo đúng quy trình định trước.
Bộ nhớ Stack trong vi điều khiển PIC16F887 có khả năng chứa được 8 địa chỉ và
hoạt động theo theo cơ chế xoay vòng. Nghĩa là giá trị cất vào bộ nhớ Stack lần thứ 9 sẽ
ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ
ghi đè lên giá trị cất vào Stack lần thứ 2.
Không có cờ hiệu nào cho biết trạng thái Stack, do đó ta không biết khi nào Stack
tràn.
II.2.3.d Các cổng xuất nhập của PIC16F887
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng để tương
tác với thế giớ bên ngoài. Sự tương tác này rất đa dạng và thông qua quá trình tương tác
đó, chức năng của vi điều khiển được thể hiện một cách rõ ràng.
Một cổng xuất nhập của vi điều khiển bao gồm nhiều chân (I/O pin), tuỳ theo
cách bố trí và chức năng của vi điều khiển mà số lượng các chân và số lương cổng nhập
xuất có thể khác nhau. Bên cạnh đó do vi điều khiển được tích hợp sẵn bên trong các đặc
tính giao tiếp ngoại vi nên bên cạnh chức năng là cổng xuất nhập thông thường, một số
chân xuất nhập còn có thêm các chức năng khác để thực hiện sự tác động của các đặc tính
ngoại vi nêu trên đối với thế giới bên ngoài. Chức năng của từng chân xuất nhập trong
mỗi cổng hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR
liên quan đến chân xuất nhập đó.
Vi điều khiển PIC16F887 có 5 cổng xuất nhập, bao gồm PORTA, PORTB,
PORTC, PORTD và PORTE.
a). PORTA
PORTA (RPA) bao gồm 8 I/O pin. Đây là các chân “hai chiều” (bidirectional
pin), nghĩa là có thể xuất và nhập được. Chức năng I/O này được điều khiển bởi thanh ghi
TRISA (địa chỉ 85h). Muốn xác lập chức năng của một chân trong PORTA là input, ta
“set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn
xác lập chức năng của một chân trong PORTA là outout, ta “clear” bit điều khiển tương
ứng với chân đó trong thanh ghi TRISA. Thao tác này hoàn toàn tương tự đối với các
PORT và các thanh ghi điều khiển tương ứng TRIS ( đối với PORTA là TRISA, đối với
PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là TRISD và đối với
PORTE là TRISE ). Bên cạnh đó PORTA cón là ngõ ra của bộ ADC, bộ so sánh, ngõ vào
analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP ( Master
Synchronous Serial Port ).
b). PORTB
PORTB (RPB) gồm 8 pin I/O. thanh ghi điều khiển xuất nhập tương ứng là
TRISB. Bên cạnh đó một số chân của PORTB còn được sử dụng trong quá trình nạp
chương trình cho vi điều khiển với các chế độ nạp khác nhau. PORTB còn liên quan đến
ngắt ngoại vi và bộ Timer0. PORTB có được tích hợp chức năng điện trở kéo lên được
điều khiển bởi chương trình.
d). PORTD
PORTD gồm 8 pin I/O: RD0, RD1, RD2, RD3 ứng với các chân số 19, 20, 21 và
chân số 22 của vi điều khiển, RD4 đến RD7 ứng với các chân số 27 đến chân số 30.
Thanh ghi điều khiển xuất nhập tương ứng là TRISD ( địa chỉ 88h ). PORTD còn là cổng
xuất dữ liệu của chuẩn giao tiếp PSP (Paraled ma trậnel Slave Port).
c). Bộ Timer2:
Timer2 là bộ định thời 8 bit và được hỗ trợ bởi hai bộ chia tần prescaler và
postscaler. Thanh ghi chứa giá trị đếm của Timer2 là TMR2. Bit cho phép ngắt Timer2
tác động là TMR2ON. Cờ ngắt của Timer2 là bit TMR2IF. Xung ngõ vào được đưa qua
bộ chia tần số prescaler 4 bit (với các tỉ số chia tần là 1:1, 1:4 hoặc 1:16) và được điều
khiển bởi các bit T2CKPS1:T2CKPS0.
d). ADC
ADC ( Analog to Digital Converter) là bộ chuyển đổi tín hiệu giữa hai dạng tương
tự và số. PIC16F887 có 14 ngõ vào analog (RA5:RA0, RE2:RE0và RB5:RB0). Hiệu điện
thế chuẩn VREF có thể được chọn là Vdd, Vss hay hiệu điện thế chuẩn được xác lập trên hai
chân RA2 và RA3. Kết quả chuyển đổi từ tí hiệu tuơng tự sang tín hiệu số là 10 bit số
tương ứng và được lưu trong 2 thanh ghi ADRESH:ADRESL. Khi không sử dụng bộ
chuyển đổi ADC, các thanh ghi này có thề sử dụng như các thanh ghi thông thường khác.
Khi quá trình chuyển đổi hoàn tất, kết quả sẽ được lưu vào 2 thanh ghi
ADRESH:ADRESL.
Có hai phiên bản RS232 được lưu hành trong thời gian tương đối dài là RS232B và
RS232C. Nhưng cho đến nay thì phiên bản RS232B cũ thì ít được dùng còn RS232C hiện
vẫn được dùng và tồn tại thường được gọi là tên ngắn gọn là chuẩn RS232
Các máy tính thường có 1 hoặc 2 cổng nối tiếp theo chuẩn RS232C được gọi là cổng
Com. Trên main máy tính có loại 9 chân hoặc lại 25 chân tùy vào đời máy và main của
máy tính. Việc thiết kế giao tiếp với cổng RS232 cũng tương đối dễ dàng, đặc biệt khi
chọn chế độ hoạt động là không đồng bộ và tốc độ truyền dữ liệu thấp.
II.1.2 Ưu điểm của giao diện nối tiếp RS232
+ Khả năng chống nhiễu của các cổng nối tiếp cao
+ Thiết bị ngoại vi có thể tháo lắp ngay cả khi máy tính đang được cấp điện
+ Các mạch điện đơn giản có thể nhận được điện áp nguồn nuôi qua công nối tiếp
II.1.3 Những đặc điểm cần lưu ý trong chuẩn RS232
+ Trong chuẩn RS232 có mức giới hạn trên và dưới (logic 0 và 1) là +-12V. Hiện nay
đang được cố định trở kháng tải trong phạm vi từ 3000 ôm - 7000 ôm
+ Mức logic 1 có điện áp nằm trong khoảng -3V đến -12V, mức logic 0 từ +-3V đến 12V
+ Tốc độ truyền nhận dữ liệu cực đại là 100kbps
+ Các lối vào phải có điện dung nhỏ hơn 2500pF
+ Trở kháng tải phải lớn hơn 3000 ôm nhưng phải nhỏ hơn 7000 ôm
+ Độ dài của cáp nối giữa máy tính và thiết bị ngoại vi ghép nối qua cổng nối tiếp RS232
không vượt qua 15m
+ Các giá trị tốc độ truyền dữ liệu chuẩn :
50,75,110,750,300,600,1200,2400,4800,9600,19200,28800,38400....56600,115200 bps
II.1.4 Các mức điện áp đường truyền
RS 232 sử dụng phương thức truyền thông không đối xứng, tức là sử dụng tín hiệu điện
áp chênh lệch giữa một dây dẫn và đất. Do đó ngay từ đầu tiên ra đời nó đã mang vẻ lỗi
thời của chuẩn TTL, nó vấn sử dụng các mức điện áp tương thích TTL để mô tả các mức
logic 0 và 1. Ngoài mức điện áp tiêu chuẩn cũng cố định các giá trị trở kháng tải được
đấu vào bus của bộ phận và các trở kháng ra của bộ phát.
Mức điện áp của tiêu chuẩn RS232C ( chuẩn thường dùng bây giờ) được mô tả như sau:
+ Mức logic 0 : +3V , +12V
+ Mức logic 1 : -12V, -3V
Các mức điện áp trong phạm vi từ -3V đến 3V là trạng thái chuyển tuyến. Chính vì từ -
3V tới 3V là phạm vi không được định nghĩa, trong trường hợp thay đổi giá trị logic từ
thấp lên cao hoặc từ cao xuống thấp, một tín hiệu phải vượt qua quãng quá độ trong một
thơì gian ngắn hợp lý. Điều này dẫn đến việc phải hạn chế về điện dung của các thiết bị
tham gia và của cả đường truyền. Tốc độ truyền dẫn tối đa phụ thuộc vào chiều dài của
dây dẫn. Đa số các hệ thống hiện nay chỉ hỗ trợ với tốc độ 19,2 Kbps .
II.1.5 Cổng RS232 trên PC
Hầu hết các máy tính cá nhân hiện nay đều được trang bị ít nhất là 1 cổng Com hay cổng
nối tiếp RS232. Số lượng cổng Com có thể lên tới 4 tùy từng loại main máy tính. Khi đó
các cổng Com đó được đánh dấu là Com 1, Com 2, Com 3...Trên đó có 2 loại đầu nối
được sử dụng cho cổng nối tiếp RS232 loại 9 chân (DB9) hoặc 25 chân (DB25). Tuy hai
loại đầu nối này có cùng song song nhưng hai loại đầu nối này được phân biệt bởi cổng
truyền được trong thời gian 1 giây. Tốc độ bit này phải được thiết lập ở bên phát và bên
nhận đều phải có tốc độ như nhau ( Tốc độ giữa vi điều khiển và máy tính phải chung
nhau 1 tốc độ truyền bit)
Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud. Tốc độ Baud
liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả bit được truyền
còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì một phần tử báo hiệu
sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600,
19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường dùng tốc độ là 19200
Khi sử dụng chuẩn nối tiếp RS232 thì yêu cầu khi sử dụng chuẩn là thời gian chuyển mức
logic không vượt quá 4% thời gian truyền 1 bit. Do vậy, nếu tốc độ bit càng cao thì thời
gian truyền 1 bit càng nhỏ thì thời gian chuyển mức logic càng phải nhỏ. Điều này làm
giới hạn tốc Baud và khoảng cách truyền.
II.1.6.c Bit chẵn lẻ hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra lỗi khi truyền
dữ liệu là bổ xung thêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi trong quá trình
truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra chẵn lẻ.
Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để ch thấy số lượng các bit "1"
được gửi trong một khung truyền là chẵn hay lẻ.
Một Parity bit chỉ có thể tìm ra một số lẻ các lỗi chả hạn như 1,3,,5,7,9... Nếu như một bit
chẵn được mắc lỗi thì Parity bit sẽ trùng giá trị với trường hợp không mắc lỗi vì thế
không phát hiện ra lỗi. Do đó trong kỹ thuật mã hóa lỗi này không được sử dụng trong
trường hợp có khả năng một vài bit bị mắc lỗi.
II.2 Sơ đồ kết nối dùng IC Max 23
Max232 là IC chuyên dùng cho giao tiếp giữa RS232 và thiết bị ngoại vi. Max232 là IC
của hãng Maxim. Đây là IC chay ổn định và được sử dụng phổ biến trong các mạch giao
tiếp chuẩn RS232. Mỗi đầu truyền ra và cổng nhận tín hiệu đều được bảo vệ chống lại sự
phóng tĩnh điện. Ngoài ra Max232 còn được thiết kế với nguồn +5V cung cấp nguồn
công suất nhỏ.
Mạch giao tiếp như sau :
Các chân A0 đến A14 là các chân địa chỉ giúp ta xác định địa chỉ lưu vào hay đọc
ra của ram.
Các chân I/O0 đến I/O7 là các chân data lưu hay đọc từ ram.
Chân WE (Write Enable) tích cực mức thấp là chân cho phép ghi, khi chân này ở
mức 0 thì cho phép ghi dữ liệu từ các chân I/O0 đến I/O7 vào ma trận nhớ của ram.
Chân OE (Output Enable) tích cực mức thấp là chân cho phép đọc, khi chân này ở
mức 0 thì cho phép đọc dữ liệu từ các chân I/O0 đến I/O7 từ ma trận nhớ của ram ra
ngoài.
Chân CS (Chip Select) tích cực mức thấp là chân chọn chip, khi chân này ở mức 0
thì chip được chọn, các chức năng đọc và ghi ở trên có thể thực hiện được. Khi chân này
ở mức 1 thì chip không được chọn, các chức năng đọc và ghi ở trên không thể thực hiện.
Chân VCC và chân GND là các chân nguồn cấp cho ram hoạt động.
III.4 Sơ đồ khối
- Bước hai ta định địa chỉ trong ram, nơi mà ta muốn ghi dữ liệu vào, địa chỉ được
xác định bằng các chân từ A0 đến A14. Ví dụ ta muốn lưu tại địa chỉ 10 trong ma trận
nhớ ta cho các chân từ A14 đến A4 bằng 0V, chân A3=1, chân A2=0, chân A1=1, chân
A0=0, như vậy ta được 000000000001010 hệ nhị phân và bằng 10 hệ thập phân.
- Sau khi định địa chỉ cần lưu ta tiến hành đưa dữ liệu cần lưu vào ram, dữ liệu
được đưa vào ram sẽ là dữ liệu 8bit từ 0 đến 255, dữ liệu này sẽ được đưa vào thông qua
các chân I/O0 đến I/O7. Ví dụ ta muốn lưu giá trị 14 vào ram thì dữ liệu tại các chân I/O0
đến I/O7 như sau I/O7=I/O6=I/O5=I/O4=0, I/O3=I/O2=I/O1=1, I/O0=0 tương ứng
0b00001110 = 14
- Cuối cùng là ghi giá trị ở trên vào ram bằng cách cho chân WE = 0, nhưng ta
phải cấm quá trình đọc bằng cách cho chân OE=1.
III.5.2 Quá trình đọc dữ liệu từ ram
Quá trình đọc cũng tương tự quá trình ghi nhưng ở quá trình ghi thì dữ liệu cần
ghi được đưa vào các chân I/O0 -> I/O7 thì ở quá trình đọc ta đọc dữ liệu về cũng tại các
chân này.
Giả sử tại địa chỉ 10 của ram đã tồn tại dữ liệu 14, thì quá trình đọc thực hịên như
sau:
- Đầu tiên chọn chip bằng cách cho chân CS=0;
- Sau đó định địa chỉ cần đọc (địa chỉ 10) bằng các chân A0 ->A14: ta đưa giá trị
000000000001010 vào các chân A0 -> A14 theo thứ tự từ cao xuống thấp.
- Tiếp đến thực hiện đọc bằng cách cho bit OE=0, nhưng ta phải cấm quá trình ghi,
cho bit WE=1
- Khi bit OE=0 thì các chân I/O0 ->I/O7 sẽ chứa giá trị lưu trong Ram là 14, khi đó
ta thực hiện đọc về hay hiện ra led …tùy ý để kiểm tra.
V. LED MATRẬN
V.1. Hình dạng và cấu tạo của led ma trận.
Ma trận led bao gồm nhiều led đơn bố trí thành hàng và cột trong một vỏ.Các tín
hiệu điều khiển cột được nối với Anode của tất cả các led trên cùng một cột. Các tín hiệu
điểu khiển hàng cũng được nối với Cathode của tất cả các led trên cùng một hàng như
hình vẽ :
hàng và cột là sáng. Các bảng quang báo với số lượng led lớn hơn cũng được kết nối theo
cấu trúc như vậy.
Trong trường hợp ta muốn cho sáng đồng thời một số led rời rạc trên ma trận, để
hiện thị một kí tự nào đó, nếu trong hiển thị tĩnh ta phải cấp áp cao cho Anode và áp thấp
cho Cathode, cho các led tương ứng mà ta muốn sáng. Nhưng khi đó một số led ta không
mong muốn cũng sẽ sáng, miễn là nó nằm tại vị trí gặp nhau của các cột và hàng mà ta
cấp nguồn.Vì vậy trong điều khiển led ma trận ta không thể sử dụng phương pháp hiển
thị tĩnh mà phải sử dụng phương pháp quét (hiển thị động), có nghĩa là ta phải tiến hành
cấp tín hiệu điều khiển theo dạng xung quét trên các hàng và cột có led cần hiển thị. Để
đảm cho mắt nhìn thấy các led không bị nháy, thì tần số quét nhỏ nhất cho mỗi chu kì là
khoảng 20HZ (50ms). Trong lập trình điều khiển led ma trận bằng vi xử lý ta cũng phải
sử dụng phương pháp quét như vậy.
CHƯƠNG II
NGUYÊN LÝ HOẠT ĐỘNG CỦA ĐỀ TÀI
·o¸
tưởng trực quang (phần mềm) sang ngôn ngữ hệ thống và điều khiển hê thống một các
linh hoạt.
II.1 Nguyên tắc led ma trận:
Để tìm hiểu nguyên tắc hoạt động của led ma trận ta cần tìm hiểu hai phần quan
trọng: phần 1 là tìm hiểu cách hiển thị chữ hay ký tự, hình ảnh trên led ma trận (quét led
ma trận) và phần 2 là tìm hiểu các hiệu ứng trên led ma trận như dịch ký tự.
II.1.1 Hiển thị ký tự trên led ma trận
Dựa trên nguyên tắc như quét màn hình, ta có thể thực hiện việc hiển thị ma trận
đèn bằng cách quét theo hàng và quét theo cột. Mỗi led trên led ma trận có thể coi như
một điểm ảnh. Địa chỉ của mỗi điểm ảnh này được xác định đồng thời bởi mạch giải mã
hàng và giải mã cột, điểm ảnh này sẽ được xác định trạng thái nhờ dữ liệu đưa ra từ bộ vi
điều khiển PIC16F887.
Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh được xác định. Tuy
nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các các điểm ảnh còn
lại sẽ chuyển về trạng thái tắt (nếu led đang sang thì sẽ tắt dần). Vì thế để hiển thị được
toàn bộ hình ảnh của ma trận đèn, ta có thể quét led ma trận nhiều lần với tốc độ quét rất
lớn, lớn hơn nhiều lần thời gian kịp tắt của đèn. Mắt người chỉ nhận biết tối đa 24 hình/s
do đó nếu tốc độ quét rất lớn thì nó sẽ không nhận ra được sự thay đổi nhỏ của đèn mà sẽ
thấy được toàn bộ hình ảnh cần hiển thị.
Như vậy ta đã tìm hiểu được cách hiển thị và dịch ký tự trên led ma trận. Nếu như
khéo léo trong cách kết nối các led ma trận và mã hoá ký tự kèm theo sự linh hoạt trong
phần mền ta có thể làm cho các led ma trận không những hiển thị được các thông điệp
mong muốn mà ta có thể làm cho led ma trận nhảy múa theo các hình dạng ngỗ nghĩnh.
PHẦN III
PHỤ LỤC
PHỤ LỤC A
CHƯƠNG TRÌNH ĐIỂU KHIỂN
#include <16F887.h>
#include <def_88.h>
#fuses hs,NOWDT,NOPROTECT,NOLVP
#device 16F877a*=16 ADC=8
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
#define latch_573_low PIN_A0 //LATCH cua 573 mang 8 bit dia chi thap
#define latch_573_high PIN_A1 //LATCH cua 573 mang 8 bit dia chi cao
#define CE_RAM PIN_A2 //Chip Select enable ram 62256
#define WE_RAM PIN_A3 //Write enable ram 62256
#define OE_RAM PIN_A4 //Read Enable ram 62256
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// KHAI BAO CHUONG TRINH CON
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
void send_595(int32 temp); //Chuong trinh gui du lieu ra 4 IC 595 dieu khien quet cot
void write_data_to_ram(char data,int32 vitri);//Chuong trinh cap nhat vao ram thong qua
ma ASCII
void write_ram(int16 address,int8 data);//Chuong trinh ghi vao ram
int8 read_ram(int16 address);
0xFE,0xFE,0x80,0xFE,0xFE,//T
0x80,0xB6,0xB6,0xB6,0xBE,//E
0x80,0xFD,0xF3,0xFD,0x80,//M
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xFF,0xBE,0x80,0xBE,0xFF,//I
0xD9,0xB6,0xB6,0xB6,0xCD,//S
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xC0,0xBF,0xBF,0xBF,0xC0,//U
0x80,0xF6,0xF6,0xF6,0xF9,//P
0xBE,0x80,0xBE,0xBE,0xC1,//D
0x83,0xF5,0xF6,0xF5,0x83,//A
0xFE,0xFE,0x80,0xFE,0xFE,//T
0xFF,0xBE,0x80,0xBE,0xFF,//I
0x80,0xFD,0xFB,0xF7,0x80,//N
0xC1,0xBE,0xB6,0xB6,0xC5,//G
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xBE,0x80,0xBE,0xBE,0xC1,//D
0x83,0xF5,0xF6,0xF5,0x83,//A
0xFE,0xFE,0x80,0xFE,0xFE,//T
0x83,0xF5,0xF6,0xF5,0x83,//A
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0x80,0xF6,0xF6,0xF6,0xF9,//P
0x80,0xBF,0xBF,0xBF,0xFF,//L
0x80,0xB6,0xB6,0xB6,0xBE,//E
0x83,0xF5,0xF6,0xF5,0x83,//A
0xD9,0xB6,0xB6,0xB6,0xCD,//S
0x80,0xB6,0xB6,0xB6,0xBE,//E
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xC0,0xBF,0xCF,0xBF,0xC0,//W
0x83,0xF5,0xF6,0xF5,0x83,//A
0xFF,0xBE,0x80,0xBE,0xFF//I
};
int8 const wait2[]={
0xFE,0xFE,0x80,0xFE,0xFE,//T
0xFF,0xBE,0x80,0xBE,0xFF,//I
0x80,0xFD,0xFB,0xF7,0x80,//N
0xC1,0xBE,0xB6,0xB6,0xC5,//G
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xD9,0xB6,0xB6,0xB6,0xCD,//S
0x80,0xB6,0xB6,0xB6,0xBE,//E
0xE0,0xDF,0xBF,0xDF,0xE0,//V
0x80,0xB6,0xB6,0xB6,0xBE,//E
0x80,0xF6,0xE6,0xD6,0xB9,//R
0x83,0xF5,0xF6,0xF5,0x83,//A
0x80,0xBF,0xBF,0xBF,0xFF,//L
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xD9,0xB6,0xB6,0xB6,0xCD,//S
0x80,0xB6,0xB6,0xB6,0xBE,//E
0xC1,0xBE,0xBE,0xBE,0xDD,//C
0xC1,0xBE,0xBE,0xBE,0xC1,//O
0x80,0xFD,0xFB,0xF7,0x80,//N
0xD9,0xB6,0xB6,0xB6,0xCD,//S
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xFE,0xFE,0x80,0xFE,0xFE,//T
0x80,0xF7,0xF7,0xF7,0x80,//H
0x83,0xF5,0xF6,0xF5,0x83,//A
0x80,0xFD,0xFB,0xF7,0x80,//N
0x80,0xF7,0xEB,0xDD,0xBE,//K
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xE0,0xDF,0xBF,0xDF,0xE0,//V
0x80,0xB6,0xB6,0xB6,0xBE,//E
0x80,0xF6,0xE6,0xD6,0xB9,//R
0xFC,0xFB,0x87,0xFB,0xFC,//Y
0x80,0xFD,0xF3,0xFD,0x80,//M
0xC0,0xBF,0xBF,0xBF,0xC0,//U
0xC1,0xBE,0xBE,0xBE,0xDD,//C
0x80,0xF7,0xF7,0xF7,0x80,//H
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xD5,0xE3,0x80,0xE3,0xD5,//* 10
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xD5,0xE3,0x80,0xE3,0xD5,//* 10
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE
0xF7,0xF7,0xF7,0xF7,0xF7//-
};
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
//******************BANG MA ASCII****************
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
int8 const font1[]={
0xFF,0xFF,0xFF,0xFF,0xFF,//SPACE 0 ->32
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 ->40
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,/// 15
0xC1,0xAE,0xB6,0xBA,0xC1,//0 16
0xFF,0xBD,0x80,0xBF,0xFF,//1 17
0x8D,0xB6,0xB6,0xB6,0xB9,//2 18 ->50
0xDD,0xBE,0xB6,0xB6,0xC9,//3 19
0xE7,0xEB,0xED,0x80,0xEF,//4 20
0xD8,0xBA,0xBA,0xBA,0xC6,//5 21
0xC3,0xB5,0xB6,0xB6,0xCF,//6 22
0xFE,0x8E,0xF6,0xFA,0xFC,//7 23
0xC9,0xB6,0xB6,0xB6,0xC9,//8 24
0xF9,0xB6,0xB6,0xD6,0xE1,//9 25
0xFF,0xC9,0xC9,0xFF,0xFF,//: 26
0xFF,0xA4,0xC4,0xFF,0xFF,//// 27
0xF7,0xEB,0xDD,0xBE,0xFF,//< 28 ->60
0xEB,0xEB,0xEB,0xEB,0xEB,//= 29
0xFF,0xBE,0xDD,0xEB,0xF7,//> 30
0xFD,0xFE,0xAE,0xF6,0xF9,//? 31
0xCD,0xB6,0x8E,0xBE,0xC1,//@ 32
0x83,0xF5,0xF6,0xF5,0x83,//A 33
0xBE,0x80,0xB6,0xB6,0xC9,//B 34
0xC1,0xBE,0xBE,0xBE,0xDD,//C 35
0xBE,0x80,0xBE,0xBE,0xC1,//D 36
0x80,0xB6,0xB6,0xB6,0xBE,//E 37
0x80,0xF6,0xF6,0xFE,0xFE,//F 38 ->70
0xC1,0xBE,0xB6,0xB6,0xC5,//G 39
0x80,0xF7,0xF7,0xF7,0x80,//H 40
0xFF,0xBE,0x80,0xBE,0xFF,//I 41
0xDF,0xBF,0xBE,0xC0,0xFE,//J 42
0x80,0xF7,0xEB,0xDD,0xBE,//K 43
0x80,0xBF,0xBF,0xBF,0xFF,//L 44
0x80,0xFD,0xF3,0xFD,0x80,//M 45
0x80,0xFD,0xFB,0xF7,0x80,//N 46
0xC1,0xBE,0xBE,0xBE,0xC1,//O 47
0x80,0xF6,0xF6,0xF6,0xF9,//P 48 ->80
0xC1,0xBE,0xAE,0xDE,0xA1};//Q 49 ->50x5=250 byte ky tu
0xFE,0xFE,0x80,0xFE,0xFE,//T 2
0xC0,0xBF,0xBF,0xBF,0xC0,//U 3
0xE0,0xDF,0xBF,0xDF,0xE0,//V 4
0xC0,0xBF,0xCF,0xBF,0xC0,//W 5
0x9C,0xEB,0xF7,0xEB,0x9C,//X 6
0xFC,0xFB,0x87,0xFB,0xFC,//Y 7
0x9E,0xAE,0xB6,0xBA,0xBC,//Z 8 ->90
0xFF,0x80,0xBE,0xBE,0xFF,//[ 9
0xFD,0xFB,0xF7,0xEF,0xDF,//\ 10
0xFF,0xBE,0xBE,0x80,0xFF,//] 11
0xFB,0xFD,0xFE,0xFD,0xFB,//^ 12
0x7F,0x7F,0x7F,0x7F,0x7F,//_ 13
0xFF,0xFF,0xF8,0xF4,0xFF,//' 14
0xDF,0xAB,0xAB,0xAB,0xC7,//a 15
0x80,0xC7,0xBB,0xBB,0xC7,//b 16
0xFF,0xC7,0xBB,0xBB,0xBB,//c 17
0xC7,0xBB,0xBB,0xC7,0x80,//d 18 ->100
0xC7,0xAB,0xAB,0xAB,0xF7,//e 19
0xF7,0x81,0xF6,0xF6,0xFD,//f 20
0xF7,0xAB,0xAB,0xAB,0xC3,//g 21
0x80,0xF7,0xFB,0xFB,0x87,//h 22
0xFF,0xBB,0x82,0xBF,0xFF,//i 23
0xDF,0xBF,0xBB,0xC2,0xFF,//j 24
0xFF,0x80,0xEF,0xD7,0xBB,//k 25
0xFF,0xBE,0x80,0xBF,0xFF,//l 26
0x83,0xFB,0x87,0xFB,0x87,//m 27
0x83,0xF7,0xFB,0xFB,0x87,//n 28 ->110
0xC7,0xBB,0xBB,0xBB,0xC7,//o 29
0x83,0xEB,0xEB,0xEB,0xF7,//p 30
0xF7,0xEB,0xEB,0xEB,0x83,//q 31
0x83,0xF7,0xFB,0xFB,0xF7,//r 32
0xB7,0xAB,0xAB,0xAB,0xDB,//s 33
0xFF,0xFB,0xC0,0xBB,0xBB,//t 34
0xC3,0xBF,0xBF,0xDF,0x83,//u 35
0xE3,0xDF,0xBF,0xDF,0xE3,//v 36
0xC3,0xBF,0xCF,0xBF,0xC3,//w 37
0xBB,0xD7,0xEF,0xD7,0xBB,//x 38 ->120
0xF3,0xAF,0xAF,0xAF,0xC3,//y 39
0xBB,0x9B,0xAB,0xB3,0xBB,//z 40
0xFB,0xE1,0xE0,0xE1,0xFB,//^ 41
0xE3,0xE3,0xC1,0xE3,0xF7,//->42
0xF7,0xE3,0xC1,0xE3,0xE3,//<-43
0xEF,0xC3,0x83,0xC3,0xEF,// 44 ->126 //45x5=225 words
};
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Bang du lieu dich cot
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
int32 const cot[]={
0xffffffFE,0xffffffFD,0xffffffFB,0xffffffF7,
0xffffffEF,0xffffffDF,0xffffffBF,0xffffff7F,
0xffffFEff,0xffffFDff,0xffffFBff,0xffffF7ff,
0xffffEFff,0xffffDFff,0xffffBFff,0xffff7Fff,
0xffFEffff,0xffFDffff,0xffFBffff,0xffF7ffff,
0xffEFffff,0xffDFffff,0xffBFffff,0xff7Fffff,
0xFEffffff,0xFDffffff,0xFBffffff,0xF7ffffff,
0xEFffffff,0xDFffffff,0xBFffffff,0x7Fffffff,
};
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// Khai bao bien, hang
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
char data;
int32 ngat=0;
int stop=0;
int8 i=0,j=0;
int16 k=0,n=0,t=0;
int speed=6;
int32 delay=500;
int32 sizeram=0;
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// chuong trinh ngat
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
#int_RDA //Ngat nhan du lieu tu RS232
void rs232()
{
ngat++; //tang dan theo tung ky tu nhap vao
delay_us(10);
data=getc();//doc tung ky tu
putc(data);
if(data==126)
{
stop=1;//neu ky tu nhap vao la '~' thi khong ghi vao ram tien hanh xuat ra led
sizeram=(ngat*5);
ngat=0;
}
else
{
stop=0;
sizeram=0;
write_data_to_ram(data,ngat);
}
}
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// CHUONG TRINH CHINH
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
void main()
{
enable_interrupts(INT_RDA);//Cho phep ngat RS232
enable_interrupts(GLOBAL);//cho phep ngat toan cuc
while(true)
{
WHILE(stop= =1)
{
for(j=0;j<(sizeram-32);j++)
{
for(n=0;n<=speed;n++)//toc do
{
for (t=0;t<=31;t++)
{
output_b(read_ram(0x0000+t+j));
send_595(cot[t]); //guidulieu
delay_us(delay);
output_b(0xff);
send_595(0xffffffff);
delay_us(10);
}
}
}
}
WHILE (stop==0)
{
for (k=0;k<=351;k++) //trabangma
{
for(n=0;n<=speed;n++)//toc do
{
for (t=0;t<=31;t++)
{
if(k<176)output_b(wait1[k+t]);
if(k>175)output_b(wait2[((k-176)+t)]);
send_595(cot[t]); //guidulieu
delay_us(delay);
output_b(0xff);
send_595(0xffffffff);
delay_us(10);
}
}
}
}
}
}
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
//CHUONG TRINH CON
//= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
void send_595(int32 temp)
{
int16 i;
for(i=0;i<=31;i++)
{
if(bit_test(temp,31)) //NEU FLAG_BIT==1 THI DATA=1
output_high(data1); //bit 1
else output_low(data1); //bit 0
output_low(clk);//tao xung clock dich data vao thanh ghi
DELAY_US(1);
output_high(clk);
temp=temp<<1; // Dich trai 1 bit
}
output_low(latch); //Chot du lieu ra 4 IC 595
output_high(latch);
}
void write_ram(int16 address,int8 data)
{
output_high(CE_RAM); //khoa RAM
//= = = = = = thiet lap dia chi cho RAM: = = = = = = = = = //
output_high(latch_573_low ); //latch_573_low cho phep xac lap 8bit thap dia
chi RAM
output_d( address ); //xuat 8bit thap dia chi RAM
output_low( latch_573_low ); //latch_573_low, chot 8bit thap dia chi RAM
address=address>>8;
output_high(latch_573_high ); //LE=1, cho phep xac lap 8bit cao dia chi
RAM
address=address>>8;
}
for(j=0;j<5;j++)//ghi 5 byte trong bien tam "ramtam" vao ram
{
address=((vitri-1)*5+j);//dinh dia chi cho ram
write_ram(address,ramtam[j]);//ghi vao ram
}
}
//End write_data_to_ram
PHỤ LỤC B
SƠ ĐỒ MẠCH IN 2 LỚP