標題: 帶鬧鐘的51單片機六位數(shù)字鐘設計 含源碼+仿真+調(diào)試資料 [打印本頁]

作者: chp6596    時間: 2018-11-15 17:10
標題: 帶鬧鐘的51單片機六位數(shù)字鐘設計 含源碼+仿真+調(diào)試資料
一、硬件電路
六位數(shù)字鐘仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
圖6-1總電路圖


2、時間調(diào)試
  記時時間,如圖6-1為“01:13:38”,圖6-2所示20秒后的時間“01:13:38”,調(diào)試顯示正常。
                           
圖6-1 01:13:38                                      圖 6-2  01:13:38
調(diào)整時間,如圖6-2到圖6-4所示,為修改位閃爍狀態(tài),圖6-5和圖6-6為修改后的時間和退出修改3秒后的時間,調(diào)試顯示正常。
             
圖6-2修改秒個位閃爍“滅”     圖6-3修改秒個位閃爍“亮”       圖6-4修改分個位閃爍“滅”
           
圖6-5修改后時間                                圖6-6退出修改



3、鬧鐘調(diào)試
              如圖6-7所示,長按key2,右下角紅色led亮,表示開啟鬧鐘,并設置鬧鐘時間為“01:14:00”。若無開啟鬧鐘如圖6-8所示,到設定時間時,綠色LED無反應。如圖6-9和圖6-10所示,開啟鬧鐘,到設定時間,綠色led亮10s后熄滅。如圖6-11所示,鬧鐘“響起”后,按下key2取消“鬧鈴”,綠色led熄滅。
              
圖6-7  設定鬧鐘01:14:00                       圖6-8無開啟鬧鐘,到時無反應
                              
            圖6-9到鬧鐘時間                                                                      圖6-10  鬧鐘10s后停止   
        
                                圖6-11鬧鐘手動停止


4、日期調(diào)試
              如圖6-12和圖6-13所示,在顯示模式下流動顯示8位數(shù)“2022年3月1日”。如圖6-14至圖6-16所示,當年分為閏年“2020”時,2月末為29日,過24點,變成“2020年03月01日”。如圖6-17至圖6-19所示,當年分為平年“2021”時,2月末為28日,過24點,變成“2021年03月01日”。

                             
圖6-12 顯示日期2022年03月          圖6-13 顯示日期2022年03月01日
         圖6-14 閏年2月29日      圖6-15 設定當天23:59:50           圖6-16 24點后日期
      
   圖6-17 平年2月28日        圖6-18 設定當天23:59:49          圖6-19   24點后日


單片機源程序如下:
  1. #include<reg51.h>                                                        //包含51單片機頭文件
  2. #include<intrins.h>                                                        //包含標準函數(shù)庫
  3. sbit P_alarm              =P1^6;                                           //鬧鐘開啟與關閉指示燈,低電平有效,滅代表鬧鐘關閉
  4. sbit P_alarming=P1^7;                                          //鬧鈴指示燈,到時則亮,低電平有效
  5. unsigned char code dis_7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  6.                                                                                                   //七段共陰顯示數(shù)碼管“0~9”陰碼
  7. unsigned char data time[3]={23,59,58};
  8.                                                                                                   //時間,從左到右分別為“小時、分鐘、秒”
  9. unsigned char data clock[3]={23,0,0};
  10.                                                                                                   //鬧鐘,從左到右分別為“小時、分鐘、秒”
  11. unsigned char data date[4]={20,18,02,20};
  12.                                                                                                   //日期,              從左到右分別為“年前兩位、年后兩位、月、日”
  13. unsigned char data day[12]={31,28,31,30,31,30,31,30,31,30,31,30};
  14.                                                                                                   //12個月對應的天數(shù)
  15. unsigned char data *p;                                          //指針變量,指向當前顯示地址
  16. unsigned char data mcs,ms_10;              //計數(shù)器,mcs每250us加1次記錄40次,ms_10記錄mcs 100次
  17. unsigned char data position=1;              //編輯模式下,記錄當前修改位“1~6”分別表示數(shù)碼管右到左標號
  18. unsigned char data screen=1;                //顯示模式下,記錄當前顯示屏幕功能,如下:“1”代表time,“2”代表clock,“3”代表date
  19. unsigned int  data fliker;                                          //編輯模式下,修改位閃爍功能定時計數(shù)器
  20. unsigned int data flow;                                          //顯示模式下,日期流動計數(shù)器

  21. bit edit;                                                                                    //“0”代表顯示模式,“1”代表編輯模式
  22. bit day_flag=0;                                                        //24點標志位
  23. bit disp_num;                            //顯示數(shù)據(jù)位數(shù)切換,“0”代表顯示6位,即時間,“1”代表顯示日期
  24. bit alarm,alarming;                                                        //鬧鐘狀態(tài)和鬧鈴狀態(tài)標志位


  25. void display(unsigned char *p);               //顯示函數(shù)
  26. void clock_c();                                                                      //鬧鐘功能程序
  27. void  date_c();                                                                      //日期程序
  28. unsigned char keyscan();                                          //鍵盤掃描程序,另外,K1長按進行模式切換
  29. void key2_function_d();                              //顯示狀態(tài),按鍵2功能程序,鬧鐘取消\啟動,鬧鈴消停
  30. void key2_function_e();                              //編輯狀態(tài),按鍵2功能程序,加1
  31. void key1_function_d();                              //顯示狀態(tài),按鍵2功能程序,顯示切換
  32. void key1_function_e();                              //編輯狀態(tài),按鍵2功能程序,修改位切換
  33. void delay(unsigned int i);                            //延時函數(shù)



  34. void main()
  35. {
  36.               unsigned char keyboard,key;            
  37.               TMOD=0x02;                                                                                    //設置定時器0工作方式為2
  38.               TL0=0x06;                                                                                    //設置低八位初始值
  39.               TH0=0x06;                                                                                    //設置高八位初始值
  40.               EA=1;                                                                                                  //開啟總中斷
  41.               ET0=1;                                                                                                  //開啟定時器0中斷允許
  42.               TR0=1;                                                                                                  //啟動定時起0
  43.               p=time;                                                                                                  //指向時間地址
  44.               while(1)
  45.               {
  46.                             keyboard=P1&0x03;                                          //讀取按鍵的值,并且屏蔽無關位
  47.                             display(p);                                                                      //調(diào)用顯示函數(shù)
  48.                             clock_c();                                                                                    //調(diào)用鬧鐘函數(shù)
  49.                             date_c();                                                                                    //調(diào)用日期函數(shù)
  50.                             if((screen==1)&&(edit==1))TR0=0;else TR0=1;
  51.                                                                                                                               //修改時間時,關閉定時器
  52.                             if(keyboard!=0x03)                                                        //若有按鍵按下,則執(zhí)行以下程序
  53.                             {
  54.                                           display(p);                                                        //顯示函數(shù)消除按鍵抖動
  55.                                           if(keyboard!=0x03)                                          //再次檢測,若有,則執(zhí)行以下程序
  56.                                           {
  57.                                                         key=keyscan();                                          //調(diào)用按鍵掃描程序,讀取按鍵值
  58.                                                         if(!edit)                                                        //顯示模式
  59.                                                         {
  60. switch(key)    //如果KEY1按下,則KEY1為1,若KEY2按下則為2
  61.                                                                       {
  62.                                                                                     case 1:key1_function_d();break;//顯示屏幕切換
  63.                                                                                     case 2:key2_function_d();break;//鬧鐘功能設置,鬧鈴取消
  64.                                                                                     default:break;
  65.                                                                       }
  66.                                                         }
  67.                                                         else                                                                      //編輯模式                                                                                                               
  68.                                                         {
  69.                                                                       switch(key)               //如果KEY1按下,則KEY1為1,若KEY2按下則為2
  70.                                                                       {
  71.                                                                                     case 1:key1_function_e();break;//修改位切換
  72.                                                                                     case 2:key2_function_e();break;//加1
  73.                                                                                     default:break;
  74.                                                                       }
  75.                                                         }              }              }              }              }
  76. void display(unsigned char *p)                            //顯示子程序,顯示參數(shù)為無符號字符型指針變量
  77. {
  78.               unsigned char disp[8]={0,0,0,0,0,0,0,0};
  79.                                                                                                                 //顯示數(shù)據(jù)緩存變量
  80.               unsigned char disp_com[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  81.                                                                                                                 //數(shù)碼管位控端分別代表從左到右“1~6”號數(shù)碼管
  82.               unsigned char a,b,d,dot;
  83.               unsigned char c=0;
  84.               if(!disp_num)a=6;else a=8;                            //顯示時間則a=6,否則a=8
  85. for(b=0;b<a;b++)                                                        //將顯示數(shù)據(jù)按位緩存與disp數(shù)據(jù)中
  86.               {
  87.                                           if(c==0)disp[b]=p[b/2]/10;
  88.                                           else disp[b]=p[b/2]%10;
  89.                                           c++;if(c==2)c=0;
  90.               }
  91.               if(!edit)                                                                                    //顯示模式
  92.               {
  93.                             if(!disp_num)                                                        //顯示時間
  94.                             {
  95.                                           for(b=0;b<6;b++)
  96.                                           {
  97.                                                         if(b==1||b==3)dot=128;else dot=0;
  98.                                                                                                                 //1為小時個位,3為分鐘個位,其后面加小數(shù)點
  99.                                                         P0=0xff;                                          //消影
  100.                                                         P2=~dis_7[disp[b]]+dot;//段碼刷新
  101.                                                         P0=disp_com[b];              //位選端有效,顯示輸出
  102.                                                         delay(5);                                          //延時
  103.                                           }
  104.                             }
  105.                             else                                                                                    //顯示日期                                         
  106.                             {
  107.                                           b=flow/50;                                          //flow最大為400,每顯示50次流動一位
  108.                                           for(c=0;c<6;c++)
  109.                                           {
  110. d=c+b;if(d>7)d-=8;              //每次顯示6位,但流動顯示起始位,第9位時返回第1位顯示
  111.                                                         if(d==3||d==5||d==7)dot=128;else dot=0;
  112.                                                                                                                 //年份、月份、日期個位加小數(shù)點
  113.                                                         P0=0xff;                                          //消影
  114.                                                         P2=~dis_7[disp[d]]+dot;//斷碼刷新
  115.                                                         P0=disp_com[c];              //輸出位選端
  116.                                                         delay(5);                                          //延時
  117.                                           }
  118.                                           flow++;                                                        //每顯示1次屏幕加1;
  119.                                           if(flow==400)flow=0;              //最大399
  120.                             }
  121.               }
  122.               else                                                                                                  //編輯模式            
  123.               {            
  124.                             fliker++;if(fliker>100)fliker=0;//修改位顯示閃爍功能
  125.                             if(!disp_num)                                                 //顯示時間
  126.                             {
  127.                                           for(b=0;b<6;b++)                  
  128.                                           {
  129.                                                         if(b==1||b==3)dot=128;else dot=0;
  130.                                                         P0=0xff;
  131.                                                         P2=~dis_7[disp[b]]+dot;
  132. if(b==(6-position))              //修改位閃爍,position=1代表修改第6位數(shù)碼管,最右邊數(shù)碼管
  133.                                                         {
  134.                                                                       if(fliker<50)P0=disp_com[b];  //亮
  135.                                                                       else P0=0xff;                                                        //滅
  136.                                                         }
  137.                                                         else P0=disp_com[b];
  138.                                                         delay(5);
  139.                                           }
  140.                             }
  141.                             else                                                                                    //顯示日期
  142.                             {            
  143.                                           if(position>6)b=0;else b=2;                            //顯示日期移動,起始顯示狀態(tài)“年,月”
  144.                                           for(c=0;c<6;c++)
  145.                                           {
  146.                                                         d=c+b;                                                                      //起始位置為disp[0或者2]
  147.                                                         if(d==3||d==5)dot=128;else dot=0;
  148.                                                         P0=0xff;
  149.                                                         P2=~dis_7[disp[d]]+dot;
  150.                                                         if(c==(6-position)||(c==(8-position)&&(position>6)))
  151. //修改位閃爍,年最大位開始修改(顯示“年、月”||顯示“年、月、日”)
  152.                                                         {
  153.                                                                       if(fliker<50)P0=disp_com[c];
  154.                                                                       else P0=0xff;
  155.                                                         }
  156.                                                         else P0=disp_com[c];
  157.                                                         delay(5);
  158.                                           }              }              }     }

  159. void clock_c()                                                                                    //鬧鐘子程序
  160. {
  161.               if(alarm)                                                                                    //開啟鬧鐘則允許以下程序
  162.               {
  163.                             int a,b,c;            
  164.                             a=time[0]-clock[0];
  165.                             b=time[1]-clock[1];
  166.                             c=time[2]-clock[2];                                          //比較鬧鐘時間和當前時間
  167.                             if((a==0)&&(b==0)&&(c==0))              //時間到
  168.                                           alarming=1;                                          //啟動鬧鈴
  169.                             if(alarming)                                                        //鬧鈴10秒自動取消
  170.                             {
  171.                                           if((b*60+c)>=10)alarming=0;
  172.                             }
  173.               }
  174.               P_alarm=!alarm;                                                        //鬧鐘狀態(tài)輸出
  175.               P_alarming=!alarming;                                          //鬧鈴狀態(tài)輸出
  176. }

  177. void  date_c()                                                                                    //日期子程序
  178. {
  179.               unsigned char a,b,c,d;
  180.               d=date[0]*100+date[1];
  181.               a=23-time[0];
  182.               b=59-time[1];
  183.               c=59-time[2];                                                                      //是否到24點
  184.             
  185.               if((d%400==0)||((d%100!=0)&&(d%4==0)))              //閏年
  186.               {              day[1]=29;}
  187.               else
  188.               {              day[1]=28;if(date[3]>28)date[3]=28;}              //平年

  189.               if((a==23)&&(b==59)&&(c==59)&&(day_flag==0))              //日期記時,24整點運行1次
  190.               {
  191.                             date[3]++;                                                        //日加1
  192.                             if(date[3]>day[date[2]-1])              //月末
  193.                             {                                                                     
  194.                                           date[3]=1;                                          //日歸1
  195.                                           date[2]++;                                          //月份加1
  196.                                           if(date[2]>12)                                          //年末
  197.                                           {                                         
  198.                                                         date[2]=1;                            //月歸1
  199.                                                         date[1]++;                            //年后兩位加1
  200.                                                         if(date[1]>99)                            //99年進位
  201.                                                         {
  202.                                                                       date[0]++;              //年前兩位加1
  203.                                                                       date[1]=0;              //年后兩位歸零
  204.                                                                       if(date[0]>99)              //最大9999年
  205.                                                                                     date[0]=0;
  206.                                                         }
  207.                                           }
  208.                             }
  209.                             day_flag=1;                                                        //執(zhí)行1次標志位置1,防止重復執(zhí)行
  210.               }            
  211.               if(day_flag){if(c!=59)day_flag=0;}              //24整點過后,整點標志位復位
  212. }

  213. unsigned char keyscan()                                                        //鍵盤掃描子程序,無符號字符型子程序,返回鍵號
  214. {
  215.               unsigned int a;
  216.               unsigned char temp;
  217.               temp=P1&0x03;                                                        //讀取按鍵輸入,屏蔽無關位
  218.               for(a=0;a<100&&((P1&(0x07))==0x06);a++)
  219.                                                                                                                 //按鍵延時功能
  220.               {
  221.                             display(p);                                                        //調(diào)用顯示程序
  222.                             if(a==99)                                                                      //延時閾值
  223.                             {
  224.                                           edit=!edit;
  225. if(screen==3)position=8;//進入編輯模式初始狀態(tài)設置
  226. else position=1;a=3;temp=0;P0=0xff;delay(1000);
  227.                                                                       //進入編輯模式,則返回值為3不調(diào)用任何按鍵程序
  228.                                           while((P1&(0x07))==0x06)display(p);
  229.                                                                                                                 //按鍵松開
  230.                             }
  231.               }
  232.               switch(temp)                                                                      //根據(jù)按鍵狀態(tài)返回鍵號
  233.               {
  234.                             case 0x06:a=1;break;
  235.                             case 0x05:a=2;break;
  236.                             default:break;
  237.               }
  238.               if(edit)while((P1&0x07)!=0x07)display(p);//按鍵松開
  239.               return(a);                                                                                    //返回鍵號
  240. }


  241. void key2_function_d()                                                                      //按鍵2,顯示狀態(tài),鬧鐘啟動/停止,鬧鈴消停
  242. {
  243.               unsigned int a;            
  244.               if(!edit)                                                                                                  //顯示模式,執(zhí)行以下程序
  245.               {
  246.                             for(a=0;(a<100)&&((P1&(0x07))==0x05);a++)
  247.                                                                                                                               //按鍵延時功能
  248.                             {
  249.                                           display(p);                                                        //調(diào)用顯示程序
  250.                                           if(a==99)                                                                      //到達延時閾值,執(zhí)行以下程序
  251.                                           {            
  252.                                                         alarm=!alarm;                                          //開啟或取消鬧鐘
  253.                                                         P_alarm=!alarm;                            //立即輸出反饋鬧鐘狀態(tài)
  254.                                                         while((P1&(0x07))==0x05)display(p);//按鍵松開
  255.                                           }
  256.                             }
  257.                             if(alarm)                                                                                    //鬧鐘開啟
  258.                             {
  259.                                           if(alarming)alarming=0;                            //手動取消,顯示模式下短按取消鬧鈴
  260.                             }else alarming=alarm;                                          //鬧鐘關閉狀態(tài)                                                                                                                }
  261. }

  262. void key2_function_e()                                                                      //編輯模式,按鍵2,加1功能
  263. {
  264.               if(edit)
  265.               {
  266.                             if(!disp_num)                                                                      //顯示時間,則執(zhí)行以下程序
  267.                             {
  268.                                           switch(position)                                          //根據(jù)位置進行加1
  269.                                           {
  270.                                                         case 1:if(p[2]%10<9)p[2]++;else p[2]-=9 ;break;              //秒個位
  271.                                                         case 2:if(p[2]<50)p[2]+=10;else p[2]-=50;break;              //秒十位
  272.                                                         case 3:if(p[1]%10<9)p[1]++;else p[1]-=9 ;break;              //分鐘個位
  273.                                                         case 4:if(p[1]<50)p[1]+=10;else p[1]-=50;break;              //分鐘十位
  274.                                                         case 5:if((p[0]%10)<9&&(p[0]<23))p[0]++;else{if(p[0]<20)p[0]-=9;else p[0]-=3;};break;                                                                                                                                                                        //小時個位
  275.                                                         case 6:if((p[0]/10)<2&&(p[0]<14))p[0]+=10;else{if(p[0]<20)p[0]-=10;else p[0]-=20;};break;                                                                                                                                                                        //小時十位
  276.                                                         default: break;
  277.                                           }
  278.                             }
  279.                             else                                                                                                  //顯示日期,則執(zhí)行以下程序
  280.                             {            
  281.                                          
  282.                                           switch(position)                                          //根據(jù)位置進行加
  283.                                           {
  284.                                                         case 8:if(p[0]<99)  p[0]+=10;else p[0]%=10;break;                            //年千位
  285.                                                         case 7:if(p[0]%10<9)p[0]++;              else p[0]-=9;break;                            //年百位
  286.                                                         case 6:if(p[1]<99)  p[1]+=10;else p[1]%=10;break;                            //年十位
  287.                                                         case 5:if(p[1]%10<9)p[1]++;  else p[1]-=9;break;                            //年個位
  288. case 4:p[3]=1;if(p[2]==1)p[2]=10;else p[2]=1;break;              //若進行月份的調(diào)整,需要重新設置日期,調(diào)整月份十位代表10以上和10以下切換
  289.                                                         case 3:p[3]=1;if(p[2]>=10){if(p[2]<12) p[2]++;else p[2]=10; } else if(p[2]<9) p[2]++;else p[2]=1;break;              //調(diào)整月份個位
  290.                                                         case 2:               //日期的十位
  291.                                                                                                                 p[3]+=10;                                                                                    //日期的十位加1
  292.                                                                                                                 if(p[3]>day[p[2]-1])                                                        //如果超過月末
  293.                                                                                                                 {
  294.                                                                                                                               p[3]%=10;                                                        //保留日期個位
  295.                                                                                                                               if(p[3]==0)p[3]=10;                                          //十位歸零
  296.                                                                                                                 }break;
  297.                                                         case 1:              //日期的個位            
  298. if((p[3]/10)==(day[p[2]-1]/10))              //如果與月末十位相
  299.                                                                                     等則執(zhí)行以下程序
  300.                                                                                                                 {
  301.                                                                                                                               if(p[3]==day[p[2]-1]){ p[3]=p[3]-(day[p[2]-1]%10);}
  302.                                                                                     //達到月末,減去月末個位數(shù)
  303.                                                                                                                               else
  304.                                                                                                                               p[3]++;                                                                      //日期加1
  305.                                                                                                                 }
  306.                                                                                                                 else                                                                                                    //不與月末十位相等
  307.                                                                                                                 {                                                                                   
  308.                                                                                                                               if(p[3]%10<9)p[3]++;                            //最大值為9
  309.                                                                                                                               else
  310.                                                                                                                               {
  311.                                                                                                                                             p[3]-=9;
  312.                                                                                                                                             if(p[3]==0)p[3]=1;                            //日期為0時則為1
  313.                                                                                                                               }
  314.                                                                                                                 }break;
  315.                                                         default: break;
  316.                                           }
  317.                             }
  318.               }
  319. }


  320. void key1_function_d()                                          //按鍵1,顯示狀態(tài),顯示切換
  321. {
  322.               if(!edit)                                                                      //顯示狀態(tài)下
  323.               {
  324.                             screen++;                                                        //每調(diào)用1次,加1,范圍“1~3”
  325.                             switch(screen)
  326.                             {
  327.                                           case 1:p=time;disp_num=0;break;                            //顯示時間
  328.                                           case 2:p=clock;disp_num=0;break;                            //顯示鬧鐘
  329.                                           case 3:p=date;disp_num=1;break;                            //顯示日期
  330.                                           default:p=time;disp_num=0;screen=1;break;              //顯示時間
  331.                             }
  332.               }
  333. }

  334. void key1_function_e()                                          //按鍵1,編輯模式下,移位
  335. {
  336.               if(edit)                                                                      //編輯模式下執(zhí)行以下程序
  337.               {
  338.                             if(!disp_num)                                          //顯示時間狀態(tài)
  339.                             {
  340.                                           position++;
  341.                                           if(position>6)position=1;              //position范圍“1~6”
  342.                             }else                                                                      //顯示日期
  343.                             {
  344.                                           position--;                            //從年千位開始修改
  345.                                           if(position==0||position>8)
  346.                                                         position=8;              //范圍“1~8”
  347.                             }                                         
  348.               }else position=1;                                          //復位
  349. }
  350. void delay(unsigned int i)                            //延時程序
  351. {
  352.               unsigned int k;
  353.               for(;i>0;i--)
  354.                             for(k=0;k<54;k++);
  355. }
  356. void time_int0() interrupt 1                            //定時中斷,中斷方式2
  357. {
  358.               EA=0;                                                                      //關閉總中斷,防止高級中斷影響定時
  359.               if(mcs!=0x28)                                                        //10ms定時
  360.                             mcs++;
  361.               else
  362.               {
  363.                             mcs=0;
  364.                             if(ms_10!=100)ms_10++              ;              //1s定時
  365.                             else
  366.                             {
  367.                                           ms_10=0;            
  368.                                           if(time[2]!=59)time[2]++;              //1s到則秒位加1
  369.                                           else
  370.                                           {
  371.                                                         time[2]=0;                                          //60秒歸0
  372.                                                         if(time[1]!=59)time[1]++;//分鐘加1
  373.                                                         else
  374.                                                         {
  375.                                                                       time[1]=0;                             //60分鐘歸0
  376.                                                                       if(time[0]!=23)time[0]++; //小時加1
  377.                                                                       else time[0]=0;              //24小時歸0
  378.                                                         }
  379.                                           }
  380.                             }
  381.               }
  382.               EA=1;                                                                                                  //開放總中斷
  383. }
復制代碼


所有資料51hei提供下載:
時鐘.zip (4.86 MB, 下載次數(shù): 209)




作者: lzhl    時間: 2018-11-18 16:39
謝謝分享
作者: yjy0504    時間: 2018-11-19 10:52
厲害,剛好需要這個

作者: senCy    時間: 2018-12-17 09:27
改成8個數(shù)碼管顯示器怎么改 求教
作者: blackboxer    時間: 2018-12-28 21:12
壓縮包的仿真和上面顯示的不同,壓縮包的仿真文件里P3口都連接了,實際上就連接了兩個LED燈,而且按鍵的功能并不能完全實現(xiàn),長按K2沒反應啊

作者: 839640452    時間: 2019-3-26 19:33
謝謝分享
作者: L_uan    時間: 2019-11-7 14:17
謝謝分享。!
作者: 609001504    時間: 2019-11-29 12:33
不錯  學習下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1