1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

QUANG báo HIỂN THỊ LED MA TRẬN GIAO TIẾP bàn PHÍM chuong 6 nguyen ly hoat dong , luu do giai thuat va code

16 303 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 101,5 KB

Nội dung

CHƯƠNG 6: NGUYÊN LÝ HOẠT ĐỘNG , LƯU ĐỒGIẢI THUẬT VÀ CHƯƠNG TRÌNH 6.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

Trang 1

CHƯƠNG 6: NGUYÊN LÝ HOẠT ĐỘNG , LƯU ĐỒ

GIẢI THUẬT VÀ CHƯƠNG TRÌNH

6.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ữ ( 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

sau khi nhập dữ liệu từ bàn phím vi điều khiển sẽ 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 64 cột

Khi quét hết 8 hàng 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

Trang 2

6.2 LƯU ĐỒ GIẢI THUẬT VÀ CODE CHƯƠNG TRÌNH 6.2.1 LƯU ĐỒ GIẢI THUẬT

BEGIN

Khai báo I I/O

Chương trình chính

Quét phí m

Xác định chữ

Xử lý chữ

Lưu vào RAM No

Yes

Trang 3

6.2.2 Chương trình hiển thị

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

Begin

Khai Báo Biến

Số hàng quét =0

Dịch font từ Ram vào 595

Đủ dữ liệu 8 byte ?

Đủ 8 hàng Kết thúc

No

No Yes

Yes Xuat dulieu hang quet

Số hàng quét ++

Trang 4

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

Hình 6.4: lưu đồ copy font vào RAM

I=0

Copy font vào RAM[i] dt[i]

i>n

No

Yes Begin

Kết thúc I++

Trang 5

6.2.4 Chương trình quét phím

6.2.4.1 Quét hàng 1

Quet phim

H1=O;H2=H3=H4=

C1=C2=C3=C4=1

Ma phim=1+ln IF(C1=0)

C2=0

C3=0

C4=0

Ma phim=4+ln

Ma phim=7+ln

Ma phim=10+ln

Trang 6

6.2.4.1 Quét hàng 2

Quet phim

H2=O;H1=H3=H4=

C1=C2=C3=C4=1

Ma phim=13+ln IF(C1=0)

C2=0

C3=0

C4=0

Ma phim=16+ln

Ma phim=19+ln

Ma phim=22+ln

Trang 7

6.2.4.1 Quét hàng 3

Quet phim

H3=O;H2=H1=H4=

C1=C2=C3=C4=1

Ma phim=25+ln IF(C1=0)

C2=0

C3=0

C4=0

Ma phim=28+ln

Ma phim=31+ln

Ma phim=34+ln

Trang 8

6.2.4.1 Quét hàng 4

Quet phim

H4=O;H1=H2=H3=

C1=C2=C3=C4=1

Ma phim=37 IF(C1=0)

C2=0

C3=0

C4=0

Ma phim=38

Ma phim=39

Ma phim=40

Trang 9

6.3 CODE CỦA CHƯƠNG TRÌNH

#include <16F877A.h>

#include <def_877a.h>

#include <string.h>

#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

#use delay(clock=4000000)

//#include <input.c>

#include <font_ascii.c> //File chua bo font ma hoa ky tu ASCII

// Dinh nghia cac chan cho ket noi 74595

#bit data = 0x05.1

#bit clk = 0x05.2

#bit latch = 0x05.0

#bit tt = 0x05.3

#define h1 RD4

#define h2 RD5

#define h3 RD6

#define h4 RD7

#define c1 RD0

#define c2 RD1

#define c3 RD2

#define c4 RD3

// Bo nho dem man hinh hien thi

int8 ha[8] = {1,2,4,8,16,32,64,128};

int8 buff_disp[65]; //Bo nho dem cho man hinh LED

int8 n; //SO ky tu hien thi toi da

int8 time=15; //Bien quy dinh toc do chu chay

int8 count=0; int is = 0;

int8 ln,isln; //so lan nhan 1 phim

int8 maphim = 41; //ban phim co 40 ma, khai bao 41 tuc la chua bam phim

char dt[64];

Trang 10

//=========KHAI BAO CAC CHUONH TRINH CON================ void send_2_595(int8 temp);

void display();

void copy_2_ram1(int8 index_char);

void copy_2_ram2(int8 index_char);

void luudata();

//==============================

void luudata()

{

int i;

for(i=0;i<n;++i)

write_eeprom(i,dt[i]);

write_eeprom(i,32); write_eeprom(i+1,32); write_eeprom(i+2,32);

write_eeprom(i+3,32); write_eeprom(i+4,32);

write_eeprom(i+5,32); write_eeprom(i+6,32); write_eeprom(i+7,32);

write_eeprom(i+8,32); write_eeprom(i+9,32);

write_eeprom(i+10,32); write_eeprom(i+11,32); write_eeprom(i+12,32); write_eeprom(0xff,n+12); // Luu so ky tu toi da vao ROM

}

//=============================================

void ktphim()

{

maphim = 41;

h1 = 0; h2 = h3 = h4 = c1 = c2 = c3 = c4 = 1;

if(c1==0) {while(c1==0){} if(isln==1 && ln<2) ln++; else {ln=0;isln=1;} maphim = 1+ln; }

if(c2==0) {while(c2==0){} if(isln==2 && ln<2) ln++; else {ln=0;isln=2;} maphim = 4+ln;}

if(c3==0) {while(c3==0){} if(isln==3 && ln<2) ln++; else {ln=0;isln=3;} maphim = 7+ln;}

if(c4==0) {while(c4==0){} if(isln==4 && ln<2) ln++; else {ln=0;isln=4;} maphim = 10+ln;}

h2 = 0; h1 = h3 = h4 = c1 = c2 = c3 = c4 = 1;

if(c1==0) {while(c1==0){} if(isln==5 && ln<2) ln++; else {ln=0;isln=5;}

Trang 11

if(c4==0) {while(c4==0){} if(isln==8 && ln<2) ln++; else {ln=0;isln=8;} maphim = 22+ln;}

h3 = 0; h2 = h1 = h4 = c1 = c2 = c3 = c4 = 1;

if(c1==0) {while(c1==0){} if(isln==9 && ln<2) ln++; else {ln=0;isln=9;} maphim = 25+ln;}

if(c2==0) {while(c2==0){} if(isln==10 && ln<2) ln++; else {ln=0;isln=10;} maphim = 28+ln;}

if(c3==0) {while(c3==0){} if(isln==11 && ln<2) ln++; else {ln=0;isln=11;} maphim = 31+ln;}

if(c4==0) {while(c4==0){} if(isln==12 && ln<2) ln++; else {ln=0;isln=12;} maphim = 34+ln;}

h4 = 0; h2 = h3 = h1 = c1 = c2 = c3 = c4 = 1;

if(c1==0) {while(c1==0){} maphim = 37;}

if(c2==0) {while(c2==0){} maphim = 38;}

if(c3==0) {while(c3==0){} maphim = 39;}

if(c4==0) {while(c4==0){} maphim = 40;}

}

void layma() //lay ma cua cac ki tu dag nhap dua vao buff de hien thi {

int s,v,t,u;

if(n>10) v = n-10; else v = 0;

s = 63;

while(s>0) // Clear RAM of buff_disp

{

t=dt[v]-32; //Lay gia tri ASCII cua ky tu

if (t<=51)

{

for (u=0;u<5;u++)

{

buff_disp[s]=font[t].b[u]; // Luu ma ascii vao RAM

s ;

}

buff_disp[s]=0xff; s ;

}

else

{

t=t-51;

for (u=0;u<5;u++)

Trang 12

{

buff_disp[s]=font2[t].b[u]; // Luu ma ascii vao RAM s ;

}

buff_disp[s]=0xff; s ;

}

if(v<n-1) v++; else return;

}

}

void nhap()

{

int iscase=0; // bien chon cach nhap hoa - thuong char machu; //ki tu nhap tu ban phim

int k;

for (k=0;k<=64;k++) // Clear RAM of buff_disp

buff_disp[k]=0xff;

isln = 0;

n = 1; //tong so ky tu, bien chung

dt[0] = 63; layma();

while(1)

{

display();

ktphim();

if(maphim<36)

{

if(iscase==0) //nhap chu hoa

{

if(maphim>26)

machu = maphim + 21;

else

machu = maphim + 64;

}

else //nhap chu thuong

{

Trang 13

}

if(maphim == 37) //phim xac nhan ky tu nhap

{

dt[n] = 63; n++; layma();

}

if(maphim == 38) //phim doi nhap ki tu hoa - thuong

{

if(iscase<1) iscase++; else iscase = 0;

}

if(maphim == 39) // phim nhap khoang trang

{

dt[n-1] = 32; dt[n] = 63; n++; layma();

}

if(maphim == 40)//phim xoa khi chua xac nhan ki tu dong thoi la ket thuc nhap {

luudata(); return;

}

if(n>50) //so ky tu nhap toi da la 50

{

//dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++;

//dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++; dt[n-1] = 32; n++;

luudata(); return;

}

}

}

//===========Chuong trinh chinh================

void main() {

int8 i,j;

//===========================================

TRISA=0x00; // Thiet lap chan vao ra

TRISB=0x00; // khai bao hang ngo ra, cot ngo vao

TRISD=0x0F;

delay_ms(10);

//===========================================

//=======BEGIN DISPLAY FUNCTION==============

//Doan chuong trinh nay se hien thi noi dung ban tin luu trong EEPROM

tudau:

Trang 14

n = read_eeprom(0xff);

while(1)

{

for (i=0;i<=64;i++) // Clear RAM of buff_disp

buff_disp[i]=0xff;

for (i=0;i<=n;i++) // Begin of text

{

j=read_eeprom(i)-32; //Lay gia tri ASCII cua ky tu

if (j<=51)

copy_2_ram1(j);

else

{

j=j-51;

copy_2_ram2(j);

}

h4 = 0; h2 = h3 = h1 = c1 = c2 = c3 = c4 = 1;

if(c1==0) {while(c1==0){} nhap(); goto tudau;}

}

}

}

//========= END MAIN ==============

// === CAC CHUONG TRINH CON =========

//=======Gui du lieu theo duong noi tiep toi 595============ void send_2_595(int8 temp) {

clk=0;

for(count=0;count<64;count++)

{

if((buff_disp[count] & temp)>0)

data=0; //bit 1

else data=1; //bit 0

clk=1;

Trang 15

int8 i,j;

for (i=0;i<=time;i++) //Toc do chu chay thay doi boi bien time {

for(j=8;j>0;j )

{

send_2_595(ha[j-1]);

PORTB = 0x00;

latch=1; //Chot du lieu

latch=0;

PORTB = ha[j-1]; //255-buff_disp[count];

delay_us(40);

}

}

}

//========Copy to Ram1=====================

void copy_2_ram1(int8 index_char)

{

int8 i,j;

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

{ // Dich RAM

for (i=64;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===================

void copy_2_ram2(int8 index_char) {

int8 i,j;

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

{

for (i=64;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

Trang 16

buff_disp[0]=0xff; // Them mot khoang trang giua hai ky tu

}

Ngày đăng: 06/09/2017, 23:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w