找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7967|回复: 5
收起左侧

单片机多功能电子钟仿真带按键调节+源程序+电路原理图

  [复制链接]
ID:137190 发表于 2016-9-1 01:30 | 显示全部楼层 |阅读模式
0.png
分享一个用51做的单片机多功能电子钟仿真,上面是电路原理图(工程文件清晰版请下载本帖最后的附件),还可以用按键来调节时间.

51单片机多功能电子钟源程序(部分程序):
  1. #include<AT89X52.H>
  2. #include<INTRINS.H>

  3. #define TIME (0X10000-50000)
  4. #define FLAG 0XEF                //闹钟标志
  5. //引脚连接图
  6. sbit rst=P3^5;
  7. sbit clk=P3^4;
  8. sbit dat=P3^3;
  9. sbit rs=P1^5;
  10. sbit rw=P1^6;
  11. sbit e=P1^7;
  12. sbit DQ=P1^4;        //温度输入口

  13. sbit ACC_7=ACC^7;
  14. //全局变量及常量定义
  15. unsigned char i=20,j,time1[16];        
  16. unsigned char alarm[2],time2[15],time[3];
  17. unsigned char code Day[]={31,28,31,30,31,30,31,31,30,31,30,31};//12个月的最大日期(非闰年)
  18. //音律表
  19. unsigned int code table1[]={64260,64400,64524,64580,64684,64777,
  20. 64820,64898,64968,65030,65058,65110,65157,65178,65217};
  21. //发声部分的延时时间
  22. unsigned char code table2[]={0x82,1,0x81,0xf4,0xd4,0xb4,0xa4,
  23. 0x94,0xe2,1,0xe1,0xd4,0xb4,0xc4,0xb4,4,0};
  24. //LCD自建字
  25. unsigned char code tab[]={0x18,0x1b,5,4,4,5,3,0,
  26. 0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,//年
  27. 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,//月
  28. 0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00};//日
  29. //*******温度小数部分用查表法**********//
  30. unsigned char code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  31. //闹钟中用的全局变量
  32. unsigned char th1,tl1;
  33. unsigned char temp_data[2]={0x00,0x00};               // 读出温度暂放
  34. bit flag;                //18b20存在标志位
  35. /***********11微秒延时函数**********/
  36. delay(unsigned int t)
  37. {
  38.         for(;t>0;t--);
  39. }
  40. /***********18B20复位函数**********/
  41. RST18B20(void)
  42. {
  43.         unsigned char i;
  44.         DQ=1;_nop_();_nop_();
  45.         DQ=0;    //
  46.         delay(50); // 550us
  47.         DQ=1;    //
  48.         delay(6);  // 66us
  49.         for(i=0;i<0x30;i++)
  50.         {
  51.                 if(!DQ)
  52.                         goto d1;                        
  53.         }
  54.         flag=0;                //清标志位,表示ds1820不存在
  55.         DQ=1;
  56.         return;
  57. d1:        delay(45);    //延时500us
  58.         flag=1;
  59.         DQ=1;                //置标志位,表示ds1820存在
  60. }
  61. /**********18B20写命令函数*********/
  62. //向 1-WIRE 总线上写一个字节
  63. void Write1Byte18B20(unsigned char val)
  64. {
  65.         unsigned char i;
  66.         for (i=8; i>0; i--) //
  67.         {
  68.                 DQ=1;_nop_();_nop_();
  69.                 DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
  70.                 DQ=val&0x01;      //最低位移出
  71.                 delay(6);           //66us
  72.                 val=val/2;          //右移一位
  73.         }
  74.         DQ=1;
  75.         delay(1);  
  76. }
  77. /*********18B20读1个字节函数********/
  78. //从总线上读取一个字节
  79. unsigned char Read1Byte18B20(void)
  80. {
  81.         unsigned char i;
  82.         unsigned char value=0;
  83.         for (i=8;i>0;i--)
  84.         {
  85.                 DQ=1;_nop_();_nop_();
  86.                 value>>=1;
  87.                 DQ=0;             //
  88.                 _nop_();_nop_();_nop_();_nop_();   //4us
  89.                 DQ=1;_nop_();_nop_();_nop_();_nop_();   //4us
  90.                 if(DQ)
  91.                         value|=0x80;
  92.                 delay(6);           //66us
  93.         }
  94.         DQ=1;
  95.         return(value);
  96. }
  97. /***********读出温度函数**********/
  98. Read18B20()
  99. {
  100.         RST18B20();                               //总线复位
  101.         if(!flag)                //判断ds1820是否存在?若ds18b20不存在则返回
  102.                 return;                                
  103.                
  104.         //Write1Byte18B20(0xCC);                         // Skip ROM
  105.         //Write1Byte18B20(0x44);                         // 发转换命令
  106.         //delay(70);
  107.         
  108.         Write1Byte18B20(0xCC);                         //发Skip ROM命令
  109.         Write1Byte18B20(0xBE);                         //发读命令
  110.         temp_data[0]=Read1Byte18B20();   //温度低8位
  111.         temp_data[1]=Read1Byte18B20();   //温度高8位        
  112.         RST18B20();
  113.         Write1Byte18B20(0xCC);                         // Skip ROM
  114.         Write1Byte18B20(0x44);                         // 发转换命令
  115. }
  116. /***********温度数据处理函数**********/
  117. DealTempData()
  118. {
  119.         unsigned char n=0,m;      
  120.         if(temp_data[1]>127)//负温度求补码
  121.         {
  122.                 temp_data[1]=(256-temp_data[1]);
  123.                 temp_data[0]=(256-temp_data[0]);
  124.                 n=1;
  125.         }
  126.         time2[13]=ditab[temp_data[0]&0x0f]+'0';
  127.         time2[12]='.';
  128.         m=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//
  129.         if(n)
  130.         {
  131.                 m-=16;
  132.         }
  133.         time2[9]=m/100+'0';
  134.         time2[11]=m%100;
  135.         time2[10]=time2[11]/10+'0';
  136.         time2[11]=time2[11]%10+'0';
  137.         if(time2[9]=='0')//最高位为0时都不显示
  138.         {
  139.                 time2[9]=0x20;        
  140.                 if(n)//负温度时最高位显示"-"
  141.                 {
  142.                         time2[9]='-';
  143.                 }
  144.                 if(time2[10]=='0')
  145.                 {
  146.                         if(n)
  147.                         {
  148.                                 time2[10]='-';
  149.                                 time2[9]=0x20;
  150.                         }
  151.                         else
  152.                                 time2[10]=0x20;
  153.                         if(time2[11]=='0'&&time2[13]=='0')
  154.                                 time2[11]=time2[12]=0x20;
  155.                 }                        
  156.         }
  157. }
  158. delay1ms(unsigned char time)                //延时1ms
  159. {
  160.         unsigned char i,j;
  161.         for(i=0;i<time;i++)
  162.         {
  163.                 for(j=0;j<250;j++);
  164.         }
  165. }

  166. //使能1602
  167. EnableLCD()
  168. {
  169.         rs=0;
  170.         rw=0;
  171.         e=0;
  172.         delay1ms(3);
  173.         e=1;
  174. }
  175. //写LCD函数
  176. WriteLCD(unsigned char i)
  177. {
  178.         P0=i;
  179.         rs=1;
  180.         rw=0;
  181.         e=0;
  182.         delay1ms(2);
  183.         e=1;
  184. }
  185. //写LCD内部地址函数
  186. WriteLCDRAM(unsigned char data *address,m)
  187. {
  188.         unsigned char i,j;
  189.         for(i=0;i<m;i++,address++)
  190.         {
  191.                 j=*address;
  192.                 WriteLCD(j);
  193.         }
  194. }
  195. //LCD显示
  196. LCDSHOW()
  197. {
  198.         P0=0XC;                                //显示器开、光标关
  199.         EnableLCD();
  200.         P0=0x80;                        //写入显示起始地址
  201.         EnableLCD();
  202.         WriteLCDRAM(time1,16);
  203.         P0=0xc1;                        //写入显示起始地址
  204.         EnableLCD();
  205.         WriteLCDRAM(time2,15);
  206. }
  207. //自建字函数库
  208. DesignHZ()
  209. {
  210.         unsigned char i;
  211.         P0=0x40;
  212.         EnableLCD();
  213.         for(i=0;i<32;i++)
  214.         {
  215.                 WriteLCD(tab[i]);
  216.                 delay1ms(2);        
  217.         }
  218. }

  219. //写DS1302子程序
  220. WriteDS1302(unsigned char address)
  221. {
  222.         unsigned char i;
  223.         clk=0;
  224.         _nop_();
  225.         rst=1;
  226.         _nop_();
  227.         for(i=0;i<8;i++)
  228.         {
  229.                 dat=address&1;
  230.                 _nop_();
  231.                 clk=1;
  232.                 address>>=1;
  233.                 clk=0;
  234.         }
  235. }
  236. //读DS1302子程序
  237. unsigned char ReadDS1302()
  238. {
  239.         unsigned char i,j=0;
  240.         for(i=0;i<8;i++)
  241.         {
  242.                 j>>=1;
  243.                 _nop_();
  244.                 clk=0;
  245.                 _nop_();
  246.                 if(dat)
  247.                         j|=0x80;
  248.                 _nop_();
  249.                 clk=1;
  250.         }
  251.         return(j);
  252. }
  253. //部分显示数据初始化
  254. TimeInit()
  255. {
  256.         time1[1]=time1[13]=time2[8]=time2[9]=time2[10]=0x20,time2[14]=0;
  257.         time1[6]=1,time1[9]=2,time1[12]=3,time1[2]='2',time1[3]='0';
  258.         time1[14]='W',time2[2]=time2[5]=':';
  259.         WriteDS1302(0xc1);
  260.         alarm[0]=ReadDS1302();
  261.         rst=0;
  262.         WriteDS1302(0xc3);
  263.         alarm[1]=ReadDS1302();
  264.         rst=0;
  265.         WriteDS1302(0xc5);
  266.         time1[0]=ReadDS1302();
  267.         rst=0;
  268. }
  269. //读取时间
  270. ReadTime()
  271. {
  272.         unsigned char i,m,n;
  273.         WriteDS1302(0x8d);                        //读取年份
  274.         m=ReadDS1302();
  275.         rst=0;
  276.         time1[4]=m/16+0x30;
  277.         time1[5]=m%16+0x30;
  278.         WriteDS1302(0x8b);                        //读取星期
  279.         m=ReadDS1302();
  280.         rst=0;
  281.         time1[15]=m+0x30;
  282.         for(i=7,n=0x89;i<11;i+=3,n-=2)        //读取月份和日期
  283.         {
  284.                 WriteDS1302(n);
  285.                 m=ReadDS1302();
  286.                 rst=0;
  287.                 time1[i]=m/16+0x30;
  288.                 time1[i+1]=m%16+0x30;
  289.         }
  290.         for(m=0,i=0,n=0x85;i<7;i+=3,n-=2,m++)        //读取时,分,秒
  291.         {
  292.                 WriteDS1302(n);
  293.                 time[m]=ReadDS1302();
  294.                 rst=0;
  295.                 time2[i]=time[m]/16+0x30;
  296.                 time2[i+1]=time[m]%16+0x30;
  297.         }
  298. }
  299. time0() interrupt 1 using 1
  300. {
  301.         i--;
  302.         if(i==0)
  303.         {
  304.                 if(j!=0)
  305.                         j--;                 
  306.                 i=20;
  307.         }
  308.         TH0=TIME/256,TL0=TIME%256;               
  309. }
  310. //闹钟部分
  311. intime1() interrupt 3
  312. {
  313.         TH1=th1,TL1=tl1;
  314.         P3_2=!P3_2;
  315. }
  316. //显示闹钟设置数据
  317. showalarm()
  318. {
  319.         unsigned char i,j,a,b,n;
  320.         ET1=1;
  321.         for(j=0;j<6;j++)
  322.         {
  323.                 i=0;
  324.                 while(1)
  325.                 {
  326.                         a=table2[i];
  327.                         if(a==0)
  328.                                 break;
  329.                         b=a&0xf;
  330.                         a>>=4;
  331.                         if(a==0)
  332.                         {
  333.                                 TR1=0;
  334.                                 goto  D1;
  335.                         }
  336.                         a=((--a)<<1)/2;
  337.                         TH1=th1=table1[a]/256,TL1=tl1=table1[a]%256;
  338.                         TR1=1;
  339. D1:                        do
  340.                         {
  341.                                 b--;
  342.                                 for(n=0;n<3;n++)
  343.                                 {
  344.                                         ReadTime();
  345.                                         LCDSHOW();
  346.                                         P2=0xf7;
  347.                                         if(P2==0xe7)
  348.                                         {
  349.                                                 delay1ms(100);
  350.                                                 if(P2==0xe7)
  351.                                                 {
  352.                                                         TR1=0;
  353.                                                         ET1=0;
  354.                                                         return;
  355.                                                 }        
  356.                                         }
  357.                                 }
  358.                         }while(b!=0);
  359.                         i++;                                
  360.                 }
  361.                 TR1=0;                  
  362.         }
  363.         ET1=0;
  364. }
  365. //根据日期的变动自动调整星期
  366. unsigned char setweek()
  367. {
  368.         unsigned char i=5,j,n;
  369.         j=(time1[4]&0xf)*10+(time1[5]&0xf);
  370.         n=j/4;
  371.         i=i+5*n;
  372.         n=j%4;
  373.         if(n==1)
  374.                 i+=2;
  375.         else if(n==2)
  376.                 i+=3;
  377.         else if(n==3)
  378.                 i+=4;
  379.         j=(time1[7]&0xf)*10+(time1[8]&0xf);
  380.         if(j==2)
  381.                 i+=3;
  382.         else if(j==3)
  383.                 i+=3;        
  384.         else if(j==4)
  385.                 i+=6;        
  386.         else if(j==5)
  387.                 i+=1;        
  388.         else if(j==6)
  389.                 i+=4;        
  390.         else if(j==7)
  391.                 i+=6;        
  392.         else if(j==8)
  393.                 i+=2;        
  394.         else if(j==9)
  395.                 i+=5;
  396.         else if(j==11)
  397.                 i+=3;        
  398.         else if(j==12)
  399.                 i+=5;
  400.         if(n==0)
  401.                 if(j>2)        
  402.                         i++;        
  403.         j=(time1[10]&0xf)*10+(time1[11]&0xf);
  404.         i+=j;
  405.         i%=7;
  406.         if(i==0)
  407.                 i=7;
  408.         return(i);        
  409. }
  410. //设置时间
  411. settime()
  412. {
  413.         unsigned char i=0x85,year,month,day,n;
  414.         time2[6]=time2[7]=0x30,time1[14]=time1[15]=0x20;
  415.         LCDSHOW();
  416.         while(1)
  417.         {               
  418.                 P0=0xe;                        //显示器开、光标开
  419.                 EnableLCD();
  420.                 P0=i;                        //定光标
  421.                 EnableLCD();
  422.                 P2=0xf7;
  423.                 if(P2!=0XF7)
  424.                 {
  425.                         delay1ms(100);                                //延时0.1s去抖动
  426.                         if(P2!=0XF7)
  427.                         {
  428.                                 j=7;
  429.                                 if(P2==0X77)
  430.                                 {
  431.                                         i+=3;
  432.                                         if(i==0x8e)
  433.                                                 i=0xc2;
  434.                                         else if(i>0xc5)
  435.                                                 i=0x85;
  436.                                 }
  437.                                 else if(P2==0xb7)
  438.                                 {
  439.                                         year=(time1[4]&0xf)*10+(time1[5]&0xf);
  440.                                         month=(time1[7]&0xf)*10+(time1[8]&0xf);
  441.                                         day=(time1[10]&0xf)*10+(time1[11]&0xf);
  442.                                         if(i==0x85)
  443.                                         {
  444.                                                 year++;
  445.                                                 if(year>99)
  446.                                                         year=0;
  447.                                                 if((year%4)!=0)
  448.                                                         if(month==2&&day==29)
  449.                                                                 day=28;
  450.                                         }
  451.                                         else if(i==0x88)
  452.                                         {
  453.                                                 month++;
  454.                                                 if(month>12)
  455.                                                         month=1;
  456.                                                 if(day>Day[month-1])
  457.                                                 {
  458.                                                         day=Day[month-1];
  459.                                                         if(month==2&&(year%4)==0)        
  460.                                                                 day=29;
  461.                                                 }                                                        
  462.                                         }
  463.                                         else if(i==0x8b)
  464.                                         {
  465.                                                 day++;
  466.                                                 if(day>Day[month-1])
  467.                                                 {
  468.                                                         if(month==2&&(year%4)==0)
  469.                                                         {
  470.                                                                 if(day>29)
  471.                                                                         day=1;
  472.                                                         }
  473.                                                         if(month!=2)
  474.                                                                 day=1;
  475.                                                 }
  476.                                         }
  477.                                         else if(i==0xc2)
  478.                                         {
  479.                                                 n=(time2[0]&0xf)*10+(time2[1]&0xf);
  480.                                                 n++;
  481.                                                 if(n>23)
  482.                                                         n=0;
  483.                                                 time2[0]=n/10+0x30;
  484.                                                 time2[1]=n%10+0x30;
  485.                                         }
  486.                                         else
  487.                                         {
  488.                                                 n=(time2[3]&0xf)*10+(time2[4]&0xf);
  489.                                                 n++;
  490.                                                 if(n>59)
  491.                                                         n=0;
  492.                                                 time2[3]=n/10+0x30;
  493.                                                 time2[4]=n%10+0x30;
  494.                                         }
  495.                                         time1[4]=year/10+0x30;
  496.                                         time1[5]=year%10+0x30;
  497.                                         time1[7]=month/10+0x30;
  498.                                         time1[8]=month%10+0x30;
  499.                                         time1[10]=day/10+0x30;
  500.                                         time1[11]=day%10+0x30;
  501.                                         LCDSHOW();
  502.                                 }
  503.                                 else if(P2==0xd7)
  504.                                 {
  505.                                         WriteDS1302(0x8c);
  506.                                         WriteDS1302((time1[4]&0xf)*16+(time1[5]&0xf));
  507.                                         rst=0;
  508.                                         WriteDS1302(0x8a);
  509.                                         WriteDS1302(setweek());
  510.                                         rst=0;
  511.                                         for(i=7,n=0x88;i<11;i+=3,n-=2)
  512.                                         {        
  513.                                                 WriteDS1302(n);
  514.                                                 WriteDS1302((time1[i]&0xf)*16+(time1[i+1]&0xf));
  515.                                                 rst=0;
  516.                                         }
  517.                                         for(i=0;i<7;i+=3,n-=2)
  518.                                         {
  519.                                                 WriteDS1302(n);
  520.                                                 WriteDS1302((time2[i]&0xf)*16+(time2[i+1]&0xf));
  521.                                                 rst=0;
  522.                                         }
  523.                                         TR0=0;
  524.                                         time1[14]='W';
  525.                                         return;
  526.                                 }
  527.                                 else
  528.                                 {
  529.                                         TR0=0;
  530.                                         time1[14]='W';
  531.                                         return;
  532.                                 }
  533.                         }
  534.                 }        
  535.                 if(j==0)
  536.                 {        
  537.                         TR0=0;
  538.                         time1[14]='W';
  539.                         return;
  540.                 }
  541.         }
  542. }
  543. //设置闹钟
  544. setalarm()
  545. {
  546.         unsigned char i,n;
  547.         for(i=1;i<16;i++)
  548.         {
  549.                 time1[i]=0x20;
  550.         }        
  551.         time2[0]=alarm[0]/16+0x30;
  552.         time2[1]=(alarm[0]&0xf)+0x30;
  553.         time2[3]=alarm[1]/16+0x30;
  554.         time2[4]=(alarm[1]&0xf)+0x30;
  555.         time2[6]=time2[7]=0x30;
  556.         LCDSHOW();
  557.         i=0xc2;
  558.         while(1)
  559.         {
  560.                 P0=0xe;                        //显示器开、光标开
  561.                 EnableLCD();
  562.                 P0=i;                        //定光标
  563.                 EnableLCD();
  564.                 P2=0xf7;
  565.                 if(P2!=0XF7)
  566.                 {
  567.                         delay1ms(100);                                //延时0.1s去抖动
  568.                         if(P2!=0XF7)
  569.                         {
  570.                                 j=7;
  571.                                 if(P2==0X77)
  572.                                 {
  573.                                         i+=3;
  574.                                         if(i>0xc5)
  575.                                                 i=0xc2;
  576.                                 }
  577.                                 else if(P2==0xb7)
  578.                                 {
  579.                                         if(i==0xc2)
  580.                                         {
  581.                                                 n=(time2[0]&0xf)*10+(time2[1]&0xf);
  582.                                                 n++;
  583.                                                 if(n>23)
  584.                                                         n=0;
  585.                                                 time2[0]=n/10+0x30;
  586.                                                 time2[1]=n%10+0x30;
  587.                                         }
  588.                                         else
  589.                                         {
  590.                                                 n=(time2[3]&0xf)*10+(time2[4]&0xf);
  591.                                                 n++;
  592.                                                 if(n>59)
  593.                                                         n=0;
  594.                                                 time2[3]=n/10+0x30;
  595.                                                 time2[4]=n%10+0x30;
  596.                                         }
  597.                                         LCDSHOW();
  598.                                 }
  599.                                 else if(P2==0xd7)
  600.                                 {
  601.                                         WriteDS1302(0xc0);
  602.                                         WriteDS1302((time2[0]&0xf)*16+(time2[1]&0xf));
  603.                                         rst=0;
  604.                                         WriteDS1302(0xc2);
  605.                                         WriteDS1302((time2[3]&0xf)*16+(time2[4]&0xf));
  606.                                         rst=0;
  607.                                         time1[0]=FLAG;
  608.                                         WriteDS1302(0xc4);
  609.                                         WriteDS1302(time1[0]);
  610.                                         rst=0;
  611.                                         TR0=0;
  612.                                         TimeInit();
  613.                                         return;
  614.                                 }
  615.                                 else
  616.                                 {
  617.                                         TR0=0;
  618.                                         TimeInit();
  619.                                         return;
  620.                                 }
  621.                         }
  622.                 }        
  623.                 if(j==0)
  624.                 {        
  625.                         TR0=0;
  626.                         TimeInit();
  627.                         return;
  628.                 }
  629.         }
  630. }
  631. main()
  632. {
  633.         IE=0X82;
  634.         TMOD=0x11;
  635.         WriteDS1302(0x8E);                        //禁止写保护
  636.         WriteDS1302(0);
  637.         rst=0;
  638.         P0=1;                                //清屏并光标复位
  639.         EnableLCD();
  640.         P0=0X38;                        //设置显示模式:8位2行5x7点阵
  641.         EnableLCD();
  642.         P0=6;                                //文字不动,光标自动右移
  643.         EnableLCD();
  644.         DesignHZ();                        //自建字
  645.         TimeInit();
  646.         while(1)
  647.         {        
  648.                 ReadTime();                                //读取时间
  649.                 Read18B20();                //读出18B20温度数据
  650.                 DealTempData();                //处理温度数据
  651.                 LCDSHOW();                                //显示时间
  652.                 if(time1[0]!=0x20)
  653.                         if(time[0]==alarm[0])
  654.                                 if(time[1]==alarm[1])
  655.                                         if(time[2]==0)
  656.                                                 showalarm();
  657.                 P2=0xf7;
  658.                 if((P2&0XF0)!=0XF0)
  659.                 {
  660.                         delay1ms(100);                                //延时0.1s去抖动
  661.                         if((P2&0XF0)!=0XF0)
  662.                         {
  663.                                 j=7;
  664.                                 TH0=TIME/256,TL0=TIME%256;
  665.                                 TR0=1;
  666.                                 if(P2==0x77)
  667.                                 {
  668.                                         settime();
  669.                                 }
  670.                                 else if(P2==0XB7)
  671.                                 {
  672.                                         setalarm();
  673.                                 }
  674.                                 else if(P2==0XD7)
  675.                                 {
  676.                                         TR0=0;
  677.                                         if(time1[0]==FLAG)
  678.                                                 time1[0]=0x20;
  679.                                         else
  680.                                                 time1[0]=FLAG;
  681.                                         WriteDS1302(0xc4);
  682.                                         WriteDS1302(time1[0]);
  683.                                         rst=0;
  684.                                 }
  685.                         }
  686.                 }
  687.                 delay1ms(100);        
  688.         }
  689. }
复制代码
0.png
单片机多功能电子钟仿真的工程文件及其他完整资料下载:
http://www.51hei.com/bbs/dpj-54940-1.html

评分

参与人数 1黑币 +2 收起 理由
Vivi899 + 2 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:198622 发表于 2017-5-9 14:34 | 显示全部楼层
感谢楼主分享这么好的例子。
回复

使用道具 举报

ID:209606 发表于 2017-6-9 17:13 | 显示全部楼层
专周刚好做这个 来看看
回复

使用道具 举报

ID:276937 发表于 2018-1-17 13:30 | 显示全部楼层
感谢楼主分享这么好的帖子
回复

使用道具 举报

ID:648485 发表于 2019-12-8 16:35 来自手机 | 显示全部楼层
每句都能有个解释就完美了
回复

使用道具 举报

ID:768976 发表于 2020-6-5 12:14 | 显示全部楼层
那几个按键分别是什么意思
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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