汇编网首页登录博客注册
q470393267的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2009-06-06 12:46] 单片机课程设计(基于DS1302的51单片机数字时钟与日历系统)

图片载入中
功能: 
1),主界面显示日期和时间,具有调整时间信息和闹钟功能,时间信息在断电后能继续在DS1302芯片中内部供电运行,显示部分在LCD1602上面显示,另外还带有DS18B20温度检测芯片,也在LCD1602上显示实时温度(精确到1度)代码标注我不想写了哦~,这点我还蛮水,叫不会讲道理啊谁让咱高中语文学那么那么水呢~ 这也是我自《汇编语言》课设2后最长的程序,虽然啰里巴嗦的还是挺满意的就是那X86让人郁闷呢~
代码如下: 
          RS EQU P1.5    ;确定具体硬件的连接方式 
    RW EQU P1.6    ;确定具体硬件的连接方式 
    E EQU P1.7    ;LCD1602引脚 
    SCLK EQU P3.4                ;DS1302引脚 
    IO   EQU P3.3 
    RST  EQU P3.5 
DQ   EQU P1.4              ;DS18B20引脚 
TEMPER_L EQU 61H ;用于保存读出温度的低8位 
TEMPER_H EQU 60H ;用于保存读出温度的高8位 
FLAG1 EQU 3FH ;是否检测到DS18B20标志位 
A_BIT1 EQU 3DH ;数码管十位数存放内存位置 
B_BIT1 EQU 3EH ;数码管个位数存放内存位置 
    ORG 0H 
    AJMP MAIN 
       ORG 0BH 
       AJMP JST0 
    ORG  1BH 
       AJMP TIM0 
;准备部分代码 
MAIN:  MOV TMOD,#11h 
       SETB ET0 
       SETB ET1 
       SETB EA       ;开定时器1,定时器0和中断总控 
    MOV R0,#20H 
D:     MOV @R0,#20H 
    INC R0 
    CJNE R0,#3fH,D 
    MOV R0,#33H 
D0:    MOV @R0,#3AH                 ;':' 
       INC R0 
    INC R0 
    INC R0 
    CJNE R0,#39H,D0 
       ACALL D1 
    MOV R0,#49H 
    MOV R1,#0 
    MOV DPTR,#TAB1 
NAO:   MOV A,R1 
       MOVC A,@A+DPTR 
    MOV @R0,A 
    INC R0 
    INC R1 
    CJNE R1,#8,NAO 
    MOV R1,#4AH 
    MOV R7,#52H 
    ACALL ASCB 
    MOV R1,#4DH 
    MOV R7,#51H 
    ACALL ASCB 
     
    MOV P0,#1H     ;清屏并光标复位 
    ACALL ENABLE     ;调用写入命令子程序 
    MOV P0,#38H     ;设置显示模式:8位2行5X7点阵 
    ACALL ENABLE     ;调用写入命令子程序 
    MOV P0,#6H     ;文字不动,光标自动右移 
    ACALL ENABLE     ;调用写入命令子程序 
    ACALL SZXS1 
MOV P0,#0CFH     ;自建字型 
MOV A,#0 
LCALL WRITE2 
mov P0,#40h 
    Acall enable 
    mov dptr,#tab2 
Acall writestring2 
;主程序代码 
D3:  ACALL XSSJ 
       ACALL ANJ 
       CJNE A,#0E7H,D4 
    ACALL SZSJ 
    SJMP D3 
D4:    CJNE A,#0D7H,D5 
       ACALL SZNZ 
    SJMP D3 
D5:    CJNE A,#0B7H,D3 
    MOV A,21H 
    CJNE A,#0EFH,D6 
    MOV 21H,#20H 
    SJMP D3 
D6:    MOV 21H,#0EFH     
       SJMP D3 
XSSJ:  MOV P0,#0CH     ;显示器开、光标关 
    ACALL ENABLE     ;调用写入命令子程序 
SJ:    MOV R0,#25H 
       MOV A,#8DH                   ;年份 
       ACALL DS1302 
    ACALL BCD 
    INC R0 
    MOV R1,#89H                  ;月份和日期 
SJ1:   MOV A,R1 
    ACALL DS1302 
    ACALL BCD 
    INC R0 
    DEC R1 
    DEC R1 
    CJNE R1,#85H,SJ1 
       MOV A,#8BH                   ;星期 
       ACALL DS1302 
    ACALL BCD 
MOV 2EH,#57H 
    INC R0 
    MOV R1,#85H                  ;时分秒 
SJ2:   MOV A,R1 
    ACALL DS1302 
    ACALL BCD 
    INC R0 
    DEC R1 
    DEC R1 
    CJNE R1,#7FH,SJ2 
    MOV R0,#20H 
    ACALL SZXS 
    RET 
DS1302:ACALL WRITE 
    ACALL READ 
    CLR RST 
    RET 
D1:    MOV R0,#23H 
    MOV @R0,#32H 
    INC R0 
    MOV @R0,#30H                ;年份高两位为20 
    MOV R0,#27H 
D2:    MOV @R0,#0B0H 
       INC R0 
    INC R0 
    INC R0 
    CJNE R0,#2DH,D2             ;内存20H-3EH单元存放显示时间界面部分信息   
       RET     
;BCD码转换为ASCII码 
BCD:   MOV B,#10H 
       DIV AB 
    ADD A,#30H 
    MOV @R0,A 
    INC R0 
    MOV A,B 
    ADD A,#30H 
    MOV @R0,A 
    INC R0 
    RET 
ASC:   INC @R1 
       MOV A,@R1 
    DEC R1 
    CJNE A,#3AH,ASC1 
ASC1:  JC ASC2 
       INC R1 
    MOV @R1,#30H 
    DEC R1 
       INC @R1 
ASC2:  MOV A,@R1 
       CJNE A,#3AH,ASC3 
ASC3:  JC ASC4 
       MOV @R1,#30H 
ASC4:  INC R1 
ASCB:  DEC R1 
       MOV A,@R1 
       ANL A,#0FH 
       MOV B,#10H 
       MUL AB 
    MOV B,A 
       INC R1 
    MOV A,@R1 
       ANL A,#0FH 
    ADD A,B 
       MOV B,R7 
    MOV R0,B 
    MOV @R0,A 
       RET 
SJBZ:  CJNE R5,#86H,BZ0 
       MOV A,45H 
    CJNE A,#2,BZX 
    MOV A,44H 
    CJNE A,#29H,BZX 
    MOV 44H,#28H 
    MOV 2CH,#38H 
    MOV 2BH,#32H 
    SJMP BZX 
BZ0:   CJNE R5,#89H,BZ1 
       CJNE @R0,#2,YF1 
    ACALL NIAN     
    CJNE A,#0,YF1 
    MOV A,44H 
    CJNE A,#29H,YF 
    SJMP BZR 
YF:    JC BZR 
    MOV 44H,#29H 
    MOV 2CH,#39H 
    MOV 2BH,#32H 
    SJMP BZR 
YF1:   CJNE @R0,#13H,YF2 
YF2:   JNC BZ 
       MOV A,45H 
    MOV DPTR,#TAB 
    MOVC A,@A+DPTR 
    CJNE A,44H,YF3 
YF3:   JNC BZR 
    MOV 44H,A   
    MOV B,#10H 
    DIV AB 
    ADD A,#30H 
    MOV 2BH,A 
    MOV A,B 
    ADD A,#30H 
    MOV 2CH,A 
    SJMP BZR 
BZ:    JC BZR 
       ACALL ZIBZ 
BZX:   SJMP BZR 
BZZ:   JC BZR 
       ACALL ZIBZ1 
    SJMP BZR 
BZW:   JNC BZR 
       ACALL ZIBZ     
    SJMP BZR     
BZ1:   CJNE R5,#8cH,BZ2 
       MOV A,45H 
    CJNE A,#2,RQ1 
    ACALL NIAN 
    CJNE A,#0,RQ1 
    CJNE @R0,#29H,BZ 
    SJMP BZR 
RQ1:   MOV A,45H 
       MOV DPTR,#TAB 
    MOVC A,@A+DPTR 
       CJNE A,44H,BZW     
    SJMP BZR 
BZ2:   CJNE R5,#8FH,BZ3       
    MOV 2EH,#57H 
       CJNE @R0,#7H,BZ 
       SJMP BZR 
BZ3:   CJNE R5,#0c2H,BZ4 
       CJNE @R0,#23H,BZZ 
    SJMP BZR 
BZ4:   CJNE R5,#0C5H,BZR 
       CJNE @R0,#59H,BZZ 
BZR:   RET 
NIAN:  MOV A,46H 
    MOV B,#10H 
    DIV AB 
    MOV R2,B 
    MOV B,#10 
    MUL AB 
    ADD A,R2 
    MOV B,#4 
    DIV AB 
    MOV A,B 
    RET 
ZIBZ:  MOV @R0,#1 
    MOV @R1,#31H 
    DEC R1 
    MOV @R1,#30H 
    INC R1 
    MOV 2EH,#57H 
    RET 
ZIBZ1: MOV @R0,#0 
    MOV @R1,#30H 
    DEC R1 
    MOV @R1,#30H 
    INC R1 
    RET 
;按键处理 
ANJ: SETB RS1 
     LCALL GET_TEMPER 
     LCALL TEMPCOV                 ;处理温度 
  CLR RS1 
     MOV P2,#0F7H 
       MOV A,21H 
       CJNE A,#0EFH,AJ1 
    MOV A,#85H 
       ACALL DS1302 
    CJNE A,52H,AJ1 
    MOV A,#83H 
       ACALL DS1302 
    CJNE A,51H,AJ1 
    MOV A,#81H 
       ACALL DS1302 
    CJNE A,#0,AJ1 
    ACALL LIN 
    SJMP AJR 
AJ1:   MOV P2,#0F7H 
       MOV A,P2 
    ANL A,#0F0H 
    CJNE A,#0F0H,AJ 
    SJMP AJR 
AJ:    ACALL DAY                    ;按键延时0.1s 
       MOV A,P2 
    MOV R4,#200 
AJR: RET 
   
TEMP0: INC A 
AJMP TEMP1 
TEMPCOV:MOV A,TEMPER_L ;数据处理子程序TEMPCOV 
MOV B,#16 
DIV AB 
JB B.3,TEMP0 
TEMP1: MOV 62H,A ;将TEMPER_L的高四位右移四位,存入62H中(温度值) 
MOV A,TEMPER_H ;TEMPER_H中存放高8位数,权重16 
MOV B,#16 
MUL AB 
ADD A,62H ;62H中存入温度值的整数部分 
MOV B,#10 
DIV AB 
PUSH ACC 
MOV A,B 
ADD A,#30H 
MOV B_BIT1,A ;个位存入3EH中 
POP ACC 
MOV B,#10 
DIV AB 
MOV A,B 
ADD A,#30H 
MOV A_BIT1,A ;十位存入3DH中 
EXIT7: RET 
INIT_1820: ;这是DS18B20复位初始化子程序 
SETB DQ 
NOP 
CLR DQ ;主机发出延时537微秒的复位低脉冲 
MOV R1,#3 
TSR1: MOV R0,#107 
DJNZ R0,$ 
DJNZ R1,TSR1 
SETB DQ ;然后拉高数据线 
NOP 
NOP 
NOP 
MOV R0,#25H 
TSR2: JNB DQ,TSR3 ;等待DS18B20回应 
DJNZ R0,TSR2 
SJMP TSR4 ;延时 
TSR3: SETB FLAG1 ;置标志位,表示DS1820存在 
SJMP TSR5 
TSR4: CLR FLAG1 ;清标志位,表示DS1820不存在 
SJMP TSR7 
TSR5: MOV R0,#117 
TSR6: DJNZ R0,TSR6 ;时序要求延时一段时间 
TSR7: SETB DQ 
RET 
;------------------------------------------------- 
GET_TEMPER: ;读出转换后的温度值 
SETB DQ 
LCALL INIT_1820 ;先复位DS18B20 
JB FLAG1,TSS2 
RET ;判断DS1820是否存在?若DS18B20不存在则返回 
TSS2: MOV A,#0CCH ;跳过ROM匹配 
LCALL WRITE_1820 
MOV A,#44H ;发出温度转换命令 
LCALL WRITE_1820 
MOV R1,#4            ;等待AD转换结束,750微秒 
TSS3:MOV R0,#107 
DJNZ R0,$ 
DJNZ R1,TSS3 
LCALL INIT_1820 ;准备读温度前先复位 
MOV A,#0CCH ;跳过ROM匹配 
LCALL WRITE_1820 
MOV A,#0BEH ;发出读温度命令 
LCALL WRITE_1820 
LCALL READ_18200 ;将读出的温度数据保存 
RET 
;写DS18B20的子程序(有具体的时序要求) 
WRITE_1820: MOV R2,#8 ;一共8位数据 
CLR C 
WR1: CLR DQ 
MOV R3,#6 
DJNZ R3,$ 
RRC A 
MOV DQ,C 
MOV R3,#23 
DJNZ R3,$ 
SETB DQ 
NOP 
DJNZ R2,WR1 
SETB DQ 
RET 
;读DS18B20的程序,从DS18B20中读出两个字节的温度数据 
READ_18200: MOV R4,#2 ;将温度高位和低位从DS18B20中读出 
MOV R1,#TEMPER_L ;低位存入TEMPER_L(TEMPER_L),高位存入(TEMPER_H) 
RE00: MOV R2,#8 ;数据一共有8位 
RE01: CLR C 
SETB DQ 
NOP 
NOP 
CLR DQ 
NOP 
NOP 
NOP 
SETB DQ 
MOV R3,#9 
RE10: DJNZ R3,RE10 
MOV C,DQ 
MOV R3,#23 
RE20: DJNZ R3,RE20 
RRC A 
DJNZ R2,RE01 
MOV @R1,A 
DEC R1 
DJNZ R4,RE00 
RET   
   
;设置时间界面 
SZSJ:  MOV TH0,#3CH 
       MOV TL0,#0B0H ;定时50ms 
       SETB TR0       ;开定时器0 
       MOV R0,#37H 
       MOV @R0,#30H 
    INC R0 
       MOV @R0,#30H 
    MOV R7,#46H 
    MOV R1,#26H 
SZB:   ACALL ASCB 
    INC R1 
    INC R1 
    INC R1 
    DEC R7 
    CJNE R1,#38H,SZB 
       MOV R0,#20H 
       ACALL SZXS 
    MOV R5,#86H 
    MOV R1,#26H 
    MOV R7,#46H 
SZS1:  ACALL ANJ 
       CJNE A,#0E7H,SZS5 
    INC R5 
    INC R5 
    INC R5 
    DEC R7 
    CJNE R5,#92H,SZS2 
    MOV R5,#0C2H 
SZS2:  CJNE R5,#0C8H,SZS3 
    MOV R7,#46H 
       MOV R5,#86H 
SZS3:  MOV A,R5 
       CLR C 
       SUBB A,#60H 
    CJNE A,#60H,SW 
SW:    JC SW1 
       SUBB A,#30H 
SW1:   MOV R1,A 
    SJMP SZS9 
SZS5:  CJNE A,#0D7H,SZS6 
       ACALL ASC 
    ACALL SJBZ 
    MOV R0,#20H 
       ACALL SZXS 
       SJMP SZS9 
SZS6:  CJNE A,#0B7H,SZS7 
       SJMP SZSR 
SZS7:  CJNE A,#77H,SZS9 
       MOV R1,#43H 
SZS8:  MOV A,@R1 
    INC R1 
    XCH A,@R1 
    DEC R1 
    MOV @R1,A 
    INC R1 
    CJNE R1,#45H,SZS8 
    MOV R0,#8CH 
    MOV R1,#46H 
RW_:   MOV A,R0 
    ACALL WRITE 
    MOV A,@R1 
    ACALL WRITE 
    CLR RST 
    DEC R1 
    DEC R0 
    DEC R0 
    CJNE R1,#3FH,RW_ 
    SJMP SZSR 
SZS9:  MOV P0,#0EH     ;显示器开、光标开 
    ACALL ENABLE     ;调用写入命令子程序 
    MOV P0,R5     ;定光标 
    ACALL ENABLE     ;调用写入命令子程序 
       CJNE R4,#0,SZS1 
SZSR:  CLR TR0 
       RET 
;设置闹钟 
SZNZ:  MOV TH0,#3CH 
       MOV TL0,#0B0H ;定时50ms 
       SETB TR0       ;开定时器0 
    MOV R0,#22H 
NZ:    MOV @R0,#20H 
    INC R0 
    CJNE R0,#39H,NZ 
    MOV R0,#31H 
    MOV R1,#49H 
NZ0:   MOV A,@R1 
    MOV @R0,A 
    INC R0 
    INC R1 
    CJNE R1,#51H,NZ0 
    MOV R0,#20H 
       ACALL SZXS1 
    MOV R5,#0C2H 
    MOV R1,#32H 
    MOV R7,#48H 
NZ1:   ACALL ANJ 
       CJNE A,#0E7H,NZ3 
    INC R5 
    INC R5 
    INC R5 
    DEC R6 
    CJNE R5,#0C8H,NZ2 
    MOV R5,#0C2H 
    MOV R7,#48H 
NZ2:   MOV A,R5 
       CLR C 
       SUBB A,#90H 
    MOV R1,A 
    SJMP NZ9 
NZ3:   CJNE A,#0D7H,NZ4 
       ACALL ASC 
    ACALL BZ3 
    MOV R0,#20H 
       ACALL SZXS1 
       SJMP NZ9 
NZ4:   CJNE A,#0B7H,NZ5 
       SJMP NZR 
NZ5:   CJNE A,#077H,NZ9 
       MOV R0,#31H 
    MOV R1,#49H 
NZ6:   MOV A,@R0 
    MOV @R1,A 
    INC R0 
    INC R1 
    CJNE R1,#51H,NZ6 
    MOV R1,#4AH 
    MOV R7,#52H 
    ACALL ASCB 
    MOV R1,#4DH 
    MOV R7,#51H 
    ACALL ASCB 
    MOV 21H,#0EFH 
    SJMP NZR 
NZ9:   MOV P0,#0EH     ;显示器开、光标开 
    ACALL ENABLE     ;调用写入命令子程序 
    MOV P0,R5     ;定光标 
    ACALL ENABLE     ;调用写入命令子程序 
       CJNE R4,#0,NZ1 
NZR:   ACALL D1 
       CLR TR0 
       RET 
SZXS:  MOV 27H,#0B0H 
SZXS1:MOV P0,#0CH     ;显示器开、光标关 
    ACALL ENABLE     ;调用写入命令子程序 
       MOV P0,#80H     ;写入显示起始地址(第一行第一个位置) 
       ACALL ENABLE     ;调用写入命令子程序 
MOV R6,#16 
    ACALL WRITE1 
    MOV P0,#0C0H 
    ACALL ENABLE     ;调用写入命令子程序 
MOV R6,#15 
    ACALL WRITE1 
    RET 
;DS1302部分 
WRITE:  MOV R2,#8 
     CLR C 
  CLR SCLK 
  NOP 
  SETB RST 
  NOP 
LOOP1:  RRC A 
  MOV IO,C 
  NOP 
  SETB SCLK 
  NOP 
  CLR SCLK 
  DJNZ R2,LOOP1 
  RET 
READ:   MOV R2,#8 
LOOP2:  NOP 
  CLR SCLK 
  NOP 
  MOV C,IO 
  NOP 
  RRC A 
  SETB SCLK 
  DJNZ R2,LOOP2 
  RET 
;LCD1602部分 
ENABLE: CLR RS      ;写入控制命令的子程序 
  CLR RW 
  CLR E 
  ACALL DELAY 
  SETB E 
  RET 
WRITE1:MOV A,@R0 
  LCALL WRITE2    ;调用写入数据寄存器子程序 
  INC R0                  ;取码指针加1 
  DJNZ R6,WRITE1 
  RET 
WRITE2: MOV P0,A 
  SETB RS      ;RS=1 
  CLR RW      ;RW=0准备写入数据 
  CLR E      ;E=0执行显示命令 
  ACALL DELAY     ;判断液晶模块是否忙?(用延时代替) 
  SETB E      ;E=1 
  RET 
writestring2: 
   mov R7,#00h 
c1:   mov a,R7 
      movc a,@a+dptr 
   Acall WRITE2 
   inc R7 
   call delay 
      cjne R7,#8,c1 
   ret   
DELAY:  MOV R2,#2FH 
DL1: MOV R3,#0FH 
  DJNZ R3,$ 
  DJNZ R2,DL1 
  RET 
DAY:    MOV R2,#100                ;按键延时0.1s 
DL3:    MOV R3,#250 
DL2:    NOP 
  NOP 
  DJNZ R3,DL2 
  DJNZ R2,DL3 
  RET 
;定时器0中断处理 
JST0:   CJNE R4,#0,JS1 
        SJMP JS2 
JS1:    DEC R4 
JS2:    MOV TH0,#3CH 
        MOV TL0,#0B0H 
        RETI 
lin: setb et1 
  mov 53h,#8 
lin0:MOV 54h,#00 
NEXT:MOV A,54h 
  MOV DPTR,#TABLE2 
  MOVC A,@A+DPTR 
  JZ END0 
  MOV 55h,A 
     ANL A,#0FH 
  MOV 58h,A 
  MOV A,55h 
  SWAP A 
     ANL A,#0FH 
     JNZ SING 
  CLR TR1 
  sJMP lD1 
SING:DEC A 
  MOV 56h,A 
  RL A 
  MOV DPTR,#TABLE1 
  MOVC A,@A+DPTR 
  MOV TH1,A 
  MOV 57H,A 
  MOV A,56h 
  RL A 
  INC A 
  MOVC A,@A+DPTR 
  MOV TL1,A 
  MOV 55H,A 
  SETB TR1 
lD1: ACALL DAY2 
  INC 54h 
  sJMP NEXT 
END0:CLR TR1 
     dec 53h 
  mov r3,53h 
     cjne r3,#0,lin0 
END1:CLR TR1 
     CLR et1 
     ret 
DAY2:   MOV 59h,#2 
DL5:    ACALL XSSJ 
        JNB P2.6,DL6  ;扫描4号键按下则闹钟停止   
  dec 59h 
  mov r3,59h 
        cjne r3,#0,DL5 
  dec 58h 
  mov r3,58h 
        cjne r3,#0,DAY2 
        RET   
DL6:    POP DPH   
        POP DPL   
        MOV DPTR,#END1 
        PUSH DPL 
        PUSH DPH 
        RET   
;闹钟发声部分 
TIM0:PUSH ACC 
  PUSH PSW 
  MOV TL1,55h 
  MOV TH1,57h 
  CPL P3.2 
  POP PSW 
  POP ACC 
  RETI 
TABLE1: DW 64260,64400,64524,64580,64684,64777,64820,64898   
        DW 64968,65030,65058,65110,65157,65178,65217    ;音律表   
TABLE2: DB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H   
        DB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04,0       ;发声部分的延时时间 
TAB:    DB 0,31H,28H,31H,30H,31H,30H,31H,31H,30H 
        DB 0,1,2,3,4,5,31H,30H,31H  ;非闰年下的不同月份下日期的最大值 
TAB1:   DB 30H,38H,3AH,30H,30H,3AH,30H,30H    ;闹钟的初始值 
TAB2: db 18h,1bh,05h,04h,04h,05h,03h,00h
评论次数(6)  |  浏览次数(1215)  |  类型(学习相关) |  收藏此文  | 

[  whos   发表于  2009-06-06 23:27  ]

还在搞啊,嘿嘿……

[  q470393267   发表于  2009-06-07 10:09  ]

这个和上次的性质差别很大的~ 呵呵算是个日历系统~ 之前发的那个没有和时钟芯片(DS1302)联用所以不具备掉电保存时间功能,哎和你说我们还得自己买所有的器件手工焊接,还不知道焊好后能实现功能不啊~不过所有的功能我都在51开发板上面验证过了,就我们老师非得让我们自己动手做苦力~

[  游客   发表于  2009-06-08 11:20  ]

哇塞!!
我们这学电子的也是自己买零件焊接的,锻炼动手能力的同时让自己也别浪费材料,自己买的用心。呵呵

[  q470393267   发表于  2009-06-08 19:13  ]

说起自己买零件焊接就烦,这东西我们学校就是让我们自己设计原理图然后买元件焊接的,那么多的线焊那么辛苦结果把程序烧进去什么反应都没有,还是买的开发板好用点,别人的PCB那么方便学校非得让我们受这苦~

[  pmsheep82   发表于  2009-06-08 19:58  ]

请问零件一般在哪能买到?

[  q470393267   发表于  2009-06-08 20:00  ]

我是在武汉上学,电脑城就有卖的呢~

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码