CHƯƠNG 3: XÂY DỰNG HỆ THỐNG

Một phần của tài liệu tìm hiểu và đưa ra mô hình quang báo sử dụng led ma trận 8x32 (Trang 29 - 31)

3.1.1 Sơ đồ thuật toán cho hệ thống

Việc thiết kế phần mềm cho hệ thống chính là việc xây dựng chương trình điều khiển nạp vào Vi xử lý. Trước tiên phải có sơ đồ thuật toán điều khiển để xử lý các vấn đề về nguyên tắc hoạt động của mạch.

Các vấn đề đặt ra là:

- Xuất ra khối điều khiển một mảng kí tự đã được đặt sẵn. - Cho các ký tự chạy từ phải sang trái

- Chỉ cần nhập một mảng ký tự vào phần mềm là có thể thay đổi được mà không cần lập trình lại

Sau đây là sơ đồ thuật toán

3.1.2 Chương trình nạp vào vi điều khiển 16F877A

Chương trình cho hệ thống quang báo sử dụng LED ma trận 8x32 được soạn thảo trên trình biên dịch CCS 4.104 bằng ngôn ngữ C. Sau đây là chương trình:

//////////////////////////////////////////////////////////// //---DO AN MON HOC HE THONG NHUNG---// //---LED MATRIX 8X32---//

// Phan cung: PIC 16F877A – Thach anh 12MHz //

// IC chot dich 74HC595 – Quet cot //

// IC dem dong ULN 2803 //

// Ngay thuc hien: 25/4/2011 //

// Ngay hoan thanh: 19/5/2011 //

//////////////////////////////////////////////////////////// #include <16f877a.h>

#include <font5x7.c>

#use delay(clock=20m)

#byte Port_B = 0x06 // Dinh nghia thanh ghi Port B #byte Port_C = 0x07 // Dinh nghia thanh ghi Port C #byte TRIS_B = 0x86 // Dinh nghia thanh ghi Tris B #byte TRIS_C = 0x87 // Dinh nghia thanh ghi Tris B #byte led_data = Port_B

#bit data = Port_C.4 // DN chan data la pin C.4 #bit clock = Port_C.5 // DN chan data la pin C.5 #bit latch = Port_C.6 // DN 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 HE THONG NHUNG –LED MATRIX 8X32";

char dem_ngat, addr, leng, ky_tu, vi_tri; // Chuong trinh con day du lieu vao 595

// ULN 2803 dem dau ra dao nen day vao 1bit 0 va 31bit 1 void HC595(char cot){

char i;

for(i=0;i<cot;i++){

clock=0; }

data=0; // Dua bit 0 vao vi tri cot can hien thi clock=1;

clock=0;

for(i=(cot+1);i<=31;i++){

data=1; // Tiep tu dua bit 0 vao 595 cho du 32bit clock=1;

clock=0; } (adsbygoogle = window.adsbygoogle || []).push({});

latch=1; // Tao 1 xung o chan Latch day data ra va chot latch=0;

}

#int_timer0 // Khai bao su dung timer 0 // Chuong trinh ngat Timer0

void Scan(void){

set_timer0(6); //cai dat gia tri ban dau cho timer0 if((++dem_ngat)==2){ led_data=0xff; HC595(addr); led_data=led[addr]; addr++; if(addr>=32) addr=0; dem_ngat=0; } }

// Chuong trinh con lay do dai chuoi ky tu void leng_string(void){

leng=0;

while((string1[leng])!='\0') // Chay tu dau cho toi khi ket thuc chuoi

leng++; }

// Chuong trinh con Copy font chu vao bo dem void copy_font(void){

char j;

for(j=0;j<=4;j++)

font_buffer[j]=font[(string1[ky_tu]-32)].b[j]; // Copy ma font (5byte) tu ky tu can hien thi vao bo dem font_buffer

font_buffer[j]=0xff; }

// Chuong trinh con cho chu chay tu phai sang trai void display_move(void){ char j; for(j=31;j>0;j--) led[j]=led[j-1]; if(vi_tri>5){ vi_tri=0; copy_font(); ky_tu++; } else{ led[0]=font_buffer[vi_tri]; vi_tri++; } }

// Chuong trinh chinh void main(){ int i; TRIS_B=0x00; TRIS_C=0x00; Port_B=0x00; Port_C=0x00; setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16); //precase/16

ky_tu=0; while(true){

for (i=0;i<=31;i++) led[i]=0xff; while(ky_tu<=leng){ display_move (); delay_ms(50); } } } 3.2 KẾT QUẢ MÔ PHỎNG

Sau đây là kết quả mô phỏng trên phần mềm Proteus 7.5 Sp2:

Một phần của tài liệu tìm hiểu và đưa ra mô hình quang báo sử dụng led ma trận 8x32 (Trang 29 - 31)