當前位置:首頁 » 課程設計 » 中斷處理編程課程設計

中斷處理編程課程設計

發布時間: 2021-03-08 01:37:39

❶ 單片機編程時中斷程序如何使用

中斷程序不是使用的,是當單片機的中斷源有中斷請求時,以允許中斷的情況回下,就是自動轉到中斷答程序去執行了。所以,編程時,需要在中斷完成什麼任務,都要寫到中斷程序中就行了,會自己去執行的。而不需要你去使用的。

❷ 單片機中斷方式編程(匯編語言)

樓上的來注意了,人家單源片機的晶振頻率是6MHz的,機器周期相應的是2us,
編程時間最好利用定時器中斷以節約資源。。。。
ORG 0000H
LJMP START
ORG 000BH
LJMP TIMER0

START:
MOV TMOD,#00H
MOV TH0,#0FEH
MOV TL0,#0CH
SETB ET0
SETB EA
SETB TR0

MAIN:

LJMP MAIN

TIMER0:
MOV TH0,#0FEH
MOV TL0,#0CH
CPL P1.0
RETI
END

❸ 《C語言程序設計》課程設計任務書 請各位高手指教啊!十萬火急!!!!

#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <malloc.h>
#include <math.h>

#define PATH "c:\\tc"
#define BK 7
#define DC 8
#define LC 15
#define P1 1
#define P2 4
#define X 121
#define Y 41
#define M 8

int newmap[26][14] ={{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0, 1,1},
{1,1, 0,0,0,0,0,0,0,0,0,0 , 1,1},
{1,1, 1,1,1,1,1,1,1,1,1,1, 1,1},
{1,1, 1,1,1,1,1,1,1,1,1,1, 1,1}};

int bmp[20][20]={{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1},
{1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1},
{1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1},
{1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1},
{1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1},
{0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0},
{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}};
int next;
int xx,yy;
int map[2][26][14];
int kk[M][4][4]= {
{
{0,0,0,0},
{0,0,2,0},
{0,2,2,2},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,0,0},
{0,2,0,0},
{0,2,2,0}
},

{
{0,2,0,0},
{0,2,0,0},
{0,2,0,0},
{0,2,0,0}
},

{
{0,0,2,0},
{0,0,2,0},
{0,2,2,0},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,0,0},
{0,2,2,0},
{0,0,2,0}
},

{
{0,0,0,0},
{0,2,2,0},
{0,2,2,0},
{0,0,0,0}
},

{
{0,0,0,0},
{0,2,2,0},
{0,0,2,0},
{0,2,2,0}
},
{
{0,0,0,0},
{0,0,2,0},
{0,2,2,0},
{0,2,0,0}
}
};

char far * bit[3],*sim;
int score,level;
/************/
int getkey();
void edge(int l,int t,int r,int b,int c1,int c2);
void init();
void new();
void newk();
void draw(int x,int y,int c);
void show();
void close();
void down();
int candown();
void tobotton();
int canturn();
void turn();
int canleft();
void left();
int canright();
void right();
int isok(int x);
void ok(int x);
void showscore();
void drawnext();
int isover();
void over();

int getkey()
{
char ch=0;
if(kbhit())
ch=getch();
return(ch);
}

void init()
{
int gdriver=DETECT,gmode;
int size,i,j;
/* registerbgidriver();*/
initgraph(&gdriver,&gmode,PATH);
setbkcolor(BK);
setfillstyle(11,8);
edge(X-9,Y-9,X+408,Y+408,DC,DC);
floodfill(1,1,DC);
edge(X-9,Y-9,X+408,Y+408,DC,LC);
edge(X-7,Y-7,X+406,Y+406,DC,LC);

edge(X-1,Y-1,X+201,Y+401,DC,LC);
edge(X-3,Y-3,X+203,Y+403,LC,DC);

edge(X+260,Y-1,X+341,Y+81,DC,LC);
edge(X+258,Y-3,X+343,Y+83,LC,DC);

size=imagesize(X+1,Y+1,X+20,Y+20);
bit[0]=(char far*)malloc(size);

if(bit[0]==NULL){sound(2000);getch();nosound();exit(1);}

getimage(X+1,Y+1,X+20,Y+20,bit[0]);

for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P1);
bit[1]=(char far*)malloc(size);

if(bit[1]==0){sound(2000);getch();nosound();exit(1);}

getimage(X+1,Y+1,X+20,Y+20,bit[1]);

for(i=0;i<20;i++)
for(j=0;j<20;j++)
if(bmp[i][j]==1)
putpixel(X+1+j,Y+1+i,P2);
bit[2]=(char far*)malloc(size);

getimage(X+1,Y+1,X+20,Y+20,bit[2]);

setcolor(8);
outtextxy(X+245,Y+95,"score");
outtextxy(X+320,Y+95,"level");
edge(X+240,Y+107,X+290,Y+122,LC,DC);
edge(X+242,Y+109,X+288,Y+120,DC,LC);
edge(X+315,Y+107,X+365,Y+122,LC,DC);
edge(X+317,Y+109,X+363,Y+120,DC,LC);

size=imagesize(X+240,Y+107,X+290,Y+122);
sim=(char far *)malloc(size);
getimage(X+240,Y+107,X+290,Y+122,sim);

edge(X+207,Y+133,X+400,Y+401,LC,DC);
edge(X+210,Y+135,X+397,Y+398,LC,DC);

outtextxy(X+213,Y+140,"Control Option:");
outtextxy(X+213,Y+150,"-----------------");
outtextxy(X+213,Y+160," [P]--Start/Pause");
outtextxy(X+213,Y+177," [Esc]--Quit the game");
outtextxy(X+213,Y+194," [W]--Turn");
outtextxy(X+213,Y+211," [A]--Left");
outtextxy(X+213,Y+228," [S]--Down fast");
outtextxy(X+213,Y+245," [D]--Right");
outtextxy(X+213,Y+262,"[Space]--Down to botton");

for(i=0;i<4;i++)
edge(X+213+i*3,Y+278+i*4,X+394-i*3,Y+391-i*4,DC,LC);
outtextxy(X+224,Y+300," This game was");
outtextxy(X+224,Y+312,"programed by jackin.");
outtextxy(X+224,Y+324," If you discover" );
outtextxy(X+224,Y+336,"errors in it ,please");
outtextxy(X+224,Y+348," email to:");
setcolor(4);
outtextxy(X+224,Y+360," [email protected]");

if(bit[0]==0||bit[1]==0||bit[2]==0||sim==0)
{
close();
exit(1);
}
putimage(X+1,Y+1,bit[0],0);
}

void edge(int l,int t,int r,int b,int c1,int c2)
{
int cl=getcolor();
setcolor(c1);
line(l,t,r-1,t);
line(l,t,l,b-1);
setcolor(c2);
line(r,t,r,b);
line(l,b,r,b);
setcolor(cl);
}

void draw(int x,int y,int c)
{
putimage(X+20*y,Y+x*20,bit[c],0);
}

void show()
{
int i,j;
for(i=0;i<20;i++)
for(j=0;j<10;j++)
if(map[1][i+4][j+2]!=map[0][i+4][j+2])
{
map[0][i+4][j+2]=map[1][i+4][j+2];
draw(i,j,map[1][i+4][j+2]);
}

}

void close()
{
int i;
for(i=0;i<3;i++)
free(bit[i]);
free(sim);
closegraph();
}

void new()
{
int i,j,t=-1;

score=0;
level=1;
showscore();

for(i=0;i<26;i++)
for(j=0;j<14;j++)
{
map[1][i][j]=newmap[i][j];
map[0][i][j]=0;
}

for(;t<0;)
t=rand();
next=t%M;
}

void newk()
{
int i,j,t=-1;
xx=1;
yy=5;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
map[1][xx+i][j+yy]=kk[next][i][j];

for(;t<0;)
t=rand();
next=t%M;
show();
}

int candown()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i+1][yy+j]==1)
return(0);
}
return(1);
}

void down()
{
int i,j;
xx++;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
{
if(map[1][xx+i-1][yy+j]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i-1][yy+j];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx-1][yy+j]==2)
map[1][xx-1][yy+j]=0;
}

void tobotton()
{
int i,j;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
if(map[1][xx+i][yy+j]==2)
map[1][xx+i][yy+j]=1;
}

int canturn()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+3-j][i+yy]==1&&map[1][xx+i][j+yy]==2)
return(0);
return(1);
}

void turn()
{
int i,j,t[4][4];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+i][j+yy]==1)
t[i][j]=0;
else
t[i][j]=map[1][xx+i][j+yy];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(map[1][xx+i][j+yy]!=1)
map[1][xx+i][j+yy]=t[j][3-i];
}

int canleft()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i][yy+j-1]==1)
return(0);
}
return(1);
}

void left()
{
int i,j;
yy--;
for(i=3;i>=0;i--)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j+1]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i][yy+j+1];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx+j][yy+4]==2)
map[1][xx+j][yy+4]=0;
}

int canright()
{
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(map[1][xx+i][yy+j]==2&&map[1][xx+i][yy+j+1]==1)
return(0);
}
return(1);
}

void right()
{
int i,j;
yy++;
for(i=3;i>=0;i--)
for(j=3;j>=0;j--)
{
if(map[1][xx+i][yy+j-1]!=1)
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=map[1][xx+i][yy+j-1];
}
else
{
if(map[1][xx+i][yy+j]!=1)
map[1][xx+i][yy+j]=0;
}
}
for(j=0;j<4;j++)
if(map[1][xx+j][yy-1]==2)
map[1][xx+j][yy-1]=0;
}

int isok(int x)
{
int i;
if(x>23)return(0);
for(i=2;i<12;i++)
if(map[1][x][i]==0||map[1][x][i]==2)
return(0);

return(1);
}

void ok(int x)
{
int i;
for(;x>0;x--)
for(i=2;i<12;i++)
map[1][x][i]=map[1][x-1][i];
score++;
level=score/10+1;
}

void showscore()
{
char s[20],l[20];
itoa(score,s,10);
itoa(level,l,10);
putimage(X+240,Y+107,sim,0);
putimage(X+315,Y+107,sim,0);
outtextxy(X+244,Y+111,s);
outtextxy(X+325,Y+111,l);
}

void drawnext()
{
int x,y;
for(x=0;x<4;x++)
for(y=0;y<4;y++)
{
putimage(X+261+20*y,Y+x*20,bit[kk[next][x][y]],0);
}
}

int isover()
{
int i;
for(i=2;i<12;i++)
if(map[1][3][i]==1)return(1);
return(0);
}

void over()
{
int i,j;
for(i=23;i>3;i--)
{
for(j=2;j<12;j++)
map[1][i][j]=1;
show();
delay(1000);
}
for(i=4;i<24;i++)
{
for(j=2;j<12;j++)
map[1][i][j]=0;
show();
delay(1000);
}
}

main()
{ int graphdriver=DETECT;
int graphmode;
int i,j;
char cc;
init();
start:
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
rand();
if(cc==27)goto end;
cc=getkey();
}
new();
newk();
for(;;)
{
for(i=0;i<20000-level*1000;i++)
{
switch(getkey())
{
case 27:
over();
goto end;
case 'w':
case 'W':
if(canturn())
turn();
break;
case 'a':
case 'A':
if(canleft())
left();
break;
case 's':
case 'S':
if(candown())
{
down();
}
else
{

}
break;
case 'd':
case 'D':
if(canright())
right();
break;
case ' ':
for(;candown();)
down();
break;
case 'p':
case 'P':
cc=getkey();
for(;cc!='p'&&cc!='P';)
{
if(cc==27)goto end;
cc=getkey();
}
break;
default:break;
}
show();
}
drawnext();
if(candown())
{
down();
show();
}
else
{
tobotton();
for(j=1;j<24;j++)
if(isok(j))
{
ok(j);
score++;
showscore();
}
if(isover())
{
over();
goto start;
}
newk();
show();
}
}
end:
close();
getch();
}

❹ 單片機多級外部中斷控制,請問如何加入流水燈,現在在進行課程設計,迫切需要實現的方法。

功能:先復保持全滅一段時間制,然後順序點亮8個燈,全亮後再保持一段時間,然後從從頭開始
SS2:
MOV
A,#0FFH
;全部熄滅
MOV
P1,A
;送顯示
ACALL
DELAY1S
;延時一段時間,保持全滅1S
SS1:
RL
A
;循環左移1位
CLR
ACC.0
;將最低位置0,點亮1個等
MOV
P1,A
;送顯示
ACALL
DELAY100ms
;延時一段時間,感覺上100ms比較合適,根據情況自己調整一下
JNZ
SS1
;A不等於0,說明還有燈未點亮,循環繼續下一個
ACALL
DELAY1S
;A=0,保持全部點亮1S鍾
JMP
SS2
;再次開始
延時子程序我就不寫了,你應該會的。
建議:牽涉到延時,最好用定時中斷實現,實際運用中ms級的延時一般都會使用中斷實現,否則CPU的資源就浪費了。如果是作業就算了,如果你想學些東西最好用中斷的方式再嘗試一下。

❺ 單片機編程時,中斷程序的編程原則是什麼

由於中斷程序是在打斷正在運行的程序而執行的代碼,運行之前需要保存寄存器等操作,所以中斷程序應盡量:
1.精簡短小,使之盡快執行完返回。
2.能不放在中斷中的代碼盡量不放在中斷程序中。

❻ 計算機組成原理課設 中斷請求串列判優先電路設計

外部中斷復請求源:即外中斷制0和1,經由外部管腳引入的,在單片機上有兩個管腳,名稱為INT0、INT1,也就是P3.2、P3.3這兩個管腳。在內部的TCON中有四位是與外中斷有關的。IT0:INT0觸發方式控制位,可由軟體進和置位和復位,IT0=0,INT0為低電平觸發方式,IT0=1,INT0為負跳變觸發方式。這兩種方式的差異將在以後再談。IE0:INT0中斷請求標志位。當有外部的中斷請求時,這位就會置1(這由硬體來完成),在CPU響應中斷後,由硬體將IE0清0。IT1、IE1的用途和IT0、IE0相同。(2)內部中斷請求源TF0:定時器T0的溢出中斷標記,當T0計數產生溢出時,由硬體置位TF0。當CPU響應中斷後,再由硬體將TF0清0。TF1:與TF0類似。TI、RI:串列口發送、接收中斷,在串列口中再講解。2、中斷允許寄存器IE在MCS-51中斷系統中,中斷的允許或禁止是由片內可進行位定址的8位中斷允許寄存器IE來控制的

❼ 單片機外部中斷的編程

/***********************************************/
#include<reg51.h>

sbit shiwei=P2^;//定義介面
sbit gewei=P2^1;

/*********************************************/
unsigned char code table[]={//數碼顯示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*******************************************/

void msdelay()//5 ms 延時
{
int x,y;
for(x=(65536-15)%256;x;x--)
{
for(y=(65536-15)/256;y;y--);
}
}

/***************************************/

/**************************************/
void init()//初始化
{
TMOD=0x11;
PX0=1;
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TH1=(65535-100)/256;
TL1=(65535-100)%256;
EX0=1;
ET0=1;
ET1=1;
EA=1;
TR1=1;
}

/*****************************************/
unsigned char passtime=0;//全局變數
unsigned char timecount=0;

/*****************************************/

main()
{
unsigned char count;
count=0;
init();
while(P3^0!=1);
msdelay();
if(P3^0==1)//確定開始或者結束
{count++;
if(count%2)
{TR0=1;}
else
{TR0=0;}
}
}

void clear() interrupt 0//清零
{
TR0=0;
timecount=0;
passtime=0;
}

void timer() interrupt 2//50ms 定時
{
timecount++;
if(timecount==20)
{
timecount=0;
passtime++;//50*20=1s
}
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TR0=1;
}

void displaytimer() interrupt 2//用於數碼管的兩位顯示,十位和各位
{
TH1=(65535-100)/256;
TL1=(65535-100)%256;

shiwei=0;//動態顯示,其中P2.0=0十位選通 P2.1=各位選通
gewei=1;
P0=table[passtime/10];//十位
msdelay();
msdelay();
msdelay();
shiwei=1;
gewei=0;
P0=table[passtime%10];//各位
msdelay();
msdelay();
msdelay();

TR1=1;
}

/************************** shijian bu shi hen zuique de ,yingwei wo meiyou yingjian tiaoshi ,ni you de hua jiu nong yixia kan kan ba .*************************/

❽ 用C或C++寫個課程設計 LINUX的調度和時鍾中斷處理代碼的分析

rt

❾ 51單片機中斷編程

外部中斷信號接到P3.3口,為INT0中斷,程序如下
#include<reg51.h>
sbit X0=P1^0; //用表示P1.0
sbit X1=P1^1; //用X0表示P1.1
sbit X2=P1^2; //用X0表示P1.2
void main(void)
{
P1=0x00; //將P1口初始化位高電平,如果沒有這句,初始化為低電平,這里可根據需要選擇
EA=1; //中斷允許
IT1=1; //觸發方式為下降沿觸發
EX1=1; //外部中斷允許

while(1); //這里可以隨便寫你需要的主程序,我用了個死循環,目的是等待中斷
}

void counter1(void) interrupt 2 //INT1中斷
{
EX1=0; //禁止外部中斷
ET0=1; //計時器中斷0允許
ET1=1; //計時器中斷1允許
TMOD=0x21; //T1用模式2、T0用模式1
IP=0x0a; //T1、T0為高優先順序
X2=~X2; //每次中斷就取反P1.2引腳
X1=1; //P1.1輸出低電平0.3ms
X0=1; //P1.0輸出低電平1.5ms
TH0=0xfd; //T0用模式1,16位計時器,在1.5ms後執行時間中斷0
TL0=0x12;
TH1=0x6a; //T1用模式2,8位計時器,在0.3ms執行時間中斷1
TL1=0x6a;
TR1=1; //啟動計時器T1
TR0=1; //啟動計時器T0
while(X0==1); //等待中斷響應完成
EX1=1; //允許外部中斷

}
void counter2(void) interrupt 1 //定時器0中斷
{
X0=0;
}
void counter3(void) interrupt 3 //定時器1中斷
{
X1=0;
}
程序已經經過模擬調試,可以完成你的要求,等待加分中。。。。
PS一下,如果滿意的話,十分期待給好評,謝謝了

熱點內容
幼師專業怎麼樣 發布:2021-03-16 21:42:13 瀏覽:24
音樂小毛驢故事 發布:2021-03-16 21:40:57 瀏覽:196
昂立中學生教育閘北 發布:2021-03-16 21:40:47 瀏覽:568
建築業一建報考條件 發布:2021-03-16 21:39:53 瀏覽:666
2017年教師資格注冊結果 發布:2021-03-16 21:39:49 瀏覽:642
中國教師資格證查分 發布:2021-03-16 21:39:41 瀏覽:133
踵什麼成語有哪些 發布:2021-03-16 21:38:20 瀏覽:962
東營幼師專業學校 發布:2021-03-16 21:35:26 瀏覽:467
機械電子研究生課程 發布:2021-03-16 21:33:36 瀏覽:875
杭州朝日教育培訓中心怎麼樣 發布:2021-03-16 21:33:28 瀏覽:238