导航:首页 > 操作系统 > 单片机24小时计时代码

单片机24小时计时代码

发布时间:2022-06-16 03:51:19

1. 求单片机C语言的电子闹钟设计程序 其功能只要有闹钟,一天24小时的时钟功能就行。

你看看行不行
#include<reg51.h>
uchar code tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}
void view() /*七段数码管显示程序 七个管轮流显示*/
{P3=0x01;
unsigned int i=0;
while(i<6)
{n=vnum;
P1=tab[n];
P3<<=1;
i++;
}
}
void mDelay(unsigned int Delay) /*延时程序*/
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void jumpnum() /*用于钟表时分秒的进位*/
{if(jnum(5)>9) /*秒进位
{jnum[4]=jnum[4]+1;
jnum[5]=0;
if(jnum[4]>6) /*秒到分进位
{jnum[3]=jnum[3]+1;
jum[4]=0;
if(jnum[3]>9) /*分进位
{jnum[2]=jnum[2]+1;
jnum[3]=0;
if(jnum[2]>6) /*分到时进位
{jnum[1]=jnum[1]+1;
jnum[2]=0;
if(jnum[1]>9) /*时的进位
{jnum[1]=0;
jnum[0]=jnum[0]+1;
}
else if(jnum[1]>4&&jnum[0]>=2)
{jnum[1]=0;
jnum[0]=0;
}
}
}
}
}
void key() /*键盘控制程序
{if((P2&0xFF)!=0xFF); /*防抖动
{mDelay(3000);
if((P2&0xFF)!=0xFF)
{unsign int c;
c=1;
while(c<4)
{ if((P2&0xFF)!=0xFF);
{mDelay(3000);
vnum[]=num[];
void view();
if((P2&0xFF)!=0xFF)
{switch(P2): /*判断不同的按键
{case 0xFE: c++; /*c用于判断是闹钟调时c=3还是时钟调时c=2
case oxFD :if(c=2) /*分位增加
{num[3]++;}
else if(c=3)
{lnum[3]++;
}
case oxFC :if(c=2) /*时位增加
{num[1]++;}
else if(c=3)
{lnum[1]++;
}
}
if(c=2) /*增加后判断是否需要进位
{jnum[]=num[];
jumpnum();
vnum[]=num[];
void view[];}
if(c=3)
{jnum[]=lnum[];
jumpnum();
vnum[]=num[];
void view[];}}}}}}}
void clock() /*闹钟程序
{for(cl=0;num[cl]==lnum(cl);cl=cl+1) /*当前时间与设定时间相同
{;}
unsigned int kp=0;
if(cl==5&&kp==0) /*闹钟铃声
{for(i=1;i<100;i++)
{P1_7=~P1_7;
for(j=1;i<=100;j++);}
void mDelay(3000);
for(i=1;i<100;i++)
{P1_7=~P1_7;
for(j=1;i<=100;j++);}
vnum[]=num[];
void view();
if((P2&0xFF)!=0xFF); /*判断是否有按键,有则停止闹钟
{mDelayd(3000)
void view();
if((P2&0xFF)!=0xFF)
{kp=1;}
}}}
viod intclock() /*整点报时程序
{unsigned int ic,i;
if(num[2]==5&&num[3]==9&&num[4]==5&&num[5]==0) /*判断差十秒整点
{if(ic=num[5]+2;(ic==(num[5]+2))&&num[5]<59;ic=num[5]) /*开始发出500hz声因
{for(i=0;i<100;i++)
{P1_7=~P1_7;
for(i=0;i<=100;i++)
}
for(i=1;i<150;i++) /*1000hz声音
{P1_7=~P1_7;
for(i=0;i<=50;i++)
}}}}
void count() inturrupt 1 using 2 /*计时程序
{cn++;
if(cn==20)
{num[5]++;
cn=0;
}
}
void main()
{ P2=0x00;
unsigned int num[5],jnum[5],lnum[5];
ET0=1;
EA=1;
TR0=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
TMOD=0x01;
TH0=0x3C;
TL0=0xB0;
unsigned int cn=0;
P2=0x00;
while(1)
{void key();
void view();
void jumpnumber();
void clock();
void intclock();
}
}

2. 单片机时钟程序 24小时制

C语言的:
#include <reg51.h>
#include<stdio.h>

unsigned char ledbuf[8];
code unsigned char ledmap[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80, 0x90}; //8段显示

void delay(unsigned char cnt)
{
unsigned char i;
while(cnt--!=0)
for(i=100;i!=0;i--);
}

#define tick 7554
#define T100us (256-134)
unsigned char hour,minute,second,ankey;
unsigned int c100us;

void sees()
{
ledbuf[0]=ledmap[hour/10];
ledbuf[1]=ledmap[hour%10];
ledbuf[2]=0xbf;
ledbuf[3]=ledmap[minute/10];
ledbuf[4]=ledmap[minute%10];
ledbuf[5]=0xbf;
ledbuf[6]=ledmap[second/10];
ledbuf[7]=ledmap[second%10];
}

void displayled()
{

char i;
unsigned char pos;
pos=0x01;
for(i=7;i>=0;i--)
{
P2=0x255;
P0=ledbuf[i];
P2=~pos;
delay(2);
P2=0x255;
pos<<=1;
}
}

void key()
{

if(P32==0||P33==0||P35==0)
delay(2);
if(P32==0||P33==0||P35==0)
{
if(P32==0)
{
hour++;
if(hour==24)
hour=0;
while(P32==0)
{
sees();
displayled();
}
}
if(P33==0)
{
minute++;
if(minute==60)
minute=0;
while(P33==0)
{
sees();
displayled();
}
}
if(P35==0)
{
second++;
if(second==60)
second=0;
while(P35==0)
{
sees();
displayled();
}
}
}

}

void t0int()interrupt 1
{
c100us--;
if(c100us==0)
{
c100us=tick;
second++;

if(second==60)
{
second=0;
minute++;

if(minute==60)
{
minute=0;
hour++;
if(hour==24)hour=0;
}
}
}
}

void main()
{

TMOD=0x02;
TH0=T100us;
TL0=T100us;
IE=0x82;
hour=0;
minute=0;
second=0;
c100us=tick;
TR0=1;

while(1)
{
sees();
displayled();
key();
}
}

汇编的:
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME

ORG 0300H
MAIN:
MOV P3,#0FFH;
MOV 25H,#00H;
MOV R0,#40H;
MOV 20H,#00H;
MOV 21H,#00H;
MOV 22H,#00H;
MOV 23H,#00H;
MOV P2,#0FFH
MOV IP,#02H;
MOV IE,#82H;
MOV TMOD,#01H;
MOV TL0,#0B0H;
MOV TH0,#3CH;
SETB TR0;
MOV SP,#50H;

NEXT:
LCALL DISP;
LCALL KEY;
JZ NEXT;
LCALL ANKEY;
SJMP NEXT;
NOP
NOP;
NOP;

TIME:
PUSH ACC;
PUSH PSW;
MOV TL0,#0B4H;
MOV TH0,#3CH;
INC 20H;
MOV A,20H;
CJNE A,#20,RETI1;

MOV 20H,#00H;
MOV A,21H;
INC A;
MOV 21H,A;
CJNE A,#3CH,RETI1;
MOV 21H,#00H;
MOV A,22H;
ADD A,#01H;

MOV 22H,A;
CJNE A,#3CH,RETI1;
MOV 22H,#00H;
MOV A,23H;
ADD A,#01H;

MOV 23H,A;
CJNE A,#18H,RETI1;
MOV 23H,#00H;

RETI1:
POP PSW;
POP ACC;
RETI;
NOP
NOP

DISP:

MOV A,21H;

MOV B,#10;
DIV AB;
MOV 41H,A;
MOV 40H,B;

MOV A,22H;

MOV B,#10;
DIV AB;
MOV 43H,A;
MOV 42H,B;

MOV A,23H;

MOV B,#10;
DIV AB;
MOV 45H,A;
MOV 44H,B;

MOV R0,#40H
LCALL DISP2; 1
CLR P2.0;
LCALL DELAY;
SETB P2.0;

INC R0;
LCALL DISP2;
CLR P2.1;
LCALL DELAY;
SETB P2.1;

MOV P0,#0bfh;
CLR P2.2 ;
LCALL DELAY;
SETB P2.2;

INC R0;
LCALL DISP2;
CLR P2.3;
LCALL DELAY;
SETB P2.3;

INC R0;
LCALL DISP2;
CLR P2.4;
LCALL DELAY;
SETB P2.4;

MOV P0,#0BFH;
CLR P2.5;
LCALL DELAY;
SETB P2.5;

INC R0;
LCALL DISP2;
CLR P2.6;
LCALL DELAY;
SETB P2.6;

INC R0;
LCALL DISP2;
CLR P2.7;
LCALL DELAY;
SETB P2.7;
MOV R0,#40H;

DISP2:
MOV DPTR,#TABLE;
MOV A,@R0;
MOVC A,@A+DPTR;
MOV P0,A;
RET

DELAY:
MOV R6,#255;
D2:DJNZ R6,D2;
RET;

TABLE:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
; 0 1 2 3 4 5 6 7 8 9

;按键判断程序
KEY:
MOV A,P3;
CPL A;
ANL A,#3CH;
JZ RETX ;无键按下则返回
LCALL DISP ;
LCALL DELAY;

MOV A,P3;
CPL A;
ANL A,#3CH;
JZ RETX ;无键按下则返回

MOV R6,A ;将键值存入R6。
LOOP2: LCALL DISP ;
MOV A,P3;
CPL A;
ANL A,#3CH;
JNZ LOOP2 ;等待键释放
MOV A,R6;
RETX:
MOV P3,#0FFH;
RET;
NOP
NOP
;按键处理子程序
ANKEY: CLR EA;关中断
LX: MOV A,R6;
JB ACC.2,L1;是功能键转L1
JB ACC.3,L2;是确认键转L2
JB ACC.4,L3;是减1键转L3
JNB ACC.5,L12;不是增1键,转L12
JB 2BH.4,L6;判断使哪一位(时、分、秒)的值加1
JB 2DH.4,L8;
JB 2FH.4,L9;

L12: LCALL DISP;
LCALL DISP;
LCALL KEY;判断有无键按下。
JZ L12;
LJMP LX;

L2: MOV 25H,#00H ;确认键处理程序
CLR 2BH.4;
CLR 2DH.4;
CLR 2FH.4;
SETB EA;
RET;

L3: JB 2BH.4,L61;减一键处理程序
JB 2DH.4,L81;
JB 2FH.4,L91;
AJMP L12;

L1: MOV A,25H;功能键处理程序
JZ LB1;
JB ACC.0,LB2;
JB ACC.1,LB3;
JNB ACC.2,L12;

LB1: MOV 25H,#01H;25H单元是标志位,(25H)=01H调节时单元的值
SETB 2BH.4;
CLR 2DH.4;
CLR 2FH.4;
AJMP L12;

LB3: MOV 25H,#04H;25H单元是标志位,(25H)=04H调节秒单元的值
SETB 2FH.4;
CLR 2DH.4;
CLR 2BH.4;
AJMP L12;

LB2: MOV 25H,#02H;25H单元是标志位,(25H)=02H调节分单元的值
SETB 2DH.4;
CLR 2BH.4;
CLR 2FH.4;
AJMP L12;

L61: AJMP L611;
L81: AJMP L811;
L91: AJMP L911;
L112:AJMP L12;

L6: MOV A,23H;时加一
INC A;
MOV 23H,A;
CJNE A,#24H,L12;
MOV 23H,#00H;
AJMP L12;

L8: MOV A,22H;分加一
INC A;
MOV 22H,A;
CJNE A,#60H,L12;
MOV 22H,#00H;
AJMP L12;

L9: MOV A,21H;秒加一
INC A;
MOV 21H,A;
CJNE A,#60H,L12;
MOV 21H,#00H;
AJMP L12;

L611: MOV A,23H;时减一
DEC A;

MOV 23H,A;
CJNE A,#00H,L112;
MOV 23H,#23H;
AJMP L12;

L811: MOV A,22H;分减一
DEC A;

MOV 22H,A;
CJNE A,#00H,L112;
MOV 22H,#59H
AJMP L12;

L911: MOV A,21H;秒减一
DEC A;

MOV 21H,A;
CJNE A,#00H,L112;
MOV 21H,#59H;
AJMP L12;
NOP
NOP
END

3. 下面是51单片机30秒倒计时程序,怎么把它改成24小时倒计时程序,别的不变,十分感谢

#include "reg51.h"
sbit start=P3^2; //外部中断0引脚 开始
sbit rst=P3^3; //外部中断1引脚 复位
sbit breakk=P3^4;
sbit led=P3^5;
sbit beep=P3^7;

sbit P30=P3^0;
sbit P31=P3^1;
unsigned char code anma[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};

char time=24;//【原来的30s改为24小时】
char flag_t=0; // 1秒辅助计时
char now=0; // 0停止 1 计时 2报警 3复位
unsigned int temp=0;//【添加此行】// 【定义一个16位临时变量】

unsigned char g=0,s=3,i=0;

void delay(unsigned int n)
{
while(--n);
}

void t0_srv() interrupt 1 using 1
{
TH0=0X3C;
TL0=0XB0;
flag_t++;
if(flag_t>=20){ //20*50ms=1s
flag_t=0;
temp++; //【添加此行】
if(temp>=3600)//1小时=3600s //【添加此行】
{
temp=0;//【添加此行】
time--;
if(time<=0){
beep=0;
led=0;
TR0=0;
now=2;
time=0;
}
}
}
}
void button_start() interrupt 0 using 1 //外部中断0
{
delay(1500);
if(start==0) {
now=1;
TR0=1;
}
else return;
while(start==0);
delay(1500);

}
void button_rst() interrupt 2 using 1
{
delay(1500);
if(rst==0) {
TR0=0;
time=24;//【原为time=30;】
i=0;
led=1;
beep=1;
now=0;
}
else return;
while(rst==0);
delay(1500);

}

void disp()
{

g=time%10;
s=time/10;
g=anma[g];
s=anma[s];

P1=g;
P31=0;
delay(250);
P31=1;

P1=s;
P30=0;
delay(250);
P30=1;
//

}
void key()
{
if(breakk==0)delay(1500);
else return;
if(breakk==0) {
if(now==1){
i++;
if(i%2)TR0=0;
if(!(i%2))TR0=1;
}
}
else return;
while(breakk==0);
delay(1500);
}
main()
{
TMOD=0X01;//定时器0工作在方式1,
EA=1;
IT0=1;
ET0=1;
TH0=0X3C;//在12M 晶振下,定时时间为50ms
TL0=0XB0;

EX0=1;
EX1=1;

//TR0=1;
while(1){
disp();
key();
}

}

4. 单片机时钟和倒计时器的汇编语言代码,哪位大侠能给出每个语句的注释解释,感激不尽

ORG 0000H;程序起始于地址0000H,(一般不这样用)
LJMP MAIN;跳到主程序MAIN
ORG 000BH;外部中断INT0程序的地址,此为规定的
LJMP INTT0;跳到外部中断INTT0程序
ORG 001BH;外部中断INT1程序的地址,此也为规定的
LJMP INTT1;跳到外部中断INTT1程序
ORG 0100H;主程序MAIN地址
MAIN: MOV SP,#60H;给堆栈指针SP附内部数据存储器地址60H
MOV 31H,#0;给31H地址内清零即(31H)=0
MOV 20H,#0FEH ;(20H)=11111110B
MOV 21H,#0FFH;(21H)=11111111B
MOV P1,20H;P1=11111110B
LCALL SHEZHI1;调用程序段SHEZHI1
MOV 20H,#0FDH;(20H)=11111101B
MOV P1,20H;P1=11111101B
MOV 40H,#10;(40H)=0AH
SETB EA;开总中断
SETB ET0;开定时中断T0
MOV TMOD,#11H;设置T0工作于定时方式1
MOV TH0,#3CH;定时初值设置高位
MOV TL0,#0B0H;定时初值设置低位
SETB TR0;允许T0中断
LL: LCALL KEY;调用KEY
LCALL KEYC;调用KEYC
SJMP LL;循环调用回LL
INTT0: PUSH ACC;将ACC值压栈
PUSH PSW;将PSW值继续压栈
SETB RS1;RS1位置1
SETB RS0;RS0位置1,即选中内部数据存储器组的3组
DJNZ 40H,DOWN;判断十次结束否?且计数值自减一,若没有够十次,则转入程序DOWN , 否则顺序执行
MOV 40H,#10;继续在(40H)存入计数值十
MOV R0,#41H;(R0)=41H
MOV A,@R0 ; 判秒是否到60
ADD A,#1;A中值加一
DA A;十进制调整
MOV @R0,A;再送回原单元
CLR C;清进位位
SUBB A,#60H;与60相减
JC DOWN;通过判断进位位看是否到60了,没到就去DOWN,到了就顺序执行
MOV @R0,#0;41H单元清零
INC R0;地址自加一
MOV A,@R0 ; 判分是否到60
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#60H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判时是否到24
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#24H
JC DOWN
MOV @R0,#0
INC R0
MOV A,@R0 ; 判日是否到指定天数
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
MOV R4,A ;月份送R4,本月天数送R5
JNB ACC.4,NEXT2
CLR C
SUBB A,#06H
NEXT2: MOV DPTR,#DAYTAB
DEC A
MOVC A,@A+DPTR
MOV R5,A
CJNE R4,#2,NEXT
JNB 08H,NEXT1
NEXT: INC R5
NEXT1: DEC R0
MOV A,R5
CLR C
SUBB A,@R0
JNC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ; 判月是否到13
ADD A,#1
DA A
MOV @R0,A
CLR C
SUBB A,#13H
JC DOWN
MOV @R0,#1
INC R0
MOV A,@R0 ;判年低位是否到00
ADD A,#1
DA A
MOV @R0,A
INC R0
MOV A,@R0
ADDC A,#0
DA A
MOV @R0,A
DOWN: MOV A,#42H
CJNE A,4EH,DOWN2
MOV A,#43H
CJNE A,4FH,DOWN2
CLR 07H
DOWN2: JB 06H,DOWN4
DOWN4: CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
POP PSW
POP ACC
RETI
DAYTAB: DB 31H,28H,31H,30H,31H,30H,31H,31H,30H,31H,30H,31H

5. 单片机课程设计 设计制作一个24小时制多功能数字钟

额。。。。。这个东西就是零碎的东西加起来变成一个一个整体的啊,讲个思路,写个中断服务程序,里面的是led灯亮的程序,和1秒的计时程序,写个beep子程序控制蜂鸣器,写个display子程序,控制icl0809,主程序循环控制,显示数码管,显示am,过了12,进入中断,显示pm,这个其实很简单的,我才大三,单片机才学了四个星期,我都会做,相信你能行的。。。

6. 单片机C语音简单的程序 大家帮我看下 就是24小时计时 但是到了24它没有清零 谢谢

按照楼主的思路,改了改,试试看:
void shijian()
{
c = 0; a++;
if(a == 10) {
a = 0; b++;
if(b == 6) {
b = 0; d++;
if(d == 10) {
d = 0; e++;
if(e == 6) {
e = 0; f++;
if((g == 2) && (f == 4)) { f = 0; g = 0; }
if(f == 10) { f = 0; g++; }
}
}
}
}
}

7. 谁能告诉我51单片机简单的led数码管时钟程序 24小时制的(c语言版的)

#include "reg52.h"
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar shi,fen,miao;
uchar time;
void delay(uint x)
{
uint y;
for(;x>0;x--)
{
for(y=0;y<124;y++);
}
}
void display(uchar shi,uchar fen,uchar miao)
{
P2=0; //位码
P0=(tab[shi/10]); //段码
delay(2);
P2=1;
P0=(tab[shi%10]);
delay(2);
P2=2; //位码
P0=0x40; //段码
delay(2);
P2=3; //位码
P0=(tab[fen/10]); //段码
delay(2);
P2=4;
P0=(tab[fen%10]);
delay(2);
P2=5; //位码
P0=0x40; //段码
delay(2);
P2=6; //位码
P0=(tab[miao/10]); //段码
delay(2);
P2=7;
P0=(tab[miao%10]);
delay(2);

}
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
while(1)
{

if(time==20)
{
time=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
shi=0;
}

}

}
display(shi,fen,miao);
}
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}

/*还有什么不明白继续追加*/

8. 用52单片机做电子时钟,编写程序12/24小时切换,怎么写急!!!

编写两个函数,一个12小时制,一个24小时制,一个按键做标记,根据标记来选择是12小时的还是24小时的。反正按键能多功能复用。多写一个函数也占不了多少存储空间,而且还能体现C的模块化思想。

9. 单片机 at89c51 6位数码管24小时倒计时程序。怎么办

"#include<reg51.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
hour,min,sec;
uint
count;
uchar
code
tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar
code
add[6]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
/*************************延时一毫秒*********************/
void
delay1ms(void)
{
unsigned
char
a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
/***************定时器0中断函数,用于计时****************/
void
timer0(void)interrupt
1
{
TH0=0x00;
TL0=0x38;
counter--;
if(counter==0)
{
sec--;
if(sec==-1)
{
sec=59;
min--;
if(min==-1)
{
min=59;
hour--;
if(hour==-1)
{
hour=23;
}
}
}
}
}
/*****************************主函数***********************/
void
main()
{
uchar
i;
uchar
display[6];
counter=5000;
sec=min=59;hour=23;
TMOD=0x02;
TH0=0x00;TL0=0x38;
ET0=1;TR0=1;
EA=1;
while(1)
{
display[0]=hour/10;
display[1]=hour%10;
display[2]=min/10;
display[3]=min%10;
display[4]=sec/10;
display[5]=sec%10;
for(i=0;i<8;i++)
{
P0=tab[display[i]];
P2=add[i];
delay1ms();
P2=0xff;
}
}
}"

10. 单片机 at89c51 6位数码管24小时倒计时程序

留个邮箱发给你。

阅读全文

与单片机24小时计时代码相关的资料

热点内容
南诏pdf 浏览:745
windows如何代码bat启动服务器 浏览:454
软件太卡与服务器有什么关系 浏览:402
给心理治疗师pdf 浏览:220
robinhood加密交易条件 浏览:313
卫生间解压方法 浏览:452
u盘如何做加密文件放照片 浏览:331
文件夹自己加了exe 浏览:262
小猪cms直播系统源码 浏览:878
山东广电云服务器 浏览:354
javadate与mysqldate 浏览:244
javalong比较 浏览:12
加密大师看不见加密文件 浏览:307
想做一个业余程序员 浏览:793
python选出行 浏览:249
cat命令windows 浏览:910
python算术游戏 浏览:532
常微分方程第二版pdf 浏览:25
phpJava学多久 浏览:724
php博客毕业设计 浏览:796