Chương 11: THIẾT KẾ PHẦM MỀM PASCALGiới thiệu ngôn ngữ PASCAL: 1.Xuất xứ: Pascal là một ngôn ngữ lập trình cấp cao do giáo sư NIKLAUS WIRTH ở trường đại học kỹ thuật ZURICH Thụy Sĩ sáng
Trang 1Chương 11: THIẾT KẾ PHẦM MỀM PASCAL
Giới thiệu ngôn ngữ PASCAL:
1.Xuất xứ:
Pascal là một ngôn ngữ lập trình cấp cao do giáo sư NIKLAUS WIRTH ở trường đại học kỹ thuật ZURICH Thụy Sĩ sáng tạo vào năm 1970, và đặt tân là PASCAL để tưởng nhớ đến BLAISE PASCAL, nhà toán học, nhà triết học PHÁP ở thế kỷ 17 Người đã chế tạo ra kiểu máy tính cơ khí
PASCAL được coi là một ngôn ngữ đẹp nhất trong họ cổ điển, là một trong những ngôn ngữ mạnh, phổ biến nhất là nền tảng cho các môn lập trình khác, có nhiều tính ưu việt
Người ta đã nhận thấy rằng có thể lập trình một cách khoa học, logic cho một chương trình cụ thể nào đó dựa trên phân tích các thuật toán và suy diễn toán học
IV.3.2.các ưư điểmcủa ngôn ngữ PASCAL:
PASCAL có thể thực hiện một cách chính xác các cấu trúc dữ liệu phức tạp và các thuật toán phức tạp
PASCAL có tính mềm dẽo và tiện lợi trong việc chia nhỏ vấn đề ra giải quyết độc lập Có đủ các phép toán số học, logic,…Các kiểu dữ liệu trong PASCAL phong phú, thể hiện được nhiều kiểu dữ liệu từ đơn giản đến phức tạp
Ngôn ngữ PASCAL trở thành ngôn ngữ chính thống, ngôn ngữ phổ biến, được dùng nhiều trong trường học và các lĩnh vực khác
IV.3.3.Turbo pascal:
Từ ngôn ngữ PASCAL do giáo sư WIRTH sáng tác, các hãng phần mền đã phát triển thêm và tạo ra các chương trình dịch
ngôn ngữ PASCAL như:
- OS PASCAL:Được gọi là PASCAL chuẩn
- IBM PASCAL : Của hãng Microsoft
- Ưu điểm của TURBO PASCAL:
- Tiện cho việc dịch liên hoàn với việc soạn thảo, sửa
Trang 2chữa
- Tốc độ dịch nhanh
- Chương trình dịch gọn, đòi hỏi ít bộ nhớ, có nhiều
hàm,nhiều công cụ hỗ trợ
- Làm việc thoải mái, có hiệu quả Tính đối thoại người và máy phong phú
- Giải quyết hầu hết các bài toán trong kỹ thuật, thiết kế đồ họa, quản lý, xây dựng các phần mềm hệ thống
- Dễ dạy và học
- Luôn cải tiến mở rộng và phát triển không ngừng
Trang 3IV.4.Lưu đổ tổng quát mạch quang báo giao tiếp với máy tính:
KIT THI HÀNH CHƯƠNG TRÌNH QUANG BÁO
End
Trang 4IV.4.1.Lưu đồ đọc chuỗi và mã hoá:
Kiểmtra chuổi
End
Mã hóa
i:=i+1
Kiểm tra kết thúc chuổi
3 4
a,e,u,o 6,7,8
Kiểmtra chuổi
End
Mã hóa
i:=i+1
Kiểm tra kết thúc chuổi
3 4
a,e,u,o 6,7,8
A
A
A B
Kiểmtra chuổi
End
Mã hóa
i:=i+1
Kiểm tra kết thúc chuổi
3 4
a,e,u,o 6,7,8
A
A A
Trang 5Khoâng
daáu
Kieåmtra Chuoãi
Kieåm tra keát thuùc chuoãi
Y,I
1-5
Trang 8Lưu đồ gởi dữ liệu của máy tính
Trang 10; D7,D6,D5(6),D4(5),D3(4),D2(3),D1(DEN 2),D0(DEN 1) ;
Trang 11; -;
Trang 15KEYNOW: CALL RDKEY
LD D,AAND 80H
CP 80H
JR Z,FUNKEY
LD A,DAND 30H
CP 00H
JR NZ,DIDDLE
LD A,DCALL ROLL4CALL DISCOD
LD A,30H
JP CLRSCRFUNKEY: LD A,D
Trang 17LD H,LSRL HSRL HSRL HSRL H
LD A,LAND 0FH
LD L,A
NIPPLE THAP
DEC IXDEC B
LD IX,DISTBLCALL ADDAXPUSH BC
LD B,06LP1_0: LD A,(IX)
LD (IY),AINC IYINC IXDJNZ LP1_0POP BC
RET
; -;
Trang 20; CHUONG TRINH XOA DEN ;
; CHUONG TRINH NAY KHI GOI PHAI ;
; DAT VAO THANH GHI A GIA TRI ;
; TUONG UNG VOI DEN CAN XOA ;
Trang 21; -;CLRSCR: PUSH IX
PUSH DE
PUSH BC
LD IX,DISBUF
Trang 22; THAY DOI NOI DUNG O NHO ;
; XU LY PHIM MEM, LAN 1 LAY NOI ;
; DUNG O NHO, LAN 2 GIAM DIA CHI ;
; NHAN PHIM GO TANG DIA CHI ;
Trang 23; NHAP CHUOI CAN QUANG BAO ;
; CHUOI NAY CHUA TAI DIA CHI 2000H ;
; -;CALL RS164
LD A,01
LD (ROLQB),A
Trang 24LD (CH_FLG),A
LD A,0FFHCALL CLRSCR
LD B,03H
LD IX,DISBUF+79
LD A,38HLP011: LD (IX),A
DEC IXDJNZ LP011
LD A,7CH
LD (IX),ADEC IX
LD A,38H
LD (IX),ADEC IX
LD (DATAOUT),ACALL DLPUT
PUSH DEPUSH HL
LD A,00H
LD (DATAOUT),A ; TAT DEN DO PHIM
Trang 25LD (KEY_OUT),A
LD A,(KEY_IN)AND 01FH
CP 01FH
JR Z,LPQB002CALL GET0LPQB002:LD HL,LPQB_1
JR Z,PUTQBINC HL
; -; CHUONG TRINH LAY MA PHIM AN QUANG BAO ;
-;
JR LPW0 RWD0: SLA B
Trang 26SLA BSLA B
LD A,BAND 38H
CP 1FH
JR NZ,CLFD0
LD A,DRRCA
JR NC,NOKEY
JR LPC0CLFD0: LD B,00H
LD A,DCLCD0: RRCA
JR NC,RWCL0INC B
JR CLCD0RWCL0: LD A,B
Trang 27LD (KEY),A ; KEY CHUA MA CUA PHIM BI NHAN
01
LD (KEYFLG),ANOKEY: RET
KEYQB: CALL RDKEY
PUSH BCCALL ADDAXCALL ROLL80
LD HL,(ADISBUF)
LD B,06HLOOP2: LD A,(IX)
LD (IY),A
LD (HL),AINC IXINC HL
Trang 28INC IYDJNZ LOOP2
;
; -; CHUONG TRINH ROLL DU LIEU QUA 80 COT
;
;
Trang 29LD (IX),AINC IXDJNZ LOOP80
LD (ROLQB),APOP IX
POP BCRET
; -;
; BANG TRA MA TRAN CHU HOA ;
; -;DTBLH:DEFB 08H ;DAU CHAM HOI
Trang 35; BANG TRA MA TRAN CHU CO DAU ;
-;
Trang 36DEFB 00H ;PHIM XOA KY TUDEFB 20H
Trang 42ORG 0800H
; -;
; CHUONG TRINH QUANG BAO ;
; CHO CHU CHAY XUOI TU TRAI QUA PHAI ;
Trang 43LD (IX),ADEC IY
LD (ADATA),IYRET
LD A,00H
LD (VAO),ARET
ORG 0A00H
; -;
; CHUONG TRINH QUANG BAO ;
; CHO CHU CHAY XUOI TU PHAI QUA TRAI ;
; -;
LD A,0FFHCALL CLRSCR
Trang 44LD A,(ZEROPAS)
CP 01
JP Z,TZERODATACALL DATAT
RETDATAT: LD IX,DISBUF+79
LD (ADATA),IYRET
TZERODATA: LD A,(ZEROTIME)
INC A
CP 81
JR Z,TDATARESET
Trang 45LD (ZEROTIME),A
LD A,00
LD (IX),ARET
LD A,00H
LD (VAO),ARET
;
; -; CHUONG TRINH ROLL DU LIEU QUA 80 COT
;
; CHUONG TRINH NAY DUNG CHO QUANG BAO
;
;
PUSH IX
LD B,160
LD IX,DISBUFLQBP80: LD A,(IX+78)
LD (IX+79),ADEC IX
DJNZ LQBP80POP IX
POP BCRET
;
; -; CHUONG TRINH ROLL DU LIEU QUA 80 COT
;
; CHUONG TRINH NAY DUNG CHO QUANG BAO
Trang 46;
PUSH IX
LD B,80
LD IX,DISBUFLQBT80: LD A,(IX+1)
LD (IX),AINC IXDJNZ LQBT80POP IX
POP BCRETORG 0C00H
LD (SECOND),A
CP 60H
Trang 47JP NZ,RETCK
LD A,00H
LD (SECOND),A
LD A,(MINUTE)CALL TANG
RETDH: RET
LD B,AAND 0FH
CP 0AH
JP NZ,NO
LD A,BADD A,06H
Trang 49DATAIN EQU 6001HDATAOUT EQU 8000HKEY_IN EQU 6002HKEY_OUT EQU 6000HDIS_IO EQU 8003HCKOUT EQU 8001HSYS_SP EQU 3C02HMNPTR EQU 3CF2HZEROPAS EQU 3CF9HZEROTIME EQU 3CFCHKEY EQU 3D00HDISBUF EQU 3E00HHEXBUF EQU 3FD0HADISBUF EQU 3FDFHROLPAS EQU 3FE2H DATAAD EQU 3FE5H
KEYFLG EQU 3FEBHCH_FLG EQU 3FEEHDISPTR EQU 3FF1HDELAYMEM EQU 3FF4H
HOUR EQU 3FFAHMINUTE EQU 3FFCHSECOND EQU 3FFEHDELAYVAL EQU 0309HVAO EQU 8002H
; -;
; -;END
Trang 50($38,$44,$44,$44,$28,$00), {C} {16}
($3A,$45,$44,$44,$28,$00),
{1C} {17}
Trang 51($7c,$44,$44,$44,$38,$00), {D} {18}
($7C,$54,$54,$44,$38,$00),
{D9} {19}
($7c,$54,$54,$54,$44,$00), {E} {20}
($38,$44,$54,$54,$30,$00), {G} {24}
($7c,$10,$10,$10,$7c,$00), {H} {25}
($44,$44,$7c,$44,$44,$00), {I} {26}
($7c,$10,$28,$44,$00,$00), {K}
Trang 52($7c,$40,$40,$40,$40,$00), {L} {38}
($7c,$04,$18,$04,$7c,$00), {M} {39}
Trang 53($7c,$14,$34,$54,$5C,$00), {R} {63}
($08,$54,$54,$54,$20,$00), {S} {64}
($04,$04,$7c,$04,$04,$00), {T} {65}
($06,$05,$7C,$04,$04,$00),
{1T} {66}
($3c,$40,$40,$40,$3c,$00), {U} {67}
Trang 54($7C,$20,$10,$20,$7C,$00), {W} {80}
($44,$28,$10,$28,$44,$00), {X} {81}
($04,$08,$70,$08,$04,$00), {Y} {82}
($38,$44,$44,$44,$38,$00), {0} {88}
($50,$48,$7C,$40,$40,$00), {1} {89}
($48,$64,$54,$4C,$00,$00), {2} {90}
($44,$44,$54,$54,$28,$00), {3} {91}
($20,$30,$28,$24,$7C,$00), {4} {92}
($5C,$54,$54,$54,$74,$00), {5} {93}
($7C,$54,$54,$54,$74,$00), {6} {94}
($04,$44,$24,$14,$0C,$00), {7} {95}
Trang 55($7C,$54,$54,$54,$7C,$00), {8} {96}
($5C,$54,$54,$54,$7C,$00), {9} {97}
($00,$00,$00,$00,$00,$00), { } {98}
($40,$00,$00,$00,$00,$00), {.} {99}
($00,$10,$10,$10,$00,$00), {-} {100}
($08,$04,$54,$0C,$00,$00), {?} {101}
($00,$00,$5C,$00,$00,$00), {!} {102}
($00,$00,$28,$00,$00,$00), {:} {103}
($02,$01,$00,$00,$00,$00), {/} {104}
($01,$02,$00,$00,$00,$00), {\} {105}
($01,$03,$00,$00,$00,$00), {'} {106}
($02,$01,$02,$01,$00,$00), {~} {107}
Trang 59'4':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[92,k];
bat_tay2; end;
i:=i+2;
end;
'5':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[93,k];
bat_tay2; end;
i:=i+2;
end;
'6':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[94,k];
bat_tay2; end;
i:=i+2;
end;
'7':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[95,k];
bat_tay2; end;
i:=i+2;
Trang 60begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[2,k];
bat_tay2; end;
i:=i+2;
end;
'2':begin
for k:=1 to 6 do begin
Trang 62bat_tay1;
port[$378]:=chu[10,k];
bat_tay2; end;
bat_tay1;
port[$378]:=chu[9,k];
Trang 69end;
'O':case upcase(st[i+1]) of '1':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[50,k];
bat_tay2; end;
i:=i+2;
end;
'2':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[51,k];
bat_tay2; end;
i:=i+2;
end;
'3':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[52,k];
bat_tay2; end;
i:=i+2;
end;
'4':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[53,k];
bat_tay2;
Trang 70bat_tay1;
port[$378]:=chu[54,k];
bat_tay2; end;
i:=i+2;
end;
'6': case upcase(st[i+2]) of '5':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[56,k];
bat_tay2; end;
bat_tay1;
port[$378]:=chu[55,k];
bat_tay2; end;
i:=i+2;
end;
end;
'7': case upcase(st[i+2]) of '5':begin
for k:=1 to 6 do
Trang 71begin
bat_tay1;
port[$378]:=chu[58,k];
bat_tay2; end;
bat_tay1;
port[$378]:=chu[57,k];
bat_tay2; end;
Trang 72bat_tay1;
port[$378]:=chu[62,k];
bat_tay2; end;
i:=i+1;
end;
'R':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[63,k];
bat_tay2; end;
i:=i+1;
end;
'S':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[64,k];
bat_tay2; end;
i:=i+1;
end;
'T':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[65,k];
Trang 73for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[68,k];
bat_tay2; end;
i:=i+2;
end;
'2':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[69,k];
bat_tay2; end;
i:=i+2;
end;
'3':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[70,k];
bat_tay2; end;
i:=i+2;
end;
'4':begin
for k:=1 to 6 do begin
bat_tay1;
Trang 74
port[$378]:=chu[71,k];
bat_tay2; end;
i:=i+2;
end;
'5':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[72,k];
bat_tay2; end;
i:=i+2;
end;
'7': case upcase(st[i+2]) of '5':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[74,k];
bat_tay2; end;
Trang 75else
begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[67,k];
bat_tay2; end;
bat_tay1;
port[$378]:=chu[79,k];
bat_tay2; end;
i:=i+1;
end;
'W':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[80,k];
bat_tay2; end;
i:=i+1;
end;
'X':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[81,k];
bat_tay2;
Trang 76for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[108,k];
bat_tay2; end;
i:=i+2;
end;
'2':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[109,k];
bat_tay2; end;
i:=i+2;
end;
'3':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[110,k];
bat_tay2; end;
i:=i+2;
end;
'4':begin
for k:=1 to 6 do begin
bat_tay1;
Trang 77
port[$378]:=chu[111,k];
bat_tay2; end;
bat_tay1;
port[$378]:=chu[82,k];
bat_tay2; end;
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[11,k];
bat_tay2; end;
i:=i+2;
Trang 78end;
'C':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[17,k];
bat_tay2; end;
i:=i+2;
end;
'I':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[32,k];
bat_tay2; end;
i:=i+2;
end;
'M':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[40,k];
bat_tay2; end;
i:=i+2;
end;
'N':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[45,k];
bat_tay2; end;
Trang 79i:=i+2;
end;
'P':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[60,k];
bat_tay2; end;
i:=i+2;
end;
'T':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[66,k];
bat_tay2; end;
i:=i+2;
end;
'U':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[75,k];
bat_tay2; end;
i:=i+2;
end;
'Y':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[83,k];
bat_tay2;
Trang 80for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[12,k];
bat_tay2; end;
i:=i+2;
end;
'I':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[33,k];
bat_tay2; end;
i:=i+2;
end;
'M':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[41,k];
bat_tay2; end;
i:=i+2;
end;
'P':begin
for k:=1 to 6 do
Trang 81begin
bat_tay1;
port[$378]:=chu[61,k];
bat_tay2; end;
i:=i+2;
end;
'N':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[46,k];
bat_tay2; end;
i:=i+2
end;
'U':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[76,k];
bat_tay2; end;
i:=i+2;
end;
'Y':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[84,k];
bat_tay2; end;
i:=i+2;
end;
else;
Trang 82i:=i+1;
end;
'3':case upcase(st[i+1]) of 'A':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[13,k];
bat_tay2; end;
i:=i+2;
end;
'I':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[34,k];
bat_tay2; end;
i:=i+2;
end;
'M':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[42,k];
bat_tay2; end;
i:=i+2;
end;
'N':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[47,k];
Trang 83bat_tay2; end;
i:=i+2;
end;
'U':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[77,k];
bat_tay2; end;
i:=i+2;
end;
'Y':begin
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[85,k];
bat_tay2; end;
for k:=1 to 6 do begin
bat_tay1;
port[$378]:=chu[14,k];
bat_tay2; end;
i:=i+2;
end;
'I':begin