找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1559|回复: 1
收起左侧

带闹钟的单片机万年历程序 测试无误

[复制链接]
ID:233717 发表于 2018-11-28 23:11 | 显示全部楼层 |阅读模式
带闹钟的万年历程序测试无误,希望能帮到大家

单片机源程序如下:
  1. #include "12864.h"
  2. #include "DS1302.h"
  3. #include "KEY.h"
  4. #include "DS18B20.h"
  5. #include<intrins.h>

  6. sfr CLK_DIV=0x97;
  7. uchar clock_page=0;                                                                                  //闹钟
  8. //uchar flag=0;
  9. uchar keynum;
  10. char yearH=20,year,month,date,day,hour=0,min=0,sec=0;          //时间变量
  11. //char cursor_xy=0;                                                                                    //光标位置
  12. uchar page=0;                                                                                              //page菜单页面
  13. code char* Weekday[8]={"  ","一","二","三","四","五","六","日"};
  14. code uchar cursor[6][2]={{0,16},{4,16},{0,32},{4,32},{0,48},{4,48}}; //光标位置
  15. extern code uchar DS1302_Addr[7];
  16. uchar M_num=59,S_num=59;
  17. uchar counter=1;                                                                                   //定时器计数

  18. struct TIME
  19. {
  20.         char x;
  21.         char y;
  22.         char num;
  23.         char max;
  24.         char min;
  25. };
  26. struct TIME  Time[10]=
  27. {
  28.         {1,2,0,99,0},                //年
  29.         {3,2,0,12,1},                //月
  30.         {5,2,0,31,1},                //日

  31.         {1,3,0,23,0},                //时
  32.         {2,3,0,59,0},                //分
  33.         {4,3,0,59,0},                //秒
  34.         {4,4,0,7,1},                //星期

  35.         {1,2,0,23,0},                //闹钟小时
  36.         {3,2,0,59,0},                //闹钟分钟
  37.         {3,3,0,1,0}                        //闹钟标志
  38. };

  39. uchar Clock_num_hour[3]={0,0,0};                           //三个闹钟小时
  40. uchar Clock_num_min[3]={0,0,0};                                   //三个闹钟分钟
  41. uchar Clock_flag[3]={0,0,0};                                   //三个闹钟使能标志

  42. void Timer(void)
  43. {
  44.         uint temp;                                                                                                  //温度
  45.         while(DS18B20_Init())                                                        //DS18B20初始化
  46.         {
  47.                  LCD12864_datas(3,2,"未插入");
  48.                  LCD12864_datas(2,3,"温度模块");
  49.                  LCD12864_WriteCom(0x01);                                           //12864清屏(DDRAM)
  50.         }               
  51.         LCD12864_datas(2,1,"年");
  52.         LCD12864_datas(4,1,"月");
  53.         LCD12864_datas(6,1,"日");

  54.         LCD12864_datas(2,4,"星期");

  55.         while(1)
  56.         {

  57.                 if(Clock_flag[0]==1||Clock_flag[1]==1||Clock_flag[2]==1)        LCD12864_DrawPic1616(0,48,0);
  58.                 else                                 LCD12864_DrawPic1616(0,48,1);                                         //闹钟标志

  59.                 hour=DS1302_ReadData(HOUR);
  60.                 min=DS1302_ReadData(MIN);
  61.                 sec=DS1302_ReadData(SEC);                                                                                         //读取时间
  62.        
  63.                 LCD12864_Num3216(0,16,hour>>4);
  64.                 LCD12864_Num3216(1,16,hour&0x0f);            //小时
  65.                 LCD12864_Num3216(2,16,10);                                   //冒号
  66.        
  67.                 LCD12864_Num3216(3,16,min>>4);
  68.                 LCD12864_Num3216(4,16,min&0x0f);                           //分钟
  69.                 LCD12864_Num3216(5,16,10);                                   //冒号
  70.        
  71.                 LCD12864_Num3216(6,16,sec>>4);
  72.                 LCD12864_Num3216(7,16,sec&0x0f);                           //秒针
  73.        
  74.                 year=DS1302_ReadData(YEAR);
  75.                 month=DS1302_ReadData(MONTH);
  76.                 date=DS1302_ReadData(DATE);                                                                                        //读取年月日
  77.        
  78.                 LCD12864_SetXY(0,1);
  79.                 LCD12864_WriteData(yearH/10+'0');
  80.                 LCD12864_WriteData(yearH%10+'0');
  81.                 LCD12864_WriteData('0'+(year>>4));
  82.                 LCD12864_WriteData('0'+(year&0x0f)); //年份
  83.        
  84.                 LCD12864_SetXY(3,1);
  85.                 LCD12864_WriteData('0'+(month>>4));
  86.                 LCD12864_WriteData('0'+(month&0x0f));                  //月份
  87.        
  88.                 LCD12864_SetXY(5,1);
  89.                 LCD12864_WriteData('0'+(date>>4));
  90.                 LCD12864_WriteData('0'+(date&0x0f));                  //日期
  91.        
  92.                 LCD12864_datas(4,4,Weekday[DS1302_ReadData(DAY)]);                                        //星期
  93.        
  94.                 temp=DS18B20_ReadTemp();                                                                                        //读取温度值
  95.                 LCD12864_SetXY(6,4);
  96.                 LCD12864_WriteData('0'+(temp%10000/1000));
  97.                 LCD12864_WriteData('0'+(temp%1000/100));
  98. //                LCD12864_WriteData('C');                                                                                         
  99.                 LCD12864_DrawPic1616(7,48,2);                                                                                //温度符号

  100.                 keynum=Key_Scan();
  101.                 if(keynum==13) {page=4;break;}                                                                                //当按键按下键值为13时,打开菜单
  102.                 LCD12864_Delay1ms(500);               
  103.         }
  104. }

  105. void Cursor(uchar n)
  106. {
  107.         switch(n)
  108.         {
  109.                 case 0:LCD12864_Reverse(1, 0,0);LCD12864_Reverse(2, 0,0);LCD12864_Reverse(3, 0,0);LCD12864_Reverse(4, 0,0);LCD12864_Reverse(5, 0,0);break;
  110.                 case 1:LCD12864_Reverse(1,16,0);LCD12864_Reverse(2,16,0);LCD12864_Reverse(3,16,0);LCD12864_Reverse(4,16,0);LCD12864_Reverse(5,16,0);break;
  111.                 case 2:LCD12864_Reverse(1,32,0);LCD12864_Reverse(2,32,0);LCD12864_Reverse(3,32,0);LCD12864_Reverse(4,32,0);LCD12864_Reverse(5,32,0);break;
  112.                 case 3:LCD12864_Reverse(1,48,0);LCD12864_Reverse(2,48,0);LCD12864_Reverse(3,48,0);LCD12864_Reverse(4,48,0);LCD12864_Reverse(5,48,0);break;
  113.                 default:break;
  114.         }
  115. }


  116. void meun(void)                                                                                                                                //菜单界面
  117. {
  118.         char n=0,late=7;
  119.        
  120.         LCD12864_datas(0,1,"  1.电子时钟");
  121.         LCD12864_datas(0,2,"  2.调整时间");
  122.         LCD12864_datas(0,3,"  3.设置闹钟");
  123.         LCD12864_datas(0,4,"  4.倒计时器");
  124.         Cursor(0);                                                                //初始光标位置
  125.         while(1)
  126.         {       
  127.                 keynum=Key_Scan();
  128.                 late=n;
  129.                 if(keynum==13)                                {page=n;break;}        //确认键
  130.                 else if(keynum>=1&&keynum<=4)                n=keynum-1;
  131.                 else if(keynum==14) n++;
  132.                 else if(keynum==15) n--;
  133.                 if(n>3)n=0;if(n<0)n=3;
  134.                 if(n!=late)
  135.                 {
  136.                         Cursor(n);
  137.                         Cursor(late);
  138.                 }               
  139.         }
  140. }


  141. void Time_Cursor(char n)
  142. {
  143.         switch(n)                                                                                   //选光标
  144.         {
  145.                 case 0:LCD12864_Reverse(0,16,0);LCD12864_Reverse(1,16,0);break;
  146.                 case 1:LCD12864_Reverse(3,16,0);break;
  147.                 case 2:LCD12864_Reverse(5,16,0);break;
  148.                 case 3:LCD12864_Reverse(1,32,0);break;
  149.                 case 4:LCD12864_Reverse(2,32,1);LCD12864_Reverse(3,32,2);break;
  150.                 case 5:LCD12864_Reverse(4,32,0);break;
  151.                 case 6:LCD12864_Reverse(4,48,0);break;
  152.                 case 7:break;
  153.         }
  154. }

  155. void Adjust_time(void)
  156. {
  157.         char n=0,late=7;
  158.         LCD12864_datas(0,1,"----时间设置----");
  159.         LCD12864_datas(2,2,"年");
  160.         LCD12864_datas(4,2,"月");
  161.         LCD12864_datas(6,2,"日");
  162.         LCD12864_datas(2,4,"星期");
  163.         hour=DS1302_ReadData(HOUR);
  164.         min=DS1302_ReadData(MIN);
  165.         sec=DS1302_ReadData(SEC);                                                                                         //读取时间
  166.         year=DS1302_ReadData(YEAR);
  167.         month=DS1302_ReadData(MONTH);
  168.         date=DS1302_ReadData(DATE);                                                                                        //读取年月日
  169.         day=DS1302_ReadData(DAY);

  170.         LCD12864_SetXY(0,2);
  171.         LCD12864_WriteData(yearH/10+'0');
  172.         LCD12864_WriteData(yearH%10+'0');
  173.         LCD12864_WriteData('0'+(year>>4));
  174.         LCD12864_WriteData('0'+(year&0x0f)); //年份

  175.         LCD12864_SetXY(3,2);
  176.         LCD12864_WriteData('0'+(month>>4));
  177.         LCD12864_WriteData('0'+(month&0x0f));                  //月份

  178.         LCD12864_SetXY(5,2);
  179.         LCD12864_WriteData('0'+(date>>4));
  180.         LCD12864_WriteData('0'+(date&0x0f));                  //日期

  181.         LCD12864_SetXY(1,3);
  182.         LCD12864_WriteData((hour>>4)+'0');
  183.         LCD12864_WriteData((hour&0x0f)+'0');            //小时
  184.         LCD12864_WriteData(':');                                   //冒号

  185.         LCD12864_WriteData((min>>4)+'0');
  186.         LCD12864_WriteData((min&0x0f)+'0');                           //分钟
  187.         LCD12864_WriteData(':');                                   //冒号

  188.         LCD12864_WriteData((sec>>4)+'0');
  189.         LCD12864_WriteData((sec&0x0f)+'0');                           //秒针
  190.        
  191.         LCD12864_datas(4,4,Weekday[day]);                        //星期

  192.         Time[0].num=(year>>4)*10+(year&0x0f);
  193.         Time[1].num=(month>>4)*10+(month&0x0f);
  194.         Time[2].num=(date>>4)*10+(date&0x0f);       
  195.         Time[3].num=(hour>>4)*10+(hour&0x0f);
  196.         Time[4].num=(min>>4)*10+(min&0x0f);
  197.         Time[5].num=(sec>>4)*10+(sec&0x0f);
  198.         Time[6].num=day;                                                 //将BCD码转换为十进制数

  199.         Time_Cursor(0);                                                         //初始光标位置
  200.                        
  201.         while(1)
  202.         {       
  203.                 LCD12864_datas(7,4,"00");
  204.                 late=n;
  205.                 keynum=Key_Scan();
  206.                 if(keynum==13)
  207.                 {
  208.                         LCD12864_datas(7,4,"01");
  209.                         while(1)
  210.                         {
  211.                                 keynum=Key_Scan();
  212.                                 if(keynum==14) Time[n].num++;
  213.                                 if(keynum==15) Time[n].num--;
  214.                                 if(Time[n].num>Time[n].max)Time[n].num=Time[n].min;
  215.                                 if(Time[n].num<Time[n].min)Time[n].num=Time[n].max;
  216.                                 if(n==6)
  217.                                 {
  218.                                          LCD12864_datas(4,4,Weekday[Time[n].num]);                        //星期
  219.                                 }
  220.                                 else
  221.                                 {       
  222.                                         LCD12864_SetXY(Time[n].x,Time[n].y);
  223.                                         if(n==4)  LCD12864_WriteData(':');                                   //冒号
  224.                                         LCD12864_WriteData('0'+(Time[n].num/10));
  225.                                         LCD12864_WriteData('0'+(Time[n].num%10));
  226.                                         if(n==4)  LCD12864_WriteData(':');                                   //冒号
  227.                                        
  228.                                 }
  229.                                 if(keynum==13)
  230.                                 {
  231.                                         DS1302_WriteDat(0x8e,0x00);                   //关闭写保护
  232.                                         DS1302_WriteDat(DS1302_Addr[n],((Time[n].num/10)<<4)+(Time[n].num%10));
  233.                                         DS1302_WriteDat(0x8e,0x80);                  //开启写保护
  234.                                         break;
  235.                                 }
  236.                                 if(keynum==16) break;
  237.                         }
  238.                 }
  239.                 if(keynum==14) n++;
  240.                 if(keynum==15) n--;
  241.                 if(n>6)n=0;if(n<0)n=6;
  242.                 if(n!=late)
  243.                 {
  244.                         Time_Cursor(n);
  245.                         Time_Cursor(late);
  246.                 }
  247.                 if(keynum==16)        
  248.                 {
  249.                         page=4;
  250.                         break;
  251.                 }
  252.         }
  253.        
  254. }

  255. void Clock_Cursor(char n)
  256. {
  257.         switch(n)                                                                                   //选光标
  258.         {
  259.                 case 0:LCD12864_Reverse(1,16,0);break;
  260.                 case 1:LCD12864_Reverse(3,16,0);break;
  261.                 case 2:LCD12864_Reverse(3,32,0);break;
  262.                 case 3:break;
  263.         }
  264. }

  265. void Clock(uchar k)
  266. {
  267.         char n=0,late=3;
  268.         LCD12864_WriteCom(0x01);           //12864清屏

  269.         Time[7].num=Clock_num_hour[k];        //小时
  270.         Time[8].num=Clock_num_min[k];        //分钟
  271.         Time[9].num=Clock_flag[k];                //标志

  272.         LCD12864_datas(0,1,"----闹钟设置----");

  273.         LCD12864_SetXY(2,2);
  274.         LCD12864_WriteData(':');                                   //冒号

  275.         LCD12864_SetXY(1,2);
  276.         LCD12864_WriteData((Time[7].num>>4)+'0');
  277.         LCD12864_WriteData((Time[7].num&0x0f)+'0');            //小时

  278.         LCD12864_SetXY(3,2);
  279.         LCD12864_WriteData((Time[8].num>>4)+'0');
  280.         LCD12864_WriteData((Time[8].num&0x0f)+'0');                           //分钟

  281.         LCD12864_datas(0,3,"闹钟:");
  282.         if(Time[9].num==0)         LCD12864_datas(3,3,"关");
  283.         else                                 LCD12864_datas(3,3,"开");
  284.        
  285.         Time[7].num=(Time[7].num>>4)*10+(Time[7].num&0x0f);
  286.         Time[8].num=(Time[8].num>>4)*10+(Time[8].num&0x0f);
  287.         Time[9].num=(Time[9].num>>4)*10+(Time[9].num&0x0f);

  288.         Clock_Cursor(0);                                      //初始光标位置
  289.         while(1)
  290.         {
  291.                 LCD12864_datas(7,4,"00");
  292.                 keynum=Key_Scan();
  293.                 late=n;

  294.                 if(keynum==13)
  295.                 {
  296.                         LCD12864_datas(7,4,"01");
  297.                         n=n+7;
  298.                         while(1)
  299.                         {
  300.                                 keynum=Key_Scan();
  301.                                 if(keynum==14) Time[n].num++;
  302.                                 if(keynum==15) Time[n].num--;
  303.                                 if(Time[n].num>Time[n].max)Time[n].num=Time[n].min;
  304.                                 if(Time[n].num<Time[n].min)Time[n].num=Time[n].max;
  305.                                
  306.                                 if(Time[9].num==0)         LCD12864_datas(3,3,"关");
  307.                                 else                                 LCD12864_datas(3,3,"开");
  308.                                
  309.                                 LCD12864_SetXY(1,2);
  310.                                 LCD12864_WriteData((Time[7].num/10)+'0');
  311.                                 LCD12864_WriteData((Time[7].num%10)+'0');            //小时

  312.                                 LCD12864_SetXY(3,2);
  313.                                 LCD12864_WriteData((Time[8].num/10)+'0');
  314.                                 LCD12864_WriteData((Time[8].num%10)+'0');                           //分钟
  315.                                 if(keynum==13)
  316.                                 {       
  317.                                         break;
  318.                                 }
  319.                                 if(keynum==16)
  320.                                 {
  321.                                         break;
  322.                                 }
  323.                         }
  324.                         n=n-7;       
  325.                 }        
  326.                 if(keynum==14) n++;
  327.                 if(keynum==15) n--;
  328.                 if(n>2)n=0;if(n<0)n=2;
  329.                 if(n!=late)
  330.                 {
  331.                         Clock_Cursor(n);
  332.                         Clock_Cursor(late);
  333.                 }
  334.                 if(keynum==16)        
  335.                 {
  336.                         page=2;                                                                  //返回菜单
  337.                         Time[7].num=((Time[7].num/10)<<4)+(Time[7].num%10);
  338.                         Time[8].num=((Time[8].num/10)<<4)+(Time[8].num%10);
  339.                         Time[9].num=((Time[9].num/10)<<4)+(Time[9].num%10);

  340.                         Clock_num_hour[k]=Time[7].num;        //小时
  341.                         Clock_num_min[k]=Time[8].num;        //分钟
  342.                         Clock_flag[k]=Time[9].num;                //标志

  343.                         if(Clock_flag[k]!=0)
  344.                         {
  345.                                 TMOD|=0x01;
  346.                                 EA=1;
  347.                                 ET0=1;
  348.                                 TH0=0x3c;
  349.                                 TL0=0xb0;                                           //定时50ms
  350.                                 TR0=1;
  351.                         }
  352.                         break;
  353.                 }
  354.         }       
  355. }

  356. void Select_Clock_Cursor(uchar n)
  357. {
  358.         switch(n)
  359.         {
  360.                 case 0:LCD12864_Reverse(2,16,0);LCD12864_Reverse(3,16,0);LCD12864_Reverse(4,16,0);LCD12864_Reverse(5,16,0);break;
  361.                 case 1:LCD12864_Reverse(2,32,0);LCD12864_Reverse(3,32,0);LCD12864_Reverse(4,32,0);LCD12864_Reverse(5,32,0);break;
  362.                 case 2:LCD12864_Reverse(2,48,0);LCD12864_Reverse(3,48,0);LCD12864_Reverse(4,48,0);LCD12864_Reverse(5,48,0);break;
  363.                 default:break;
  364.         }
  365. }

  366. void Select_Clock(void)
  367. {
  368.         char n=0,late=4;
  369.         LCD12864_datas(0,1,"----闹钟选择----");
  370.         LCD12864_datas(0,2,"    1.闹钟01");
  371.         LCD12864_datas(0,3,"    2.闹钟02");
  372.         LCD12864_datas(0,4,"    3.闹钟03");
  373.         Select_Clock_Cursor(0);                                                                //初始光标位置
  374.         while(1)
  375.         {       
  376.                 keynum=Key_Scan();
  377.                 late=n;
  378.                 if(keynum==13)                {clock_page=n;page=5;break;}        //确认键
  379.                 else if(keynum>=1&&keynum<=4)                n=keynum-1;
  380.                 else if(keynum==14) n++;
  381.                 else if(keynum==15) n--;
  382.                 else if(keynum==16) {page=4;        break;}
  383.                 if(n>2)n=0;if(n<0)n=2;
  384.                 if(n!=late)
  385.                 {
  386.                         Select_Clock_Cursor(n);
  387.                         Select_Clock_Cursor(late);
  388.                 }               
  389.         }
  390. }

  391. void Countdown(void)
  392. {       
  393.         LCD12864_datas(0,1,"----倒计时器----");
  394.        
  395.         while(1)
  396.         {
  397.                 keynum=Key_Scan();

  398.                 LCD12864_SetXY(3,3);

  399.                 LCD12864_WriteData((M_num/10)+'0');
  400.                 LCD12864_WriteData((M_num%10)+'0');                           //分钟
  401.                 LCD12864_WriteData(':');                                   //冒号

  402.                 LCD12864_WriteData((S_num/10)+'0');
  403.                 LCD12864_WriteData((S_num%10)+'0');                           //分钟

  404.                 if(keynum==13)   
  405.                 {
  406.                         TMOD|=0x10;
  407.                         EA=1;
  408.                         ET1=1;
  409.                         TH1=0x3c;
  410.                         TL1=0xb0;                                           //定时50ms
  411.                         TR1=1;
  412.                 }
  413.                 else if(keynum==2)                M_num--;         //减低分钟
  414.                 else if(keynum==3)                S_num--;         //减低秒针
  415.                 else if(keynum==14)                                         //重置计数值
  416.                                 {
  417.                                         S_num=59;
  418.                                         M_num=59;       
  419.                                 }
  420.                 else if(keynum==15)                                         //停止计时
  421.                                 {
  422.                                         TR1=0;       
  423.                                 }
  424.                 else if(keynum==16) {page=4;        break;}          //退出到菜单页

  425.                 if(S_num==0)                                                 //判断时间越界
  426.                 {
  427.                         S_num=59;
  428.                         M_num--;
  429.                 }
  430.                 if(M_num==0&&S_num==0)
  431.                 {
  432.                         while(1)
  433.                         {       
  434.                                 Beep_key();
  435.                                 Delay10ms(5);
  436.                                 if(Key_Scan()!=0)
  437.                                 {
  438.                                         TR1=0;
  439.                                         S_num=59;
  440.                                         M_num=59;               
  441.                                         break;
  442.                                 }
  443.                                                
  444.                         }
  445.                 }
  446.         }

  447. }

  448. void time_2(void) interrupt 3
  449. {
  450.         TH1=0x3c;
  451.         TL1=0xb0;                                           //定时50ms
  452.         counter++;
  453.         if(counter==20)
  454.         {
  455.                 counter=0;
  456.                 S_num--;
  457.         }

  458. }

  459. void main(void)
  460. {
  461.         CLK_DIV=0x03;                                   //八分频
  462.         LCD12864_Init();                           //12864初始化
  463.         LCD12864_CleanScreen();                   //12864清屏
  464.         DS1302_Init();                                   //DS1302初始化
  465.         while(1)
  466.         {
  467.                 LCD12864_CleanScreen();                                                   //12864清屏(CGRAM)
  468.                 LCD12864_WriteCom(0x01);                                           //12864清屏(DDRAM)
  469.                 if(page==0)                 Timer();                                //page=0时,数字钟界面                
  470.                 else if(page==1)        Adjust_time();                        //page=1时,调整时间界面        
  471.                    else if(page==2)        Select_Clock();                        //page=2时,系统设置界面
  472.                 else if(page==3)        Countdown();                                //page=3时,倒计时器页面
  473.                 else if(page==4)        meun();                                        //page=4时,菜单页面
  474.                 else if(page==5)        Clock(clock_page);                                        //page=4时,菜单页面         
  475.         }       
  476.        
  477. }

  478. void time_1(void) interrupt 1
  479. {
  480.         uchar i,H,M;
  481.         H=DS1302_ReadData(HOUR);
  482.         M=DS1302_ReadData(MIN);
  483.         TH0=0x3c;
  484.         TL0=0xb0;                                           //定时50ms
  485.         for(i=0;i<3;i++)
  486.         {       
  487.                 if(Clock_flag[i]==1)
  488.                         while(H==Clock_num_hour[i]&&M==Clock_num_min[i])
  489.                         {       
  490.                                 Clock_flag[i]=0;
  491.                                 Beep_key();
  492.                                 Delay10ms(5);
  493.                                 if(Key_Scan()!=0)         break;               
  494.                         }
  495.         }
  496.         if(Clock_flag[0]==0&&Clock_flag[1]==0&&Clock_flag[2]==0)
  497.         {
  498.                 TR0=0;
  499. //                Time[9].num=0;
  500. //                Clock_flag[0]=1;
  501. //                Clock_flag[1]=1;
  502. //                Clock_flag[2]=1;
  503.         }

  504. }
复制代码

所有资料51hei提供下载:
带闹钟万年历程序.zip (117.86 KB, 下载次数: 35)
回复

使用道具 举报

ID:782897 发表于 2020-6-19 13:27 来自手机 | 显示全部楼层
仿真都没有?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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