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 - Pdf 95

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ình
Chơ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 có 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 378h
Trạ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 0x37A
Thanh ghi dữ liệu có 8 bit (D
0
ữ D
7
) dùng để đa ra địa chỉ và mã 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 có địa chỉ cột (4 bit đầu, từ D
0
đến D
3
) và địa chỉ cột (3 bit tiếp theo, từ D
4
đến D
6

Hệ 2
A 0
000000
X 23
010111
; 46
101110
B 1
000001
Y 24
011000
' 47
101111
C 2
000010
Z 25
011001
" 48
110000
D 3
000011
0 26
011010
( 49
110001
E 4
000100
1 27
011011
) 50

110111
K 10
001010
7 33
100001
# 56
111000
L 11
001011
8 34
100010
$ 57
111001
M 12
001100
9 35
100011
% 58
111010
N 13
001101
+ 36
100100
^ 59
111011
36
Thiết kế mạch logic số Phần III: Phần mềm điều khiển
O 14
001110
- 37

U 20
010100
. 43
101011
V 21
010101
, 44
101100
W 22
010110
: 45
101101
Thanh ghi trạng thái có 8 bit (S
0
ữ S
7
), 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ân
Bit tơng ứng
trên thanh ghi
trạng thái
Chức năng
10 S
6
Mạch ngoài gửi mức logic 1 để thông báo là đang
đọc RAM. Khi nó có mức logic 0 thì có nghĩa là
RAM đã đợc đọc xong và máy tính có thể ghi dữ
liệu lên RAM.
13 S

điều khiển
Chức năng
1 C
0
Chơ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 C
1
Sau 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 C
3
Khi 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>

{0,65,127,65,0,73}, // 8-I
{32,64,65,63,1,74}, // 9-J
39
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

};
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)


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status