Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 15 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
15
Dung lượng
387,69 KB
Nội dung
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 ngôn ngữ C, chạy môi trờng DOS Yêu cầu chơng trình phải có giao diện thân thiện, giúp ngời dùng dễ dàng dùng máy tính để nhập ký tự cần hiển thị vị trí mong muốn ma trận LED bên Khi thực hiện, chơng trình phải thờng xuyên trao đổi liệu với mạch qua cổng song song cách truy nhập vào ba ghi cổng song song là: ghi liệu, ghi trạng thái, ghi điều khiển Chơng trình mặc định lấy cổng song song LPT1 với địa ghi đợc cho (tính hệ đếm 16) nh sau: Thanh ghi Dữ liệu Trạng thái Điều khiển Địa 378h 379h 37Ah Để thuận tiện, chơng trình ta dùng lệnh #define để định nghĩa cho c¸c ghi: #define DataReg 0x378 #define StatusReg 0x379 #define ControlReg 0x37A Thanh ghi d÷ liƯu cã bit (D0 ữ D7) dùng để đa địa mà ký tự cần ghi vào RAM mạch Sử dụng lệnh: outportb(DataReg, liệu) Địa ký tự cần ghi vào RAM xác định vị trí ký tự bảng quảng cáo bên ngoài, gồm có địa cột (4 bit đầu, từ D0 đến D3) địa cột (3 bit tiếp theo, từ D4 đến D6), tức cần bit địa D0 ữ D6, bit thứ D7 không dùng Gọi column địa cột row địa hàng ký tự cần hiển thị địa ký tự RAM add đợc tính nh sau: row {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-# {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; // 40 Thiết kế mạch logic số Phần III: Phần mềm điều khiÓn void main() { int column=0,row=0,pos=0,i; char scan,ch; Interfacing(); Initialize(); for(i=0;i0) pos ; if(column==0) { if(row>0) { column=16; row ; } else column=1; } column ; } break; case 77: //Right Arrow if(power==1) { if(pos15) { if(row0) { pos=pos-16; row ; } } break; case 80: //Down Arrow if(power==1) { if(row