找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3019|回復(fù): 2
收起左側(cè)

基于51單片機(jī)的電子密碼鎖設(shè)計(jì)仿真程序流程圖資料

[復(fù)制鏈接]
ID:1064818 發(fā)表于 2023-3-1 17:12 | 顯示全部樓層 |閱讀模式
一、 設(shè)計(jì)要求(設(shè)計(jì)一個(gè)由單片機(jī)控制的電子密碼鎖)
1.能設(shè)定一組4位的數(shù)字開啟密碼(設(shè)定密碼功能)
2.用LED小燈代替鎖開啟顯示,輸入密碼正確,則小燈亮起(開鎖功能)
3.如果3次密碼錯(cuò)誤,則進(jìn)行鳴叫報(bào)警,并在1分鐘之內(nèi)不能再次輸入(報(bào)警功能)
4.密碼輸入顯示在數(shù)碼管上,輸入正確顯示on,輸入錯(cuò)誤顯示err(顯示功能)
5.可在以上功能上擴(kuò)展。

二、原理說明(包含流程圖)
密碼鎖因?yàn)槌跏紵o密碼,所以程序首先運(yùn)行一個(gè)設(shè)置密碼程序讓用戶設(shè)置一個(gè)1-4位的密碼,輸入密碼中可回刪。然后程序會(huì)進(jìn)入一個(gè)循環(huán)輸入密碼的環(huán)節(jié)。密碼設(shè)置完成后點(diǎn)擊關(guān)閉鍵后,屏幕關(guān)閉。點(diǎn)擊準(zhǔn)備輸入即可開始輸入密碼,輸入密碼完了點(diǎn)擊確認(rèn)鍵,屏幕會(huì)顯示打開與否即on與err,顯示錯(cuò)誤次數(shù)的數(shù)碼管也會(huì)實(shí)時(shí)顯示錯(cuò)誤次數(shù)。當(dāng)輸入次數(shù)達(dá)到三次后,將在1分鐘內(nèi)無法輸入無法關(guān)閉且在屏幕顯示倒計(jì)時(shí)同時(shí)蜂鳴器報(bào)警,其他時(shí)刻都可點(diǎn)擊關(guān)閉鍵。當(dāng)密碼輸入正確后,小燈亮,且可以點(diǎn)擊修改密碼鍵,讓用戶輸入新的密碼,然后確定。

三、電路設(shè)計(jì)
矩陣鍵盤(輸入):接在P1口且用一個(gè)4與門,上拉電阻來通過中斷方式來實(shí)現(xiàn)。
4位數(shù)碼管(顯示屏幕):位選接P3的0,1,6,7口,段選接在P2的0-6口,不需要點(diǎn)。
1位數(shù)碼管(顯示錯(cuò)誤次數(shù)):通過上拉電阻接在P0的0-6口。
小燈(標(biāo)志密碼輸入正確):接在P3的3口。
蜂鳴器(警報(bào)):接在P3的5口。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
四、        仿真結(jié)果
設(shè)置密碼:
輸入密碼
密碼錯(cuò)誤:
密碼錯(cuò)誤三次報(bào)警倒計(jì)時(shí)60s:
密碼正確小燈亮:
修改密碼;
密碼修改成功:
五、        結(jié)果分析
首先初始化,然后讓用戶點(diǎn)擊設(shè)置密碼,點(diǎn)擊準(zhǔn)備輸入鍵,屏幕待輸入狀態(tài),用戶在鍵盤上按下1536(可以點(diǎn)擊delete回刪鍵),點(diǎn)擊確認(rèn)鍵,屏幕顯示on,小燈亮,表示密碼設(shè)置完成。點(diǎn)擊close鍵后又初始化一些標(biāo)志,點(diǎn)擊準(zhǔn)備輸入鍵,屏幕待輸入狀態(tài),用戶輸入453,點(diǎn)擊確認(rèn)鍵,屏幕顯示err,表示密碼輸入錯(cuò)誤,且單位數(shù)碼管顯示1,表示輸入錯(cuò)誤次數(shù)。點(diǎn)擊close鍵關(guān)閉輸入。當(dāng)再次點(diǎn)擊準(zhǔn)備輸入,屏幕待輸入狀態(tài),當(dāng)用戶輸入次數(shù)達(dá)到3次屏幕顯示倒計(jì)時(shí)60s后才能再次操作,蜂鳴器報(bào)警60s,且鍵盤按任何鍵無作用。倒計(jì)時(shí)完了,可再次輸入。當(dāng)用戶輸入1536密碼正確,則屏幕顯示on,小燈亮表示密碼鎖打開,并可以修改密碼,點(diǎn)擊修改密碼,屏幕進(jìn)入待輸入狀態(tài),輸入新密碼123,點(diǎn)擊確認(rèn)鍵,屏幕顯示on,小燈亮表示密碼修改成功。

六、        單片機(jī)代碼
  1. #include <reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit LED=P3^3;                    //小燈
  5. sbit ALTER=P3^5;         //警報(bào)器
  6. void delay(uint);            //延遲函數(shù)
  7. void Show_Pwd();          //數(shù)碼管顯示密碼
  8. void Show_on();                   //數(shù)碼管顯示on
  9. void Show_err();            //數(shù)碼管顯示err
  10. void Sure_on_err();     //判斷密碼是否正確
  11. void Show_Sixty();         //數(shù)碼管顯示倒計(jì)時(shí)60s
  12. void Show_Time(uint);   //數(shù)碼管顯示給定的數(shù)字(倒計(jì)時(shí))
  13. void Init();                    //初始化
  14. void Total_Show();         //數(shù)碼管總顯示
  15. void Close_Init();           //close關(guān)閉后的初始化
  16. void Pwd_Modity();              //修改密碼
  17. void SetPwd();                     //設(shè)置密碼
  18. char Key=-1;                     //保存鍵號
  19. uchar PwdRight=0;        //正確密碼的位數(shù)(因?yàn)槲以O(shè)置的是1-4為密碼都可以,所以判斷比較密碼時(shí)需要密碼位數(shù))
  20. char PwdDigit=-1;      //記錄當(dāng)前輸入密碼的位數(shù)(方便存數(shù)組,比較所以初始值為-1)
  21. uchar PwdErrTime=0;      //密碼錯(cuò)誤次數(shù)(觸發(fā)警報(bào)的判斷依據(jù))
  22. uchar TimeCount=0;       //計(jì)時(shí)器中斷函數(shù)計(jì)數(shù)器       (定時(shí)器計(jì)了50000us即50ms,則加1,達(dá)到20次即計(jì)了1s)
  23. uchar ShowSign=1;        //Total_Show()函數(shù)根據(jù)該標(biāo)志來判斷顯示什么信息
  24. uchar Keycount=0;        //循環(huán)功能按鍵的次數(shù)(當(dāng)該功能按鍵次數(shù)改變即有功能按鍵按下,則進(jìn)入switch-case中選擇執(zhí)行,防止不按功能按鍵時(shí),主程序依然繼續(xù)執(zhí)行上一次的功能)
  25. char Password[4]={-1,-1,-1,-1};      //儲(chǔ)存密碼
  26. uchar Pwd_Now[4]={10,10,10,10};       //儲(chǔ)存當(dāng)前輸入的密碼
  27. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x37,0x7b,0x31}; //數(shù)模0-9與'-'(10),'n'(11),'e'(12),'r'(13)
  28. uchar code key_buf[]={0xd7,0xeb,0xdb,0xbb,0xed,0xdd,0xbd,0xee,
  29.                       0xde,0xbe,0xb7,0x7e,0x7d,0x7b,0x77,0xe7};   
  30.                                    //鍵模0-9,sure(10),delete(11),setpwd(12),modify(13),close(14),ready(15)
  31. void delay(uint time)
  32. {
  33.        uchar i=0;
  34.        for(;time>0;time--)
  35.               for(i=0;i<113;i++);
  36. }
  37. void Getkey(void) interrupt 0
  38. {
  39.        uchar key_scan[]={0xef,0xdf,0xbf,0x7f}; //鍵掃描碼(1-4列)
  40.        uchar i=0,j=0;
  41.        for(i=0;i<4;i++)
  42.        {
  43.               P1=key_scan[i];                                 //P1送出鍵掃描碼
  44.               if((P1&0x0f)!=0x0f)                   //判斷有無按鍵按下
  45.               {
  46.                      delay(10);
  47.                      if((P1&0x0f)!=0x0f)
  48.                      {
  49.                             for(j=0;j<16;j++)
  50.                             {     
  51.                                    if(key_buf[j]==P1)  //找到按鍵
  52.                                    {
  53.                                   while(P1!=key_scan[i])  //按鍵松開
  54.                                      {
  55.                                          Total_Show();  //按鍵時(shí)數(shù)碼管顯示
  56.                                      }
  57.                                      Key=j;         //獲取鍵值
  58.                                      if(j<10)
  59.                                      {
  60.                                          PwdDigit++;     //只有按下數(shù)字鍵該密碼位數(shù)才會(huì)自加
  61.                                           if(PwdDigit<4)
  62.                                                 Pwd_Now[PwdDigit]=j;  //存儲(chǔ)有效密碼
  63.                                      }
  64.                                      else if(j!=12&&j!=15)
  65.                                          Keycount++;  //循環(huán)功能(除了setpwd和ready)按鍵的次數(shù)
  66.                                      P1=0x0f;
  67.                                      return;
  68.                                    }
  69.                             }
  70.                      }
  71.               }
  72.        }
  73. }
  74. void Show_Pwd()
  75. {
  76.               switch(PwdDigit)   //通過密碼位數(shù)來實(shí)時(shí)顯示密碼的輸入,當(dāng)前存儲(chǔ)的密碼作為下標(biāo)顯示密碼
  77.               {
  78.                     case 3: P3=0x4f;P2=table[Pwd_Now[3]];delay(10);                  //只打開第四個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  79.                     case 2: P3=0x8f;P2=table[Pwd_Now[2]];delay(10);                  //只打開第三個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  80.                     case 1: P3=0xcd;P2=table[Pwd_Now[1]];delay(10);                 //只打開第二個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  81.                     case 0: P3=0xce;P2=table[Pwd_Now[0]];delay(10);break;  //只打開第一個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  82.                     default:P3=0x0c;P2=table[10];PwdDigit=-1;delay(10);break;//打開所有位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  83.                                                                                                                         //顯示'-',當(dāng)PwdDigit=-1與delay(10)位置不同有問題
  84.               }
  85. }
  86. void Total_Show()
  87. {
  88.        switch(ShowSign)   //根據(jù)數(shù)碼管展示的標(biāo)志位來判斷展示不同的信息
  89.        {
  90.               case 1:Show_Pwd();break;    //顯示輸入的密碼
  91.               case 2:Show_on();break;            //顯示密碼輸入正確的on并點(diǎn)亮小燈
  92.               case 3:Show_err();break;     //顯示密碼輸入錯(cuò)誤的err
  93.               case 4:Show_Sixty();break;   //顯示60s倒計(jì)時(shí)并打開警報(bào)
  94.        }
  95. }
  96. void Show_on()
  97. {
  98.        P3=0xc6;    //只打開第一個(gè)位選,P3.2=1(無影響),P3.3=0打開LED,P3.5=0關(guān)閉警報(bào)
  99.        P2=table[0];   //顯示0
  100.        delay(15);
  101.        P3=0xc5;    //只打開第二個(gè)位選,P3.2=1(無影響),P3.3=0打開LED,P3.5=0關(guān)閉警報(bào)
  102.        P2=table[11];  //顯示n
  103.        delay(15);
  104. }
  105. void Show_err()
  106. {
  107.        P3=0xce;    //只打開第一個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  108.        P2=table[12];  //顯示'e'
  109.        delay(10);
  110.        P3=0xcd;    //只打開第二個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  111.        P2=table[13];  //顯示'r'
  112.        delay(10);
  113.        P3=0x8e;    //只打開第三個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  114.        P2=table[13];  //顯示'r'
  115.        delay(10);
  116. }                  
  117. void Sure_on_err()
  118. {     
  119.        uchar i=0;
  120.        ShowSign=3;                               //默認(rèn)輸入錯(cuò)誤,數(shù)碼管顯示標(biāo)志為3顯示err
  121.        if(PwdRight==PwdDigit)                                   //當(dāng)正確密碼的位數(shù)與當(dāng)前輸入的密碼的位數(shù)相同
  122.        {
  123.               for(i=0;i<=PwdDigit;i++)                    //每一位密碼進(jìn)行比較
  124.               {
  125.                      if(Password[i]!=Pwd_Now[i])        //當(dāng)有一位不同就退出循環(huán)比較
  126.                             break;
  127.               }
  128.               if(i==PwdDigit+1)
  129.               {                                                   //如果密碼正確,比較完不滿足判斷條件退出的循環(huán)則i=PwdDigit+1
  130.                      ShowSign=2;                                     //更改數(shù)碼管顯示的標(biāo)志為2顯示on點(diǎn)亮小燈
  131.                      PwdErrTime=0;                                  //將錯(cuò)誤次數(shù)清0
  132.               }                                                   
  133.               else                                                  //如果是break退出的循環(huán)則錯(cuò)誤次數(shù)加1,不需要更改數(shù)碼管顯示標(biāo)志
  134.                      PwdErrTime++;   
  135.        }
  136.        else                                                         //如果正確密碼的位數(shù)與當(dāng)前輸入的密碼的位數(shù)不相同,則錯(cuò)誤次數(shù)加1
  137.               PwdErrTime++;           
  138.        if(PwdErrTime==3)                                    //密碼錯(cuò)誤次數(shù)達(dá)到三次
  139.        {
  140.               P0=table[PwdErrTime];                       //單個(gè)數(shù)碼管先顯示密碼錯(cuò)誤次數(shù)3
  141.               ShowSign=4;                                            //更改數(shù)碼管顯示的標(biāo)志為4顯示倒計(jì)時(shí)并打開警報(bào)
  142.        }            
  143. }
  144. void SetPwd()
  145. {
  146.        uchar i=0;
  147.        uchar count=0;                    //存儲(chǔ)按功能鍵的次數(shù)
  148.        uchar sign=0;                             //是否確認(rèn)密碼標(biāo)志(0:未確認(rèn),1:已確認(rèn))
  149.        P1=0x7f;                         //將第四列設(shè)為低電平
  150.        while(P1!=key_buf[12]);           //setpwd第一次設(shè)置密碼      
  151.        P1=0xef;                         //將第一列設(shè)為低電平
  152.        while(P1!=key_buf[15]);          //查詢是否按下ready鍵
  153.        EX0=1;                            //打開按鍵中斷開關(guān)
  154.        while(1)
  155.        {
  156.               Total_Show();
  157.               if(count!=Keycount&&Key==11) //當(dāng)有delete功能按鍵按下時(shí)將密碼位數(shù)減1(count!=Keycount為了防止當(dāng)按下delete后,由于在循環(huán)體中位數(shù)會(huì)一直自減)
  158.               {     
  159.                      count=Keycount;                 //功能鍵次數(shù)重新賦值給count
  160.                      PwdDigit--;                          //當(dāng)前密碼位數(shù)--
  161.               }
  162.               if(PwdDigit>=0&&Key==10)     //輸完1-4位密碼并且按下sure鍵后顯示并保存密碼
  163.               {
  164.                      ShowSign=2;               //數(shù)碼管顯示on并點(diǎn)亮小燈
  165.                      Total_Show();
  166.                      sign=1;                       //表示已確認(rèn)設(shè)置密碼            
  167.                      for(i=0;i<=PwdDigit;i++) //保存密碼
  168.                             Password[i]=Pwd_Now[i];
  169.                      PwdRight=PwdDigit;            //將當(dāng)前密碼位數(shù)賦值給正確密碼位數(shù)標(biāo)志
  170.               }
  171.               if(Key==14&&sign==1)         //只能確認(rèn)設(shè)置完密碼才能點(diǎn)擊close退出
  172.               {
  173.                      return;
  174.               }
  175.        }
  176. }
  177. void Show_Time(uint number)
  178. {     
  179.        P3=0xee;               //只打開第一個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=1打開警報(bào)
  180.        P2=table[10];         //顯示 -
  181.        delay(5);
  182.        P3=0xed;               //只打開第二個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=1打開警報(bào)
  183.        P2=table[number/10]; //顯示十位
  184.        delay(5);
  185.        P3=0xaf;               //只打開第三個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=1打開警報(bào)
  186.        P2=table[number%10]; //顯示個(gè)位
  187.        delay(5);
  188.        P3=0x6f;               //只打開第四個(gè)位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=1打開警報(bào)
  189.        P2=table[10];         //顯示 -
  190.        delay(5);
  191. }
  192. void Show_Sixty()
  193. {
  194.        uchar toal=60;                //倒計(jì)時(shí)總時(shí)間
  195.        EX0=0;                           //關(guān)閉鍵盤中斷(防止按鍵進(jìn)行中斷數(shù)碼管顯示)
  196.        TR0=1;                           //打開定時(shí)器開關(guān)
  197.        do
  198.        {
  199.               if(TimeCount==20) //中斷一次50ms,TimeCount++,當(dāng)達(dá)到20次即1s顯示值減一
  200.               {
  201.                      TimeCount=0;  //重新賦值為0
  202.                      toal--;              //顯示值--
  203.               }
  204.               Show_Time(toal);  //掉用顯示函數(shù)
  205.         }while(toal>0);        //當(dāng)顯示到0時(shí)退出                           
  206.         TR0=0;                         //關(guān)閉定時(shí)器開關(guān)
  207.         EX0=1;                         //打開鍵盤中斷開關(guān)
  208.         PwdErrTime=0;             //錯(cuò)誤次數(shù)重新賦值為0
  209.         PwdDigit=-1;                //密碼位數(shù)賦值為-1重新輸入
  210.         ShowSign=1;          //數(shù)碼管顯示標(biāo)志設(shè)為1,顯示密碼
  211. }
  212. int0_srv() interrupt 1
  213. {
  214.        TimeCount++;      
  215. }                                
  216. void Init()
  217. {
  218.        IT0=0;      //設(shè)為跳變沿有問題
  219.        TMOD=0x01;  //定時(shí)器0工作方式為1
  220.        TH0=0x3c;
  221.        TL0=0xb0;   //一次定時(shí)50ms
  222.        ET0=1;        //打開定時(shí)器0的中斷開關(guān)
  223.        EA=1;          //打開總開關(guān)
  224.        P0=table[0];//單個(gè)數(shù)碼管顯示0
  225.        LED=1;           //關(guān)閉數(shù)碼管
  226.        ALTER=0; //關(guān)閉警報(bào)器
  227. }
  228. void Close_Init()
  229. {
  230.        uchar i=0;                           
  231.        P3=0xcf;                   //關(guān)閉所有位選,P3.2=1(無影響),P3.3=1關(guān)閉LED,P3.5=0關(guān)閉警報(bào)
  232.        EX0=0;                            //關(guān)閉鍵盤中斷
  233.        PwdDigit=-1;            //密碼位數(shù)賦值為-1
  234.        P1=0xef;                  //將第一列設(shè)為低電平
  235.        while(P1!=key_buf[15]);//查詢是否按下ready鍵
  236.        ShowSign=1;                   //數(shù)碼管顯示密碼
  237.        EX0=1;                            //打開鍵盤中斷
  238.        for(i=0;i<4;i++)         //將當(dāng)前密碼初始化
  239.               Pwd_Now[i]=10;   
  240. }
  241. void Pwd_Modity()
  242. {     
  243.        uchar count=0;                                    //存儲(chǔ)按功能鍵的次數(shù)
  244.        PwdDigit=-1;                                //密碼位數(shù)賦值為-1
  245.        ShowSign=1;                                       //數(shù)碼管顯示密碼
  246.        while(1)
  247.        {     
  248.             
  249.               Total_Show();
  250.               if(count!=Keycount&&Key==11)  //當(dāng)有delete功能按鍵按下時(shí)將密碼位數(shù)減1(count!=Keycount為了防止當(dāng)按下delete后,由于在循環(huán)體中位數(shù)會(huì)一直自減)
  251.               {     
  252.                      count=Keycount;                   //功能鍵次數(shù)重新賦值給count
  253.                      PwdDigit--;                            //當(dāng)前密碼位數(shù)--
  254.               }
  255.               if(PwdDigit>=0&&Key==10)   //輸完1-4位密碼并且按下sure鍵后顯示并保存密碼
  256.               {
  257.                      uchar i=0;
  258.                      for(i=0;i<=PwdDigit;i++)  //保存密碼
  259.                             Password[i]=Pwd_Now[i];
  260.                      for(i=PwdDigit+1;i<4;i++) //將不是密碼位初始化位-1
  261.                             Password[i]=-1;
  262.                      PwdRight=PwdDigit;               //將當(dāng)前密碼位數(shù)賦值給正確密碼位數(shù)標(biāo)志
  263.                      ShowSign=2;                          //數(shù)碼管顯示on并點(diǎn)亮小燈
  264.                      Key=12;                    //防止返回主函數(shù)后進(jìn)入switch-case
  265.                      return;
  266.               }
  267.        }
  268. }                                               
  269. void main(void)
  270. {
  271.        uchar count=0;//功能按鍵的次數(shù)
  272.        Init();              //初始化
  273.        SetPwd();       //設(shè)置密碼
  274.        while(1)
  275.        {     
  276.           P0=table[PwdErrTime]; //close關(guān)閉后單個(gè)數(shù)碼管關(guān)閉
  277.           if(count!=Keycount)        //當(dāng)有功能按鍵按下時(shí)進(jìn)入switch-case(為了防止當(dāng)按下delete后,由于在循環(huán)體中位數(shù)會(huì)一直自減)
  278.           {
  279.                     count=Keycount;         //功能按鍵次數(shù)重新賦值給count
  280.                      switch(Key)
  281.                      {
  282.                             case 10:Sure_on_err();break;                             //調(diào)用確認(rèn)密碼函數(shù)
  283.                             case 11:if(ShowSign==1){PwdDigit--;Pwd_Now[PwdDigit+1]=10;}break; //密碼位數(shù)減1,并把上一位存儲(chǔ)的密碼初始化為10
  284.                             case 13:if(ShowSign==2)Pwd_Modity();break;           //當(dāng)密碼正確了才能修改密碼
  285.                             case 14:Close_Init();break;                                       //close關(guān)閉后的初始化
  286.                      }
  287.           }
  288.        Total_Show();
  289.        }
  290. }
復(fù)制代碼

Keil代碼與Proteus8.13仿真下載: 密碼鎖.zip (2.98 MB, 下載次數(shù): 46)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:301191 發(fā)表于 2023-3-4 04:00 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報(bào)

ID:1079325 發(fā)表于 2023-5-31 22:58 | 顯示全部樓層
有仿真嗎
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表