Tải bản đầy đủ (.doc) (13 trang)

9 chuong 8 nguyen ly hoat dong

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (78.21 KB, 13 trang )

QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8

CHƯƠNG 8

NGUYÊN LÝ HOẠT ĐỘNG VÀ
LƯU ĐỒ GIẢI THUẬT
8.1. NGUYÊN LÝ HOẠT ĐỘNG CỦA MẠCH QUANG BÁO
Khi khởi động mạch quang báo, vi điều khiển sẽ đọc thông tin được lưu
trước trong ROM về tốc độ chạy chữ, kiểu chạy chữ (trái sang phải, phải sang
trái…), kích thước hiển thị, nội dung của bản tin. Sau đó vi điều khiển sẽ đối chiếu
từng kí tự trong nội dung bản tin để copy font tương ứng vào RAM của chương
trình hiển thị, rồi gọi chương trình hiển thị để hiển thị nội dung ra bảng quang báo.
Khi chương trình quản lí trên máy tính yêu cầu cập nhật bản tin mới cho
bảng quang báo, vi điều khiển sẽ ngừng việc hiển thị để chờ nhận dữ liệu mới từ
máy tính. Sau đó lưu nội dung vừa nhận được vào ROM để phục vụ cho việc hiển
thị bảng quang báo.
Kỹ thuật quét led:
Là cấp tín hiệu điều khiển theo dạng xung theo kiểu quét cho các hàng cần
hiển thị tần số quét nhỏ nhất cho mỗi chu kỳ cần khoảng 25Hz (40ms) nhằm bảo
đảm cho mắt thấy các led sáng đều không nhấp nháy.
Dữ liệu font chữ được đổ qua cột.
Khi quét hết 128 cột thì được một hình.
Khi chạy chữ chỉ cần hiển thị một hình khác đã được dịch đi một cột.

8.2 LƯU ĐỒ GIẢI THUẬT VÀ CODE CHƯƠNG TRÌNH
8.2.1. LƯU ĐỒ GIẢI THUẬT
8.2.1.1. LƯU ĐỒ GIẢI THUẬT CỦA HỆ THỐNG

Trang 57



QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8

Trang 58


QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8

Hình 8.1.Lưu đồ giải thuật của hệ thống
8.2.1.2. Lưu đồ giải thuật chương trình chính
BEGIN

KHAI BÁO BIẾN

KHAI BÁO CHƯƠNG TRÌNH CON

GỌI CHƯƠNG TRÌNH COPY FONT
VÀO RAM

NGẮT NHẬN DỮ
LIỆU

Đ

S
GỌI CHƯƠNG TRÌNH HIỂN THỊ

END


Trang 59


QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8

Hình 8.2.Lưu đồ giải thuật chương trình chính
8.2.1.3. Chương trình hiển thị

BEGIN

KHAI BAO BIEN i, j

So hang quet = 0

Dich font tu RAM vao 595

Đủ dữ liệu 16
bytes?

Đủ 16 hàng ?

END
Trang 60


QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8


Hình 8.3.Lưu đồ giải thuật chương trình hiển thị

8.2.1.4. Chương trình copy font vào RAM

BEGIN

GIẢI MÃ ĐỊA CHỈ MẢNG FONT

COPY FONT VAO RAM

ĐỦ 16 BYTES?

TĂNG ĐỊA CHỈ RAM LÊN 16 ĐƠN
VỊ

END

Trang 61


QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8

Hình 8.4.Lưu đồ giải thuật chương trình hiển thị

Trang 62


QUANG BÁO MA TRẬN GIAO TIẾP MÁY TÍNH
Chương 8


8.2.1.5. Lưu đồ giải thuật chương trình ghi dữ liệu
vàoRAM ngoài
BEGIN

XUẤT 8 BIT CAO CỦA
ĐỊA CHỈ

XUẤT 8 BIT THẤP CỦA
ĐỊA CHỈ

GHI DỮ LIỆU VÀO RAM

END

Hình 8.4.Lưu đồ giải thuật chương trình ghi dữ liệu
vàoRAM ngoài

8.2.1.6. Lưu đồ giải thuật chương
trình đọc dữ liệu từ RAM ngoài
BEGIN

XUẤT 8 BIT CAO CỦA
ĐỊA CHỈ

XUẤT 8 BIT THẤP CỦA
ĐỊA CHỈ

ĐỌC DỮ LIỆU TỪ RAM


END

Hình 8.5.Lưu đồ giải thuật chương
trình đọc dữ liệu từ RAM ngoài
Trang 63


8.2.2. CODE CHƯƠNG TRÌNH
8.2.2.1. Chương trình chính trên vi điều khiển
//file thu vien dieu khien 16f877a
#include <16F877A.h>
//khai bao cau hinh cho 16f877a
#fuses xt,nowdt
//su dung thach anh 4MHz
#use delay(clock=4000000)
#use fast_io(a)

#include <Module_EXTRAM_2x573.c>
//dinh kem file module_EXTRAM.c
#include <module_display.c>
//dinh kem file module_display.c
//#include <2404.c>
//dinh kem file 2404.c
//khai bao su dung giao tiep may tinh thong qua RS232
#use
rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stop=
1)
#include <font matrix.c>
//khai bao cac bien su dng trong chuong trinh
//----------------------Khai bao bien---------------------int8 counter;

int8 max_char;
int1 update_ram;
char info[25];
//--------------------------------------------------------//-----------Khai bao cac chuong trinh con----------------//Chuong trinh giai ma dia chi
int32 add_char_rom(int8 index_char);
//Chuong trinh copy ma font vao RAM
void copy2ram();
//Chuong trinh hien thi
void display();
//------------------------------------------------//Chuong trinh ngat nhan du lieu
#INT_RDA
void Receive_isr()
{


Char c;
if (kbhit())
{
c = getc();
if (c==':') counter=0;
info[counter]=c;
counter++;
update_ram=1;
putc(c);
}
}
//Chuong trinh chinh bat dau tai day
void main()
{
ENABLE_INTERRUPTS(INT_RDA);

enable_interrupts(global);
set_tris_a(0);
output_a(0);
update_ram=0;

//cho phep ngat RAD
//cho phep ngat toan cuc
//chon port A mode output
//Xoa du lieu cua port a
//Xoa co cap nhat ram

init_595();

//thiet lap cac chan
//dk quet hang,xuat data
//Goi ham copy font vao ram

copy2ram();
while (true)
{
if (update_ram==1)
{
copy2ram();
update_ram=0;
}
display();
}//end of while
}//end of main

//goi hien thi



//--------------------Cac chuong trinh con----------------//-----Ham lay dia chi bat dau cua day font trong ROM-----int32 add_char_rom(int8 index_char)
{
int32 index_add;
switch (info[index_char])
{
case '0':index_add = 0;//No.0
break;
case '1':index_add = 16;//No.1
break;
case '2':index_add = 32;//No.2
break;
case '3':index_add = 48;//No.3
break;
case '4':index_add = 64;//No.4
break;
case '5':index_add = 80;//No.5
break;
case '6':index_add = 96;//No.6
break;
case '7':index_add = 112;//No.7
break;
case '8':index_add = 128;//No.8
break;
case '9':index_add = 144;//No.9
break;
case 'a':index_add = 160;//a
break;
case 'b':index_add = 176;//b

break;
case 'c':index_add = 192;//c
break;
case 'd':index_add = 208;//d
break;
case 'e':index_add = 224;//e
break;
case 'f':index_add = 256;//f
break;
case 'g':index_add = 272;//g
break;


case 'h':index_add = 288;//h
break;
case 'i':index_add = 304;//i
break;
case 'j':index_add = 320;//j
break;
case 'k':index_add = 336;//k
break;
case 'l':index_add = 352;//l
break;
case 'm':index_add = 368;//m
break;
case 'n':index_add = 384;//n
break;
case 'o':index_add = 400;//o
break;
case 'p':index_add = 416;//p

break;
case 'q':index_add = 432;//q
break;
case 'r':index_add = 448;//r
break;
case 's':index_add = 464;//s
break;
case 't':index_add = 480;//t
break;
case 'u':index_add = 496;//u
break;
case 'v':index_add = 512;//v
break;
case 'w':index_add = 528;//w
break;
case 'x':index_add = 544;//x
break;
case 'y':index_add = 560;//y
break;
case 'z':index_add = 576;//z
break;
default : index_add= 592;//space
break;
}//end of switch
return(index_add);//ham tra ve gia tri cua index_char
}
//---------------------ket thuc cua ham-----------------


//----------Ham copy ma font vao RAM chuong trinh---------void copy2ram()

{
int8 i,j;
int32 base_rom_add;
day font
int32 base_ram_add;
base_ram_add=0x00;
//max_char=counter-5;

//khai bao dia chi bat dau cua
//khai bao dia chi goc cho RAM

for(i=4;i<=20;i++)
{
base_rom_add=add_char_rom(i); //lay dia chi bat dau cua
//day font
//vong lap copy day font vao RAM chuong trinh bat dau
if (base_rom_add <256)
{
for (j=0;j<16;j++)
{
write_ext_ram(base_ram_add+j,font_arial_1[base_rom_add+j]);
}
}
else if (base_rom_add<512)
{
base_rom_add=base_rom_add-256;
for (j=0;j<16;j++)
{
write_ext_ram(base_ram_add+j,font_arial_2[base_rom_add+j]);
}

}
else
{
base_rom_add=base_rom_add-512;
for (j=0;j<16;j++)
{
write_ext_ram(base_ram_add+j,font_arial_3[base_rom_add+j]);
}
}


base_ram_add=base_ram_add+16;//tang de chi RAM len 16 don
vi,chu y: moi chu duoc hoa hoa thanh 16 bytes
}
}
//------------------------ket thuc cua ham----------------//ham hien thi nay chi hien chu tren quang bao
void display()
{
int8 i,j,m;
//i bien hang
//j nien tham chieu RAM
//m bien xac dinh dia chi
output_high(SDATAROW_PIN);//dich bit 0 vao 595
for (i=0,j=0;i<16,j<16;i++,j++)
{
for (m=0;m<=16;m++)
{
send_byte(read_ext_ram((m*16)+j));
//dich font vao 595
}

load_reg();
//cho phep du lieu duoc xuat ra o chan dieu du
lieu 595
//tao canh len de dich du lieu vao 595
output_high(SHCP_PIN);
output_low(SHCP_PIN);
//tao canh len de dich du lieu ra cac ngo ra cua 595
output_high(STCP_PIN);
output_low(STCP_PIN);
//cho pin data len cao
output_low(SDATAROW_PIN);
}
}
8.2.2.2. Chương trình điều khiển trên máy tính (file kèm theo đĩa)



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×