You are on page 1of 23

- 4 LEDs

- 1 = On , 0 = Off
- Port B: x x x x 4 3 2 1
- Example: Port B = 00000001B (means 1st LED is On)

- 7 Segment, from a – g
- 0 = On , 1 = Off
- Port A: x g f e d c b a
- x = 1 always
- Example: Port A = 10100100B
(means digit 2 is displayed)
;;*/ { (Red (bit_4) , Yellow (bit_3) , Green (bit_2) ,Red (bit_1) }
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 19H ; PORT A ADDRESS


PPIB EQU 1BH ; PORT B ADDRESS
PPIC EQU 1DH ; PORT C ADDRESS
PPIC_C EQU 1FH ; CONTROL WORD

ORG 1000H
;SET CONTROL WORD = 10000000 = 80H (means all ports are outputs)
MOV AL,10000000B
OUT PPIC_C,AL

;CLEAR PORT A
MOV AL,11111111B
OUT PPIA,AL Don’t need to this
;CLEAR PORT C just to clear port A &C
MOV AL,00000000B
OUT PPIC,AL

L1: MOV AL,00000001B ;SET PORT B = 00000001 (1st LED is ON)


L2: OUT PPIB,AL
CALL DELAY
SHL AL,1 ;SO NEXT LED WILL BE ON
CMP AL ,08H ;When become 0000 1000B=> 08H
;‫حتة اللون البرتقالي ميشتغل يضل طافي يوصل الة ويرجع يشغل االحمر‬
JZ L1 ;if AL=08 JMP TO L1
JMP L2 ;ELSE JMP TO L2
DELAY: MOV CX,0FFFFH
CONT: LOOP CONT ;firstly decrement CX then compare if CX !=0 jmp
RET ;else if (CX = 0) then end the CALL and return to main program
CODE ENDS
END
;; { dp . , g , f , e , d , c , b , a }

CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 19H ; PORT A ADDRESS


PPIB EQU 1BH ; PORT B ADDRESS
PPIC EQU 1DH ; PORT C ADDRESS
PPIC_C EQU 1FH ; CONTROL WORD

ORG 1000H All this


;SET CONTROL WORD = 10000000 = 80H (means all ports are outputs) Same as
MOV AL,10000000B Lecture 1
OUT PPIC_C,AL

L1: MOV SI , OFFSET DATA ; Set beginning of array index

L2: MOV AL,[SI] ; Get number from array by index


CMP AL ,00H ;Because The last number of array is 00h
JZ L1 ;if equal to (00h) jmp to L1(retuen to first index)

OUT PPIA,AL ; Set that number to 7-Segment through Port A


CALL DELAY
INC SI ; SI++ so we can get next array element
JMP L2 ; repeat the whole program from L2
DELAY:
MOV CX,0 ;SET DELAY LENGTH
CONT:
LOOP CONT ;firstly decrement CX then compare if CX !=0 jmp to count
So the first stap CX will be (0ffff H) because firstly Decrement CX

RET ;else (CX = 0) then end the CALL and return to main program

DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H

CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 19H ; PORT A ADDRESS


PPIB EQU 1BH ; PORT B ADDRESS
PPIC EQU 1DH ; PORT C ADDRESS
PPIC_C EQU 1FH ; CONTROL WORD

ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL

L1: MOV SI , OFFSET DATA

L2: INC SI ; TO START FROM Odd Numbers (1-3-5-7-9-00L3)


MOV AL,[SI]
CMP AL ,00H
JZ L3 ;if equal to (00h) jmp to L3(Start Even Numbers)
OUT PPIA,AL
CALL DELAY
INC SI
JMP L2 ; repeat the whole program from L2

L3: MOV SI , OFFSET DATA


L4: MOV AL,[SI]
CMP AL ,00H
JZ L1 ;if equal to (00h) jmp to L2(Return to Odd numbers)
OUT PPIA,AL
CALL DELAY
INC SI
INC SI ;( 0-2-4-6-8-00  L2 )
JMP L4

DELAY:
MOV CX,0 ;SET DELAY LENGTH
CONT:
LOOP CONT ;firstly decrement CX then compare if CX !=0 jmp to count
So the first stap CX will be (0ffff H) because firstly Decrement CX

RET ;else (CX = 0) then end the CALL and return to main program

DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H

CODE ENDS
END
c0 c1 c2 c3 c4 c5 c6 c7
r7
r6
r5
r4
r3
r2
r1
r0

- 8 rows and 8 columns


- Columns just enable LEDs of the matrix without turning
them on, so they can be turned On or Off with green or
red color by Rows
- For Columns: 1 = On , 0 = Off
- For Rows: 0 = On , 1 = Off
- Port C (Columns): c7 c6 c5 c4 c3 c2 c1 c0
- Port A (Green Rows): r7 r6 r5 r4 r3 r2 r1 r0
- Port B (Red Rows): r7 r6 r5 r4 r3 r2 r1 r0
- Example: Port C = 00100100B (means columns 2 and 5 are
on)
- Example: Port A = 01111101B (means rows 1 and 7 are on
with green)
Example:
Columns Green rows Red rows
c7 c6 c5 c4 c3 c2 c1 r7 r6 r5 r4 r3 r2 r1 r0 r7 r6 r5 r4 r3 r2 r1 r0

Port C = 00001011B , Port A = 01111101B, Port B =


10111101B
Means:
c0,c1,c3 are On
r7 is On (Green)
r6 is On (Red)
r1 is On (both Green and Red = Yellow)
c0 c1 c2 c3 c4 c5 c6 c7
r7
r6
r5
r4
r3
r2
r1
r0
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 18H ; PORT A ADDRESS (green row)


PPIB EQU 1AH ; PORT B ADDRESS (red row)
PPIC EQU 1CH ; PORT C ADDRESS (common anode, column)
PPIC_C EQU 1EH ; CONTROL WORD

ORG 1000H

MOV AL,10000000B
OUT PPIC_C,AL

MOV AL,11111111B ;Enable all Column (port C)


OUT PPIC,AL

MOV AL,11111111B ;CLEAR PORT B (All Red rows are off)


OUT PPIB,AL
MOV AL,11111110B ; set initial value (only row(0) is ON) (PORT A so Green led is on)
OUT PPIA,AL

;if you want to displaying the row(2) of the matrix with red LEDs in addition
row(0) with Green LEDs

MOV AL,11111110B ; set initial value (only row(2) is ON) (PORT B so Red led is on)
OUT PPIB,AL

CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 18H ; PORT A ADDRESS (green row)


PPIB EQU 1AH ; PORT B ADDRESS (red row)
PPIC EQU 1CH ; PORT C ADDRESS (common anode, column)
PPIC_C EQU 1EH ; CONTROL WORD

ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL

;CLEAR PORT A (All GREEN rows are off)


MOV AL,11111111B ;don’t need this
OUT PPIA,AL ;just to clear port A

;Enable All Columns (PORT C)


MOV AL,11111111B
OUT PPIC,AL

MOV AL,11111110B ; set initial value (only row(0) is ON)


L1:
OUT PPIB,AL ; Set Port B (RED rows)
CALL DELAY
ROL AL,1 ;So next row will be ON (ROL will make from Bottom to Top)
JMP L1
DELAY:
MOV CX,0FFFFH
CONT:
LOOP CONT
RET
CODE ENDS
END
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL

;CLEAR PORT A (All GREEN rows are off)


MOV AL,11111111B ;don’t need this
OUT PPIA,AL ;just to clear port A

;Enable All Columns (PORT C)


MOV AL,11111111B
OUT PPIC,AL
L1:
MOV AL,11111100B ; set initial value (only row(0) is ON)
L2:
OUT PPIB,AL ; Set Port B (RED rows)
CALL DELAY
ROL AL,1 ;So next row will be ON (ROL will make from Bottom to Top)
CMP AL,3FH
JE L3
JMP L2
L3: OUT PPIB,AL
ROR AL,1
CALL DELAY
CMP AL,0FCH
JE L2
JMP L3

DELAY:
MOV CX,0000FH
CONT:
LOOP
RET
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 18H ; PORT A ADDRESS (green row)


PPIB EQU 1AH ; PORT B ADDRESS (red row)
PPIC EQU 1CH ; PORT C ADDRESS (common anode, column)
PPIC_C EQU 1EH ; CONTROL WORD

ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL

;CLEAR PORT A (All GREEN rows are off)


MOV AL,11111111B ;don’t need this
OUT PPIA,AL ;just to clear port A

;Enable All RED Rows (PORT B)


MOV AL,00000000B
OUT PPIB,AL

MOV AL,00000001B ; set initial value (only first column is ON)


L1:
OUT PPIC,AL ; Set Port C (columns)
CALL DELAY
ROL AL,1 ;So next column will be ON
JMP L1

DELAY:
MOV CX,0FFFFH ;SET DELAY LENGTH
CONT: LOOP CONT
RET
CODE ENDS
END
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 18H


PPIB EQU 1AH
PPIC EQU 1CH
PPIC_C EQU 1EH

ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
L1: MOV BL,00000001B ; FOR COLUMNS (initial value)
MOV SI , OFFSET ARRAY
L2:
MOV AL,BL
OUT PPIC, AL ;Set Port C (columns)
ROL BL ,1 ;So next column will be ON

MOV AL,[SI] ; Get byte from array by index


CMP AL,0
JZ L1

OUT PPIA, AL ; Set that byte to GREEN rows through Port A


CALL DELAY
INC SI ; SI++ so we can get next array element
JMP L2

DELAY:
MOV CX,100H
CONT: LOOP CONT
RET
;To display letter ‘A’ (depending on the drawing below)
ARRAY
DB 11111111B,
11000000B,
10110111B ,
01110111B,
01110111B,
10110111B,
11000000B,
11111111B,
00H ;JUST TO COMPER

CODE ENDS
END

Note: If we want to display any letter or shape then only the array will be different, all other
codes in the program will still the same as above.
- Level meter of 10 LEDs
- LEDs are on when we give HEX value equal or more than
their threshold value according to this table:
LED HEX values
1 00-05H
2 05-10H
3 10-15H
4 15-20H
5 20-25H
6 25-30H
7 30-35H
8 35-40H
9 40-45H
10 45-50H

- Port C: HEX value


- Example: Port C = 33H
(means 1,2,3,4,5 and 6 LEDs are turned on)
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 19H ; PORT A ADDRESS


PPIB EQU 1BH ; PORT B ADDRESS
PPIC EQU 1DH ; PORT C ADDRESS
PPIC_C EQU 1FH ; CONTROL WORD
ORG 1000H
;SET CONTROL WORD = 10000000 = 80H (means all ports are outputs)
MOV AL,10000000B
OUT PPIC_C,AL

L1:MOV AL,00H ; Set initial value


L2:
OUT PPIC,AL
CALL DELAY ;CALL DELAY TO MAKE DELAY
INC AL
CMP AL,50H
JZ L1 ;IF (AL = 50) then REPEAT FROM L1
JMP L2

DELAY:
MOV CX,00FFFH ;SET DELAY LENGTH
CONT:
LOOP CONT
CODE ENDS
END

Note:
When we use CMP AL,50H means When we use fewer value than 50H like 20H or 10H
we will reach top of level meter: then we will reach half or less the level meter:
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

PPIA EQU 19H ; PORT A ADDRESS


PPIB EQU 1BH ; PORT B ADDRESS
PPIC EQU 1DH ; PORT C ADDRESS
PPIC_C EQU 1FH ; CONTROL WORD
ORG 1000H

MOV AL,10000000B
OUT PPIC_C,AL

MOV AL,00H ; Set initial value


L1:
OUT PPIC,AL
CALL DELAY
INC AL
CMP AL,50H
JZ L2 ;IF (AL = 50) then REPEAT FROM L1
JMP L1

L2:
OUT PPIC ,AL
CALL DELAY
DEC AL
CMP AL ,00H
JZ L1
JMP L2

DELAY:
MOV CX,00FFFH ;SET DELAY LENGTH
CONT:
LOOP CONT
CODE ENDS
END
‫‪CODE SEGMENT‬‬
‫‪ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE‬‬
‫;‬
‫‪SPK‬‬ ‫‪EQU 17H‬‬
‫‪PER‬‬ ‫‪EQU‬‬ ‫‪0CH‬‬ ‫‪;OR‬‬ ‫‪0E‬‬ ‫طول الفترة لضهور كل صوت (كل تردد)وهية ثابتة لكل تردد نفس المدة‬

‫;‬

‫‪ORG‬‬ ‫‪1000H‬‬

‫‪L1:‬‬ ‫‪MOV‬‬ ‫‪SI ,‬‬ ‫‪OFFSET FREQ‬‬

‫‪L2:‬‬ ‫‪MOV‬‬ ‫]‪DH , [SI‬‬ ‫موقع اول تردد;‬

‫‪INC‬‬ ‫‪DH‬‬

‫‪JZ‬‬ ‫‪L1‬‬ ‫‪;just to check‬‬ ‫اذا خلصت وصلت لالخير ارجع عيد من البداية واخذ او تردد ;‬

‫‪DEC‬‬ ‫‪DH‬‬ ‫‪;after check‬‬ ‫ورة ماجيكت خلص ارجع للعنصر االصلي ;‬

‫;‬

‫‪MOV‬‬ ‫‪DL , PER‬‬ ‫المدة الخاصة بكل تردد حولناهة هنا;‬

‫;‬

‫‪MOV‬‬ ‫‪AL ,0FFH‬‬ ‫هذا الرقم يتكرر بمقدار كل تردد موجود وعلى مدى المدة المعرفها فوك ;‬

‫‪L3:‬‬

‫‪OUT‬‬ ‫‪SPK ,AL‬‬

‫‪MOV‬‬ ‫‪CL,DH‬‬ ‫هنا خليت التردد من المصفوفة للسي ال ;‬

‫‪;;AND CX ,00FFH‬‬ ‫هنا سوينة دلي بقدر قيمة كل عنصر يعني دلي متغير حسب قيمة التردد واكدر الغيها همين مالها داعي ;‬
‫اكتفي بالخطوة الي قبلها‬
‫‪LOOP $‬‬ ‫هنا ميحتاج اكلة روحلي لفالن مكان ونقص السي اكس هوة راح يشوف وين السي اكس وينقصها ;‬

‫‪XOR‬‬ ‫‪AL, 01H‬‬ ‫هنا راح تضل تتغير بين قيمتين كل شوي حتة الصوت يصعد وينزل اكدر همين ماستخدمها اطلع صوت ثابت;‬

‫‪DEC‬‬ ‫‪DL‬‬ ‫لحد ماتخلص المدة الزمنية مال كل تردد من تخلص امشي على العنصر الثاني بالمصفوفة ;‬

‫‪JNZ‬‬ ‫‪L3‬‬

‫‪INC‬‬ ‫‪SI‬‬ ‫من يخلص البريود المدة الزمنية مال هذا التردد امشي علة الثاني وارجع عيد;‬

‫‪JMP‬‬ ‫‪L2‬‬

‫;‬
FREQ: ;Each number has special sound

DB 25H

DB 27H

DB 29H

DB 2CH

DB 2EH

DB 31H

DB 34H

DB 37H

DB 3BH

DB 3EH

DB 42H

DB 46H

DB 4AH

DB 4FH

DB 54H

DB 59H

DB 5EH

DB 64H

DB 6AH

DB 70H

DB 77H

DB 7EH

DB 85H

DB 0FFH

CODE ENDS

END
CODE SEGMENT

ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE

SPK EQU 17H


PER EQU 0CH

PPIC EQU 1DH ; PORT C ADDRESS

PPIC_C EQU 1FH ; CONTROL WORD

ORG 1000H

MOV AL,10000000B

OUT PPIC_C,AL

L1: MOV AL,00H

L2: OUT PPIC,AL

CALL DELAY

INC AL

CMP AL,50H

JZ L3

JMP L2

DELAY:

MOV CX,00FFFH

CONT:

LOOP CONT

;;;;;;;;;;;;;;;;;;;;;;;;;; Sound ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

L3: MOV SI , OFFSET FREQ

L4: MOV DH , [SI]

INC DH

JZ L1 ; ‫اذا خلصت المصفوفة يعني خلص الصوت ارجعلي للخزان ابدة من الصفر‬

DEC DH ;‫اذا ال كمل ارجع للعنصر االصلي الن بعدة مواصل لالخير‬

;
‫‪MOV‬‬ ‫‪DL , PER‬‬ ‫لمدة الزمنية لكل تردد وهية متساوية;‬

‫;‬

‫‪MOV‬‬ ‫‪AL ,0FFH‬‬

‫‪L5:‬‬

‫‪OUT‬‬ ‫‪SPK ,AL‬‬

‫‪MOV‬‬ ‫‪CL,DH‬‬ ‫قيمة التردد الحالي حولناهة لل سي ال حتة نسوي دلي بمقدارالتردد;‬

‫هنا كأنما لوب طولة نفس طول قيمة التردد مثل الموجات التردد يصيرموجة متغيرة صاعدة ونازلة مو خط ثابت ;‬

‫‪LOOP $‬‬ ‫حتة يسوي دلي طولة متغيرحسب قيمة كل تردد;‬

‫‪DEC‬‬ ‫‪DL‬‬

‫‪JNZ‬‬ ‫‪L5‬‬

‫‪INC‬‬ ‫‪SI‬‬

‫‪JMP‬‬ ‫‪L4‬‬ ‫ارجع امشي على التردد التالي ماطول خلصت الفترة الزمنية مال التردد الحالي;;‬

‫;‬

‫‪FREQ:‬‬

‫‪DB‬‬ ‫‪25H‬‬

‫‪DB‬‬ ‫‪37H‬‬

‫‪DB‬‬ ‫‪49H‬‬

‫‪DB‬‬ ‫‪5CH‬‬

‫‪DB‬‬ ‫‪6EH‬‬

‫‪DB‬‬ ‫‪0FFH‬‬

‫‪CODE ENDS‬‬

‫‪END‬‬
CODE SEGMENT
ASSUME CS:CODE,DS:CODE,ES:CODE,SS:CODE
PPIA EQU 19H
PPIB EQU 1BH
PPIC EQU 1DH
PPIC_C EQU 1FH
ORG 1000H
MOV AL,10000000B
OUT PPIC_C,AL
;;;;;;;;;;;
L1: MOV AL,00H
MOV SI , OFFSET DATA
L2:
OUT PPIC,AL
MOV BL ,AL ;‫حتة اخزنها ارجعلها مرة لخ وية كل لوب‬
MOV AL ,[SI]
OUT PPIA,AL
INC SI
CALL DELAY
MOV AL ,BL ; ‫رجعنة قيمة الخزان الي ضميناهة‬
ADD AL,05H
CMP AL,55H
JZ L1
JMP L2
DELAY:
MOV CX,0
CONT: LOOP CONT
RET

DATA:
DB 11000000B ;0
DB 11111001B ;1
DB 10100100B ;2
DB 10110000B ;3
DB 10011001B ;4
DB 10010010B ;5
DB 10000010B ;6
DB 11111000B ;7
DB 10000000B ;8
DB 10010000B ;9
DB 00H

CODE ENDS
END

You might also like