采用AT89C2051制作的智能時鐘31_第1頁
采用AT89C2051制作的智能時鐘31_第2頁
采用AT89C2051制作的智能時鐘31_第3頁
采用AT89C2051制作的智能時鐘31_第4頁
采用AT89C2051制作的智能時鐘31_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

采用AT89C2051制作的智能時鐘一、智能電子鐘的功能

1、全日歷計時。

2、12/24小時轉換。

3、8路定時輸出(可關/開控制)

4、誤差:15S+1uS

5、大、小月,潤年,周,自動追蹤

二、調校

上電后,電子鐘顯示“1:00〞。

1、8路定時時間查詢

按下K1鍵依此顯示8路定時時間。星期位顯示:“H〞表示:翻開當前定時輸出;“L〞表示:關閉當前定時輸出。此時按K2鍵可進行“H〞、“L〞的切換。所有輸出,均由蜂鳴器輸出!

2、顯示狀態(tài)的控制

按下K2鍵可進入以下工作狀態(tài):

1)12小時/日月交替顯示。

2)12小時固定顯示。

3)24小時/日月交替顯示。

4)24小時固定顯示。

3、校時

按下K2鍵3S后,進入校時菜單。按下K1鍵依次進入校時狀態(tài):分、時、天、月、年、微調系數(shù)。此時按K2鍵,完成+1。當顯示“d〞時,表示要調整微調系數(shù)(0-99),其值越小,時鐘走時越慢。當使用的6MHz的晶振偏差大時,應仔細調整微調系數(shù)!當顯示“out〞時,按K2鍵,即可退出!退出后,按任意鍵即可啟動時鐘。

4、設置定時時間

按下K1鍵3S后,進入設置菜單。按下K1鍵依次進入8路定時調整狀態(tài):時、分。此時按K2鍵,完成+1。當顯示“out〞時,按K2鍵,即可退出!

三、原理圖和PCB圖

下一頁AT89C2051的智能時鐘單片機源程序以下為AT89C2051的智能時鐘的內部程序;2001.5.24

;***************

;all_clk1_program2000-10-12

;***************

fl_250msbit00h

fl_500msbitfl_250ms+1

set_clk_fbitfl_500ms+1

set_al4_fbitset_clk_f+1

am_fbitset_al4_f+1

fl_3sbitam_f+1

al1_fbitfl_3s+1

al2_fbitfl_3s+2

al3_fbitfl_3s+3

al4_fbitfl_3s+4

set_overbital4_f+1

ha_fbitset_over+1

ha_overbitha_f+1

fl_ms_fbitha_over+1

fl_s_fbitfl_ms_f+1

key_overbitfl_s_f+1

;**************************************************

key_dataequ08h

timersequkey_data+1

t_30msequtimers+1

t_20msequt_30ms+1

t_1sequt_20ms+1

k1_dataequt_1s+1

k2_dataequk1_data+1

stat_workequk2_data+1

stat_ledequstat_work+1

t_1msequstat_led+1

t_20mequt_1ms+1

beepequt_20m

al1equbeep+1

al2equbeep+2

al3equbeep+3

al4equbeep+4

al5equbeep+5

al6equbeep+6

al7equbeep+7

al8equbeep+8

ret_timerequal8+1

;**************************************************

secequ23h

minequsec+1h

hourequmin+1h

dayequhour+1h

monequday+1h

yearequmon+1h

w_adjequyear+1h

weekequw_adj+1h

;***************************************

al1_hequweek+1h

al1_mequal1_h+1h

al2_hequal1_m+1h

al2_mequal2_h+1h

al3_hequal2_m+1h

al3_mequal3_h+1h

al4_hequal3_m+1h

al4_mequal4_h+1h

al5_hequal4_m+1h

al5_mequal5_h+1h

al6_hequal5_m+1h

al6_mequal6_h+1h

al7_hequal6_m+1h

al7_mequal7_h+1h

al8_hequal7_m+1h

al8_mequal8_h+1h

beep_tequal8_m+1

fristequbeep_t+1

;**************************************

led1equfrist+1

led2equled1+1

led3equled2+1

led4equled3+1

led5equled4+1

sp_dataequled5+1

;**************************************

led_1bitp3.5

led_2bitp3.4

led_3bitp3.3

led_4bitp3.2

led_5bitp3.1beep_fBITP3.7

key_fbitp3.0;********************************************************

t_h_100msequ05dh;100msfor6MHz

t_l_100msequ07fh;c6for100ms

timer_noequ8d;3c90+30d=3cb0h

w_adj_datequ50d

key_daequ00000110b;*********************************************************

blk_ledequ20d

dot_ledequ21d

f_ledequ22d

n_ledequ23d

u_ledequ24d

t_ledequ25d

b_ledequ26d

d_ledequ27d

oRG0000H;;

sJMPstart

ORG0003H;;

reti;

ORG000BH;

;ajmpt0

reti;

ORG0013H

reti;

ORG001BH;

aJMPT1;

ORG0023H;

RETI;AJMPRS_485;;**************************************

start:

callclr_ram

MOVSP,#sp_data;

callint_t0

calltimer_int

calltimer_20ms

STAR_BI:

callclock

callweek_auto

callal_out

CALLKEY_bord

callkey_del

callset_clk_al

callkey_jmp

callreback

callled_jmp

sjmpstar_bi

;*******************************************

reback:

mova,stat_work

jzreback_end

jbal1_f,ka1

movret_timer,sec

setbal1_f

sjmpreback_end

ka1:

mova,ret_timer

adda,#05d

movb,#60d

divab

mova,sec

cjnea,b,reback_end

clral1_f

movstat_work,#00d

reback_end:

ret

key_jmp:

mova,key_data

jzkey_jmp_end

movret_timer,sec

cjnea,#01d,kk1

mova,stat_work

inca;k1_key

cjnea,#9d,kka1

mova,#00d

kka1:

movstat_work,a

sjmpkey_jmp_end

kk1:

mova,stat_work;k2_key

jnzkk2

mova,stat_led

inca

cjnea,#05d,kka2

mova,#00d

kka2:

movstat_led,a

sjmpkey_jmp_end

kk2:

acallall1

cpla

mov@r0,a

key_jmp_end:

retall1:

movr0,#al1

mova,stat_work

deca

adda,r0

movr0,a

mova,@r0

retled_jmp:

;**********************************

;movstat_work,#01d

;movstat_tw,#01dmova,stat_work

jnzled_al1

mova,stat_led

acallled_t_d

movled1,week

sjmpled_jmp_end

led_al1:

acallall1

movled1,#f_led

jnzle_t2

movled1,#n_led

le_t2:

jbfl_250ms,le_t4

movled1,#blk_led

le_t4:

acallal_led

led_jmp_end:

acallled

ret

;*************************************time_24:

mova,hour

acallbcd_8

movled2,a

jnztim4

movled2,#blk_led

tim4:

movled3,b

jbfl_500ms,tim1

mova,b

adda,#10d

movled3,a

tim1:

acallled_min

time_12_end:

ret

;***********************************

led_min:

mova,min

acallbcd_8

jbfl_500ms,tim2

adda,#10d

tim2:

movled4,a

movled5,b

ret

;*************************************

date_led:

mova,mon

acallbcd_8

movled2,a

jnzda1

movled2,#blk_led

da1:

mova,b

adda,#10d

movled3,a

mova,day

acallbcd_8

movled4,a

jnzda2

movled4,#blk_led

da2:

movled5,b

date_led_end:

ret;*************

;D_8=>BCD

;*************

BCD_8:

MOVB,#10D

DIVAB

RET

;****************************************

LED:

movp1,#0

movdptr,#led_asc

;***************************led1

mova,led1

movca,@a+dptr

movp1,a

clrled_1

acalltimer_1ms

acalltimer_1ms

;acalltimer_1ms

;acalltimer_1ms

;acalltimer_1mssetbled_1

;*************************led2

led_led2:

mova,led2

movca,@a+dptr

movp1,a

clrled_2

acalltimer_1ms

setbled_2

;*************************led3

led_led3:

mova,led3

movca,@a+dptr

movp1,a

clrled_3

acalltimer_1ms

setbled_3

;*************************led4

led_led4:

mova,led4

movca,@a+dptr

movp1,a

clrled_4

acalltimer_1ms

setbled_4

;*************************led5

led_led5:

mova,led5

movca,@a+dptr

movp1,a

clrled_5

acalltimer_1ms

setbled_5

;*************************

led_end:

movp1,#0

ret

;************************************

;bafhcdeg

led_asc:

db11101110B;0

db10001000B;1

db11000111B;2

db11001101B;3

db10101001B;4

db01101101B;5

db01101111B;6

db11001000B;7

db11101111B;8

db11101101B;9

db11111110B;0.=>10d

db10011000B;1.

db11010111B;2.

db11011101B;3.

db10111001B;4.

db01111101B;5.

db01111111B;6.

db11011000B;7.

db11111111B;8.

db11111101B;9.

DB00000000B;BLACK=>20d

DB00010000B;dot=>21d

DB00100110b;l=>22d

dB10101011B;h=>23d

DB10101110B;u=>24d

DB00100111B;t=>25d

dB00101111B;b=>26d

dB10001111B;d=>27d;bafhcdeg;**********************************

;delay

;********************************

timer_1ms:

movt_1ms,#030h

r2_1:

djnzt_1ms,r2_1

ret

timer_20ms:

movt_20m,#050d

r2_2:

callclock

callled

djnzt_20m,r2_2

callweek_auto

callal_out

ret

;#############################################

;ifmon<=2andyear=4Z(0,1,2,3...)

;gs1=>week=mod([5/4]*year+mon_asc(mon)+day-1)/7

;else

;gs2=>week=mod([5/4]*year+mon_asc(mon)+day)/7

week_auto:mova,YEAR

movb,#05

mulab

movr4,b

movr5,a

movr7,#04

callmul_2MOVDPTR,#MON_ASC

MOVA,MON

deca

MOVCA,@A+DPTR

ADDA,r3

;*********************

MOVB,DAY

ADDA,B

movr3,a;r3=gs2

;*******jbmon<=2******

MOVA,MON

CJNEA,#02D,WEEK_1

SJMPWEEK_2

WEEK_1:

JCWEEK_2

week_3:

mova,r3

movb,#07

divab

mova,b

sjmpweek_4

WEEK_2:

;*****jbyear=4N******

mova,year

movb,#04

divab

mova,b

jnzweek_3

mova,r3

deca

movb,#07

divab

mova,b

week_4:

MOVWEEK,a

jnzweek_end

movweek,#07h

week_end:

RET

MON_ASC:

DB6d,2d,2d,5d,0d,3d,5d,1d,4d,6d,2d,4d;2002.5.5

;r4r5/r7=r3

mul_2:

D457:CLRC

MOVA,R4

SUBBA,R7

JCDV50

SETBOV

RET

DV50:MOVR6,#8;;求平均值(R4R5/R7-→R3)

DV51:MOVA,R5

RLCA

MOVR5,A

MOVA,R4

RLCA

MOVR4,A

MOVF0,C

CLRC

SUBBA,R7

ANLC,/F0

JCDV52

MOVR4,A

DV52:CPLC

MOVA,R3

RLCA

MOVR3,A

DJNZR6,DV51

MOVA,R4;;四舍五入

ADDA,#0;R4

JCDV53

SUBBA,R7

JCDV54

DV53:INCR3

DV54:CLROV

RET

;*************************************************************

clr_ram:

MOVR7,#78h;

MOVR0,#0bH;

CLRA;

CR:INCR0;

MOV@R0,A;

djnzr7,cr;CLRRAM

ret

;**************INT_CTRL

int_t0:

setbet1

MOVTMOD,#00010001b;

movw_adj,#w_adj_dat

setbea

jmpadj_w

;**********************************************

al_led:

movr0,#al1_h

mova,stat_work

deca

rla

adda,r0

movr0,a

mova,@r0

acallbcd_8

movled2,a

jnzal_1

movled2,#blk_led

al_1:

mova,b

adda,#10d

movled3,a

incr0

mova,@r0

acallbcd_8

adda,#10d

movled4,a

movled5,b

al_led_end:

ret;********************************

set_clk_al:

jnbset_clk_f,see1

callset_clock

clrset_clk_f

sjmpsee2

see1:

jnbset_al4_f,see2

callset_al4

clrset_al4_f

see2:

ret

;*********************************

procled_t_d

led_t_d:

movdptr,#led_ord_3

movb,#02h

mulab

jmp@a+dptrled_ord_3:ajmpled_k0_2

ajmpled_k1_2

ajmpled_k2_2

ajmpled_k3_2

ajmpled_k4_2led_k0_2:;timer_12anddatetoled

acalltime_12

jnbfl_3s,lk1

acalldate_led

lk1:

ajmpled_jmp_5_end

led_k1_2:;timer_12toled

acalltime_12

ajmpled_jmp_5_end

led_k2_2:;timer_24anddatetoled

acalltime_24

jnbfl_3s,lk2

acalldate_led

lk2:

ajmpled_jmp_5_end

led_k3_2:;timer_24toled

acalltime_24

ajmpled_jmp_5_endled_k4_2:;sectoled

movled1,#blk_led

movled2,#blk_led

movled3,#dot_led

mova,sec

acallbcd_8

adda,#10d

movled4,a

movled5,b

led_jmp_5_end:

ret

end;****************************************

procset_al4

set_al4:

movk1_data,#01d

movk2_data,#01d

clrset_over

acallled_al

acallkey_bord

callsf_key

movkey_data,#0

movfrist,#0

set_al41:callclock

callweek_auto

acallled_al

acallkey_bord

callkey_del

acallkey_al

jnbset_over,set_al41

clra

movk1_data,a

movk2_data,a

movkey_data,a

movfrist,a

ret

end

;**************************************

prockey_al

key_al:

mova,key_data

jzkey_al_end

cjnea,#01d,k2_alinck1_data;(1-9)

mova,k1_data

cjnea,#19d,key_al_end

movk1_data,#01d

sjmpkey_al_end

k2_al:

mova,k1_data

cjnea,#018d,ke2

setbset_over

sjmpkey_al_end

ke2:

movr0,#al1_h

deca

adda,r0

movr0,a

inc@r0

acalljj_bit

movb,#24d

jnzke3

movb,#60d

ke3:

mova,@r0

divab

mova,b

mov@r0,a

key_al_end:

ret

end

jj_bit:

mova,k1_data

movb,#02d

divab

mova,b;(a=1,0)

ret

;*********************************

led_out1:

movled2,#00h

movled3,#u_led

movled4,#t_led

movled5,#blk_led

movled1,#blk_led

ret

;********************************

led_al:

mova,k1_data

cjnea,#017d,lo1

acallbeep_timer

sjmpled_al_end

lo1:

cjnea,#18d,ld1

acallled_out1

sjmpled_al_end

ld1:

inca

movb,#02d

divab

;**********

movled1,a

;**********

deca

rla

movr0,#al1_h

adda,r0

movr0,a

mova,@r0

acallbcd_8

movled2,a

jnzld2

movled2,#blk_led

ld2:

mova,b

adda,#10d

movled3,a

;************************************

incr0

mova,@r0

acallbcd_8

adda,#10d

movled4,a

movled5,b;***************************flashbit

jbfl_250ms,led_al_end

acalljj_bit

jnzled_al_e

movled4,#blk_led

movled5,#blk_led

sjmpled_al_end

led_al_e:

movled2,#blk_led

movled3,#blk_led

led_al_end:

acallled

ret

;***************************************

procset_clock

set_clock:

movk1_data,#01d

movk2_data,#01d

clrset_over

callled_cl

callkey_bord

callsf_key

movkey_data,#0

movfrist,#0

set_al41:

callclock

acallweek_auto

callal_out

acallled_cl

acallkey_bord

callkey_del

acallkey_cl

jnbset_over,set_al41

;acallkey_bord

clra

movk1_data,a

movk2_data,a

movkey_data,a

movfrist,a

ret

end

;**************************************

prockey_cl

key_cl:

mova,key_data

jzkey_al_end

cjnea,#01d,k2_alinck1_data;(1-8)

mova,k1_data

cjnea,#9d,key_al_end

movk1_data,#01d

sjmpkey_al_end

k2_al:

mova,k1_data

cjnea,#08d,ke2

setbset_over

sjmpkey_al_end

ke2:

deca

movdptr,#asc_h

movca,@a+dptr

movb,a

;********************************

movr0,#sec

mova,k1_data

deca

adda,r0

movr0,a

inc@r0

mova,@r0

divab

mova,b

mov@r0,a

key_al_end:

ret

end

asc_h:

db60d,60d,24d,32d,13d,100d,100dprocled_cl

led_cl:

movdptr,#led_ord_3

mova,k1_data

deca

movb,#02h

mulab

jmp@a+dptr

led_ord_3:ajmpled_k0_2

ajmpled_k1_2

ajmpled_k2_2

ajmpled_k3_2

ajmpled_k4_2

ajmpled_k5_2

ajmpled_k6_2

ajmpled_k7_2led_k0_2:;ledsec

movled2,#blk_led

movled3,#dot_led

mova,sec

acallbcd_8

adda,#10d

movled4,a

movled5,b

jbfl_250ms,lk1

movled4,#blk_led

movled5,#blk_led

lk1:

ajmpled_jmp_5_end

led_k1_2:;ledmin,hour

acallled_hour

jbfl_250ms,lk2

movled4,#blk_led

movled5,#blk_led

lk2:

ajmpled_jmp_5_end

led_k2_2:;ledmin,hour

acallled_hour

jbfl_250ms,lk3

movled2,#blk_led

movled3,#blk_led

lk3:

ajmpled_jmp_5_end

led_k3_2:;ledday,mon

acallled_mon

jbfl_250ms,lk4

movled4,#blk_led

movled5,#blk_led

lk4:

ajmpled_jmp_5_end

led_k4_2:;ledday,mon

acallled_mon

jbfl_250ms,lk5

movled2,#blk_led

movled3,#blk_led

lk5:

ajmpled_jmp_5_end

led_k5_2:;ledyear

movled2,#2d

movled3,#0d

mova,year

acallbcd_8

movled4,a

movled5,b

jbfl_250ms,lk6

movled4,#blk_led

movled5,#blk_led

lk6:

ajmpled_jmp_5_end

led_k6_2:;ledw_adj

movled2,#d_led

movled3,#blk_led

mova,w_adj

acallbcd_8

movled4,a

movled5,b

jbfl_250ms,lk7

movled4,#blk_led

movled5,#blk_led

lk7:

ajmpled_jmp_5_end

led_k7_2:;ledout

acallled_out1

led_jmp_5_end:

movled1,week

acallled

ret

endled_hour:

mova,hour

acallbcd_8

movled2,a

jnzlj1

movled2,#blk_led

lj1:

mova,b

adda,#10d

movled3,a

;*********************

mova,min

acallbcd_8

adda,#10d

movled4,a

movled5,b

ret

led_mon:

mova,mon

jnzlj5

incmon

mova,mon

lj5:

acallbcd_8

movled2,a

jnzlj2

movled2,#blk_led

lj2:

movled3,b

;*********************

mova,day

jnzlj4

incday

mova,day

lj4:

acallbcd_8

movled4,a

jnzlj3

movled4,#blk_led

lj3:

movled5,b

ret

;********************************************

al_out:

jbha_over,al_out_end

movr7,#8d

movr1,#al8_m

al_ch_1:

movr0,#min

movr6,#02d;minhour

al_l:

mova,@r0

movb,@r1

cjnea,b,al_ch

incr0

decr1

djnzr6,al_l

;**************************************************

mova,r7

deca

movr0,#al1

adda,r0

movr0,a

mova,@r0

movc,acc.0

cplc

anlc,fl_250ms

cplc

movbeep_f,c

acallbeep_out

al_ch:

clrc

mova,r1

subba,r6

movr1,a

djnzr7,al_ch_1

al_out_end:

retbeep_out:

jbha_f,ba1

movbeep,sec

setbha_f

ba1:

mova,beep

adda,beep_t

movb,#60d

divab

mova,sec

cjnea,b,beep_out_end

setbbeep_f

setbha_over

clrha_f

beep_out_end:

ret

timer_int:

MOVT_1S,#TIMER_no

movbeep_t,#15d

movyear,#01d

movmon,#011d

movday,#06d

movhour,#13d

movmin,#00d

movsec,#00d

movr7,#16

movdptr,#al_asc

movr0,#al1_h

al_read:

clra

movca,@a+dptr

mov@r0,a

incr0

incdptr

djnzr7,al_read

ret;************************************

beep_timer:

movled1,#blk_led

movled2,#b_led

movled3,#blk_led

mova,beep_t

acallbcd_8

movled4,a

movled5,b

jbfl_250ms,ft1

movled4,#blk_led

movled5,#blk_led

ft1:

rettime_12:

movdptr,#asc_12

mova,hour

rla

movca,@a+dptr

movled2,a

jnziu2

movled2,#blk_led

iu2:

incdptr

mova,hour

rla

movca,@a+dptr

jbfl_500ms,iu1

adda,#10d

iu1:

movled3,a;***************************************mintoled

acallled_min

time_24_end:

ret

asc_12:

db11d,2d,21d,1d,21d,2d,21d,3d,21d,4d,21d,5d,21d,6d,21d,7d

db21d,8d,21d,9d,11d,0d,11d,1d

db1d,2d,0d,1d,0d,2d,0d,3d,0d,4d,0d,5d,0d,6d,0d,7d,0d,8d,0d,9d

db1d,0,1d,1dclock:

;********************************

mova,sec

cjnea,#60d,clock_end;!!!!!!!!!!!!!!!!!!!!!!

movsec,#00hincmin

;**********

clrha_over;2001.5.6mova,min

cjnea,#60d,clock_end

movmin,#00hinchour

mova,hour

cjnea,#24d,clock_end

movhour,#00hmova,mon

xrla,#02d

jnzmm_1

movdptr,#year_d

mova,year

movca,@a+dptr

sjmpmm_2

mm_1:

mova,mon

deca

movdptr,#mou_12

movca,@a+dptr

mm_2:

movb,a

incb

incday;***************day+1

mova,day

cjnea,b,clck_end

sjmpclck1

clck_end:

jcclock_end

clck1:

movday,#01hincmon

mova,mon

cjnea,#13d,clock_end

movmon,#01dincyear

mova,year

cjnea,#100d,clock_end

movyear,#00d

clock_end:

callfl_out

ret

mou_12:

db31d,28d,31d,30d,31d,30d

db31d,31d,30d,31d,30d,31dyear_d:

db29d,28d,28d,28d,29d,28d,28d,28d,29d,28d

db28d,28d,29d,28d,28d,28d,29d,28d,28d,28d

db29d,28d,28d,28d,29d,28d,28d,28d,29d,28d

db28d,28d,29d,28d,28d,28d,29d,28d,28d,28d

db'lijie2000.5.15'

;***************************************

t1:

pusha

pushpsw

pushb

clrfl_ms_f

djnzt_1s,t1_end

clrfl_s_f

incsec

calladj_w

;********************************

t1_end:

popb

poppsw

popa

retiadj_w:

clrtr1

mova,#T_L_100ms

adda,w_adj;*******have5order

movtl1,a

mova,#T_H_100ms

addca,#00h

movth1,a

movt_1s,#timer_no

setbtr1

retfl_out:

jbfl_ms_f,fl_out_end

setbfl_ms_f

mova,t_1s

movb,#02d

divab

mova,b

jnzto_d1

cplfl_250ms

to_d1:

mova,t_1s

movb,#04d

divab

mova,b

jnzto_d2

cplfl_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論