找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2558|回复: 3
收起左侧

CaKen-51单片机-1寸数码管时钟源码与资料

[复制链接]
ID:301949 发表于 2018-4-4 22:47 | 显示全部楼层 |阅读模式
今天发现了一个CaKen-51-1寸数码管时钟。现在分享给大家,先上几张图。附件里有两套程序和原理图
~F[(~3MG34JW77L}~HWSI$X.jpg $]AL0QW}NLC4J9`I_Y[4CTJ.jpg

LED时钟使用说明
1、安装完成后,给电路进行复位一下时钟才能正常工作,方法如下:(首次通电未复位前,显示的是随机数)
(1)通电,先按住加按键不放,同时再按住OK按键,松开。这时显示11:59,表示复位成功。5秒后显示12:00。
2、显示温度:按一下OK按键,此时显示温度,精度为0.1。如想退出可按加按键退出到时钟界面;
3、调时:在温度界面下,再按一下ok键,(小时数码管在闪烁),按加键修改;
4、调分:再按一下ok键,(分钟数码管在闪烁),按加键修改;
5、调闹钟时:再按一下功能键(时数码管闪烁),按加键修改闹钟时;
6、调闹钟分:再按一下功能键(分数码管闪烁),按加键修改闹钟分;
设定闹钟是否开:再按一下功能键(时、分、两点数码管显示不动),按加按键,第四数码管右下角的指示点亮(闹钟开),指示点灭(闹钟关)。
7、设定整点报时间:再按一下OK键(时数码管闪烁),按加按键修改整点报时开始时间(如调到7,就是早上7点开始有整点报时);再按一下OK键(分数码管闪烁),按加按键修改整点报时结束时间(如调到23,就是早上8点到晚上22点有整点报时)按OK键退出。设定完成。                                    

单片机源程序如下:
  1. #include <reg51.h>
  2. #include <math.h>
  3. #include "ADC.H"
  4. #include "ds1302.h"


  5. bit flag, Bell_Swh=1,Hourb,Minb,Kgb,flag_read,dot_Bell=1,Bell_Swh1=1;//闹钟调时闪烁标志位
  6. bit sec=0,min=0,hour=0,year=0,mon=0,day=0,weekk=0,hour_Bell=0,min_Bell=0,hour_time=0,min_time=0;flag_bell=0,bell_bug = 0; //闪烁标志位
  7. unsigned char id,id2,d,e,S_1302,S1_1302,H_1302,H_Bell,S_Bell,H_time,S_time; //
  8. unsigned char disbuff[4]        ={0};
  9. unsigned char time=0;
  10. unsigned int temp[1];
  11. unsigned int temp_num = 0;

  12. unsigned char code LEDData1 [ ] = {  0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff }; //正0-9LED数值
  13. unsigned char code LEDData2 [ ] = {  0xc0,0xcf,0xA4,0x86,0x8B,0x92,0x90,0xc7,0x80,0x82,0xff }; //反0-9LED数值


  14. void Delayms(unsigned int di) //延时
  15. {
  16.         unsigned int da,db;
  17.         for(da=0;da<di;da++)
  18.                    for(db=0;db<10;db++);
  19. }
  20. void Display(void)  //扫描方式led1~led4循环点亮
  21. {
  22.    time++;
  23.    if(time==1)
  24.    {  
  25.            if(dot_Bell)
  26.          {
  27.        P2=LEDData1[disbuff[0]]&0x7f;// 0x7F点亮DP小数点
  28.        LED1=0; LED4=1;
  29.          }
  30.            else
  31.          {
  32.        P2=LEDData1[disbuff[0]];
  33.        LED1=0; LED4=1;
  34.          }
  35.    }

  36.    if(time==2)
  37.    {
  38.       if(id>=3)
  39.           {
  40.            P2=(LEDData2[disbuff[1]])&0x7F;
  41.        LED1=1; LED2=0;
  42.           }
  43.           else
  44.       if(flag)
  45.      {
  46.        P2=(LEDData2[disbuff[1]])&0x7F;
  47.        LED1=1; LED2=0;
  48.      }
  49.          else
  50.          {
  51.            P2=LEDData2[disbuff[1]];
  52.        LED1=1; LED2=0;
  53.          }
  54.    }

  55.    if(time==3)
  56.    {
  57.      if(id>=3)
  58.           {
  59.          P2=LEDData1[disbuff[2]]&0x7f;
  60.          LED2=1; LED3=0;
  61.       }

  62.       else               
  63.       if(flag)
  64.           {
  65.          P2=LEDData1[disbuff[2]]&0x7f;
  66.          LED2=1; LED3=0;
  67.       }
  68.           else
  69.           {
  70.          P2=LEDData1[disbuff[2]];
  71.          LED2=1; LED3=0;
  72.       }
  73.         }
  74.           
  75.    if(time==4)
  76.    {
  77.      time=0;
  78.      if(disbuff[3]==0)
  79.     {
  80.       P2=LEDData1[10];
  81.       LED3=1; LED4=0;
  82.     }
  83.      else
  84.     {
  85.                 P2=LEDData1[disbuff[3]];
  86.         LED3=1; LED4=0;
  87.         }
  88.    }
  89. }



  90. /******************************************************************************/
  91. void Disp(void)//显示和闪烁函数
  92. {
  93.         unsigned int i=0;
  94.         unsigned char a=0,b=0,c=0,f=0;

  95.         if(hour==1)  //小时闪烁标志位
  96.     {
  97.             if(flag==1)
  98.                {   
  99.                         b=read_clock(0x85);//读小时
  100.                  a=b;
  101.                 b=b>>4;
  102.                 a=a&0x0f;
  103.                     disbuff[3]=b;
  104.                     disbuff[2]=a;
  105.                }
  106.              else
  107.                {
  108.                    disbuff[2]=10;
  109.                    disbuff[3]=10;
  110.             }
  111.     }
  112.           else
  113.            {
  114.             if(flag_read==1)//250MS 读一次

  115.                  {
  116.                          H_1302=read_clock(0x85);//读小时
  117.                 b=read_clock(0x85);//读小时
  118.                  a=b;
  119.                 b=b>>4;
  120.                 a=a&0x0f;
  121.                     disbuff[3]=b;
  122.                     disbuff[2]=a;
  123.                  }
  124.            }

  125.                
  126.         if(min==1)  //分钟闪烁标志位
  127.     {
  128.             if(flag==1)
  129.                {   
  130.                    d=read_clock(0x83);//读分钟
  131.                e=d;
  132.                d=d>>4;
  133.                e=e&0x0f;
  134.                    disbuff[1]=d;
  135.                       disbuff[0]=e;
  136.                }
  137.              else
  138.                {       
  139.                  disbuff[1]=10;
  140.                    disbuff[0]=10;
  141.                }
  142.     }
  143.           else
  144.     {
  145.          
  146.            if(flag_read==1)        //250MS读写一次
  147.            {
  148.                  S1_1302=read_clock(0x81);//读秒
  149.              S_1302=read_clock(0x83);//读分钟
  150.              d=read_clock(0x83);//读分钟
  151.              e=d;
  152.              d=d>>4;
  153.              e=e&0x0f;
  154.                  disbuff[1]=d;
  155.                  disbuff[0]=e;
  156.            }
  157.     }
  158.                        
  159. }
  160. /******************************************************************************/
  161. void Disp2(void)//显示和闪烁函数
  162. {
  163.         unsigned int i=0;
  164.         unsigned char a=0,b=0,c=0,f=0;


  165.         if(hour_Bell==1)  //小时闪烁标志位
  166.     {
  167.             if(flag==1)
  168.                {                   
  169.                         b=read_clock(0xc3);//读小时
  170.                  a=b;
  171.                 b=b>>4;
  172.                 a=a&0x0f;
  173.                     disbuff[3]=b;
  174.                     disbuff[2]=a;
  175.        
  176.                }
  177.              else
  178.                {
  179.                    disbuff[2]=10;
  180.                    disbuff[3]=10;
  181.             }
  182.     }
  183.           else
  184.            {
  185.             if(flag_read==1)
  186.                  {

  187.                     H_Bell=read_clock(0xc3);//读取闹钟的时
  188.                 S_Bell=read_clock(0xc5);//读取闹钟的分

  189.                 b=read_clock(0xc3);//读小时
  190.                  a=b;
  191.                 b=b>>4;
  192.                 a=a&0x0f;
  193.                     disbuff[3]=b;
  194.                     disbuff[2]=a;
  195.                  }
  196.            }

  197.        
  198.                
  199.         if(min_Bell==1)  //分钟闪烁标志位
  200.     {
  201.             if(flag==1)
  202.                {   
  203.                    d=read_clock(0xc5);//读分钟
  204.                e=d;
  205.                d=d>>4;
  206.                e=e&0x0f;
  207.                    disbuff[1]=d;
  208.                       disbuff[0]=e;
  209.                }
  210.              else
  211.                {       
  212.                  disbuff[1]=10;
  213.                    disbuff[0]=10;
  214.                }
  215.     }
  216.           else
  217.     {
  218.          
  219.            if(flag_read==1)        //250MS读写一次
  220.            {
  221.              d=read_clock(0xc5);//读分钟
  222.              e=d;
  223.              d=d>>4;
  224.              e=e&0x0f;
  225.                  disbuff[1]=d;
  226.                  disbuff[0]=e;
  227.            }
  228.     }
  229.                        
  230. }
  231. /******************************************************************************/
  232. void Disp3(void)//显示和闪烁函数
  233. {
  234.         unsigned int i=0;
  235.         unsigned char a=0,b=0,c=0,f=0;


  236.         if(hour_time==1)  //小时闪烁标志位
  237.     {
  238.             if(flag==1)
  239.                {                   
  240.                         b=read_clock(0xc7);//读小时
  241.                  a=b;
  242.                 b=b>>4;
  243.                 a=a&0x0f;
  244.                     disbuff[3]=b;
  245.                     disbuff[2]=a;
  246.        
  247.                }
  248.              else
  249.                {
  250.                    disbuff[2]=10;
  251.                    disbuff[3]=10;
  252.             }
  253.     }
  254.           else
  255.            {
  256.             if(flag_read==1)
  257.                  {

  258.                     H_time=read_clock(0xc7);//读取闹钟的时
  259.                 S_time=read_clock(0xc9);//读取闹钟的分
  260.                
  261.                         if(H_time>S_time)
  262.                         {
  263.                         unsigned char i;
  264.                         i=H_time;
  265.                         H_time=S_time;
  266.                         S_time=i;
  267.                         }

  268.        
  269.                 b=read_clock(0xc7);//读小时
  270.                  a=b;
  271.                 b=b>>4;
  272.                 a=a&0x0f;
  273.                     disbuff[3]=b;
  274.                     disbuff[2]=a;
  275.                  }
  276.            }

  277.        
  278.                
  279.         if(min_time==1)  //分钟闪烁标志位
  280.     {
  281.             if(flag==1)
  282.                {   
  283.                    d=read_clock(0xc9);//读分钟
  284.                e=d;
  285.                d=d>>4;
  286.                e=e&0x0f;
  287.                    disbuff[1]=d;
  288.                       disbuff[0]=e;
  289.                }
  290.              else
  291.                {       
  292.                  disbuff[1]=10;
  293.                    disbuff[0]=10;
  294.                }
  295.     }
  296.           else
  297.     {
  298.          
  299.            if(flag_read==1)        //250MS读写一次
  300.            {
  301.              d=read_clock(0xc9);//读分钟
  302.              e=d;
  303.              d=d>>4;
  304.              e=e&0x0f;
  305.                  disbuff[1]=d;
  306.                  disbuff[0]=e;
  307.            }
  308.     }
  309.                        
  310. }


  311. /******************************************************************************/
  312.         void id_case1_key(void)//id为1时的下一级选择
  313. {
  314.         if(Add_Key == 0) //增加
  315.     {
  316.             Delay(4000);
  317.                if(Add_Key == 0) {while(Add_Key ==0); Set_time(id,0); }
  318.          //调用Set_time函数
  319.                        
  320.     }
  321.   
  322. }

  323. /******************************************************************************/
  324. void id_case2_key(void)//id为1时的下一级选择
  325. {
  326.         if(Add_Key == 0) //增加
  327.     {
  328.             Delay(4000);
  329.                if(Add_Key == 0) {while(Add_Key ==0); Set_Bell(id,0);}
  330.                    //        Set_Bell(id,0);  //调用Set_Bell函数
  331.                         //while(Add_Key ==0);
  332.     }
  333. }

  334. void id_AD_scan_key(void)
  335. {
  336.         if(Add_Key == 0)
  337.         {
  338.                 Delay(4000);
  339.                 if(Add_Key == 0)
  340.                 {
  341.                         ET1 = 0;
  342.                         id = 0;
  343.                         ET0 = 1;
  344.                 //        return;
  345.                 }
  346.         }
  347. }
  348. /******************************************************************************
  349. void id_case3_key(void)//id为1时的下一级选择
  350. {
  351.         if(Add_Key == 0) //增加
  352.     {
  353.             Delay(300);
  354.                if(Add_Key == 0)
  355.                     {
  356.                   dot_Bell=~dot_Bell;
  357.               Bell_Swh=dot_Bell;
  358.               write_clock(0x8e,0x00);//允许写操作
  359.                   write_clock(0xc8,Bell_Swh);
  360.           write_clock(0x8e,0x80);//写保护,禁止写操作
  361.                   }
  362.                   while(Add_Key ==0);
  363.     }
  364.   
  365. }


  366. /******************************************************************************/
  367. void Set_Bell(unsigned char sel, bit sel_1)//根据选择调整相应项目
  368. {
  369.   signed char address,item;
  370.   signed char max,mini;
  371.   //if(sel==4)  {address=0xc6; max=59;mini=0;}    //秒
  372.   if(sel==4)  {address=0xc2; max=23; mini=0;}   //时
  373.   if(sel==5)  {address=0xc4; max=59;mini=0;}    //分

  374.   if(sel==6)                                                                          //标志位
  375.   {
  376. //          address=0xc8;//for read
  377. //        if(Add_Key ==0 || Dec_Key ==0)
  378. //        Bell_Swh=~Bell_Swh;
  379. //        write_clock(address,Bell_Swh);
  380.           //address=0xc8;
  381.           dot_Bell=~dot_Bell;
  382.               Bell_Swh=dot_Bell;
  383.               write_clock(0x8e,0x00);//允许写操作
  384.                   write_clock(0xca,Bell_Swh);
  385.           write_clock(0x8e,0x80);//写保护,禁止写操作
  386.   }    //开关
  387.   if(sel==7)  {address=0xc6; max=23;mini=0;}    //分
  388.   if(sel==8)  {address=0xc8; max=23; mini=0;}   //时

  389.     if(sel==9)                                                                          //标志位
  390.   {
  391. //          address=0xc8;//for read
  392. //        if(Add_Key ==0 || Dec_Key ==0)
  393. //        Bell_Swh=~Bell_Swh;
  394. //        write_clock(address,Bell_Swh);
  395.           //address=0xc8;
  396.           dot_Bell=~dot_Bell;
  397.               Bell_Swh1=dot_Bell;
  398.               write_clock(0x8e,0x00);//允许写操作
  399.                   write_clock(0xcc,Bell_Swh1);
  400.           write_clock(0x8e,0x80);//写保护,禁止写操作
  401.   }    //开关


  402.   item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;
  403.   if(sel_1==0)
  404.           item++;  
  405.   else
  406.           item--;
  407.   if(item>max) item=mini;   
  408.   if(item<mini) item=max;

  409.   write_clock(0x8e,0x00);//允许写操作
  410.   write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
  411.   write_clock(0x8e,0x80);//写保护,禁止写操作
  412. }

  413. /******************************************************************************/
  414. void Timer0_Init(void)//定时器0初始化
  415. {
  416.         /*
  417.         AUXR &= 0x7F;                //定时器时钟12T模式
  418.         TMOD &= 0xF0;                //设置定时器模式
  419.         TL0 = 0x18;                //设置定时初值
  420.         TH0 = 0xFC;                //设置定时初值
  421.         TF0 = 0;                //清除TF0标志
  422.         TR0 = 1;                //定时器0开始计时
  423.         ET0=  1;*/
  424.        
  425. /*
  426. //2毫秒@6.000MHz
  427.         AUXR |= 0x80;                //定时器时钟1T模式
  428.         TMOD &= 0xF0;                //设置定时器模式       
  429.         TL0 = 0x20;                //设置定时初值
  430.         TH0 = 0xD1;                //设置定时初值
  431.         TF0 = 0;                //清除TF0标志
  432.         TR0 = 1;                //定时器0开始计时       
  433.         ET0 = 1; //enable timer0 interrupt*/

  434.        
  435. //2毫秒@12.000MHz
  436.   AUXR |= 0x80;                //定时器时钟1T模式
  437.         TMOD &= 0xF0;        //设置定时器模式       
  438.         TL0 = 0x40;                //设置定时初值
  439.         TH0 = 0xA2;                //设置定时初值
  440.         TF0 = 0;                //清除TF0标志
  441.         TR0 = 1;        //定时器0开始计时       
  442.         ET0 = 1; //enable timer0 interrupt

  443. }

  444. void Timer1Init(void)                //20毫秒@12.000MHz
  445. {
  446.         AUXR &= 0xBF;                //定时器时钟12T模式
  447.         TMOD &= 0x0F;                //设置定时器模式       
  448.         TL1 = 0xE0;                //设置定时初值
  449.         TH1 = 0xB1;                //设置定时初值
  450.         TF1 = 0;                //清除TF1标志
  451.         TR1 = 1;                //定时器1开始计时       
  452. }

  453. /******************************************************************************/
  454. void Timer0(void) interrupt 1 using 1//中断入口,冒号闪烁
  455. {
  456.         static unsigned char timecount = 0;//
  457.           timecount++;

  458.         if(timecount > 125)
  459.         {
  460.                  flag_read = ~flag_read;  
  461.        
  462.         }
  463.   if(timecount > 250)//500MS
  464.   {
  465.             timecount = 0;   
  466.             flag = ~flag;

  467.   }
  468.         Display();
  469. }

  470. void Timer1(void) interrupt 3 using 1
  471. {
  472.         temp_num++;
  473.         if(temp_num > 40)
  474.         {
  475.                 temp_num = 0;
  476.         }
  477.        
  478. }


  479. void ADC_convert(void)
  480. {
  481.        
  482.         //EA = 0;//关中断
  483.        
  484.         ET0 = 0;
  485.        
  486.         if(temp_num == 0)
  487.         {
  488.                 GetADCResult(6,&temp[0]);
  489.        
  490.           //temp[0] = (unsigned int) ( ( 3950.0 / ( 11.33657 + log( 6.04 * (float)temp[0] / ( 1024.0 - (float)temp[0] ) ) ) - 273.15 ) * 100 );
  491.           temp[0]=(unsigned int) ((1/(log(((float)temp[0]*4700/(1024-(float)temp[0]))/10000)/3950+1/298.15)-273.15)*100);
  492.                
  493.                 temp_num = 1;
  494.         }
  495.                        
  496.         P2 = LEDData1[temp[0]/1000]; //千位
  497.         LED4 = 0;
  498.         Delayms(50);
  499.         LED4 = 1;
  500.         P2 = (LEDData1[temp[0]%1000/100])&0x7F;//百位
  501.         LED3 = 0;
  502.         Delayms(50);
  503.         LED3 = 1;
  504.         P2 = LEDData2[temp[0]%1000%100/10];//十位
  505.         LED2 = 0;
  506.         Delayms(50);
  507.         LED2 = 1;
  508.        
  509.         P2 = 0xa7;//c
  510.         LED1 = 0;
  511.   Delayms(50);
  512.         LED1 = 1;
  513.        
  514. //        id = 0;
  515.        
  516.         ET1 = 1;//启动定时器1
  517.        

  518. }


  519. /******************************************************************************/
  520. void main(void)//主函数
  521. {

  522.   P3M1=0x00;
  523.         P3M0=0x08;

  524.                                 H_Bell=read_clock(0xc3);//读取闹钟的时   
  525.         S_Bell=read_clock(0xc5);//读取闹钟的分   

  526.         H_time=read_clock(0xc7);//读取闹钟的时   
  527.         S_time=read_clock(0xc9);//读取闹钟的分   
  528.         
  529.                                 dot_Bell= Bell_Swh;
  530.        
  531.         InitADC(); //初始化ADC
  532.         Timer0_Init();//定时器T0初始化
  533.         Timer1Init();
  534.         EA=1;
  535.         while(1)//主循环
  536.         {       
  537.                 //设置时钟的初始值,显示14年4月5号11:59:55
  538.           if(OK_Key == 0 && Add_Key == 0)
  539.                 {
  540.                         Delay(1000);
  541.                         if(OK_Key == 0 && Add_Key == 0)
  542.                         {
  543.                             while(OK_Key == 0);//等待键松开   
  544.                                 Init_1302();
  545.                                 H_Bell=read_clock(0xc3);//读取闹钟的时   
  546.         S_Bell=read_clock(0xc5);//读取闹钟的分   

  547.         H_time=read_clock(0xc7);//读取闹钟的时   
  548.         S_time=read_clock(0xc9);//读取闹钟的分   
  549.         
  550.                                 dot_Bell= Bell_Swh;
  551.    
  552.                         }
  553.                 }       
  554. /*****************************************/
  555. //                MF:   //返回主界面
  556. /*****************************************/                       
  557.                 if (OK_Key == 0) // 设置和选择项目键
  558.     {
  559.                        Delay(1000);
  560.                if(OK_Key == 0)
  561.                           {
  562.                                   id++;
  563.                                         if(id == 2)
  564.                                         {
  565.                                                 ET1 = 0;
  566.                                                 ET0 = 1;
  567.                                         }
  568.                                   if(id>9)id=0;       
  569.                           }
  570.                
  571.                        while(OK_Key == 0);//等待键松开
  572.                 }  
  573. /***************************************/
  574.              switch( id )
  575.               {
  576.                        case 0:hour=0;min=0;Disp( );                         dot_Bell= Bell_Swh;break;//正常显示
  577.                                         case 1:hour=0;min=0;ADC_convert();id_AD_scan_key();  dot_Bell= Bell_Swh;break;//显示温度
  578.                  case 2:hour=1;id_case1_key();Disp();                 dot_Bell=0;break;  //小时
  579.                             case 3:hour=0;min=1;id_case1_key();Disp();           dot_Bell=0;break; //分钟
  580.           case 4:hour_Bell=1;id_case2_key();Disp2();           dot_Bell= Bell_Swh;break;
  581.                  case 5:hour_Bell=0;min_Bell=1;id_case2_key();Disp2();dot_Bell= Bell_Swh;break;   
  582.                  case 6:hour_Bell=0;min_Bell=0;id_case2_key();Disp2();dot_Bell= Bell_Swh;break;
  583.                        case 7:hour_time=1;id_case2_key();Disp3();           dot_Bell= Bell_Swh1;break;
  584.                        case 8:hour_time=0;min_time=1;id_case2_key();Disp3();dot_Bell= Bell_Swh1;break;
  585.                             case 9:hour_time=0;min_time=0;id_case2_key();Disp3();dot_Bell= Bell_Swh1;break;
  586.                  default:break;       
  587.               }

  588.                         if(Bell_Swh == 1)//闹钟为开
  589.                 {
  590.                                
  591.                         if(H_Bell == H_1302)
  592.                          {
  593.                                 if(S_Bell == S_1302)        //分相等
  594.                                 {       
  595.                                  
  596.                                    if(S1_1302==0)        //秒等于0才开闹钟
  597.                                    {
  598.                                       flag_bell=1;
  599.                                          }

  600.                                    if(Add_Key ==0 )//按加退出
  601.                                          {
  602.                                             flag_bell=0;
  603.                                          }
  604.                                          
  605.                           }       
  606.                     else   
  607.                     {
  608.                         flag_bell=0;
  609.                     }
  610. ……………………

  611. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
CaKen-51-1寸数码管时钟.rar (19.62 MB, 下载次数: 46)
回复

使用道具 举报

ID:58092 发表于 2018-4-9 13:59 | 显示全部楼层
下载 看看   谢谢分享
回复

使用道具 举报

ID:231936 发表于 2018-4-9 20:23 | 显示全部楼层

下载,用了一下,不错。就是少了时间和温度自动转换。
回复

使用道具 举报

ID:312978 发表于 2018-5-2 10:47 | 显示全部楼层
下载 看看   谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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