找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10142|回复: 9
打印 上一主题 下一主题
收起左侧

89c52单片机数码管万年历

[复制链接]
跳转到指定楼层
楼主
之前花了40块钱买了个万年历的套件,用的是TG1508D5V2芯片,结果焊接好后发现按键无反应,被我折腾了好久,不仅按键没弄好,显示也有问题了,问了卖家也说不清楚,卖家又没有技术支持,然后就扔在那儿了,现在我已经学会了单片机,所以重新拿它出来自己改造,把万年历芯片换成了89C52单片机,自己写程序,然后自己还弄了首加沃特舞曲作为闹铃声,看下程序就自己会编了,照着谱子编。



原理图:





这个就是坏了的芯片,应该是坏了吧,换上了我们的89C52
PCB正面,左边那个位置就是放芯片的,我现在把芯片弄下来了,放了排针
反面,基本上电路都没有改动,只有4led的线路改了下
单片机小板,89C52+1302,以及13个三极管  
  反面
接上飞线,不算很多飞线吧
  4个按键,还是按原来的不变

组装好,用的是5v的开关电源,以前是变压器
    不知道怎么倒过来了,哈哈
    完成,下面听听我编的加沃特舞曲吧,可能大家不喜欢,天空之城比较好听,这个加沃特舞曲是我以前学小提琴的时候拉过的,所以就拿来编了
  1. #include
  2. #include
  3. #include "nongli.h"
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. unsigned int c;
  7. uchar code disdata[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc7,0xc1,0x86,0xc8,0x8e,0x89};// 无小数点数码管段码表(0~9,L,U,E,N,F,H)
  8. /****************************************************************************/
  9. sbit        clock_clk         =         P1 ^ 0;        //ds1302_clk(时钟线)//DS1302时钟接口
  10. sbit        clock_dat         =         P1 ^ 1;        //ds1302_dat(数据线)//DS1302时钟接口
  11. sbit        clock_Rst         =         P1 ^ 2;        //ds1302_Rst(复位线)//DS1302时钟接口
  12. sbit        KEY                =P1 ^ 3; //按键1,设置
  13. sbit        KEY1        =P1 ^ 4; //按键2,上调
  14. sbit        KEY2        =P1 ^ 5; //按键3,下调
  15. sbit        KEY3        =P1 ^ 6; //按键4, 退出
  16. sbit    voic    =P1 ^ 7;  //声音输出
  17. //sbit        J1                =P3 ^ 5; //闹钟输出端
  18. sbit        J2                =P3 ^ 6; //整点报时输出端
  19. sbit        J3                =P3 ^ 7; //音乐播放输出端
  20. //正极端为P2接口和以下P3接口,负极端为P0接口
  21. sbit        HH1        =P3 ^ 0; //设置LED点阵屏连接的I/O口
  22. sbit        HH2        =P3 ^ 1; //设置LED点阵屏连接的I/O口
  23. sbit        HH3        =P3 ^ 2; //设置LED点阵屏连接的I/O口
  24. sbit        HH4        =P3 ^ 3; //设置LED点阵屏连接的I/O口
  25. sbit        HH5        =P3 ^ 4; //设置LED点阵屏连接的I/O口
  26. //定义累加器A中的各位
  27. sbit a0   = ACC ^ 0;sbit a1   = ACC ^ 1;sbit a2   = ACC ^ 2;
  28. sbit a3   = ACC ^ 3;sbit a4   = ACC ^ 4;sbit a5   = ACC ^ 5;
  29. sbit a6   = ACC ^ 6;sbit a7   = ACC ^ 7;
  30. //定义全局变量
  31. unsigned char yy,mo,dd,xq,hh,mm,ss,NZ_H,NZ_M,G,L;//定义时间映射全局变量(专用寄存器)
  32. unsigned char MENU;//菜单切换标志位
  33. unsigned char TIME_YY,TIME_MO,TIME_DD,TIME_HH,TIME_MM,TIME_SS;//设置年、月、日、时、分、秒存放区,用于调时
  34. //unsigned char AL1_HH,AL1_MM;//设置J时、分*
  35. //unsigned char AL2_HH,AL2_MM;//设置J时、分*
  36. unsigned char NZ_HH,NZ_MM;//设置NZ时、分*
  37. unsigned char GG;//闹钟开启关闭位
  38. unsigned char LL;//整点报时开启关闭位
  39. data unsigned char cou  = 0; // 软计数器,对10ms时基信号累加到1s
  40. data unsigned char bn;//扫描映射全局变量
  41. data unsigned char DY_PWM;//显示亮度
  42. //以下是C调低音的音频宏定义
  43. #define L1  262    //将"L1"宏定义为低音"1"的频率262Hz                        时间是1/262=3826/2 us          取半周期
  44. #define L2  286    //将"L2"宏定义为低音"2"的频率286Hz
  45. #define L3  311    //将"L3"宏定义为低音"3"的频率311Hz
  46. #define L4  349    //将"L4"宏定义为低音"4"的频率349Hz
  47. #define L5  392    //将"L5"宏定义为低音"5"的频率392Hz
  48. #define L6  440    //将"l_a"宏定义为低音"6"的频率440Hz
  49. #define L7  494    //将"L7"宏定义为低音"7"的频率494Hz
  50. //以下是C调中音的音频宏定义
  51. #define Z1    523     //将"Z1"宏定义为中音"1"的频率523Hz
  52. #define Z2    587     //将"Z2"宏定义为中音"2"的频率587Hz
  53. #define Z3           659     //将"Z3"宏定义为中音"3"的频率659Hz
  54. #define Z4    698     //将"Z4"宏定义为中音"4"的频率698Hz
  55. #define Z5    784     //将"Z5"宏定义为中音"5"的频率784Hz
  56. #define Z6    880     //将"Z6"宏定义为中音"6"的频率880Hz
  57. #define Z7    987     //将"Z7"宏定义为中音"7"的频率523H      
  58. //以下是C调高音的音频宏定义
  59. #define H1  1046    //将"H1"宏定义为高音"1"的频率1046Hz
  60. #define H2  1174    //将"H2"宏定义为高音"2"的频率1174Hz
  61. #define H3  1318    //将"H3"宏定义为高音"3"的频率1318Hz
  62. #define H4  1396    //将"H4"宏定义为高音"4"的频率1396Hz
  63. #define H5  1567    //将"H5"宏定义为高音"5"的频率1567Hz
  64. #define H6  1760    //将"H6"宏定义为高音"6"的频率1760Hz
  65. #define H7  1975    //将"H7"宏定义为高音"7"的频率1975Hz
  66. #define O   0    //定义休止符
  67. //以下是《加沃特舞曲》简谱         //每行对应一小节音符
  68. unsigned  int code f1[]={         H2,H3,H2,Z7,H1,H2,H1,Z6,   Z5,H4,H5,Z5,O,   H1,H2,H1,Z6,Z7,H1,Z7,Z5,   Z6,H1,H2,Z2,O,
  69.                             H2,H3,H2,Z7,H1,H2,H1,Z6,   Z5,H4,H5,Z5,O,   Z7,Z5,Z3,Z5,Z3,Z1,         Z2,H1,H2,Z2,O,
  70.                                                         Z6,H1,Z7,H2,H1,Z7,Z6,Z5,   Z4,Z6,H1,O,      Z7,H2,H1,H3,H2,H1,Z7,Z6,   Z5,Z7,H2,O,
  71.                                                         H3,H2,H2,H1,H1,Z7,Z7,Z5,   Z6,H1,H3,O,      H2,Z7,Z4,Z5,H1,Z6,Z3,Z4,   Z5,H4,H5,Z5,O,
  72.                                                         
  73.                                                         Z7,Z7,H1,H1,   H2,H5,H4,H5,H2,O,   Z5,Z5,Z6,Z6,   Z7,H2,H1,H2,H3,H2,H1,Z7,Z6,Z2,Z4,Z2,
  74.                                                         Z3,Z5,Z3,H3,Z3,    Z2,Z5,Z2,H2,Z2,   H1,Z2,Z7,Z2,   Z6,Z6,Z7,H1,Z7,Z6,O,
  75.                                                         Z7,Z7,H1,H1,   H2,H5,H4,H5,H2,O,   Z5,Z5,Z6,Z6,   Z7,H2,H1,H2,H3,H2,H1,Z7,Z6,Z2,Z4,Z2,
  76.                                                         Z3,Z5,Z3,H3,Z3,    Z2,Z5,Z2,H2,Z2,   H1,Z2,Z7,Z2,   Z6,Z6,Z7,H1,Z7,Z6,O,
  77.                                                               
  78.                                                        H1,H1,Z7,Z6,Z5,Z4,   H4,H5,Z2,Z5,O,
  79.                                                         H1,H1,Z7,Z6,Z5,Z4,   H4,H5,Z5,Z7,O,
  80.                                                         Z3,Z5,Z4,Z3,Z2,Z1,H3,   Z2,Z2,Z3,Z2,Z1,L7,H2,
  81.                                                         H1,H3,H2,H1,Z7,Z6,H4,   H5,Z5,L5,O,

  82.                                                                         0xff}; //以0xff作为音符的结束标志                                       
  83. //以下是简谱中每个音符的节拍
  84. //"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位
  85. unsigned char code JP1[ ]={ 4,4,4,4,4,4,4,4,   8,1,8,8,8,  4,4,4,4,4,4,4,4,   8,1,8,8,8,   4,4,4,4,4,4,4,4,   8,1,8,8,8,
  86.                             8,4,4,8,4,4,       8,1,8,8,8,  4,4,4,4,4,4,4,4,   8,8,8,8,     4,4,4,4,4,4,4,4,   8,8,8,8,
  87.                                                         4,4,4,4,4,4,4,4,   8,8,8,8,    4,4,4,4,4,4,4,4,   8,1,8,8,8,   

  88.                                                         16,16,16,16,    8,8,8,8,16,16,    16,16,16,16,    4,4,4,4,4,4,4,4,8,8,8,8,
  89.                                                         16,8,8,16,16,  16,8,8,16,16,     16,16,16,16,    16,4,4,4,4,16,16,
  90.                                                         16,16,16,16,    8,8,8,8,16,16,    16,16,16,16,    4,4,4,4,4,4,4,4,8,8,8,8,
  91.                                                         16,8,8,16,16,  16,8,8,16,16,     16,16,16,16,    16,4,4,4,4,16,16,

  92.                                                         16,4,4,4,4,16,16,    16,16,16,16,    16,4,4,4,4,16,16,    16,16,16,16,
  93.                                                         16,4,4,4,4,16,16,    16,4,4,4,4,16,16,    16,4,4,4,4,16,16,    16,16,16,16,

  94.                                                         };                  
  95. /****************************************************************************/
  96. //延时
  97. void DelayMS(uint i) { while(i--); }
  98. /*
  99. void DelayMS(uint x)
  100. {
  101. uchar t;
  102. while(x--) for(t=0;t<30;t++);

  103. }
  104. */
  105. /****************************************************************************/
  106. void diplay_data (unsigned char l,unsigned char d){
  107.                 switch (l){//显示的列位置               
  108.                                 case 1://
  109.                                         P0 = d;P2 = 0x01;DelayMS(c);P0=0xff;P2 = 0x00;               
  110.                                         break;//                                       
  111.                                 case 2://
  112.                                         P0 = d;P2 = 0x02;DelayMS(c);P0=0xff;P2 = 0x00;                        
  113.                                         break;//               
  114.                                 case 3://
  115.                                         P0 = d;P2 = 0x04;DelayMS(c);P0=0xff;P2 = 0x00;                        
  116.                                         break;//               
  117.                                 case 4://
  118.                                         P0 = d;P2 = 0x08;DelayMS(c);P0=0xff;P2 = 0x00;                        
  119.                                         break;//
  120.                                 case 5://
  121.                                         P0 = d;P2 = 0x10;DelayMS(c);P0=0xff;P2 = 0x00;                        
  122.                                         break;//                                       
  123.                                 case 6://
  124.                                         P0 = d;P2 = 0x20;DelayMS(c);P0=0xff;P2 = 0x00;                        
  125.                                         break;//               
  126.                                 case 7://
  127.                                         P0 = d;P2 = 0x40;DelayMS(c);P0=0xff;P2 = 0x00;                        
  128.                                         break;//               
  129.                                 case 8://
  130.                                         P0 = d;P2 = 0x80;DelayMS(c);P0=0xff;P2 = 0x00;                        
  131.                                         break;//
  132.                                 case 9://
  133.                                         P0 = d;HH1 = 1;DelayMS(c);P0=0xff;HH1 = 0;               
  134.                                         break;//                                       
  135.                                 case 10://
  136.                                         P0 = d;HH2 = 1;DelayMS(c);P0=0xff;HH2 = 0;                        
  137.                                         break;//               
  138.                                 case 11://
  139.                                         P0 = d;HH3 = 1;DelayMS(c);P0=0xff;HH3 = 0;                        
  140.                                         break;//               
  141.                                 case 12://
  142.                                         P0 = d;HH4 = 1;DelayMS(c);P0=0xff;HH4 = 0;                        
  143.                                         break;//
  144.                                 case 13://
  145.                                         P0 = d;HH5 = 1;DelayMS(c);P0=0xff;HH5 = 0;                        
  146.                                         break;//                                                                        
  147.                 }
  148. }
  149. /*********************************************************************************************/
  150. /*********************************************************************************************
  151. 函数名:1302驱动程序
  152. 调  用:
  153. 参  数:无
  154. 返回值:无
  155. 结  果:
  156. 备  注:适用于DS1302芯片+32.768KHz6pF晶体
  157. /**********************************************************************************************/
  158. //1302驱动程序(底层协议)
  159. void clock_out(unsigned char dd){
  160.         ACC=dd;// 0x80 = 1000 0000
  161.         clock_dat=a0; clock_clk=1; clock_clk=0;
  162.         clock_dat=a1; clock_clk=1; clock_clk=0;
  163.         clock_dat=a2; clock_clk=1; clock_clk=0;
  164.         clock_dat=a3; clock_clk=1; clock_clk=0;
  165.         clock_dat=a4; clock_clk=1; clock_clk=0;
  166.         clock_dat=a5; clock_clk=1; clock_clk=0;
  167.         clock_dat=a6; clock_clk=1; clock_clk=0;
  168.         clock_dat=a7; clock_clk=1; clock_clk=0;
  169. }
  170. /*****************************************************************************/
  171. //DS1302写数据(底层协议)
  172. void write_clock(unsigned char ord, unsigned char dd){
  173.         clock_clk=0;
  174.         clock_Rst=0;
  175.         clock_Rst=1;
  176.         clock_out(ord);
  177.         clock_out(dd);
  178.         clock_Rst=0;
  179.         clock_clk=1;
  180. }
  181. /*****************************************************************************/
  182. //DS1302写入字节(底层协议)
  183. unsigned char clock_in(void){
  184.         clock_dat=1;
  185.         a0=clock_dat;
  186.         clock_clk=1; clock_clk=0; a1=clock_dat;
  187.         clock_clk=1; clock_clk=0; a2=clock_dat;
  188.         clock_clk=1; clock_clk=0; a3=clock_dat;
  189.         clock_clk=1; clock_clk=0; a4=clock_dat;
  190.         clock_clk=1; clock_clk=0; a5=clock_dat;
  191.         clock_clk=1; clock_clk=0; a6=clock_dat;
  192.         clock_clk=1; clock_clk=0; a7=clock_dat;
  193.         return(ACC);
  194. }
  195. /*****************************************************************************/
  196. //DS1302读数据(底层协议)
  197. unsigned char read_clock(unsigned char ord){
  198.         unsigned char dd=0;
  199.         clock_clk=0;
  200.         clock_Rst=0;
  201.         clock_Rst=1;
  202.         clock_out(ord);
  203.         dd=clock_in();
  204.         clock_Rst=0;
  205.         clock_clk=1;
  206.         return(dd);
  207. }
  208. /*****************************************************************************/
  209. //常用时钟数据读取
  210. void read_clockS(void){
  211.         ss = read_clock(0x81);//读取秒数据
  212.         mm = read_clock(0x83);//读取分钟数据
  213.         hh = read_clock(0x85);//小时
  214.         dd = read_clock(0x87);//日
  215.         mo = read_clock(0x89);//月
  216.         yy = read_clock(0x8d);//年
  217.   //        xq = read_clock(0x8b);//星期
  218.   //        xq = xq%16; //字节低4位的BCD码放入xq
  219.   // AL1_H = read_clock(0xc1);
  220.   // AL1_M = read_clock(0xc3);
  221.   // AL2_H = read_clock(0xc5);
  222.   // AL2_M = read_clock(0xc9);
  223.         NZ_H  = read_clock(0xd1);
  224.         NZ_M  = read_clock(0xe1);
  225.         G = read_clock(0xe3);
  226.         L = read_clock(0xe5);
  227. }
  228. /*****************************************************************************/
  229. /*********************************************************************************************
  230. 函数名:1302初始化程序
  231. 调  用:
  232. 参  数:无
  233. 返回值:无
  234. 结  果:初始化时钟芯片,自动检测并初始化
  235. 备  注:适用于DS1302芯片+32.768KHz6pF晶体
  236. /**********************************************************************************************/
  237. //设置1302的初始时间(自动初始化)
  238. void Init_1302(void){//-设置1302的初始时间(2010年1月1日00时00分50秒星期一)
  239.         unsigned char f;
  240.         if(read_clock(0x81) == 0x80){
  241.                 write_clock(0x8e,0x00);//允许写操作
  242.                 write_clock(0x8c,0x10);//年
  243.                 write_clock(0x8a,0x05);//星期
  244.                 write_clock(0x88,0x01);//月
  245.                 write_clock(0x86,0x01);//日
  246.                 write_clock(0x84,0x23);//小时
  247.                 write_clock(0x82,0x59);//分钟
  248.                 write_clock(0x80,0x50);//秒
  249.                 write_clock(0x90,0x05);//充电设置(0x05不充电,0xa5充电)
  250.                 write_clock(0xe2,0x00);//充电设置(0x05不充电,0xa5充电)
  251.                 write_clock(0xe4,0x00);//
  252.                 for(f=0;f<60;f=f+2){//清除闹钟RAM位为0
  253.                         write_clock(0xc0+f,0x00);
  254.                 }
  255.                 write_clock(0xC4,0x09);//背光初始为亮度9
  256.                 write_clock(0x8e,0x80);//禁止写操作
  257.         }
  258. }
  259. /**********************************************************************************************/

  260. //主程序
  261. void main()
  262. {
  263. //uchar i,wei=0x80;
  264. unsigned char s,d,f,h,g,e,nn;
  265. unsigned int b;
  266. unsigned int i,j;
  267.     MENU=0;
  268.         voic=0;  
  269.         s=0,d=0,f=0,h=0,g=0,e=0,nn=0;
  270.         GG=0x00,LL=0x00;
  271.         HH1=0,HH2=0,HH3=0,HH4=0,HH5=0;
  272.         P2=0x00,P0=0xff;
  273. //        J1=1;
  274.         J2=1;
  275.         J3=1;
  276.         c=60;
  277.         i=0;
  278. Init_1302();//初始程序
  279. while(1)
  280. {
  281. read_clockS();
  282. Conversion(0,yy,mo,dd);        //公历转农历
  283. Conver_week(0,yy,mo,dd);//计算星期
  284. /*
  285. diplay_data (1,disdata[hh/16]);
  286. diplay_data (2,disdata[hh%16]);
  287. diplay_data (3,disdata[mm/16]);
  288. diplay_data (4,disdata[mm%16]);
  289. diplay_data (5,disdata[ss/16]);
  290. diplay_data (6,disdata[ss%16]);
  291. diplay_data (7,disdata[xq]);
  292. diplay_data (8,disdata[9]);
  293. */
  294. /**************************************************************************/
  295.         if(MENU==0){        //显示正常走时主界面
  296.                         voic=0;
  297.                         c=60;
  298.                         diplay_data (1,disdata[yy/16]);//1
  299.                         diplay_data (2,disdata[yy%16]);//2
  300.                         //diplay_data (3,disdata[mo/16]);//3,5
  301.                         diplay_data (4,disdata[mo%16]);//4
  302.                         diplay_data (5,disdata[dd%16]);//6
  303.                         diplay_data (6,disdata[hh/16]);//7
  304.                         diplay_data (7,disdata[hh%16]);//8
  305.                         diplay_data (8,disdata[mm/16]);//9
  306.                         diplay_data (9,disdata[mm%16]);//10
  307.                         //diplay_data (10,disdata[mm%16]);//11,13
  308.                         diplay_data (11,disdata[month_moon%10]);//12
  309.                         diplay_data (12,disdata[day_moon%10]);//14
  310.                         if(week==0){diplay_data (13,disdata[8]);}
  311.                         else{diplay_data (13,disdata[week]);};//15
  312.                         if(dd/16==0){
  313.                                if(mo/16==1){
  314.                    diplay_data (3,0xdf);//3,5
  315.                                    }

  316.                         }else{
  317.                               if(mo/16==1){
  318.                    diplay_data (3,disdata[dd/16]-0x20);//3,5
  319.                                    }else{
  320.                                    diplay_data (3,disdata[dd/16]);//3,5
  321.                                    }                  
  322.                         }
  323.                         if(day_moon/10==0){
  324.                                if(month_moon/10==1){
  325.                    diplay_data (10,0xdf);//11,13
  326.                                    }
  327.                         }else{
  328.                               if(month_moon/10==1){
  329.                    diplay_data (10,disdata[day_moon/10]-0x20);//11,13
  330.                                    }else{
  331.                                    diplay_data (10,disdata[day_moon/10]);//11,13
  332.                                    }                  
  333.                         }
  334.             if(ss%16%2){
  335.                                           diplay_data (1,0x7f);
  336.                       diplay_data (2,0x7f);
  337.                         }else{
  338.                                            diplay_data (1,0xff);
  339.                       diplay_data (2,0xff);
  340.                         }
  341.                         if(G==0xff){
  342.                                           diplay_data (4,0x7f);
  343.                                           }else{
  344.                                           diplay_data (4,0xff);
  345.                                           }
  346.                         if(L==0xff){
  347.                                           diplay_data (3,0x7f);

  348.                                           }else{
  349.                                           diplay_data (3,0xff);
  350.                                           }
  351.                         
  352.             if(KEY==0){
  353.                                 s++;
  354.                                 if(s>10){
  355.                                         s=0;MENU++;
  356.                                         while(KEY==0){
  357.                                             TIME_YY = yy/16*10+yy%16;
  358.                                                 diplay_data (1,disdata[TIME_YY/10]);
  359.                                                 diplay_data (2,disdata[TIME_YY%10]);
  360.                                         }
  361.                                 }
  362.                         }//长短按键处理//长按转到MENU1
  363.        if(KEY1==0)d++;//打开或关闭整点报时
  364.                  if(d>10&&KEY1==1){
  365.                                 d=0;LL=~LL;
  366.                                 write_clock(0x8e,0x00);//允许写操作
  367.                          write_clock(0xe4,LL);//
  368.                                 }
  369.        if(KEY2==0)f++;//打开或关闭闹钟
  370.                 if(f>10&&KEY2==1){
  371.                                         f=0;GG=~GG;               
  372.                                 write_clock(0x8e,0x00);//允许写操作
  373.                          write_clock(0xe2,GG);//
  374.                                 }
  375.        if(KEY3==0)h++;//打开或关闭音乐
  376.                  if(h>10&&KEY3==1){
  377.                                         h=0;J3=~J3;               
  378.                                 }
  379.                                        
  380.                 }

  381. /***************************************************************/  
  382.                 if(MENU==1){//设置年份
  383.                                                 diplay_data (1,disdata[TIME_YY/10]);
  384.                                                 diplay_data (2,disdata[TIME_YY%10]);
  385.                         if(KEY==0){
  386.                                 s++;
  387.                                 if(s>10){
  388.                                 s=0;MENU++;
  389.                     write_clock(0x8e,0x00);
  390.                     write_clock(0x8c,(TIME_YY/10)*16+TIME_YY%10);
  391.                                         while(KEY==0){
  392.                         TIME_MO = mo/16*10+mo%16;
  393.                                                 if(TIME_MO/10==1){diplay_data (3,0xdf);}
  394.                                                 diplay_data (4,disdata[TIME_MO%10]);
  395.                                         }
  396.                                 }
  397.                         }//长短按键处理//长按转到MENU1
  398.        if(KEY1==0)d++;
  399.                  if(d>10&&KEY1==1){
  400.                                 d=0;TIME_YY++;if(TIME_YY>99)TIME_YY=0;
  401.                                 }
  402.        if(KEY2==0)f++;
  403.                  if(f>10&&KEY2==1){
  404.                                 f=0;
  405.                                 if(TIME_YY>0){
  406.                                 TIME_YY--;
  407.                                 }
  408.             else{
  409.             TIME_YY=99;
  410.                                 }
  411.                                 }
  412.        if(KEY3==0)h++;
  413.                  if(h>10&&KEY3==1){
  414.                                 h=0;MENU=0;
  415.                     write_clock(0x8e,0x00);
  416.                     write_clock(0x8c,(TIME_YY/10)*16+TIME_YY%10);
  417.                                 }
  418.                 }
  419. /*************************************************************************************/
  420.                 if(MENU==2){//设置月份
  421.                                                 if(TIME_MO/10==1){diplay_data (3,0xdf);}
  422.                                                 diplay_data (4,disdata[TIME_MO%10]);
  423.                         if(KEY==0){
  424.                                 s++;
  425.                                 if(s>10){
  426.                                 s=0;MENU++;
  427.                     write_clock(0x8e,0x00);
  428.                 write_clock(0x88,(TIME_MO/10)*16+TIME_MO%10);
  429.                                         while(KEY==0){
  430.                                         TIME_DD = dd/16*10+dd%16;
  431.                             if(TIME_DD/10!=0){diplay_data (3,disdata[TIME_DD/10]);}
  432.                                 diplay_data (5,disdata[TIME_DD%10]);
  433.                                         }
  434.                                 }
  435.                         }//长短按键处理//长按转到MENU1
  436.        if(KEY1==0)d++;
  437.                  if(d>10&&KEY1==1){
  438.                         d=0;TIME_MO++;if(TIME_MO>12)TIME_MO=1;
  439.                                 }
  440.        if(KEY2==0)f++;
  441.                  if(f>10&&KEY2==1){
  442.                                 f=0;
  443.                                 if(TIME_MO>1){
  444.                                 TIME_MO--;
  445.                                 }
  446.                 else{
  447.                 TIME_MO=12;
  448.                                 }
  449.                                 }
  450.        if(KEY3==0)h++;
  451.                  if(h>10&&KEY3==1){
  452.                                 h=0;MENU=0;
  453.                     write_clock(0x8e,0x00);
  454.                 write_clock(0x88,(TIME_MO/10)*16+TIME_MO%10);
  455.                                 }
  456.                 }
  457. /***********************************************************************/
  458.     if(MENU==3){        //调整日期
  459.                             if(TIME_DD/10!=0){diplay_data (3,disdata[TIME_DD/10]);}
  460.                                 diplay_data (5,disdata[TIME_DD%10]);
  461.                            if(KEY==0){
  462.                                 s++;
  463.                                 if(s>10){
  464.                                         s=0;MENU++;
  465.                                         //Conver_week(0,TIME_YY,TIME_MO,TIME_DD);//计算星期
  466.                                         write_clock(0x8e,0x00);
  467.                     write_clock(0x86,(TIME_DD/10)*16+TIME_DD%10);                                       
  468.                                     //write_clock(0x8a,(week/10)*16+week%10);
  469.                                         while(KEY==0){
  470.                                                 TIME_HH = hh/16*10+hh%16;
  471.                                                 diplay_data (6,disdata[TIME_HH/10]);
  472.                                                 diplay_data (7,disdata[TIME_HH%10]);

  473.                                         }
  474.                                 }
  475.                         }//长短按键处理//长按转到MENU1
  476.       if(TIME_MO==1||TIME_MO==3||TIME_MO==5||TIME_MO==7||TIME_MO==8||TIME_MO==10||TIME_MO==12){
  477.          if(KEY1==0)d++;
  478.                  if(d>10&&KEY1==1){
  479.                         d=0;TIME_DD++;if(TIME_DD>31)TIME_DD=1;
  480.                                 }
  481.          if(KEY2==0)f++;
  482.                  if(f>10&&KEY2==1){
  483.                                 f=0;
  484.                                 if(TIME_DD>1){
  485.                                 TIME_DD--;
  486.                                 }
  487.                 else{
  488.                 TIME_DD=31;
  489.                                 }
  490.                                 }
  491.                 }
  492.       if(TIME_MO==4||TIME_MO==6||TIME_MO==9||TIME_MO==11){
  493.          if(KEY1==0)d++;
  494.                  if(d>10&&KEY1==1){
  495.                         d=0;TIME_DD++;if(TIME_DD>30)TIME_DD=1;
  496.                                 }
  497.          if(KEY2==0)f++;
  498.                  if(f>10&&KEY2==1){
  499.                                 f=0;
  500.                                 if(TIME_DD>1){
  501.                                 TIME_DD--;
  502.                                 }
  503.                 else{
  504.                 TIME_DD=30;
  505.                                 }
  506.                                 }
  507.                 }
  508.       if(TIME_MO==2){
  509.                 if(TIME_YY%4==0){
  510.          if(KEY1==0)d++;
  511.                  if(d>10&&KEY1==1){
  512.                         d=0;TIME_DD++;if(TIME_DD>29)TIME_DD=1;
  513.                                 }
  514.          if(KEY2==0)f++;
  515.                  if(f>10&&KEY2==1){
  516.                                 f=0;
  517.                                 if(TIME_DD>1){
  518.                                 TIME_DD--;
  519.                                 }
  520.                 else{
  521.                 TIME_DD=29;
  522.                                 }
  523.                                 }
  524.                    }else{
  525.          if(KEY1==0)d++;
  526.                  if(d>10&&KEY1==1){
  527.                         d=0;TIME_DD++;if(TIME_DD>28)TIME_DD=1;
  528.                                 }
  529.          if(KEY2==0)f++;
  530.                  if(f>10&&KEY2==1){
  531.                                 f=0;
  532.                                 if(TIME_DD>1){
  533.                                 TIME_DD--;
  534.                                 }
  535.                 else{
  536.                 TIME_DD=28;
  537.                                 }
  538.                                 }
  539.                    }
  540.                 }
  541.        if(KEY3==0)h++;
  542.                  if(h>10&&KEY3==1){
  543.                                 h=0;MENU=0;
  544.                                         Conver_week(0,TIME_YY,TIME_MO,TIME_DD);//计算星期
  545.                                         week--;
  546.                                         write_clock(0x8e,0x00);
  547.                     write_clock(0x86,(TIME_DD/10)*16+TIME_DD%10);                                       
  548.                                     write_clock(0x8a,(week/10)*16+week%10);
  549.                                 }

  550.                 }
  551. /***************************************************************/  
  552.                 if(MENU==4){//设置时间:小时
  553.                         diplay_data (6,disdata[TIME_HH/10]);
  554.                         diplay_data (7,disdata[TIME_HH%10]);
  555.                         if(KEY==0){
  556.                                 s++;
  557.                                 if(s>10){
  558.                                 s=0;MENU++;
  559.                     write_clock(0x8e,0x00);
  560.                     write_clock(0x84,(TIME_HH/10)*16+TIME_HH%10);
  561.                                         while(KEY==0){
  562.                     TIME_MM = mm/16*10+mm%16;
  563.                                         diplay_data (8,disdata[TIME_MM/10]);
  564.                                         diplay_data (9,disdata[TIME_MM%10]);
  565.                                         }
  566.                                 }
  567.                         }//长短按键处理//长按转到MENU1
  568.        if(KEY1==0)d++;
  569.                  if(d>10&&KEY1==1){
  570.                                 d=0;TIME_HH++;if(TIME_HH>23)TIME_HH=0;
  571.                                 }
  572.        if(KEY2==0)f++;
  573.                  if(f>10&&KEY2==1){
  574.                                 f=0;
  575.                                 if(TIME_HH>0){
  576.                                 TIME_HH--;
  577.                                 }
  578.             else{
  579.             TIME_HH=23;
  580.                                 }
  581.                                 }
  582.        if(KEY3==0)h++;
  583.                  if(h>10&&KEY3==1){
  584.                                 h=0;MENU=0;
  585.                     write_clock(0x8e,0x00);
  586.                     write_clock(0x84,(TIME_HH/10)*16+TIME_HH%10);
  587.                                 }
  588.                                                 }
  589. /*************************************************************************************/
  590.                 if(MENU==5){//设置时间:分钟
  591.                         diplay_data (8,disdata[TIME_MM/10]);//                        diplay_data (3,disdata[TIME_MM/10]+0x80);
  592.                         diplay_data (9,disdata[TIME_MM%10]);//                     diplay_data (4,disdata[TIME_MM%10]+0x80);
  593.                         if(KEY==0){
  594.                                 s++;
  595.                                 if(s>10){
  596.                                         s=0;MENU++;
  597.                         write_clock(0x8e,0x00);
  598.                     write_clock(0x82,(TIME_MM/10)*16+TIME_MM%10);
  599.                                 write_clock(0x80,0x00);
  600.                                         while(KEY==0){
  601.                                                  NZ_HH = NZ_H/16*10+NZ_H%16;
  602.                                     diplay_data (6,disdata[NZ_HH/10]);
  603.                                     diplay_data (7,disdata[NZ_HH%10]);
  604.                                                 diplay_data (4,0x7f);
  605.                                         }
  606.                                 }
  607.                         }//长短按键处理//长按转到MENU1
  608.        if(KEY1==0)d++;
  609.                  if(d>10&&KEY1==1){
  610.                         d=0;TIME_MM++;if(TIME_MM>59)TIME_MM=0;
  611.                                 }
  612.        if(KEY2==0)f++;
  613.                  if(f>10&&KEY2==1){
  614.                                 f=0;
  615.                                 if(TIME_MM>0){
  616.                                 TIME_MM--;
  617.                                 }
  618.             else{
  619.             TIME_MM=59;
  620.                                 }
  621.                                 }
  622.        if(KEY3==0)h++;
  623.                  if(h>10&&KEY3==1){
  624.                                 h=0;MENU=0;
  625.                     write_clock(0x8e,0x00);
  626.                     write_clock(0x82,(TIME_MM/10)*16+TIME_MM%10);
  627.                                 write_clock(0x80,0x00);
  628.                                 }
  629.                 }
  630. /***************************************************************************************/
  631.                 if(MENU==6){//设置NZ:小时
  632.                         diplay_data (6,disdata[NZ_HH/10]);
  633.                         diplay_data (7,disdata[NZ_HH%10]);
  634.                         diplay_data (4,0x7f);
  635.                         if(KEY==0){
  636.                                 s++;
  637.                                 if(s>10){
  638.                                         s=0;MENU++;
  639.                write_clock(0x8e,0x00);//允许写操作
  640.                          write_clock(0xd0,(NZ_HH/10*16+NZ_HH%10));//年
  641.                                         while(KEY==0){
  642.                   NZ_MM = NZ_M/16*10+NZ_M%16;
  643.                               diplay_data (8,disdata[NZ_MM/10]+0X80);
  644.                               diplay_data (9,disdata[NZ_MM%10]);
  645.                                   diplay_data (4,0x7f);
  646.                                         }
  647.                                 }
  648.                         }//长短按键处理//长按转到MENU1
  649.        if(KEY1==0)d++;
  650.                  if(d>10&&KEY1==1){
  651.        d=0;NZ_HH++;if(NZ_HH>23)NZ_HH=0;
  652.                                 }
  653.        if(KEY2==0)f++;
  654.        if(f>10&&KEY2==1){
  655.                                 f=0;
  656.                                 if(NZ_HH>0){
  657.                                 NZ_HH--;
  658.                                 }
  659.             else{
  660.             NZ_HH=23;
  661.                                 }
  662.                                 }
  663.         if(KEY3==0)h++;
  664.                  if(h>10&&KEY3==1){
  665.                                 h=0;MENU=0;
  666.                     write_clock(0x8e,0x00);
  667.                          write_clock(0xd0,(NZ_HH/10*16+NZ_HH%10));//年
  668.                                 }
  669.                 }
  670. /***************************************************************************************/
  671.                 if(MENU==7){//设置NZ:分钟
  672.                         diplay_data (8,disdata[NZ_MM/10]+0X80);
  673.                         diplay_data (9,disdata[NZ_MM%10]);
  674.                         diplay_data (4,0x7f);
  675.                         if(KEY==0){
  676.                                 s++;
  677.                                 if(s>10){
  678.                                         s=0;MENU++;
  679.                 write_clock(0x8e,0x00);//允许写操作
  680.                          write_clock(0xe0,(NZ_MM/10*16+NZ_MM%10));//
  681.                                         while(KEY==0){
  682.                     GG = G;
  683.                                 diplay_data (6,disdata[15]);
  684.                                 diplay_data (7,disdata[1]);
  685.                                         diplay_data (8,disdata[0]);
  686.                                         if(GG==0xff){
  687.                                     diplay_data (9,disdata[13]);
  688.                                         diplay_data (4,0x7f);
  689.                                         }else{
  690.                     diplay_data (9,disdata[14]);
  691.                                         diplay_data (4,0xff);
  692.                                           }
  693.                                         }
  694.                                 }
  695.                         }//长短按键处理//长按转到MENU1
  696.        if(KEY1==0)d++;
  697.                  if(d>10&&KEY1==1){
  698.        d=0;NZ_MM++;if(NZ_MM>59)NZ_MM=0;
  699.                                 }
  700.        if(KEY2==0)f++;
  701.        if(f>10&&KEY2==1){
  702.                                 f=0;
  703.                                 if(NZ_MM>0){
  704.                                 NZ_MM--;
  705.                                 }
  706.             else{
  707.             NZ_MM=59;
  708.                                 }
  709.                                 }
  710.        if(KEY3==0)h++;
  711.                  if(h>10&&KEY3==1){
  712.                                 h=0;MENU=0;
  713.                     write_clock(0x8e,0x00);
  714.                          write_clock(0xe0,(NZ_MM/10*16+NZ_MM%10));//
  715.                                 }
  716.                 }
  717. /**************************************************************************/
  718.                 if(MENU==8){//闹钟开启和关闭
  719.                                   diplay_data (6,disdata[15]);
  720.                                   diplay_data (7,disdata[1]);
  721.                                           diplay_data (8,disdata[0]);
  722.                                           if(GG==0xff){
  723.                                       diplay_data (9,disdata[13]);
  724.                                            diplay_data (4,0x7f);
  725.                                           }else{
  726.                       diplay_data (9,disdata[14]);
  727.                                           diplay_data (4,0xff);
  728.                                           }
  729.                         if(KEY==0){
  730.                                 s++;
  731.                                 if(s>10){
  732.                                         s=0;MENU=0;
  733.                 write_clock(0x8e,0x00);//允许写操作
  734.                          write_clock(0xe2,GG);//
  735.                                         while(KEY==0){
  736.                         diplay_data (1,disdata[yy/16]);//1
  737.                         diplay_data (2,disdata[yy%16]);//2
  738.                         //diplay_data (3,disdata[mo/16]);//3,5
  739.                         diplay_data (4,disdata[mo%16]);//4
  740.                         diplay_data (5,disdata[dd%16]);//6
  741.                         diplay_data (6,disdata[hh/16]);//7
  742.                         diplay_data (7,disdata[hh%16]);//8
  743.                         diplay_data (8,disdata[mm/16]);//9
  744.                         diplay_data (9,disdata[mm%16]);//10
  745.                         //diplay_data (10,disdata[mm%16]);//11,13
  746.                         diplay_data (11,disdata[month_moon%10]);//12
  747.                         diplay_data (12,disdata[day_moon%10]);//14
  748.                         diplay_data (13,disdata[xq]);//15
  749.                         if(dd/16==0){
  750.                                if(mo/16==1){
  751.                    diplay_data (3,0xdf);//3,5
  752.                                    }
  753.                         }else{
  754.                               if(mo/16==1){
  755.                    diplay_data (3,disdata[dd/16]-0x20);//3,5
  756.                                    }else{
  757.                                    diplay_data (3,disdata[dd/16]);//3,5
  758.                                    }                  
  759.                         }
  760.                         if(day_moon/16==0){
  761.                                if(month_moon/16==1){
  762.                    diplay_data (10,0xdf);//11,13
  763.                                    }
  764.                         }else{
  765.                               if(month_moon/16==1){
  766.                    diplay_data (10,disdata[day_moon/16]-0x20);//11,13
  767.                                    }else{
  768.                                    diplay_data (10,disdata[day_moon/16]);//11,13
  769.                                    }                  
  770.                         }
  771.             if(ss%16%2){
  772.                                           diplay_data (1,0x7f);
  773.                       diplay_data (2,0x7f);
  774.                         }else{
  775.                                            diplay_data (1,0xff);
  776.                       diplay_data (2,0xff);
  777.                         }
  778.                         if(G==0xff){
  779.                                           diplay_data (4,0x7f);
  780.                                           }else{
  781.                                           diplay_data (4,0xff);
  782.                                           }
  783.                         if(L==0xff){
  784.                                           diplay_data (3,0x7f);

  785.                                           }else{
  786.                                           diplay_data (3,0xff);
  787.                                           }


  788.                                         }
  789.                                 }
  790.                         }//长短按键处理//长按转到MENU1
  791.        if(KEY1==0)d++;
  792.                  if(d>10&&KEY1==1){
  793.             d=0;GG = ~GG;
  794.                                 }
  795.        if(KEY2==0)f++;
  796.        if(f>10&&KEY2==1){
  797.                                 f=0;
  798.             GG = ~GG;
  799.                                 }
  800.        if(KEY3==0)h++;
  801.                  if(h>10&&KEY3==1){
  802.                                 h=0;MENU=0;
  803.                     write_clock(0x8e,0x00);
  804.                          write_clock(0xe2,GG);//

  805.                                 }
  806.                 }
  807. /**************************************************************************/


  808.              if(MENU==9){//显示闹钟界面
  809.               //i=0;   //从第1个音符f[0]开始播放
  810.               while(f1[i]!=0xff&&KEY!=0&&NZ_M==mm)            //只要没有读到结束标志就继续播放
  811.                            {
  812.                            if(f1[i]!=0){
  813.                              b=(f1[i]*JP1[i])/64;
  814.                  c=62500/f1[i];           //
  815.                                  for(j=0;j<b;j++){ 控制节拍数
  816.                                                                         
  817.                       diplay_data (6,disdata[10]);
  818.                       voic = ~voic;
  819.                       diplay_data (7,disdata[0]);
  820.                           voic = ~voic;
  821.                       diplay_data (8,disdata[11]);
  822.                       voic = ~voic;                           
  823.                       diplay_data (9,disdata[12]);
  824.                       voic = ~voic;
  825.                                      }
  826.                            }else{
  827.                               voic = 0;
  828.                                   b=125*JP1[i]/32;
  829.                   c=125;                  
  830.                                   for(j=0;j<b;j++){ 控制节拍数
  831.                       diplay_data (6,disdata[10]);
  832.                       diplay_data (7,disdata[0]);
  833.                       diplay_data (8,disdata[11]);
  834.                       diplay_data (9,disdata[12]);
  835.                                      }
  836.                                 }         




  837.                               i++;                 //播放下一个音符
  838.                                   }   
  839.                             voic = 0;                                                               

  840.                      //diplay_data (6,disdata[10]);
  841.             //diplay_data (7,disdata[0]);
  842.             //diplay_data (8,disdata[11]);
  843.                 //diplay_data (9,disdata[12]);
  844.                         //J1=0;
  845.                         if(KEY==0||NZ_M!=mm){
  846.                                 s++;
  847.                                 if(s>10||NZ_M!=mm){
  848.                                 s=0;MENU=0;c=60;i=0;voic=0;
  849.                                 write_clock(0x8e,0x00);//允许写操作
  850.                          write_clock(0xe2,0x00);//
  851.                                 while(KEY==0){
  852.                         diplay_data (1,disdata[yy/16]);//1
  853.                         diplay_data (2,disdata[yy%16]);//2
  854.                         //diplay_data (3,disdata[mo/16]);//3,5
  855.                         diplay_data (4,disdata[mo%16]);//4
  856.                         diplay_data (5,disdata[dd%16]);//6
  857.                         diplay_data (6,disdata[hh/16]);//7
  858.                         diplay_data (7,disdata[hh%16]);//8
  859.                         diplay_data (8,disdata[mm/16]);//9
  860.                         diplay_data (9,disdata[mm%16]);//10
  861.                         //diplay_data (10,disdata[mm%16]);//11,13
  862.                         diplay_data (11,disdata[month_moon%10]);//12
  863.                         diplay_data (12,disdata[day_moon%10]);//14
  864.                         diplay_data (13,disdata[xq]);//15
  865.                         if(dd/16==0){
  866.                                if(mo/16==1){
  867.                    diplay_data (3,0xdf);//3,5
  868.                                    }
  869.                         }else{
  870.                               if(mo/16==1){
  871.                    diplay_data (3,disdata[dd/16]-0x20);//3,5
  872.                                    }else{
  873.                                    diplay_data (3,disdata[dd/16]);//3,5
  874.                                    }                  
  875.                         }
  876.                         if(day_moon/16==0){
  877.                                if(month_moon/16==1){
  878.                    diplay_data (10,0xdf);//11,13
  879.                                    }
  880.                         }else{
  881.                               if(month_moon/16==1){
  882.                    diplay_data (10,disdata[day_moon/16]-0x20);//11,13
  883.                                    }else{
  884.                                    diplay_data (10,disdata[day_moon/16]);//11,13
  885.                                    }                  
  886.                         }
  887.             if(ss%16%2){
  888.                                           diplay_data (1,0x7f);
  889.                       diplay_data (2,0x7f);
  890.                         }else{
  891.                                            diplay_data (1,0xff);
  892.                       diplay_data (2,0xff);
  893.                         }
  894.                         if(G==0xff){
  895.                                           diplay_data (4,0x7f);
  896.                                           }else{
  897.                                           diplay_data (4,0xff);
  898.                                           }
  899.                         if(L==0xff){
  900.                                           diplay_data (3,0x7f);

  901.                                           }else{
  902.                                           diplay_data (3,0xff);
  903.                                           }


  904.                                         }
  905.                                 }
  906.                                 }
  907.                                 }
  908.                         
  909. /***************************************************************/  
  910.                 if(MENU==0&&NZ_H==hh&&NZ_M==mm&&G==0xff){
  911.                         MENU=9;
  912.                 }
  913.                 if(MENU==0&&L==0xff&&mm==0&&ss>=0&&ss<15){
  914.                     if(ss%2==0){
  915.                                 J2=0;
  916.                                    }
  917.                         else{
  918.                              J2=1;
  919.                                  }
  920.                    }else{
  921.                     J2=1;
  922.                         }
  923. /**********************************************************************************************/        
  924.         }
  925. }
复制代码



电路图和源程序.zip

85.15 KB, 下载次数: 106, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:99130 发表于 2016-6-20 19:33 | 只看该作者
#include
#include
#include "nongli.h"
这个头文件怪怪的,错了吧?最上面那两个是干嘛的???
回复

使用道具 举报

板凳
ID:67537 发表于 2016-6-21 12:30 | 只看该作者
这个用小数码管可以正常走时间,换成1.8英寸大的数码管就显示乱码,不知道怎么回事,难道驱动大数码管和小数码管程序不一样
回复

使用道具 举报

地板
ID:141149 发表于 2016-10-2 20:16 | 只看该作者
下载看看
回复

使用道具 举报

5#
ID:99130 发表于 2017-1-8 21:53 | 只看该作者
没搞懂你公历第2和第5数码管的公共端为什么要接在一起,是因为IO口不够吗?接在一起有什么用,没有接在VCC上啊。第二个问题是时间时和分之间的冒号接哪??为什么写的是N1和N2?第三个问题是程序里整点LED写的是P3.6而不是原理图里的N3,定闹LED不是应该接P3.5吗程序里,而图里是N4。
以上三个问题望楼主解答,谢谢。
回复

使用道具 举报

6#
ID:192615 发表于 2017-4-29 07:47 | 只看该作者
thanks!
回复

使用道具 举报

7#
ID:192615 发表于 2017-4-29 20:16 | 只看该作者

 #include
#include
#include "nongli.h"
这个头文件怪怪的,错了吧?最上面那两个是干嘛的???
回复

使用道具 举报

8#
ID:192646 发表于 2017-4-30 11:24 | 只看该作者
厉害,支持一下!
回复

使用道具 举报

9#
ID:367145 发表于 2018-7-8 08:56 | 只看该作者
楼主,能不能麻烦您把原件清单发一下,谢谢。
回复

使用道具 举报

10#
ID:165519 发表于 2019-2-18 16:07 | 只看该作者
我也买了个这个40块的 发现现在走时老是慢了  不知道怎么回事
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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