Màn hình quảng cáo ở chế độ văn bản sử dụng ma trận LED 5x7 có điều khiển máy tính phần 4

16 593 0
Màn hình quảng cáo ở chế độ văn bản sử dụng ma trận LED 5x7 có điều khiển máy tính phần 4

Đ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

Màn hình quảng cáo ở chế độ văn bản sử dụng ma trận LED 5x7 có điều khiển máy tính

Thiết kế mạch logic số Phần III: Phần mềm điều khiển chơng I: Phân tích chơng trìnhChơng trình điều khiển đợc viết bằng ngôn ngữ C, chạy trong môi trờng DOS. Yêu cầu của chơng trình là phải một giao diện thân thiện, giúp ngời dùng dễ dàng dùng máy tính để nhập các ký tự cần hiển thị tại vị trí mong muốn trên ma trận LED bên ngoài.Khi thực hiện, chơng trình phải thờng xuyên trao đổi dữ liệu với mạch ngoài qua cổng song song bằng cách truy nhập vào ba thanh ghi của cổng song song là: thanh ghi dữ liệu, thanh ghi trạng thái, thanh ghi điều khiển. Chơng trình mặc định lấy cổng song song đây là LPT1 với địa chỉ các thanh ghi đợc cho (tính hệ đếm 16) nh sau:Thanh ghi Địa chỉDữ liệu 378hTrạng thái 379hĐiều khiển 37AhĐể thuận tiện, trong chơng trình ta dùng lệnh #define để định nghĩa cho các thanh ghi: #define DataReg 0x378 #define StatusReg 0x379 #define ControlReg 0x37AThanh ghi dữ liệu 8 bit (D0 ữ D7) dùng để đa ra địa chỉ và của ký tự cần ghi vào RAM mạch ngoài. Sử dụng lệnh: outportb(DataReg, dữ liệu). Địa chỉ của ký tự cần ghi vào RAM sẽ xác định vị trí của ký tự trên bảng quảng cáo bên ngoài, nó gồm địa chỉ cột (4 bit đầu, từ D0 đến D3) và địa chỉ cột (3 bit tiếp theo, từ D4 đến D6), tức là cần 7 bit địa chỉ D0 ữ D6, bit thứ 8 là D7 không dùng. Gọi column là địa chỉ cột và row là địa chỉ hàng của ký tự cần hiển thị thì địa chỉ của ký tự đó trong RAM là add đợc tính nh sau:row << 4; // dịch phải 4 bitadd = row | column; // cộng đại số row và columnMã của ký tự dùng 6 bit (D0 ữ D5) để biểu diễn, tức là thể biểu diễn đợc 64 ký tự từ 0 đến 63, đợc qui ớc nh bảng dới đây:Ký tựMãHệ 10 Hệ 2Ký tựMãHệ 10 Hệ 2Ký tựMãHệ 10Hệ 2A 0000000X 23010111; 46101110B 1000001Y 24011000' 47101111C 2000010Z 25011001" 48110000D 30000110 26011010( 49110001E 40001001 27011011) 50110010F 50001012 28011100[ 51110011G 60001103 29011101] 52110100H 70001114 30011110! 53110101I 80010005 31011111? 54110110J 90010016 32100000@ 55110111K 100010107 33100001# 56111000L 110010118 34100010$ 57111001M 120011009 35100011% 58111010N 13001101+ 36100100^ 5911101136 Thiết kế mạch logic số Phần III: Phần mềm điều khiển O 14001110- 37100101& 60111100P 15001111* 38100110\ 61111101Q 16010000/ 39100111| 62111110R 17010001= 40101000space63111111S 18010010> 41101001T 19010011< 42101010U 20010100. 43101011V 21010101, 44101100W 22010110: 45101101Thanh ghi trạng thái 8 bit (S0 ữ S7), dùng để thu nhận những thông tin từ mạch bên ngoài gửi đến qua các chân: 10 và 13. Chức năng từng chân đợc nêu nh bảng dới đây:ChânBit tơng ứng trên thanh ghi trạng tháiChức năng10 S6Mạch ngoài gửi mức logic 1 để thông báo là đang đọc RAM. Khi nó mức logic 0 thì nghĩa là RAM đã đợc đọc xong và máy tính thể ghi dữ liệu lên RAM.13 S4ở mức logic 1 khi mạch ngoài đã đóng công tắc nguồn (có thể cha cấp nguồn cho mạch ngoài).Khi bắt đầu thực hiện, chơng trình phải kiểm tra xem công tắc nguồn mạch ngoài đã đợc đóng cha thông qua việc đọc dữ liệu từ thanh ghi trạng thái và kiểm tra bit S4 trạng thái 1 không bằng các lệnh:result = inportb(StatusReg); k = result & 16; // Phép AND giữa result và 16Số 16 biểu diễn dới dạng nhị phân là: 00010000. Khi k 0 thì S4 = 1.Trớc khi ghi dữ liệu lên RAM phải kiểm tra xem bit S6 trạng thái 0 không. Quá trình kiểm tra đợc thực hiện chế độ hỏi vòng bằng cách dùng lệnh for(i=0;i<1000;i++), tức là liên tục đọc thanh ghi trạng thái, bắt đầu từ lúc ký tự đợc nhập vào từ bàn phím. Sau một thời gian, nếu chân 10 vẫn mức logic 1 thì sẽ tự thoát ra và quá trình gửi ký tự là không thành công.Thanh ghi điều khiển 8 bit (C0 ữ C7) dùng để gửi thông tin điều khiển từ máy tính ra mạch bên ngoài bằng các chân: 1, 14, 17. Chức năng các chân đợc cho nh bảng dới đây:37 Thiết kế mạch logic số Phần III: Phần mềm điều khiển ChânBit tơng ứng trên thanh ghi điều khiểnChức năng1 C0Chơng trình sẽ gửi một mức logic 1 ra chân này để chốt địa chỉ của ký tự gửi ra trên mạch chốt 74373, đồng thời mở bộ đệm 74244 đa địa chỉ tới RAM.14 C1Sau khi địa chỉ và dữ liệu đã đa tới RAM, chơng trình sẽ làm cho chân này chuyển xuống mức logic 0 để tạo ra tín hiệu ghi vào RAM.17 C3Khi ngời dùng nhấn phím F1 để bật chơng trình, nếu công tắc nguồn mạch ngoài đã đợc đóng, chơng trình sẽ gửi một mức logic 0 ra chân này để tạo ra tín hiệu cấp nguồn cho mạch.38 Thiết kế mạch logic số Phần III: Phần mềm điều khiển chơng ii: m nguồnã//Chuong trinh dieu khien bang quang cao dung ma tran LED 5x7// (Do an mon hoc: Thiet ke mach Logic)//Nguoi viet: Le Minh Hung// Nguyen Duc Linh// Lop DT6-K43-DHBKHN#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#include <dos.h>#define DataReg 0x378#define StatusReg 0x379#define ControlReg 0x37Avoid Initialize();void Interfacing();void Print_Code(int code);void ItoSofB(int i,char up[],char down[]);void Print_Character(int column,int row,int code);void Print_Column(int column);void Print_Row(int row);void Print_Cell(int column,int row,char value);void Print_Matrix(int code);int Out_Char(int column,int row,int code);void Reset();void Power();//-----------------------------------------------------------------int character[64][6]={ //character[x][0-4]: code of character'column//character[x][5]: ASCII code{126,17,17,17,126,65}, // 0-A{127,73,73,73,54,66}, // 1-B{62,65,65,65,34,67}, // 2-C{127,65,65,34,28,68}, // 3-D{127,73,73,73,65,69}, // 4-E{127,9,9,9,1,70}, // 5-F{62,65,73,73,58,71}, // 6-G{127,8,8,8,127,72}, // 7-H{0,65,127,65,0,73}, // 8-I{32,64,65,63,1,74}, // 9-J39 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn {127,8,20,34,65,75}, //10-K{127,64,64,64,64,76}, //11-L{127,2,12,2,127,77}, //12-M{127,4,8,16,127,78}, //13-N{62,65,65,65,62,79}, //14-O{127,9,9,9,6,80}, //15-P{62,65,81,33,94,81}, //16-Q{127,9,25,41,70,82}, //17-R{38,73,73,73,50,83}, //18-S{1,1,127,1,1,84}, //19-T{63,64,64,64,63,85}, //20-U{31,32,64,32,31,86}, //21-V{63,64,48,64,63,87}, //22-W{99,20,8,20,99,88}, //23-X{7,8,120,8,7,89}, //24-Y{97,81,73,69,67,90}, //25-Z{62,81,73,69,62,48}, //26-0{0,66,127,64,0,49}, //27-1{66,97,81,73,70,50}, //28-2{33,65,69,75,49,51}, //29-3{24,20,18,127,16,52}, //30-4{39,69,69,69,57,53}, //31-5{60,74,73,73,48,54}, //32-6{1,113,9,5,3,55}, //33-7{54,73,73,73,54,56}, //34-8{6,73,73,41,30,57}, //35-9{8,8,62,8,8,43}, //36-+{8,8,8,8,8,45}, //37--{20,8,62,8,20,42}, //38-*{32,16,8,4,2,47}, //39-/{20,20,20,20,20,61}, //40-={0,65,34,20,8,62}, //41->{8,20,34,65,0,60}, //42-<{0,96,96,0,0,46}, //43-.{0,80,48,0,0,44}, //44-,{0,54,54,0,0,58}, //45-:{0,86,54,0,0,59}, //46-;{0,5,3,0,0,39}, //47-'{0,3,0,3,0,34}, //48-"{0,28,34,65,0,40}, //49-({0,65,34,28,0,41}, //50-){0,127,65,65,0,91}, //51-[{0,65,65,127,0,93}, //52-]{0,0,95,0,0,33}, //53-!{2,1,81,9,6,63}, //54-?{50,73,121,65,62,64}, //55-@{20,62,20,62,20,35}, //56-#40 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn {36,42,127,42,18,36}, //57-${35,19,8,100,98,37}, //58-%{4,2,1,2,4,94}, //59-^{54,73,85,34,80,38}, //60-&{2,4,8,16,32,92}, //61-\{0,0,127,0,0,124}, //62-|{0,0,0,0,0,32}, //63- };int matrix[128];int power;//-----------------------------------------------------------------void main() { int column=0,row=0,pos=0,i; char scan,ch; Interfacing(); Initialize(); for(i=0;i<128;i++) matrix[i]=63; for(;;) {Print_Column(column);Print_Row(row);Print_Matrix(matrix[pos]);Print_Code(matrix[pos]);window(5+column*2,2+row*2,5+column*2,2+row*2);if((scan=getch())==0) { ch=getch(); switch(ch) { case 59: //F1 Power(); break; case 60: //F2 if(power==1) Reset(); break; case 75: //Left Arrow if(power==1) { if(pos>0) pos--; if(column==0) { if(row>0)41 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn { column=16; row--; } else column=1; } column--; } break; case 77: //Right Arrow if(power==1) { if(pos<127) pos++; column++; if(column>15) { if(row<7) { column=0; row++; } else column=15; } } break; case 72: //Up Arrow if(power==1) { if(row>0) { pos=pos-16; row--; } } break; case 80: //Down Arrow if(power==1) { if(row<7) { pos=pos+16; row++; } } break; } // for switch(ch)42 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn } // for if((scan=getch())==0)else { ch=scan; switch(ch) { case 27: //ESC //Dua ra tin hieu tat mach ngoai (chan 17,bit3=1) outportb(ControlReg,8); // 8 = 00001000b return; case 13: //Enter if((row<7)&&(power==1)) { pos=pos+(16-column); row++; column=0; } break; default: if((isprint(ch))&&(power==1)) { ch=toupper(ch); for(i=0;i<64;i++) if(character[i][5]==ch) { Print_Character(column,row,ch); if(Out_Char(column,row,i)==0) { textbackground(LIGHTGRAY); textcolor(RED); window(4,25,30,25);clrscr(); cprintf("Khong gui duoc ky tu !"); } else { textbackground(LIGHTGRAY); window(4,25,30,25);clrscr(); } matrix[pos]=i; break; } if(pos<127) pos++; if(column==15) { if(row<7) { column=-1;43 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn row++; } else column=14; } column++; } // for if(isprint(ch)) break; } // for switch(ch) } // for else } }//-----------------------------------------------------------------void Initialize() { //Dong mach ngoai: chan 17,bit3=1 outportb(ControlReg,8); // 8 = 00001000b power=0; //Chua cho phep chuong trinh hoat dong textbackground(BLACK); textcolor(WHITE); window(16,20,18,20);clrscr(); printf("OFF"); }//-----------------------------------------------------------------void Power() { unsigned char result; if(power==0) {//Kiem tra xem chan 13 co o muc cao (bit4=1)result=inportb(StatusReg);if(result&16 !=0) // 16=10000b { //Neu bit4=1 (mach ngoai da duoc cap nguon) power=1; //Cho phep chuong trinh hoat dong textbackground(RED); textcolor(WHITE); window(16,20,18,20);clrscr(); printf("ON"); //Dua ra tin hieu dong mach ngoai (chan 17,bit3=0) //va thiet lap trang thai ban dau: dong bo dem 74244(chan //1,bit0=0),khong cho phep ghi vao RAM(chan 14,bit1=1) outportb(ControlReg,2); // 2 = 00000010b }else44 ThiÕt kÕ m¹ch logic sè PhÇn III: PhÇn mÒm ®iÒu khiÓn { textbackground(LIGHTGRAY); textcolor(RED); window(4,25,30,25);clrscr(); cprintf("Chua dong nguon cho mach!"); } } else {//Khong cho phep chuong trinh hoat dongpower=0;textbackground(BLACK);textcolor(WHITE);window(16,20,18,20);clrscr();printf("OFF");//Dua ra tin hieu tat mach ngoai (chan 17,bit3=1)outportb(ControlReg,8); // 8 = 00001000b } }//-----------------------------------------------------------------void Interfacing() { textmode(C40); textbackground(BLUE);window(0,0,40,25);clrscr(); textbackground(BLACK);window(5,2,37,25);clrscr(); textcolor(BLUE); textbackground(LIGHTGRAY);window(4,1,36,17);clrscr(); textcolor(LIGHTGRAY); textbackground(BLACK);window(5,2,35,17);clrscr(); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ "); cprintf("ÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄÅÄ"); cprintf(" ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ \r"); textbackground(LIGHTGRAY);window(5,17,35,17);clrscr(); window(19,18,36,25);clrscr();45 [...]... tự của hàng (từ 0 đến 7) con trỏ màn hình xuất hiện + Code (mã): chỉ của ký tự (theo bảng qui ớc của chúng tôi đã đợc đa ra chơng I của phần này) xuất hiện tại vị trí con trỏ màn hình Bên cạnh đóma trận 5x7 các ô vuông biểu thị các bit 1 (đèn LED sáng) và bit 0 (đèn LED tắt) của ma trận 5x7 LED ứng với ký tự hiển thị góc dới bên trái giao diện là bảng chỉ dẫn các phím chức năng: + F1... Thiết kế mạch logic số Phần III: Phần mềm điều khiển Phần chính của giao diện là một ma trận các ô gồm 8 hàng x 16 cột mô phỏng ma trận đèn quảng cáo của mạch thực Mỗi ô là nơi để hiển thị ký tự ngời dùng nhập vào góc dới bên phải giao diện là các thông số của ô chữ tại vị trí con trỏ màn hình xuất hiện gồm có: + Column (cột): chỉ số thứ tự của cột (từ 0 đến 15) con trỏ màn hình xuất hiện + Row... for(i=0;i . / /42 -<{0,96,96,0,0 ,46 }, / /43 -.{0,80 ,48 ,0,0 ,44 }, / /44 -,{0, 54, 54, 0,0,58}, / /45 -:{0,86, 54, 0,0,59}, / /46 -;{0,5,3,0,0,39}, / /47 -'{0,3,0,3,0, 34} ,. Phần III: Phần mềm điều khiển Phần chính của giao diện là một ma trận các ô gồm 8 hàng x 16 cột mô phỏng ma trận đèn quảng cáo của mạch thực.

Ngày đăng: 16/11/2012, 11:41

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan