找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10566|回复: 17
收起左侧

基于单片机与LCD1602电子密码锁

  [复制链接]
ID:114642 发表于 2016-4-17 01:03 | 显示全部楼层 |阅读模式

51单片机与LCD1602电子密码锁试验说明:
** 0 ** 1 **2 ** 3**                     
** 4** 5** 6 **7 **
**8** 9** 确认(A)  **未定义(B)
**取消(C)**修改密码键(D)**确认修改键(E)**未定义(F)

2013-05-06_18-29-58_429.jpg

2013-05-06_18-30-34_150.jpg

电子密码锁电路仿真图.jpg

掉电存储及报警电路.jpg

键盘输入原理图.jpg

开锁电路原理图.jpg



程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. void key_scan();
  5. uchar count0,count1,count3,num,n=0,temp,a,j,count4;
  6. uchar mima[8];                                                        //初始密码存储区
  7. uchar tab_key[50];                                                //输入密码存储区
  8. uchar code table[]={0x3f,0x06,0x5b,0x4f,
  9.                                         0x66,0x6d,0x7d,0x07,
  10.                                         0x7f,0x6f,0x77,0x7c,
  11.                                         0x39,0x5e,0x79,0x71};
  12. bit enterflag;                                                        //确认键按下与否的标志
  13. bit mimaflag;                                                        //密码正确与否的标志
  14. bit xiugaiflag;                                                        //修改密码标志        
  15. bit enter1flag;                                                //修改密码确认键标志        
  16. sbit red=P3^7;
  17. sbit bell=P3^6;
  18. sbit rs=P1^2;
  19. sbit rw=P1^1;
  20. sbit lcden=P1^0;
  21. sbit scl=P1^3;
  22. sbit sda=P1^4;
  23. uchar code table1[]="input the passco";
  24. uchar code table2[]="de:     --------";
  25. uchar code table3[]="*";
  26. uchar code table4[]="right   (^_^)   ";
  27. uchar code table5[]="first  error!!!!";
  28. uchar code table6[]="second error!!!!";
  29. uchar code table7[]="third error see ";
  30. uchar code table8[]="u tomorrow (^_^)";
  31. uchar code table9[]="define the passc";
  32. uchar code table10[]="ode:    --------";
  33. uchar code table11[]="code   is    new";
  34. //******************************键盘消抖函数*******************************
  35. void delay1()
  36. { ;; }
  37. void delay2(uchar x)
  38. {        uchar a,b;
  39.         for(a=x;a>0;a--)
  40.                  for(b=100;b>0;b--);
  41. }
  42. //***************************延时********
  43. void delay(uint z)
  44. {          uint x,y;
  45.         for(x=z;x>0;x--)
  46.                 for(y=110;y>0;y--);
  47. }
  48. //****************************e^2room的初始化*******************************
  49. void start()  //开始信号
  50. {        sda=1;
  51.         delay1();
  52.         scl=1;
  53.         delay1();
  54.         sda=0;
  55.         delay1();
  56. }

  57. void stop()   //停止
  58. {
  59.         sda=0;
  60.         delay1();
  61.         scl=1;
  62.         delay1();
  63.         sda=1;
  64.         delay1();
  65. }
  66. //****************************应答信号*************************************
  67. void respond()  
  68. {
  69.         uchar i;
  70.         scl=1;
  71.         delay1();
  72.         while((sda==1)&&(i<250))i++;
  73.         scl=0;
  74.         delay1();
  75. }
  76. //*****************************写字节操作函数**********************************
  77. void write_byte(uchar date)
  78. {        uchar i,temp;
  79.         temp=date;
  80.         for(i=0;i<8;i++)
  81.         {
  82.                 temp=temp<<1;                        //保持最高位,左移到进位CY
  83.                 scl=0;
  84.             delay1();
  85.                 sda=CY;
  86.                 delay1();
  87.                 scl=1;
  88.                 delay1();
  89.         }
  90.         scl=0;
  91.         delay1();
  92.         sda=1;//总线释放
  93.         delay1();
  94. }
  95. //*******************************读字节操作函数*****************************
  96. uchar read_byte()
  97. {
  98.         uchar i,k;
  99.         scl=0;
  100.         delay1();
  101.         sda=1;
  102.         delay1();
  103.         for(i=0;i<8;i++)
  104.         {
  105.                 scl=1;
  106.                 delay1();        
  107.                 k=(k<<1)|sda;    //或运算,放到最低位
  108.                 scl=0;
  109.                 delay1();        
  110.         }
  111.         return k;
  112. }
  113. //**********************************写地址函数******************************
  114. void write_add(uchar address,uchar date)
  115. {          start();
  116.         write_byte(0xa0);
  117.         respond();
  118.         write_byte(address);
  119.         respond();
  120.         write_byte(date);
  121.         respond();
  122.         stop();
  123. }
  124. //*******************************读地址函数*************************************
  125. uchar read_add(uchar address)
  126. {        uchar date;
  127.         start();
  128.         write_byte(0xa0);
  129.         respond();
  130.         write_byte(address);
  131.         respond();
  132.         start();
  133.         write_byte(0xa1);
  134.         respond();
  135.         date=read_byte();
  136.         stop();
  137.         return date;
  138. }
  139. //****************************LCD1602的初始化*******************************
  140. void write_com(uchar com)
  141. {          rs=0;
  142.         lcden=0;
  143.         P0=com;
  144.         delay(5);
  145.         lcden=1;
  146.         delay(5);
  147.         lcden=0;        
  148. }

  149. void write_date(uchar date)
  150. {        rs=1;
  151.         lcden=0;
  152.         P0=date;
  153.         delay(5);
  154.         lcden=1;
  155.         delay(5);
  156.         lcden=0;        
  157. }
  158. //***************************************密码比较函数********************************
  159. bit mimacmp()                                       
  160. {        bit flag;
  161.         uchar i;
  162.         for(i=0;i<8;i++)
  163.                 {          if(mima[i]==tab_key[i])
  164.                                 flag=1;
  165.                         else
  166.                         {          flag=0;
  167.                                 i=8;
  168.                         }
  169.                 }
  170.         return(flag);                                                        //返回flag
  171. }

  172. ////**********************************LCD显示函数开始**************************************
  173. void lcd_display()
  174. {        uchar i=0;
  175.         write_com(0x80+0x40+8);
  176.         for(i=0;i<n;i++)
  177.         {         write_date(table3[0]);
  178.         }
  179. }
  180. //****************************************键盘功能分配函数群开始****************************
  181. //** 0 ** 1 **2 ** 3**                     
  182. //** 4** 5** 6 **7 **
  183. //**8** 9** 确认(A)  **无效(B)
  184. //**取消(C)**修改密码键(D)**确认修改键(E)**无效(F)
  185. void key_manage1()
  186. {        tab_key[n]=0;
  187.         n++;
  188.         if(xiugaiflag==1)
  189.         {        mima[count4]=0;
  190.                 count4++;
  191.         }
  192. }
  193. /**************/
  194. void key_manage2()
  195. {        tab_key[n]=1;
  196.         n++;
  197.         if(xiugaiflag==1)
  198.         {        mima[count4]=1;
  199.                 count4++;
  200.         }
  201. }

  202. void key_manage3()
  203. {        tab_key[n]=2;
  204.         n++;
  205.         if(xiugaiflag==1)
  206.         {        mima[count4]=2;
  207.                 count4++;
  208.         }
  209. }
  210. void key_manage4()
  211. {        tab_key[n]=3;
  212.         n++;
  213.         if(xiugaiflag==1)
  214.         {        mima[count4]=3;
  215.                 count4++;
  216.         }
  217. }
  218. void key_manage5()
  219. {        tab_key[n]=4;
  220.         n++;
  221.         if(xiugaiflag==1)
  222.         {        mima[count4]=4;
  223.         count4++;
  224.         }
  225. }
  226. void key_manage6()
  227. {        tab_key[n]=5;
  228.         n++;
  229.         if(xiugaiflag==1)
  230.         {        mima[count4]=5;
  231.                 count4++;
  232.         }
  233. }
  234. void key_manage7()
  235. {        tab_key[n]=6;
  236.         n++;
  237.         if(xiugaiflag==1)
  238.         {        mima[count4]=6;
  239.                 count4++;
  240.         }
  241. }
  242. void key_manage8()
  243. {        tab_key[n]=7;
  244.         n++;
  245.         if(xiugaiflag==1)
  246.         {        mima[count4]=7;
  247.                 count4++;
  248.         }
  249. }
  250. void key_manage9()
  251. {        tab_key[n]=8;
  252.         n++;
  253.         if(xiugaiflag==1)
  254.         {        mima[count4]=8;
  255.         count4++;
  256.         }
  257. }
  258. void key_manage10()
  259. {          tab_key[n]=9;
  260.         n++;
  261.         if(xiugaiflag==1)
  262.         {        mima[count4]=9;
  263.                 count4++;
  264.         }
  265. }
  266. //**********************************确认键**************************************************************  
  267. void key_manage11()
  268. {          enterflag=1;                                        //确认键按下
  269.         if(n==8)                                           //只有输入8个密码后按确认才做比较
  270.                 mimaflag=mimacmp();
  271.         else
  272.                 mimaflag=0;
  273.          if(enterflag==1)
  274.                 {
  275.                         enterflag=0;
  276.                         n=0;
  277.                         //用FFFFFFFF清除已经输入的密码
  278.                         for(count3=0;count3<8;count3++)
  279.                         {        
  280.                                 delay(5);
  281.                                 tab_key[count3]=0x0f;               
  282.                         }               
  283.                         TR1=1;                                                                        //打开计数器1
  284.                         count1=0;                                                                //定时器1由50MS累计到1S所用的计数器
  285.                         if(mimaflag==1)
  286.                         {        a=0;
  287.                                    write_com(0x01);
  288.                                 write_com(0x80);
  289.                                 for(count3=0;count3<16;count3++)
  290.                                 {          write_date(table4[count3]);        //密码正确,显示RIGHT,绿灯亮
  291.                                         delay(5);
  292.                                 }
  293.                         }
  294.                     else
  295.                         {          n=0;
  296.                                  red=0;
  297.                             bell=0;
  298.                                 a++;
  299.                                 if(a==1)
  300.                                 {
  301.                                         for(count3=0;count3<8;count3++) //ffffffff清除密码
  302.                                         {        
  303.                                                 delay(5);
  304.                                                 tab_key[count3]=0x0f;               
  305.                                         }
  306.                                         write_com(0x01);                                                                                
  307.                                         write_com(0x80);
  308.                                         for(count3=0;count3<16;count3++)
  309.                                         {
  310.                                                 write_date(table5[count3]);        //密码错误,显示 first error,红灯亮
  311.                                                 delay(5);
  312.                                         }
  313.                                                 TR1=1;
  314.                                 }
  315.                                 if(a==2)
  316.                                 {        
  317.                                         for(count3=0;count3<8;count3++) //ffffffff清除密码
  318.                                         {        
  319.                                                 delay(5);
  320.                                                 tab_key[count3]=0x0f;               
  321.                                         }
  322.                                                 write_com(0x01);
  323.                                                 write_com(0x80);
  324.                                                 for(count3=0;count3<16;count3++)
  325.                                                 {
  326.                                                         write_date(table6[count3]);        //密码错误,显示SECOND ERROR,红灯亮
  327.                                                         delay(5);
  328.                                                 }
  329.                                                         TR1=1;
  330.                                 }
  331.                                        
  332.                                   if(a==3)
  333.                                         {        
  334.                                                 for(count3=0;count3<8;count3++) //ffffffff清除密码
  335.                                                 {        
  336.                                                         delay(5);
  337.                                                         tab_key[count3]=0x0f;               
  338.                                                 }
  339.                                                 write_com(0x01);
  340.                                                 write_com(0x80);
  341.                                                 for(count3=0;count3<16;count3++)
  342.                                                 {
  343.                                                         write_date(table7[count3]);        //密码错误,显示third error see,红灯亮
  344.                                                         delay(5);
  345.                                                 }
  346.                                                 write_com(0x80+0x40);
  347.                                                 for(count3=0;count3<16;count3++)
  348.                                                 {
  349.                                                         write_date(table8[count3]);//密码错误,显示 U TOMORROW ,红灯亮
  350.                                                         delay(5);
  351.                                                 }
  352.                                                         TR1=0;
  353.                                                                
  354.                                         }
  355.                                                         
  356.                 }
  357.         }

  358. }
  359. void key_manage12()
  360. {        tab_key[n]=11;
  361.         n++;                                                  //密码计数清零
  362. }
  363. //****************************************************取消键********************************************  
  364. void key_manage13()
  365. {        n=0;                                                  //密码计数清零
  366.         write_com(0x80);                                                //指针所指位置
  367.         for(count3=0;count3<16;count3++)
  368.         {        write_date(table1[count3]);                //第一行显示INPUT THE PASSPORD:
  369.                 delay(5);
  370.         }
  371.         write_com(0x80+0x40);
  372.         for(count3=0;count3<16;count3++)
  373.         {        write_date(table2[count3]);        //开机显示--------
  374.                 delay(5);
  375.                 tab_key[count3]=0x0f;                        //用FFFFFFFF清楚已经输入的密码
  376.         }
  377. }
  378. //*******************************************修改密码键**********************************
  379. void key_manage14()
  380. {         uchar aa=0;
  381.         n=0;
  382.         xiugaiflag=1;
  383.         write_com(0x01);
  384.         write_com(0x80);
  385.         for(count3=0;count3<16;count3++)
  386.         {        write_date(table9[count3]);        //显示define the password
  387.                 delay(5);
  388.                 tab_key[count3]=0x0f;                        //用FFFFFFFF清楚已经输入的密码
  389.         }
  390.         write_com(0x80+0x40);
  391.         for(count3=0;count3<16;count3++)
  392.         {        write_date(table10[count3]);        //显示--------
  393.                 delay(5);
  394.         }
  395.         TR0=1;
  396. }
  397. //******************************************修改密码键的确认键********************************
  398. void key_manage15()
  399. {        n=0;
  400.         enter1flag=1;
  401.         if(enter1flag==1)
  402.         {        enter1flag=0;
  403.                 count4=0;
  404.                 for(count3=0;count3<16;count3++)
  405.                 {        tab_key[count3]=0x0f;                        //用FFFFFFFF清楚已经输入的密码
  406.                  }
  407.                 write_com(0x01);
  408.                 write_com(0x80);
  409.                 for(count3=0;count3<16;count3++)
  410.                 {        write_date(table11[count3]);
  411.                         delay(100);
  412.                 }
  413.         TR1=1;
  414.         count1=0;
  415.         }
  416. }
  417. void key_manage16()
  418. {        tab_key[n]=15;
  419.         n++;
  420. }
  421. //****************************************定时器1的50MS,共延时1秒*****************************
  422. void time_1() interrupt 3
  423. {        TH1=(65536-50000)/256;
  424.         TL1=(65536-50000)%256;
  425.         if(count1<20)
  426.         {        count1++;
  427.         }
  428.         else                                                         //计时到1S
  429.         {          TR1=0;
  430.                 count1=0;
  431.                 mimaflag=0;

  432.                 red=1;
  433.                 bell=1;
  434.                 //显示FFFFFFFF
  435.                 write_com(0x01);
  436.                 write_com(0x80);
  437.                 for(count3=0;count3<16;count3++)
  438.                         {
  439.                                 write_date(table1[count3]);        //显示INPUT THE PASSCODE
  440.                                 delay(5);
  441.                         }
  442.                 write_com(0x80+0x40);
  443.                 for(count3=0;count3<16;count3++)
  444.                         {
  445.                                 write_date(table2[count3]);        //开机显示FFFFFFFF
  446.                                 delay(5);
  447.                         }
  448.         }
  449. }
  450. //***********************************************定时0**********************************************
  451. void time_0() interrupt 1
  452. {        TH0=(65536-50000)/256;
  453.         TL0=(65536-50000)%256;
  454.         if(count4<8)
  455.         {        key_scan();
  456.         }
  457.         else
  458.         {        TR0=0;
  459.                 count4=0;
  460.         }
  461. }
  462. //初始化函数
  463. void init()
  464. {        uchar i;
  465.         lcden=0;
  466.         write_com(0x38);                                        //打开显示模式设置
  467.         write_com(0x0c);                                        //打开显示,光标等等设置未零
  468.         write_com(0x06);                                        //当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,
  469.         write_com(0x01);                                        //清零指令
  470.         write_com(0x80);                                        //指针所指位置
  471.         //定时器初始化
  472.         TMOD=0x11;                                                        //T0,T1工作方式1
  473.         TH0=(65536-2000)/256;
  474.         TL0=(65536-2000)%256;                                //T0初始化2MS

  475.         TH1=(65536-50000)/256;
  476.         TL1=(65536-50000)%256;                                //T1初始化50MS

  477.         TR1=0;
  478.         ET1=1;
  479.         EA=1;
  480.         TR0=0;
  481.         ET0=1;

  482.         count0=0;                                                        //初始没有密码输入,故为零
  483.         enterflag=0;                                                //没有确认键按下
  484.         mimaflag=0;                                                        //密码正确与否键先置零
  485.                                        
  486.         red=1;                                                                //红灯不亮
  487. //************密码存入EPROM中**********************************
  488.         sda=1;
  489.         delay(5);
  490.         scl=1;
  491.         delay(5);
  492.         for(i=0;i<8;i++)
  493.         {          write_add(i,8);
  494.                 delay2(100);
  495.         }
  496.         for(i=0;i<8;i++)
  497.         {        mima[i]=read_add(i);
  498.                 delay(5);
  499.         }
  500. }
  501. void main()
  502. {        rw=0;               
  503.         init();
  504.         write_com(0x80);                                                //指针所指位置
  505.         for(count3=0;count3<16;count3++)
  506.         {        write_date(table1[count3]);                //第一行显示INPUT THE PASSPORD:
  507.                 delay(5);
  508.         }
  509.         write_com(0x80+0x40);
  510.         for(count3=0;count3<16;count3++)
  511.         {          write_date(table2[count3]);                //开机显示FFFFFFFF
  512.                 delay(5);
  513.         }
  514.         while(1)
  515.         {        key_scan();                                                      //调用键盘扫描函数
  516.                 lcd_display();
  517.         }
  518. }
  519. //***************键盘扫描函数开始********************************
  520. void key_scan()
  521. {//**********扫描第一行*********
  522.         P1=0xfe;
  523.         temp=P3;
  524.         temp=temp&0xf0;
  525.         if(temp!=0xf0)
  526.         {        delay(100);
  527.                 if(temp!=0xf0)
  528.                 {         temp=P3;
  529.                         switch(temp)
  530.                         {        case 0xee:
  531.                                         key_manage1();        break;
  532.                                 case 0xde:
  533.                                         key_manage2();        break;
  534.                                 case 0xbe:
  535.                                         key_manage3();        break;
  536.                                 case 0x7e:
  537.                                         key_manage4();        break;
  538.                         }
  539.                         while(temp!=0xf0)
  540.                         {         temp=P3;
  541.                                 temp=temp&0xf0;
  542.                         }
  543.                 }
  544.         }
  545. //**************扫描第二行***********************************
  546.         P1=0xfd;
  547.         temp=P3;
  548.         temp=temp&0xf0;
  549.         if(temp!=0xf0)
  550.         {        delay(100);
  551.                 if(temp!=0xf0)
  552.                 {        temp=P3;
  553.                         switch(temp)
  554.                         {        case 0xed:
  555.                                         key_manage5();        break;
  556.                                 case 0xdd:
  557.                                         key_manage6();         break;

  558.                                 case 0xbd:
  559.                                         key_manage7();        break;

  560.                                 case 0x7d:
  561.                                         key_manage8();        break;
  562.                         }
  563.                         while(temp!=0xf0)
  564.                         {        temp=P3;
  565.                                 temp=temp&0xf0;
  566.                         }
  567.                 }
  568.         }
  569. //*********************************************扫描第三行***********************************
  570.         P1=0xfb;
  571.         temp=P3;
  572.         temp=temp&0xf0;
  573.         if(temp!=0xf0)
  574.         {         delay(100);
  575.                 if(temp!=0xf0)
  576.                 {        temp=P3;
  577.                         switch(temp)
  578.                         {        case 0xeb:
  579.                                         key_manage9();        break;
  580.                                 case 0xdb:
  581.                                         key_manage10();        break;
  582.                                    case 0xbb:
  583.                                         key_manage11();        break;
  584.                                 case 0x7b:
  585.                                         key_manage12();        break;
  586.                         }
  587.                         while(temp!=0xf0)
  588.                         {        temp=P3;
  589.                                 temp=temp&0xf0;
  590.                         }
  591.                 }
  592.         }
  593. //***************************************************扫描第四行****************************************
  594.         P1=0xf7;
  595.         temp=P3;
  596.         temp=temp&0xf0;
  597.         if(temp!=0xf0)
  598.         {        delay(100);
  599.                 if(temp!=0xf0)
  600.                 {        temp=P3;
  601.                         switch(temp)
  602.                         {        case 0xe7:
  603.                                         key_manage13();        break;
  604.                                 case 0xd7:
  605.                                         key_manage14();        break;
  606.                                  case 0xb7:
  607.                                         key_manage15();        break;
  608.                                 case 0x77:
  609.                                         key_manage16();        break;
  610.                         }
  611.                         while(temp!=0xf0)
  612.                         {        temp=P3;
  613.                                 temp=temp&0xf0;
  614.                         }
  615.                 }
  616.         }
  617. }
复制代码

0.png


基于单片机与1602电子密码锁.zip (4.07 MB, 下载次数: 240)

评分

参与人数 1黑币 +5 收起 理由
ko44 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:115645 发表于 2016-5-13 16:05 | 显示全部楼层
这个最好了 谢谢分享 有qq吗楼主
回复

使用道具 举报

ID:147141 发表于 2016-11-9 21:22 | 显示全部楼层
正好需要,感谢楼主

评分

参与人数 1黑币 +5 收起 理由
FebL + 5 赞一个!

查看全部评分

回复

使用道具 举报

ID:157011 发表于 2016-12-23 16:13 | 显示全部楼层
本帖最后由 故人以北 于 2016-12-23 16:16 编辑

请问楼主写程序是用的哪个软件啊?我用的KEIL,仿真运行的时候按键开关没反应
回复

使用道具 举报

ID:230921 发表于 2017-9-4 18:26 | 显示全部楼层
故人以北 发表于 2016-12-23 16:13
请问楼主写程序是用的哪个软件啊?我用的KEIL,仿真运行的时候按键开关没反应

我也是
回复

使用道具 举报

ID:82765 发表于 2017-9-4 20:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:227956 发表于 2017-9-4 20:44 来自手机 | 显示全部楼层
呃需要点时间消化
回复

使用道具 举报

ID:234795 发表于 2017-9-22 09:01 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:99130 发表于 2017-9-22 15:01 | 显示全部楼层
我想知道电磁锁如何和系统配合的
回复

使用道具 举报

ID:255915 发表于 2017-12-1 22:06 来自手机 | 显示全部楼层
这个初始密码是多少
回复

使用道具 举报

ID:115740 发表于 2017-12-11 20:55 | 显示全部楼层
谢谢分享,好东西
回复

使用道具 举报

ID:287564 发表于 2018-3-13 10:45 | 显示全部楼层
谢谢楼主,学习一下
回复

使用道具 举报

ID:275854 发表于 2018-4-26 22:45 来自手机 | 显示全部楼层
a963696 发表于 2018-3-13 10:45
谢谢楼主,学习一下

请问初始终password?
回复

使用道具 举报

ID:275854 发表于 2018-4-26 22:47 来自手机 | 显示全部楼层
请问初始password
回复

使用道具 举报

ID:243865 发表于 2018-4-30 22:58 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:350932 发表于 2018-6-13 10:56 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:361206 发表于 2018-6-28 23:50 来自手机 | 显示全部楼层
有没有仿真图
回复

使用道具 举报

ID:427813 发表于 2019-7-22 06:31 | 显示全部楼层
怎么不留仿真
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表