0% found this document useful (0 votes)
36 views42 pages

Thí Nghiệm 1: Bài Tn3

The document contains 4 experiments testing LCD display and ADC functions on a microcontroller: 1. The first experiment displays "HELLO WORLD" on the LCD and modifies the code to display a student's name. 2. The second experiment positions text at different locations on the LCD using coordinates. 3. The third experiment reads the ADC and displays the value as an ASCII character on the LCD. 4. The fourth experiment performs calculations on ADC values and displays the results on the LCD.

Uploaded by

Nhật Duy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views42 pages

Thí Nghiệm 1: Bài Tn3

The document contains 4 experiments testing LCD display and ADC functions on a microcontroller: 1. The first experiment displays "HELLO WORLD" on the LCD and modifies the code to display a student's name. 2. The second experiment positions text at different locations on the LCD using coordinates. 3. The third experiment reads the ADC and displays the value as an ASCII character on the LCD. 4. The fourth experiment performs calculations on ADC values and displays the results on the LCD.

Uploaded by

Nhật Duy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 42

BÀI TN3

THÍ NGHIỆM 1

- Chạy chương trình mẫu LCD.A51, trên màn hình LCD hiển thị " HELLO WORLD! "

- Sửa chương trình hiển thị tên sinh viên lên hàng đầu

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2000H

MAIN:

MOV @R0, 30H

MOV DPTR, #LCDADDR

ACALL CLEAR

ACALL INIT_LCD

ACALL DISPLAYSTRING

SJMP $

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET
CLEAR:

MOV A, #01H

ACALLWRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALL WAIT_LCD

RET

DISPLAYSTRING:

MOV A,#0

LOOP:

MOV DPTR, #MESSAGE

MOV R0,A

MOVC A,@A+DPTR
JZ EXIT

ACALL WRITETEXT

MOV A,R0

INC A

DJNZ B, LOOP

EXIT:

RET

WAIT_LCD:

MOV R6,#10

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

MESSAGE:

DB "NGUYENVANNHATDUY",0

END

THÍ NGHIỆM 2:

2.1

GOTOXY:

MOV A,R0

CJNE A,#01H,HANG2

MOV A,R1

ADD A,#80H

LCALL WRITECOM
SJMP KT

HANG2:

MOV A,#R1

ADD A,#0C0H

CALL WRITECOM

KT:

RET

2.2

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2001H

MAIN:

MOV @R0,30H

MOV DPTR, #LCDADDR

ACALL CLEAR

ACALL INIT_LCD

MOV R0,#2D

MOV R1,#5D

ACALL GOTOXY

ACALL DISPLAYSTRING2

MOV R0,#1D

MOV R1,#4D

ACALL GOTOXY

ACALL DISPLAYSTRING1
SJMP $

GOTOXY:

MOV A,R0

CJNE A,#01H,HANG2

MOV A,R1

ADD A,#80H

LCALL WRITECOM

SJMP KT

HANG2:

MOV A,#R1

ADD A,#0C0H

CALL WRITECOM

KT:

RET

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET
CLEAR:

MOV A, #01H

ACALLWRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

DISPLAYSTRING1:

MOV A,#0

LOOP:

MOV DPTR, #MESSAGE1

MOV R0,A

MOVC A,@A+DPTR
JZ EXIT

ACALL WRITETEXT

MOV A,R0

INC A

DJNZ B, LOOP

EXIT:

RET

DISPLAYSTRING2:

MOV A,#0

LOOP2:

MOV DPTR, #MESSAGE2

MOV R0,A

MOVC A,@A+DPTR

JZ EXIT

ACALL WRITETEXT

MOV A,R0

INC A

DJNZ B, LOOP2

EXIT:

RET

WAIT_LCD:

MOV R6,#250

DL1:

MOV R7, #250

DJNZ R7, $
DJNZ R6,DL1

RET

MESSAGE1:

DB "HELLO WORLD!",0

MESSAGE1:

DB "HELLO WORLD!",0

END

THÍ NGHIỆM 3:

READADC:

MOV DPTR,#4000H

MOVX @DPTR,A

LCALL WAIT

MOVX A,@DPTR

MOV P1,A

RET

WAIT:

MOV TMOD,#01H

MOV TH0,#HIGH(-100)

MOV TL0,#LOW(-100)

SETB TR0

JNB TF0,$

CLR TF0

CLR TR0

RET
YUUUUUU

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2000H

MAIN:

MOV R2,#8H

MOV @R0,30H

MOV DPTR, #LCDADDR

ACALLCLEAR

ACALLINIT_LCD

LCALL READADC

LOOP:

ANL A,#01H

ADD A,#30H

LCALL WRITETEXT

MOV A,R1

RR A

MOV R1,A

DJNZ R2,LOOP

ACALL CLEAR

SJMP 2000H
READADC:

MOV DPTR,#4000H

MOVX @DPTR,A

LCALL WAIT

MOVX A,@DPTR

MOV P1,A

RET

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET

CLEAR:

MOV A, #01H

ACALLWRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS
MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WAIT_LCD:

MOV R6,#250

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

MESSAGE:

DB "HELLO WORLD!",0

END
THÍ NGHIỆM 4

CALADC:

MOV B,#51H

DIV AB

MOV R0,A

MOV A,B

MOV B,#2D

MUL AB

MOV R1,A

RET

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2000H

MAIN:

MOV @R0,30H

MOV DPTR, #LCDADDR

ACALLCLEAR

ACALLINIT_LCD

LCALL CALADC

MOV A,R0

ADD A,#30

LCALL WRITETEXT
MOV A,#02EH

LCALL WRITETEXT

MOV A,R1

MOV B,#10D

DIV AB

ADD A,#30H

LCALL WRITETEXT

MOV A,B

ADD A,#30H

LCALL WRITETEXT

MOV A,#56H

LCALL WRITETEXT

SJMP MAIN

READADC:

MOV DPTR,#4000H

MOVX @DPTR,A

LCALL WAIT

MOVX A,@DPTR

MOV P1,A

RET

DELAY100US:

MOV TMOD,#01H

MOV TH0,#HIGH(-100)

MOV TL0,#LOW(-100)

SETB TR0
JNB TF0,$

CLR TF0

CLR TR0

RET

CALADC:

MOV B,#51H

DIV AB

MOV R0,A

MOV A,B

MOV B,#2D

MUL AB

MOV R1,A

RET

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET

CLEAR:

MOV A, #01H

ACALLWRITECOM

RET
WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

DISPLAYSTRING:

MOV B,#8

MOV A,#0

LOOP:

MOV DPTR, #MESSAGE

MOV R0,A

MOVC A,@A+DPTR

JZ EXIT

ACALLWRITETEXT

MOV A,R0
INC A

DJNZ B, LOOP

EXIT:

RET

WAIT_LCD:

MOV R6,#250

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

MESSAGE:

DB "Voltage: ",0

END

BÀI THÍ NGHIỆM 4:

THÍ NGHIỆM 1:

ORG 2000H

MOV TMOD,#01H

MAIN:

CPL P1.0

LCALL DELAY500US

SJMP MAIN

DELAY500US:

MOV TH0,#HIGH(-461)

MOV TL0,#LOW(-461)

SETB TR0
JNB TF0,$

CLR TF0

CLR TR0

RET

END

THÍ NGHIỆM 2:

ORG 2000H

MOV TMOD,#02H

MOV TH0,#-250

SETB TR0

MAIN:

MOV R7,#20

L1:

MOV R6,#100

L2:

JNB TF0,$

CLR TF0

DJNZ R6,L2

DJNZ R7,L1

CPL P1.0

SJMP MAIN

END
THÍ NGHIỆM 3:

CODE:

ORG 2000H

MOV TMOD,#20H

MOV TH1,#0FDH

MOV PCON,#80H

MOV SCON,#42H

SETB TR1

MOV R1,#00H

MOV DPTR,#TABLE

LOOP:

JB P1.0,LOOP

LCALL XULY

SJMP LOOP

XULY:

MOV A,R1

MOVC A,@A+DPTR

CJNE A,#00H,TT

MOV R1,#00H

SJMP KT

TT:

INC R1

SJMP PHAT

KT: RET
PHAT:

JNB TI,$

CLR TI

MOV SBUF,A

RET

TABLE: DB "HELLO,WORLD",0

END

THÍ NGHIỆM 4:

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2000H

MAIN:

MOV @R0,30H

MOV DPTR,#LCDADDR

LCALL CLEAR

LCALL INIT_LCD

MOV TMOD,#20H

MOV TH1,#0FDH

MOV SCON,#52H

SETB TR1

LAP:

LCALL THU

LCALL WRITETEXT

LCALL PHAT
SJMP LAP

THU:

JNB RI,$

CLR RI

MOV A,SBUF

RET

PHAT:

JNB TI,$

CLR TI

MOV SBUF,A

RET

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET

CLEAR:

MOV A, #01H

ACALLWRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E
CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WAIT_LCD:

MOV R6,#250

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET

END
THÍ NGHIỆM 5:

THÍ NGHIỆM 4:

LCD_E BIT P3.3

LCD_RS BIT P3.5

LCDADDR EQU 6000H

ORG 2000H

MAIN:

MOV @R0,30H

MOV DPTR,#LCDADDR

LCALL CLEAR

LCALL INIT_LCD

MOV TMOD,#20H

MOV TH1,#0FDH

MOV SCON,#52H

MOV TH1,#HIGH(-12)

SETB TR1

CLR P1.1

LAP:

LCALL THU

CJNE A,#0DH,KT1

JB P1.1,NHAYLEN

MOV A,#0C0H

LCALL WRITETEXT

SETB P1.1

SJMP KT1
NHAYLEN:

LCALL CLEAR

CLR P1.1

KT1:

CJNE A,#1BH,KT2

MOV A,#01H

LCALL WRITECOM

KT2:

CJNE A,#08H, KTCHU

MOV A,#10H

LCALL WRITECOM

MOV A,20H

LCALL WRITETEXT

MOV A,#10H

LCALL WRITECOM

KTCHU:

CJNE A,#64D,TEST1

TEST1: JC STOP

CJNE A,#91D,TEST2

TEST2: JC RUN

SJMP TEST3

TEST3:

CJNE A,#96D,TEST4

TEST4: JC STOP

CJNE A,#123D,TEST5

TEST5: JNC STOP


SJMP RUN

RUN:

LCALL WRITETEXT

LCALL PHAT

STOP:

SJMP LAP

THU:

JNB RI,$

CLR RI

MOV A,SBUF

RET

PHAT:

JNB TI,$

CLR TI

MOV SBUF,A

RET

INIT_LCD:

MOV A, #38H

ACALLWRITECOM

MOV A, #0EH

ACALLWRITECOM

MOV A, #06H

ACALLWRITECOM

RET

CLEAR:

MOV A, #01H
ACALLWRITECOM

RET

WRITECOM:

MOV DPTR, #LCDADDR

SETB LCD_E

CLR LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WRITETEXT:

MOV DPTR, #LCDADDR

SETB LCD_E

SETB LCD_RS

MOVX @DPTR, A

CLR LCD_E

ACALLWAIT_LCD

RET

WAIT_LCD:

MOV R6,#250

DL1:

MOV R7, #250

DJNZ R7, $

DJNZ R6,DL1

RET
END

BÀI THÍ NGHIỆM 5:

THÍ NGHIỆM 1:

ORG 2000H

LJMP MAIN

ORG 2023H

LJMP NGATPORT

ORG 2030H

MAIN:

MOV TMOD,#20H

MOV TH1,#0F4H

SETB TR1

MOV SCON,#52H

MOV IE,#90H

LAP:

JNB P1.0,MOLED

SETB P1.1

SJMP LAP

MOLED:

CLR P1.1

SJMP LAP

NGATPORT:

MOV A.SBUF

JB RI,LAP
CLR TI

MOV SBUF,A

RETI

END

THÍ NGHIỆM 2:

ORG 2000H

LJMP MAIN

ORG 200BH

LJMP NGATTIMER0

ORG 2030H

MAIN:

MOV R1,#20H

MOV R0,#00H

MOV TMOD,#01H

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

MOV IE,#82H

SETB TR0

SJMP $

NGATTIMER0:

MOV DPTR,#TABLE

MOV A,R0

MOVC A,@A+DPTR

SWAP A

ADD A,@R1
MOV DPTR,#0000H

MOVX @DPTR,A

INC R1

INC R0

CJNE R1,#24H,KT1

MOV R1,#20H

KT1: CJNE R0,#4DH,KT2

KT2:

CLR TR0

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

SETB TR0

RETI

TABLE:

DB 0111B,1011B,1101B,1110B

END

THÍ NGHIỆM 3:

ORG 2000H

LJMP MAIN

ORG 200BH

LJMP NGATTIMER0

ORG 2030H

MAIN:

MOV 20H,#0D

MOV 21H,#0D
MOV 22H,#0D

MOV 23H,#0D

MOV R1,#20H

MOV R0,#00H

MOV TMOD,#01H

CLR TR0

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

MOV IE,#82H

SETB TR0

LOOP:

JNB P1.0,XULY

SJMP LOOP

XULY:

MOV R2,23H

CJNE R2,#0AH,TEST1

INC 22H

MOV 23H,#00H

TEST1:

MOV R2,22H

CJNE R2,#0AH,TEST2

INC 21H

MOV 22H,#00H

TEST2:

MOV R2,21H

CJNE R2,#0AH,TEST3
INC 20H

MOV 21H,#00H

TEST3:

MOV R2,20H

CJNE R2,#0AH,TEST4

SJMP MAIN

TEST 4:

INC 23H

TT:

JB P1.0,LOOP

SJMP TT

NGATTIMER0:

MOV DPTR,#TABLE

MOV A,R0

MOVC A,@A+DPTR

SWAP A

ADD A,@R1

MOV DPTR,#0000H

MOVX @DPTR,A

INC R0

INC R1

CJNE R1,#24H,KT1

MOV R1,#20H

KT1:

CJNE R0,#4D,KT2

MOV R0,#00H
KT2:

CLR TR0

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

SETB TR0

RETI

TABLE:

DB 0111B,1011B,1101B,1110B

END

THÍ NGHIỆM 5:

ORG 2000H

LJMP MAIN

ORG 200BH

LJMP NGAT_TO

ORG 2030H

MAIN:

MOV R0,#20H

MOV R1,#0

MOV IE,#82H

MOV TMOD,#11H

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

JB P1.1,$

LCALL DELAY_20MS //CHONG RUNG PHIM

JNB P1.1,$

SETB TR0
LOOP:

JNB P1.0,RESETT

SJMP LOOP

RESETT:

JNB P1.0,$

MOV 20H,#0

MOV 21H,#0

MOV 22H,#0

MOV 23H,#0

SJMP LOOP

DUNGLAI:

MOV IE,#0

CLR TR0

SJMP $

NGAT_TO:

CLR TR0

MOV DPTR,#TABLE //CHUONG TRINH QUET 4 LED

MOV A,R1

MOVC A,@A+DPTR //TICH CUC LED THU R1

ADD A,@R0 //LED 7 DOAN THU R1 CHUA GIA TRI TRONG


@R0

MOV DPTR,#0000H //TRO TOI NGOAI VI LED 7 DOAN

MOVX @DPTR,A //HIEN THI SO CHUA TRONG @R0 LEN LED 8


DOAN

INC R1 //TANG SO THU TU LED

INC R0

CJNE R1,#4,TTUC //KHI R1=4 THI SET LAI BANG 0


MOV R1,#0

MOV R0,#20H

TTUC:

//NEU P1.2 DA DUOC NHAN THI BO DEM NGUNG. KHI DO NEU NHAN P1.1
THI BO DEM CHAY TIEP.

//NEU P1.2 CHUA DUOC NHAN MA NHAN P1.1 THI SE BI BO QUA 1 VONG
DEM

JNB P1.1,CHAYTIEP //KIEM TRA P1.1

JB F0,THOAT //NEU F0=1 THI KHONG DEM LEN NUA

MOV C,P1.2

JNC NGUNG //NEU P1.2 BANG 0 THI CHUYEN DEN


NHAN NGUNG DE SET F0

INC 23H

MOV A,23H

CJNE A,#10,THOAT

MOV 23H,#0

INC 22H

MOV A,22H

CJNE A,#10,THOAT

MOV 22H,#0

INC 21H

MOV A,21H

CJNE A,#10,THOAT

MOV 21H,#0

INC 20H

MOV A,20H

CJNE A,#10,THOAT

MOV 20H,#0
SJMP THOAT

NGUNG:

SETB F0 //BIT F0=1 KHI CO CANH XUONG TAI P1.2

SJMP THOAT

CHAYTIEP:

CLR F0 //XOA CO F0 DE CHAY TIEP

THOAT:

MOV TH0,#HIGH(-10000)

MOV TL0,#LOW(-10000)

SETB TR0

RETI

DELAY_20MS:

MOV TH1,#HIGH(-20000)

MOV TL1,#LOW(-20000)

SETB TR1

JB TF1,$

CLR TR1

CLR TF1

RET

TABLE:

DB 70H,0B0H,0D0H,0E0H

END
BÀI TN 2

HIỂN THỊ LED 7 ĐOẠN

THÍ NGHIỆM 1

CODE:

ORG 2000H

MOV DPTR,#0000H

MOV R0,#9

LCALL DISPLAYLED0

SJMP EXIT

DISPLAYLED0:

MOV A,#0E0H

ADD A,R0

MOVX @DPTR,A

RET

EXIT:

NOP

END

THÍ NGHIỆM 2

CODE:
ORG 2000H

MOV DPTR,#0000H

MAIN1:

MOV R0,#0

MAIN:

LCALL DISPLAYLED0

LCALL DELAY

INC R0

CJNE R0,#10,MAIN

SJMP MAIN1

DISPLAYLED0:

MOV A,#0E0H

ADD A,R0

MOVX @DPTR,A

RET

DELAY:

MOV R5,#25

L1:

MOV R6,#100

L2:

MOV R7,#200

DJNZ R7,$

DJNZ R6,L2

DJNZ R5,L1

RET

END
THÍ NGHIỆM 3

CODE:

ORG 2000H

MOV R1,#1

MOV R0,#5

LCALL LED

LCALL DISPLAYLED0

SJMP $

LED:

MOV DPTR,#TABLE

MOV A,R1

MOVC A,@A+DPTR

RET

DISPLAYLED0:

MOV DPTR,#0000H

ADD A,R0

MOVX @DPTR,A

RET

TABLE:

DB 0E0H,0D0H,0B0H,070H

END
THÍ NGHIỆM 4

CODE:

ORG 2000H

MOV R1,#0

MAIN1:

MOV R0,#1

MAIN:

LCALL LED

LCALL DISPLAYLED0

LCALL DELAY

INC R0

INC R1

CJNE R1,#4,NHAY

MOV R1,#0

NHAY:

CJNE R0,#5,MAIN

SJMP MAIN1

LED:

MOV DPTR,#TABLE

MOV A,R1

MOVC A,@A+DPTR

RET

DISPLAYLED0:
MOV DPTR,#0000H

ADD A,R0

MOVX @DPTR,A

RET

DELAY:

MOV R5,#25

L1:

MOV R6,#100

L2:

MOV R7,#200

DJNZ R7,$

DJNZ R6,L2

DJNZ R5,L1

RET

TABLE:

DB 0E0H,0D0H,0B0H,070H

END

- Giảm thời gian trễ xuống còn 100ms. Quá trình thực hiện nhanh hơn

- Thời gian trễ sao cho không còn thấy Led nhấp nháy là 1ms

CODE:

ORG 2000H

MOV R1,#0

MAIN1:
MOV R0,#1

MAIN:

LCALL LED

LCALL DISPLAYLED0

LCALL DELAY

INC R0

INC R1

CJNE R1,#4,NHAY

MOV R1,#0

NHAY:

CJNE R0,#5,MAIN

SJMP MAIN1

LED:

MOV DPTR,#TABLE

MOV A,R1

MOVC A,@A+DPTR

RET

DISPLAYLED0:

MOV DPTR,#0000H

ADD A,R0

MOVX @DPTR,A

RET

DELAY:

MOV R5,#2

L1: MOV R6,#250

DJNZ R6,$
DJNZ R5,L1

RET

TABLE:

DB 0E0H,0D0H,0B0H,070H

END

- Giảm thời gian trễ xuống bằng 0 thì 4 Led hiển thị 4-3-2-1 cùng lúc

You might also like