找回密码
 立即注册

QQ登录

只需一步,快速开始

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

分享一个LCD1602电子闹钟 双闹版 带单片机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:159515 发表于 2017-4-9 17:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liyz 于 2017-4-10 09:01 编辑

   我是从95年左右开始玩单片机,还买片TD-II单板机(纯机器代码输入的)那时我还没有电脑,我只学会用汇编,现在已经好多年没玩了,最近突然又想玩玩单片机做个闹钟,汇编语言已经忘得差不多了,那就学学用C语言吧,在网上找到几份学习资料逐渐明白了C语言奥秘。这是参考别人的资料花了好几个星期一步一步增加功能修改出来的,已经做了成品给小孩当闹钟用,增加了语音报时(用yf017语音芯片),存储记忆(24C02),两组闹钟(一组可设置每周工作日响闹,另一组可设置每天响闹或只响一次,还有再响等功能),电路图就懒得画了,纯属业余玩玩给大家参考。




附上不错的C51学习资料:
《51单片机C语言快速上手》.pdf (4.6 MB, 下载次数: 100)
十天学会单片机实例100.docx (198.15 KB, 下载次数: 57)

单片机源程序:
  1. /*******************************************************************************
  2. *标题:                    DS1302+DS18B20+LCD1602电子时钟                       *
  3. *                                                                                                   *
  4. ********************************************************************************
  5. * 添加闹钟时间记忆,闹铃时长,闹钟再响次数,间隔,周闹钟功能,语音整点报时          *
  6. *                                                               
  7. *                        
  8. ********************************************************************************/                                       
  9. #include <reg52.h>
  10. #include <intrins.h>
  11. #define uchar unsigned char
  12. #define uint  unsigned int
  13. #include "24c02.h"
  14. #include "LCD1602.h"
  15. #include "DS1302.h"
  16. #include "DS18B20.h"
  17. #include "yuyin.h"

  18. sbit key1=P2^3;                  //调时钟和闹钟键
  19. sbit key2=P2^2;                  //调时加键,正常走时状态语音报时键
  20. sbit key3=P2^1;                  //调时减键,闹钟开关
  21. sbit key4=P2^0;                  //查看闹铃键

  22. sbit beep = P2^4;                  //蜂鸣器控制IO口
  23. sbit led1 = P1^0;                  //LED灯,闹铃响标志
  24. /******************************************************************/
  25. /*                    函数声明                                    */
  26. /******************************************************************/                                                                                                
  27. void Read_RTC(void);
  28. void temp_to_str();   
  29. void keyscan();

  30. bit  ReadRTC_Flag,Display_Flag,Alarm_Flag,Alarm_Flag1,Aset_Flag,yuyin_flag,zd_baoshi,each,setzx=0;      //定义标志位
  31. uchar miao,fen,shi,ri,yue,week,nian,T,nz_flag,yuyin_shi,yuyin_ge,m=0,n=0,w=0,m1=0;
  32. uchar set_miao,set_fen,set_shi,set_time,setzx_time,setzx_f,nz_miao,nz_fen,nz_shi,miao_ss;

  33. char l_tmpdate[7];                    //秒分时日月周年
  34. uchar TempBuffer[5],nz_week[7];
  35. uchar code  write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位写位
  36. uchar code  read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //秒分时日月周年 最低位读位
  37. uchar code  nz_week_address[7]={0x10,0x11,0x12,0x13,0x14,0x15,0x16};
  38.   
  39. uchar code table1[]="SUN";                             //星期字表
  40. uchar code table2[]="MON";
  41. uchar code table3[]="TUE";
  42. uchar code table4[]="WED";
  43. uchar code table5[]="THU";
  44. uchar code table6[]="FRI";
  45. uchar code table7[]="SAT";

  46. uchar code tab1[]=" 20  -  -     ";
  47. uchar code tab2[]="   :  :   ";
  48. uchar code tab3[14]="Set Alarm!    ";
  49. uchar code tab4[16]="w:S M T W T F S ";
  50. uchar code tab5[]="  *ON  *OFF";

  51. /******************************************************************/
  52. /*                             毫秒级延时函数                                                       */
  53. /******************************************************************/
  54. void delay(uchar a)
  55. {
  56.      uchar i;
  57.      while(a--)
  58.            {
  59.               for(i=0;i<250;i++)
  60.                     {
  61.                            _nop_();
  62.                _nop_();
  63.                            _nop_();
  64.                _nop_();  
  65.                         }
  66.            }   
  67. }

  68. void delay1(uchar a)
  69. {
  70.      uchar i;
  71.      while(a--)
  72.            {
  73.               for(i=0;i<5;i++)
  74.                     {}
  75.            }   
  76. }
  77. /********************************************/
  78. /*      取出EEPROM时钟参数初始化函数         */
  79. /*******************************************/
  80. void Set_read()
  81. {
  82.         uchar i,*p;
  83.         p=nz_week_address;             //地址传递
  84.         for(i=0;i<7;i++)                    //分7次读取
  85.         {
  86.                 nz_week[i]=Read24c02(*p);
  87.                 p++;
  88.         }
  89.   set_miao=Read24c02(0x03);
  90.   set_fen=Read24c02(0x02);
  91.   set_shi=Read24c02(0x01);
  92.         set_time=Read24c02(0x05);
  93.   nz_flag=Read24c02(0x06);
  94.         setzx_time=Read24c02(0x07);
  95.         setzx_f=Read24c02(0x08);
  96.         zd_baoshi=Read24c02(0x09);
  97.         yuyin_flag=Read24c02(0x0a);
  98.         nz_miao=Read24c02(0x1a);
  99.   nz_fen=Read24c02(0x1b);
  100.   nz_shi=Read24c02(0x1c);
  101.         each=Read24c02(0x1d);
  102. }

  103. /**************************************************
  104.    初始化函数
  105. ***************************************************/
  106. void init()
  107. {
  108.         uchar i;
  109.   Alarm_Flag=0;
  110.         miao_ss=0;
  111.         led1=1;
  112. TMOD=0x01;         //设置定时器0为工作方式1(0000 0001)
  113. TH0=(65536-50000)/256;                      //装初值50ms一次中断
  114. TL0=(65536-50000)%256;                      //
  115. IE=0x82;         //开总中断,开定时器0中断
  116. TR0=0;
  117.         write_lcd1602(0x80,0);
  118.   for(i=0;i<10;i++)
  119.   {
  120.             write_lcd1602(tab1[i],1);
  121.   }
  122.   write_lcd1602(0x80+0x40+1,0);
  123.   for(i=0;i<7;i++)
  124.   {
  125.             write_lcd1602(tab2[i],1);
  126.   }
  127. }

  128. /******************************************************************/
  129. /*                                     温度数据转换                                                     */
  130. /******************************************************************/
  131. void temp_to_str()   //温度数据转换成液晶字符显示
  132. {
  133.   /*TempBuffer[0]=temp_value/100%10+0x30;     //十位
  134.   TempBuffer[1]=temp_value/10%10+0x30;    //个位
  135.   TempBuffer[2]='.';   
  136.   TempBuffer[3]=temp_value%10+0x30;
  137.   TempBuffer[4]=0xdf;                  //温度符号
  138.         */
  139.         TempBuffer[0]=temp_value/100+0x30;     //十位
  140.   TempBuffer[1]=temp_value%100/10+0x30;    //个位
  141.   TempBuffer[2]='.';   
  142.   TempBuffer[3]=temp_value%10+0x30;
  143.   TempBuffer[4]=0xdf;                  //温度符号
  144. }

  145. /******************************************************************/
  146. /*                                             显示星期                                                     */
  147. /******************************************************************/
  148. void write_week(uchar xq)                                                
  149. {
  150.         uchar x;
  151.         write_lcd1602(0x80+12,0);
  152.         switch(xq)
  153.         {
  154.                 case 1:
  155.                 for(x=0;x<3;x++)
  156.                 {
  157.                         write_lcd1602(table1[x],1);
  158.                 }
  159.                 break;
  160.                 case 2:
  161.                 for(x=0;x<3;x++)
  162.                 {
  163.                         write_lcd1602(table2[x],1);
  164.                 }
  165.                 break;
  166.                 case 3:
  167.                 for(x=0;x<3;x++)
  168.                 {
  169.                         write_lcd1602(table3[x],1);
  170.                 }
  171.                 break;
  172.                 case 4:
  173.                 for(x=0;x<3;x++)
  174.             {
  175.                         write_lcd1602(table4[x],1);
  176.                 }
  177.                 break;
  178.                 case 5:
  179.                 for(x=0;x<3;x++)
  180.                 {
  181.                         write_lcd1602(table5[x],1);
  182.                 }
  183.                 break;
  184.                 case 6:
  185.                 for(x=0;x<3;x++)
  186.                 {
  187.                         write_lcd1602(table6[x],1);
  188.                 }
  189.                 break;
  190.                 case 7:
  191.                 for(x=0;x<3;x++)
  192.                 {
  193.                         write_lcd1602(table7[x],1);
  194.                 }
  195.                 break;
  196.         }
  197.         write_lcd1602(0x80+12,0);        
  198. }
  199. /*****************************************************/
  200. /*                  显示闹钟1开关标志函数                   */
  201. /*****************************************************/
  202. void a_lcd()
  203. {
  204.         if(nz_flag==1)
  205.                         {
  206.                                 write_lcd1602(0x80+0x40,0);
  207.                                 write_lcd1602('A',1);
  208.                         }
  209.                         else
  210.                         {
  211.                                 write_lcd1602(0x80+0x40,0);
  212.                                 write_lcd1602(' ',1);
  213.                           }
  214.                         }
  215. /*****************************************************/
  216. /*                  显示ON和OFF函数                   */
  217. /*****************************************************/
  218. void on_off_lcd(uchar f)
  219. {
  220.         uchar i;
  221.                  write_lcd1602(0x80+0x40+10,0);
  222.            if(f==1)
  223.                                           {
  224.                                                       for(i=0;i<6;i++)        
  225.                                                    {write_lcd1602(tab5[i],1);         }
  226.                                                           write_lcd1602(0x80+0x40+13,0);
  227.                                                  }
  228.                                                         else
  229.                                                 {
  230.                                                         for(i=5;i<11;i++)        
  231.                                                   {    write_lcd1602(tab5[i],1);        }
  232.                                                          write_lcd1602(0x80+0x40+13,0);
  233.                                                 }
  234. }
  235. /******************************************************************/
  236. /*                                             显示函数                                                     */
  237. /******************************************************************/
  238. void display()
  239. {
  240.         uchar i,ww;
  241.         Read_RTC();
  242.         write_sfm(8,miao);
  243.         write_sfm(5,fen);
  244.         write_sfm(2,shi);
  245.         write_nyr(3,nian);
  246.         write_nyr(6,yue);        
  247.         write_nyr(9,ri);
  248.         write_week(week);
  249.         write_lcd1602(0x80+15,0);
  250.         if(setzx==1)
  251. {write_lcd1602(0xf3,1);}
  252. else
  253.     {
  254.         ww=nz_week[week-1];
  255.         if(ww==1)
  256.         {write_lcd1602(0xeb,1);}
  257.         else
  258.         {write_lcd1602(' ',1);}
  259.      }
  260.         a_lcd();
  261.         ReadTemp();
  262.         temp_to_str();
  263.         write_lcd1602(0x80+0x40+11,0);
  264.         for(i=0;i<5;i++)
  265.         {
  266.                 write_lcd1602(TempBuffer[i],1);
  267.         }
  268. }

  269. /******************************************************************/
  270. /*                   读时钟数据                                   */
  271. /******************************************************************/
  272. void Read_RTC(void)                //读取 日历
  273. {
  274.          uchar i,*p;
  275.          p=read_rtc_address;             //地址传递
  276.          for(i=0;i<7;i++)                     //分7次读取 秒分时日月周年
  277.          {
  278.                   l_tmpdate[i]=Read_Ds1302(*p);
  279.                   p++;
  280.                                                                                                         
  281.                   miao=((l_tmpdate[0]&0x70)>>4)*10 + (l_tmpdate[0]&0x0f);
  282.                   fen =((l_tmpdate[1]&0x70)>>4)*10 + (l_tmpdate[1]&0x0f);
  283.                   shi =((l_tmpdate[2]&0x70)>>4)*10 + (l_tmpdate[2]&0x0f);
  284.                   ri  =((l_tmpdate[3]&0x70)>>4)*10 + (l_tmpdate[3]&0x0f);
  285.                   yue =((l_tmpdate[4]&0x70)>>4)*10 + (l_tmpdate[4]&0x0f);
  286.                   week=((l_tmpdate[5]&0x70)>>4)*10 + (l_tmpdate[5]&0x0f);
  287.                    nian=((l_tmpdate[6]&0x70)>>4)*10 + (l_tmpdate[6]&0x0f);                    
  288.          }

  289. }

  290. /******************************************************************/
  291. /*                                     蜂鸣器发声函数                                         */
  292. /******************************************************************/
  293. void di()
  294. {
  295.         uchar i;
  296.         while(key1==0||key2==0||key3==0||key4==0)
  297.         {
  298.                 for(i=0;i<50;i++)
  299.                 {
  300.                         delay1(4);
  301.                         beep=~beep;
  302.                 }               
  303.         }
  304. }
  305. /******************/
  306. void Abeep()
  307. {
  308.         uchar i;
  309.         for(i=0;i<250;i++)
  310.                         {
  311.                                 delay1(4);
  312.                                 beep=~beep;               
  313.                                 led1=~led1;
  314.                         }
  315.                         delay(50);
  316.                         for(i=0;i<250;i++)
  317.                         {
  318.                                 delay1(4);
  319.                                 beep=~beep;
  320.                                 led1=~led1;
  321.                         }
  322.                         delay(50);
  323.                         for(i=0;i<250;i++)
  324.                         {
  325.                                 delay1(4);
  326.                                 beep=~beep;
  327.                                 led1=~led1;
  328.                         }
  329. }
  330. /*********************返回正常计时状态程序******************************/
  331. void R_normal()

  332. {
  333.             uchar i;
  334.               TR0=0;
  335.                           miao_ss=0;
  336.                                 ReadRTC_Flag=0;
  337.                                 Display_Flag=0;
  338.                                 Aset_Flag=0;
  339.                                 n=0;
  340.                                 write_lcd1602(0x0c,0);
  341.                                 if(m!=0||m1!=0||w!=0)
  342.                                 {
  343.                                    m=0;
  344.                              m1=0;
  345.                                          w=0;
  346.                                          write_lcd1602(0x80,0);  //清掉Set Alarm                           
  347.                                                 for(i=0;i<12;i++)
  348.                                                 {
  349.                                                         write_lcd1602(tab1[i],1);
  350.                                                 }
  351.                                                   write_lcd1602(0x80+0x40+1,0);
  352.             for(i=0;i<10;i++)
  353.            {
  354.                     write_lcd1602(tab2[i],1);
  355.             }
  356.                                 }
  357.                                 
  358.                                                 display();                        
  359.                         
  360.                         }

  361. /******************************************************************/
  362. /*                                             闹钟函数                                                             */
  363. /******************************************************************/
  364. void alarm()
  365. {
  366.         uchar tmp,temp;
  367.         if((nz_week[week-1]==1)&&(shi==set_shi)&&(fen==set_fen)&&(miao==set_miao))
  368.         {        
  369.                 //Read_RTC();               
  370.                 R_normal();
  371.                 tmp=set_time+fen;              //计算响铃分钟数
  372.                 if(tmp>=60)
  373.                 {tmp=tmp%60;}
  374.                 Alarm_Flag=1;                                            //闹铃响标志位
  375.                 setzx=1;
  376.                 led1=0;
  377.                 if(yuyin_flag==1)
  378.                         baoshi(shi,fen,week,0);         //语音报当前时间               
  379.                 while(Alarm_Flag)
  380.                 {        
  381.                         Abeep();
  382.                         delay(500);
  383.                         Read_RTC();                           //边响边走时
  384.                         display();
  385.                         keyscan();
  386.                          if(tmp==fen)
  387.                         {
  388.                                 Alarm_Flag=0;
  389.                                 setzx_f--;                   //响铃次数减一次
  390.                                 if(setzx_f!=0)
  391.                 {
  392.                         temp=setzx_time+fen;
  393.                         if(temp>=60)
  394.                         {
  395.                         temp=temp%60;
  396.                          set_shi++;
  397.                         if(set_shi>23)        
  398.                         {set_shi=0;}
  399.                         }        
  400.                         set_fen=temp;
  401.                         led1=0;
  402.                         if(yuyin_flag==1)
  403.                           baoshi(shi,fen,week,0);         //语音报当前时间
  404.             }
  405.                 else               
  406.                   {
  407.                           setzx=0;
  408.                           led1=1;
  409.         set_fen=Read24c02(0x02);
  410.         set_shi=Read24c02(0x01);
  411.                                 setzx_f=Read24c02(0x08);
  412.                           if(yuyin_flag==1)
  413.                           baoshi(shi,fen,week,0);         //语音报当前时间   
  414.                     }
  415.                         }
  416.                 }                                                                        
  417.         }        
  418. }

  419. /******************************************************************/
  420. /*                                             闹钟1函数                                                             */
  421. /******************************************************************/
  422. void alarm1()
  423. {
  424.         uchar tmp,temp;
  425.         if((nz_flag==1)&&(shi==nz_shi)&&(fen==nz_fen)&&(miao==nz_miao))
  426.         {        
  427.                 //Read_RTC();               
  428.                 R_normal();
  429.                 tmp=set_time+fen;              //计算响铃分钟数
  430.                 if(tmp>=60)
  431.                 {tmp=tmp%60;}
  432.                 Alarm_Flag1=1;                                            //闹铃响标志位
  433.                 setzx=1;
  434.                 led1=0;
  435.                 if(yuyin_flag==1)
  436.                         baoshi(shi,fen,week,0);         //语音报当前时间               
  437.                 while(Alarm_Flag1)
  438.                 {        
  439.                         Abeep();
  440.                         delay(500);
  441.                         Read_RTC();                           //边响边走时
  442.                         display();
  443.                         keyscan();
  444.                          if(tmp==fen)
  445.                         {
  446.                                 Alarm_Flag1=0;
  447.                                 setzx_f--;                   //响铃次数减一次
  448.                                 if(setzx_f!=0)
  449.                 {
  450.                         temp=setzx_time+fen;
  451.                         if(temp>=60)
  452.                         {
  453.                         temp=temp%60;
  454.                          nz_shi++;
  455.                         if(nz_shi>23)        
  456.                         {nz_shi=0;}
  457.                         }        
  458.                         nz_fen=temp;
  459.                         led1=0;
  460.                         if(yuyin_flag==1)
  461.                           baoshi(shi,fen,week,0);         //语音报当前时间
  462.             }
  463.                 else               
  464.                   {
  465.                           setzx=0;
  466.                           led1=1;
  467.         nz_fen=Read24c02(0x1b);
  468.         nz_shi=Read24c02(0x1c);
  469.                                 setzx_f=Read24c02(0x08);
  470.                                 if(each==0)
  471.                                 nz_flag=0;
  472.                           if(yuyin_flag==1)
  473.                           baoshi(shi,fen,week,0);         //语音报当前时间   
  474.                     }
  475.                         }
  476.                 }                                                                        
  477. /*                tmp=fen+5;       //响铃x分钟
  478.                 if(tmp>=60)
  479.                 {tmp=tmp%60;}
  480.                 Alarm_Flag1=1;                                            //闹铃响标志位
  481.                 led1=0;
  482.                 if(yuyin_flag==1)
  483.                          baoshi(shi,fen,week,0);         //语音报闹钟时间               
  484.                 while(Alarm_Flag1)
  485.                 {        
  486.                         Abeep();
  487.                         delay(500);
  488.                         Read_RTC();                           //边响边走时
  489.                         display();
  490.                         keyscan();
  491.                          if(tmp==fen)
  492.                         {
  493.                                 Alarm_Flag1=0;
  494.                                 led1=1;
  495.                         if(each==0)
  496.                                 nz_flag=0;
  497.                         if(yuyin_flag==1)
  498.                           baoshi(shi,fen,week,0);         //语音报闹钟时间   
  499.                         }
  500.                 }                                                                        */
  501.         }        
  502. }

  503. /******************************************************************/
  504. /*                                             键盘扫描函数                                             */
  505. /******************************************************************/
  506. void keyscan()
  507. {
  508.         uchar i,temp;
  509.         if(Alarm_Flag==0&&Alarm_Flag1==0&&setzx==0)
  510.         {
  511.                 if(key1==0)                                                         //调时功能键
  512.                 {
  513.                         delay(9);
  514.                         if(key1==0)
  515.                         {
  516.                                 di();
  517.                                 while(!key1);                                                                                       //松手检测
  518.                                 miao_ss=0;
  519.                 if(Display_Flag==0&&m==0&&w==0&&m1==0)               
  520.                 {               
  521.                                 ++n;
  522.                                 Aset_Flag=1;                          //屏蔽调闹铃功能键,进入调时功能
  523.                                 ReadRTC_Flag=1;                                                                                         //停止走时
  524.                                 switch(n)
  525.                                 {
  526.                                         case 1: on_off_lcd(zd_baoshi);                                      //按一次功能键闪烁
  527.                                                             write_lcd1602(0x0f,0);
  528.                                 break;
  529.                                         case 2: write_lcd1602(0x80+0x40+9,0);                                     //按两次功能键秒闪烁
  530.                                                             //Write_Ds1302(0x8e,0x00);                                                //允许写,禁止写保护
  531.                                                             //Write_Ds1302(0x80,((miao/10)*16+miao%10));        //写入DS1302秒位
  532.                                                             //Write_Ds1302(0x8e,0x80);                                               //打开写保护
  533.                                                         break;
  534.                                         case 3: write_lcd1602(0x80+0x40+6,0);                                 //按三次功能键分闪烁                                
  535.                                                         break;
  536.                                         case 4: write_lcd1602(0x80+0x40+3,0);                                 //按四次功能键时闪烁                                                               
  537.                                                         break;
  538.                                         case 5: write_lcd1602(0x80+10,0);                                          //按五次功能键日闪烁                                                
  539.                                                         break;
  540.                                         case 6: write_lcd1602(0x80+7,0);                                          //按六次功能键月闪烁                                                
  541.                                                         break;
  542.                                         case 7:write_lcd1602(0x80+4,0);                                          //按七次功能键年闪烁
  543.                                                         break;
  544.                                         case 8: write_lcd1602(0x80+12,0);                                         //按八次功能键周闪烁        
  545.                                                         break;
  546.                                         case 9: TR0=0;                                                                        //按九次功能键开始走时,停止闪烁
  547.                                                 n=0;
  548.                                                          ReadRTC_Flag=0;                                                
  549.                                             Aset_Flag=0;
  550.                                                         write_lcd1602(0x0c,0);
  551.                                                         Write_Ds1302(0x8e,0x00);
  552.                                                         Write_Ds1302(0x80,((miao/10)*16+miao%10));
  553.                                                         Write_Ds1302(0x82,((fen/10)*16+fen%10));
  554.                                                         Write_Ds1302(0x84,((shi/10)*16+shi%10));
  555.                                                         Write_Ds1302(0x8e,0x80);
  556.                                                         break;
  557.                                 }
  558.                         }
  559.                 else
  560.                 {
  561.                         if(n==0&&w==0&&m1==0&&m>0)
  562.                 {
  563.                         m++;
  564.                         Alarm_Flag=0;                                                 //初始化闹铃标志位,闹铃不响
  565.                         Alarm_Flag1=0;        
  566.                         switch(m)
  567.                         {        case 2: write_lcd1602(0x80+0x40+9,0);                   //开始设定闹铃,秒位闪烁可调
  568.                                                 write_lcd1602(0x0f,0);
  569.                                                 break;
  570.                                 case 3: write_lcd1602(0x80+0x40+6,0);                   //分位闪烁可调
  571.                                                 break;
  572.                                 case 4:        write_lcd1602(0x80+0x40+3,0);                   //时位闪烁可调
  573.                                                 break;
  574.                                 case 5:        write_lcd1602(0x80+0x40+14,0);                 //
  575.                                                 break;               
  576.                                 case 6:        write_lcd1602(0x80+15,0);                       //
  577.                                     break;
  578.                                 case 7:        write_lcd1602(0x80+12,0);                       //
  579.                                     break;
  580.                                 case 8:        write_lcd1602(0x80+0x40+11,0);                 //
  581.                                     break;
  582.                                 case 9:R_normal();
  583. //                                                display();                                                           //返回时间显示
  584.                                                 break;
  585.                                         }
  586.                     }        
  587.                 else
  588.                 if(n==0&&m==0&&m1==0&&w>0)        
  589.                 {
  590.                         w++;
  591.                         Alarm_Flag=0;                                                 //初始化闹铃标志位,闹铃不响
  592.                         Alarm_Flag1=0;        
  593.                         switch(w)
  594.                         {        case 2: write_lcd1602(0x80+0x40+2,0);                  
  595.                                                     write_lcd1602(0x0f,0);           //开始闪烁
  596.                                                 break;
  597.                                 case 3: write_lcd1602(0x80+0x40+4,0);                  
  598.                                                 break;
  599.                                 case 4:        write_lcd1602(0x80+0x40+6,0);                  
  600.                                                 break;
  601.                                 case 5:        write_lcd1602(0x80+0x40+8,0);                 //
  602.                                                 break;               
  603.                                 case 6:        write_lcd1602(0x80+0x40+10,0);                 //
  604.                                     break;
  605.                                 case 7:        write_lcd1602(0x80+0x40+12,0);                 //
  606.                                     break;
  607.                                 case 8:        write_lcd1602(0x80+0x40+14,0);                 //
  608.                                     break;
  609.                                 case 9:        R_normal();
  610.                                          break;
  611.                        }
  612.                       }
  613.                 else
  614.                 {
  615.                         if(n==0&&m==0&&w==0&&m1>0)
  616.                         {
  617.                                 m1++;
  618.                                 Alarm_Flag=0;                                                 //初始化闹铃标志位,闹铃不响
  619.                           Alarm_Flag1=0;        
  620.                                 switch(m1)
  621.                         {        case 2: write_lcd1602(0x80+0x40+9,0);                   //开始设定闹铃,秒位闪烁可调
  622.                                                     write_lcd1602(0x0f,0);
  623.                                                 break;
  624.                                 case 3: write_lcd1602(0x80+0x40+6,0);                   //分位闪烁可调
  625.                                                 break;
  626.                                 case 4:        write_lcd1602(0x80+0x40+3,0);                   //时位闪烁可调
  627.                                                 break;
  628.                                 case 5:        on_off_lcd(each);                            //
  629.                                     break;
  630.                                 case 6:
  631.                                        nz_flag=1;                                                                        //开启闹钟检测
  632.                      R_normal();
  633.                                         break;
  634.                                   }
  635.                                         }
  636.                      }
  637.                   }
  638.                 }
  639.          }
  640. }
  641.            if(Alarm_Flag==0&&Alarm_Flag1==0&&setzx==0)
  642.   {        if(key4==0)                                                                 //闹铃功能键
  643.           {
  644.                 delay(9);
  645.                 if(key4==0)
  646.                 {
  647.                         di();
  648.                         while(!key4);
  649.                         if(Aset_Flag==0)        //不是调时钟状态就可以进入调闹钟
  650.    {               
  651.                  miao_ss=0;
  652.                  if(m1==0)
  653.                  {
  654.                  if(w==0)
  655.                  {
  656.                         m++;
  657.                         if(m>1)
  658.                         {m=9;}
  659.                         Display_Flag=1;                                                 //屏蔽调时功能键,进入调闹铃功能
  660.                         switch(m)
  661.                         {
  662.                                 case 1:        n=0;
  663.                                                 ReadRTC_Flag=0;                                            //开显示        
  664.                                                 write_lcd1602(0x0c,0);                        //停止闪烁
  665.                                                 Write_Ds1302(0x8e,0x00);
  666.                                                 Write_Ds1302(0x80,((miao/10)*16+miao%10));
  667.                                                 Write_Ds1302(0x8e,0x80);
  668.                                                 write_lcd1602(0x80,0);                  //首行写入Set Alarm!
  669.                                     write_lcd1602('w',1);
  670.                                     write_lcd1602(':',1);
  671. //                                    write_lcd1602(' ',1);
  672.                                                 for(i=3;i<12;i++)
  673.                                                 {
  674.                                                         write_lcd1602(tab3[i],1);
  675.                                                 }
  676.                                                 write_lcd1602(setzx_f/10+'0',1);
  677.                                                 write_lcd1602(setzx_f%10+'0',1);
  678.                                                 write_lcd1602(0xde,1);
  679.                                                 write_lcd1602(setzx_time/10+'0',1);
  680.                                                 write_lcd1602(setzx_time%10+'0',1);
  681.                                                 write_lcd1602(0x80+0x40,0);          //第二行写入设定的时间
  682.                                                 write_lcd1602('*',1);
  683.                                                 for(i=0;i<7;i++)
  684.                                                 {
  685.                                                         write_lcd1602(tab2[i],1);        
  686.                                                 }
  687.                                                 write_lcd1602(0x80+0x40+8,0);
  688.                                                 write_lcd1602(set_miao/10+'0',1);
  689.                                           write_lcd1602(set_miao%10+'0',1);
  690.                                                 write_lcd1602(0x80+0x40+5,0);
  691.                                                 write_lcd1602(set_fen/10+'0',1);
  692.                                                 write_lcd1602(set_fen%10+'0',1);
  693.                                                 write_lcd1602(0x80+0x40+2,0);
  694.                                                 write_lcd1602(set_shi/10+'0',1);
  695.                                                 write_lcd1602(set_shi%10+'0',1);
  696.                                                 write_lcd1602(0x80+0x40+11,0);
  697.                                                 if(yuyin_flag==1)
  698.                                                 {write_lcd1602('V',1);}
  699.                                                 else
  700.                                                 {write_lcd1602('_',1);}
  701.                                                 write_lcd1602(' ',1);
  702.                                                 write_lcd1602(set_time/10+'0',1);
  703.                                                 write_lcd1602(set_time%10+'0',1);
  704.                                                 write_lcd1602('m',1);
  705.                                                 break;
  706.                                 case 9:
  707.                                            m=0;                                                                   //关闭更更改闹铃时间
  708.                                w=1;                  //
  709.                                     write_lcd1602(0x0c,0); //停止闪烁
  710.                                     write_lcd1602(0x80,0);                  //首行写入星期表
  711.                                                 for(i=0;i<16;i++)
  712.                                                 {
  713.                                                         write_lcd1602(tab4[i],1);
  714.                                                 }
  715.                                                 write_lcd1602(0x80+0x40,0);
  716.                                                 write_lcd1602('*',1);
  717.                                                 write_lcd1602(':',1);
  718.                                                 write_lcd1602(nz_week[0]+'0',1);
  719.                                                 write_lcd1602(' ',1);
  720.                                                 write_lcd1602(nz_week[1]+'0',1);
  721.                                                 write_lcd1602(' ',1);
  722.                                                 write_lcd1602(nz_week[2]+'0',1);
  723.                                                 write_lcd1602(' ',1);
  724.                                                 write_lcd1602(nz_week[3]+'0',1);
  725.                                                 write_lcd1602(' ',1);
  726.                                                 write_lcd1602(nz_week[4]+'0',1);
  727.                                                 write_lcd1602(' ',1);
  728.                                                 write_lcd1602(nz_week[5]+'0',1);
  729.                                                 write_lcd1602(' ',1);
  730.                                                 write_lcd1602(nz_week[6]+'0',1);
  731.                                                 write_lcd1602(' ',1);
  732.                                         break;
  733.                         }
  734.                 }
  735.                  else
  736.                  {
  737.                         w=0;
  738.                         m1=1;
  739.                          write_lcd1602(0x0c,0);     //停止闪烁
  740.              write_lcd1602(0x80,0);                  //首行写入Set Alarm!
  741.                                                 for(i=0;i<11;i++)
  742.                                                 {
  743.                                                         write_lcd1602(tab3[i],1);
  744.                                                 }
  745.                                                 write_lcd1602('E',1);
  746.                                                 write_lcd1602('.',1);
  747.                                                 write_lcd1602('d',1);
  748.                                                 write_lcd1602('a',1);
  749.                                                 write_lcd1602('y',1);
  750.                                                 write_lcd1602(0x80+0x40,0);          //第二行写入设定的时间
  751.                                                 write_lcd1602(' ',1);
  752.                                                 for(i=0;i<7;i++)
  753.                                                 {
  754.                                                         write_lcd1602(tab2[i],1);        
  755.                                                 }
  756.                                                 write_lcd1602(0x80+0x40+8,0);
  757.                                                 write_lcd1602(nz_miao/10+'0',1);
  758.                                           write_lcd1602(nz_miao%10+'0',1);
  759.                                                 on_off_lcd(each);
  760.                                                 write_lcd1602(0x80+0x40+5,0);
  761.                                                 write_lcd1602(nz_fen/10+'0',1);
  762.                                                 write_lcd1602(nz_fen%10+'0',1);
  763.                                                 write_lcd1602(0x80+0x40+2,0);
  764.                                                 write_lcd1602(nz_shi/10+'0',1);
  765.                                                 write_lcd1602(nz_shi%10+'0',1);
  766.                                                 a_lcd();
  767.                  }
  768.          }
  769.                  else
  770.                  {
  771.                   R_normal();
  772.                                         //        display();                                                           //返回时间显示*/
  773.                         
  774.                  }
  775.                 }
  776.          else         
  777.          
  778.            R_normal();
  779.          
  780.          }
  781.         }
  782. }
  783.         if(n!=0||m>1||m1>1||w>1)                                                                                                                //功能加键
  784.         {
  785.                 if(key2==0)
  786.                 {
  787.                         delay(9);
  788.                         if(key2==0)
  789.                         {                                       
  790.                                 di();
  791.                                 while(!key2);
  792.                                 miao_ss=0;
  793.                                 if(Display_Flag==0)
  794.                                 {
  795.                                         switch(n)
  796.                                         {
  797.                                                 case 1:zd_baoshi=~zd_baoshi;
  798.                                                        Write24c02(0x09,zd_baoshi);
  799.                                                              on_off_lcd(zd_baoshi);
  800.                                                       break;
  801.                                                 case 2: miao++;
  802.                                                                 if(miao==60)
  803.                                                                 miao=0;
  804.                                                                 write_lcd1602(0x80+0x40+8,0);           //使LCD1602在秒位上显示“加”设好的秒数
  805.                                                                 write_lcd1602((miao/10)+'0',1);         //十进制转换成LCD1602能显示的字符,显示出来
  806.                                                                 write_lcd1602((miao%10)+'0',1);
  807.                                                                 T=(miao/10)*16+(miao%10);                     //十进制转换成DS1302能写的BCD码
  808.                                                                 Write_Ds1302(0x8e,0x00);                     //允许写,禁止写保护
  809.                                                                 Write_Ds1302(0x80,T);                              //写入DS1302
  810.                                                                 Write_Ds1302(0x8e,0x80);                    //打开写保护
  811.                                                                 //Read_RTC();                                                                                                                                
  812.                                                                 write_lcd1602(0x80+0x40+9,0);     //写完数据后光标自动右移,所以要归位                                                                                                               
  813.                                                                 break;
  814.                                                 case 3: fen++;
  815.                                                                 if(fen==60)
  816.                                                                 fen=0;
  817.                                                                 write_lcd1602(0x80+0x40+5,0);
  818.                                                                 write_lcd1602((fen/10)+'0',1);
  819.                                                                 write_lcd1602((fen%10)+'0',1);
  820.                                                                 T=(fen/10)*16+(fen%10);
  821.                                                                 Write_Ds1302(0x8e,0x00);
  822.                                                                 Write_Ds1302(0x82,T);
  823.                                                                 Write_Ds1302(0x8e,0x80);                                                               
  824.                                                                 write_lcd1602(0x80+0x40+6,0);
  825.                                                                 break;
  826.                                                 case 4: shi++;
  827.                                                                 if(shi==24)
  828.                                                                 shi=0;
  829.                                                                 write_lcd1602(0x80+0x40+2,0);
  830.                                                                 write_lcd1602((shi/10)+'0',1);
  831.                                                                 write_lcd1602((shi%10)+'0',1);
  832.                                                                 T=(shi/10)*16+(shi%10);
  833.                                                                 Write_Ds1302(0x8e,0x00);
  834.                                                                 Write_Ds1302(0x84,T);
  835.                                                                 Write_Ds1302(0x8e,0x80);                                                               
  836.                                                                 write_lcd1602(0x80+0x40+3,0);
  837.                                                                 break;
  838.                                                 case 5: ri++;
  839.                                                                 if(ri==32)
  840.                                                                 ri=1;
  841.                                                                 write_lcd1602(0x80+9,0);
  842.                                                                 write_lcd1602((ri/10)+'0',1);
  843.                                                                 write_lcd1602((ri%10)+'0',1);
  844.                                                                 T=(ri/10)*16+(ri%10);                        
  845.                                                                 Write_Ds1302(0x8e,0x00);        
  846.                                                                 Write_Ds1302(0x86,T);
  847.                                                                 Write_Ds1302(0x8e,0x80);
  848.                                                                 write_lcd1602(0x80+10,0);
  849.                                                                 break;
  850.                                                 case 6: yue++;
  851.                                                                 if(yue==13)
  852.                                                                 yue=1;
  853.                                                                 write_lcd1602(0x80+6,0);
  854.                                                                 write_lcd1602((yue/10)+'0',1);
  855.                                                                 write_lcd1602((yue%10)+'0',1);
  856.                                                                 T=(yue/10)*16+(yue%10);
  857.                                                                 Write_Ds1302(0x8e,0x00);
  858.                                                                 Write_Ds1302(0x88,T);
  859.                                                                 Write_Ds1302(0x8e,0x80);
  860.                                                                 write_lcd1602(0x80+7,0);
  861.                                                                 break;
  862.                                                 case 7: nian++;
  863.                                                                 if(nian==100)
  864.                                                                 nian=0;
  865.                                                                 write_lcd1602(0x80+3,0);
  866.                                                                 write_lcd1602((nian/10)+'0',1);
  867.                                                                 write_lcd1602((nian%10)+'0',1);
  868.                                                                 T=(nian/10)*16+(nian%10);
  869.                                                                 Write_Ds1302(0x8e,0x00);
  870.                                                                 Write_Ds1302(0x8c,T);
  871.                                                                 Write_Ds1302(0x8e,0x80);
  872.                                                                 write_lcd1602(0x80+4,0);
  873.                                                                 break;
  874.                                                 case 8: week++;
  875.                                                                 if(week==8)
  876.                                                                 week=1;
  877.                                                                 write_week(week);
  878.                                                                 T=(week/10)*16+(week%10);
  879.                                                                 Write_Ds1302(0x8e,0x00);
  880.                                                                 Write_Ds1302(0x8a,T);
  881.                                                                 Write_Ds1302(0x8e,0x80);
  882.                                                                 break;
  883.                                         }
  884.                                 }
  885.                                 else  
  886.                                         if(w==0&&m1==0&&m>1)
  887.                                 {               
  888.                                         switch(m)
  889.                                                 {
  890.                                                          case 2: set_miao++;                     //闹钟秒加1
  891.                                                                         if(set_miao==60)
  892.                                                                         set_miao=0;
  893.                                                                         write_lcd1602(0x80+0x40+8,0);
  894.                                                                         write_lcd1602(set_miao/10+'0',1);
  895.                                                                         write_lcd1602(set_miao%10+'0',1);
  896.                                                                         write_lcd1602(0x80+0x40+9,0);
  897.                                                                         Write24c02(0x03,set_miao);
  898.                                                                         break;
  899.                                                     case 3: set_fen++;                   //闹钟分加1
  900.                                                                         if(set_fen==60)
  901.                                                                         set_fen=0;
  902.                                                                         write_lcd1602(0x80+0x40+5,0);
  903.                                                                         write_lcd1602(set_fen/10+'0',1);
  904.                                                                         write_lcd1602(set_fen%10+'0',1);
  905.                                                                         write_lcd1602(0x80+0x40+6,0);
  906.                                                                         Write24c02(0x02,set_fen);
  907.                                                                         break;
  908.                                                     case 4: set_shi++;                  //闹钟时加1
  909.                                                                         if(set_shi==24)
  910.                                                                         set_shi=0;
  911.                                                                         write_lcd1602(0x80+0x40+2,0);
  912.                                                                         write_lcd1602(set_shi/10+'0',1);
  913.                                                                         write_lcd1602(set_shi%10+'0',1);
  914.                                                                         write_lcd1602(0x80+0x40+3,0);
  915.                                                                         Write24c02(0x01,set_shi);
  916.                                                                         break;
  917.                                                         case 5: set_time++;                   //闹钟响铃时长
  918.                                                                         if(set_time==31)
  919.                                                                         set_time=1;
  920.                                                                         write_lcd1602(0x80+0x40+13,0);
  921.                                                                         write_lcd1602(set_time/10+'0',1);
  922.                                                                         write_lcd1602(set_time%10+'0',1);
  923.                                                                         write_lcd1602(0x80+0x40+14,0);
  924.                                                                         Write24c02(0x05,set_time);
  925.                                                                         break;               
  926.                                                         case 6: setzx_time++;                 //闹钟再响间隔
  927.                                                                         if(setzx_time==31)
  928.                                                                         setzx_time=1;
  929.                                                                         write_lcd1602(0x80+14,0);
  930.                                                                         write_lcd1602(setzx_time/10+'0',1);
  931.                                                                         write_lcd1602(setzx_time%10+'0',1);
  932.                                                                         write_lcd1602(0x80+15,0);
  933.                                                                         Write24c02(0x07,setzx_time);
  934.                                                                         break;               
  935.                                                         case 7: setzx_f++;                    //闹钟响铃次数
  936.                                                                         if(setzx_f==11)
  937.                                                                         setzx_f=1;
  938.                                                                         write_lcd1602(0x80+11,0);
  939.                                                                         write_lcd1602(setzx_f/10+'0',1);
  940.                                                                         write_lcd1602(setzx_f%10+'0',1);
  941.                                                                         write_lcd1602(0x80+12,0);
  942.                                                                         Write24c02(0x08,setzx_f);
  943.                                                                         break;
  944.                                                         case 8: yuyin_flag=~yuyin_flag;
  945.                                                                         write_lcd1602(0x80+0x40+11,0);
  946.                                                                         if(yuyin_flag==1)
  947.                                                         {write_lcd1602('V',1);}
  948.                                                     else
  949.                                                         {write_lcd1602('_',1);}
  950.                                                                         write_lcd1602(0x80+0x40+11,0);
  951.                                                                         Write24c02(0x0a,yuyin_flag);
  952.                                                                         break;
  953.                                                 }
  954.                                         }
  955.                                 else
  956.                                 if(m==0&&m1==0&&w>1)
  957.                                 {
  958.                                         switch(w)
  959.                                         {
  960.                                                 case 2:                               //星期日闹钟开关,1为开
  961.                                                 nz_week[0]=1;
  962.                                                 write_lcd1602(0x80+0x40+2,0);
  963.                                                 write_lcd1602(nz_week[0]+'0',1);
  964.                                                 write_lcd1602(0x80+0x40+2,0);
  965.                                                 Write24c02(0x10,nz_week[0]);
  966.                                                         break;
  967.                                                 case 3:                               //星期一闹钟开关
  968.                                                 nz_week[1]=1;
  969.                                                 write_lcd1602(0x80+0x40+4,0);
  970.                                                 write_lcd1602(nz_week[1]+'0',1);
  971.                                                 write_lcd1602(0x80+0x40+4,0);
  972.                                                 Write24c02(0x11,nz_week[1]);        
  973.                                                         break;
  974.                                                 case 4:                               //星期二闹钟开关
  975.                                                 nz_week[2]=1;
  976.                                                 write_lcd1602(0x80+0x40+6,0);
  977.                                                 write_lcd1602(nz_week[2]+'0',1);
  978.                                                 write_lcd1602(0x80+0x40+6,0);
  979.                                                 Write24c02(0x12,nz_week[2]);        
  980.                                                         break;
  981.                                                 case 5:                               //星期三闹钟开关
  982.                                                 nz_week[3]=1;
  983.                                                 write_lcd1602(0x80+0x40+8,0);
  984.                                                 write_lcd1602(nz_week[3]+'0',1);
  985.                                                 write_lcd1602(0x80+0x40+8,0);
  986.                                                 Write24c02(0x13,nz_week[3]);        
  987.                                                         break;
  988.                                                 case 6:                               //星期四闹钟开关
  989.                                                 nz_week[4]=1;
  990.                                                 write_lcd1602(0x80+0x40+10,0);
  991.                                                 write_lcd1602(nz_week[4]+'0',1);
  992.                                                 write_lcd1602(0x80+0x40+10,0);
  993.                                                 Write24c02(0x14,nz_week[4]);        
  994.                                                         break;
  995.                                                 case 7:                               //星期五闹钟开关
  996.                                                 nz_week[5]=1;
  997.                                                 write_lcd1602(0x80+0x40+12,0);
  998.                                                 write_lcd1602(nz_week[5]+'0',1);
  999.                                                 write_lcd1602(0x80+0x40+12,0);
  1000.                                                 Write24c02(0x15,nz_week[5]);        
  1001.                                                         break;
  1002.                                                 case 8:                               //星期六闹钟开关
  1003.                                                 

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




程序:
电子时钟最终双闹版.rar (20.54 KB, 下载次数: 166)


评分

参与人数 2黑币 +55 收起 理由
1370771146 + 5 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:74784 发表于 2017-4-9 21:59 | 只看该作者
这个c语言的代码
比汇编代码还复杂啊~~~~~~~~~
回复

使用道具 举报

板凳
ID:171111 发表于 2017-4-17 17:13 来自手机 | 只看该作者
谢谢楼主的资料 正想学51c语言 很好很有用
回复

使用道具 举报

地板
ID:171111 发表于 2017-5-6 21:55 | 只看该作者
要是能有个说明就好了 我这调了半天也没太弄明白闹钟设置里的东东 是个很不错的程序
回复

使用道具 举报

5#
ID:171111 发表于 2017-5-6 21:56 | 只看该作者
而且到了闹钟的时间就死机了呢 卡住不动了 是哪里设置的不对呢
回复

使用道具 举报

6#
ID:159515 发表于 2017-5-6 23:06 | 只看该作者
闹钟在语音报时的时候显示屏会停下不走动,语音报完就正常走时了
回复

使用道具 举报

7#
ID:159515 发表于 2017-5-7 00:04 | 只看该作者
xuwei517 发表于 2017-5-6 21:55
要是能有个说明就好了 我这调了半天也没太弄明白闹钟设置里的东东 是个很不错的程序


发几张图片说明看看吧

回复

使用道具 举报

8#
ID:159515 发表于 2018-4-14 09:33 | 只看该作者

更新一下:做了一点小优化,解决语音报时走时停顿问题 电子时钟最终双闹版(2017.11.30).rar (113.58 KB, 下载次数: 97)

回复

使用道具 举报

9#
ID:124995 发表于 2018-4-15 12:15 | 只看该作者
灰常不错,谢谢楼主
回复

使用道具 举报

10#
ID:311224 发表于 2018-4-18 21:05 | 只看该作者
楼主,请问你这个设备能否买一个给我,谢谢!急用,需要给女朋友送一个。
回复

使用道具 举报

11#
ID:323766 发表于 2018-5-10 18:20 | 只看该作者
羡慕大神
回复

使用道具 举报

12#
ID:190192 发表于 2018-5-10 22:00 | 只看该作者
正想学51c语言,羡慕大神
回复

使用道具 举报

13#
ID:102293 发表于 2018-5-10 22:43 | 只看该作者
辛苦了,谢谢楼主的资料,
回复

使用道具 举报

14#
ID:104838 发表于 2018-8-10 03:11 | 只看该作者
程序试好,可以用,新手可以放心下载

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

15#
ID:287128 发表于 2018-8-10 18:18 | 只看该作者
谢谢楼主的资料 正想学51c语言 很好很有用
回复

使用道具 举报

16#
ID:385160 发表于 2018-8-11 00:44 来自手机 | 只看该作者
很好,我也想做一个
回复

使用道具 举报

17#
ID:380389 发表于 2018-9-2 19:19 | 只看该作者
没有接AT24C02就不能显示吗?
回复

使用道具 举报

18#
ID:282431 发表于 2018-9-9 08:05 | 只看该作者
谢谢楼主的资料  很好很有用
回复

使用道具 举报

19#
ID:408691 发表于 2019-3-28 18:48 | 只看该作者
楼主,有没有仿真图
回复

使用道具 举报

20#
ID:471632 发表于 2019-3-29 10:45 | 只看该作者
有历史的牛人呀!
回复

使用道具 举报

21#
ID:293356 发表于 2019-4-4 13:06 | 只看该作者
正想学51c语言,黑币不够无法下载
回复

使用道具 举报

22#
ID:485189 发表于 2019-4-5 10:39 | 只看该作者
不会设置闹钟
回复

使用道具 举报

23#
ID:846185 发表于 2020-11-23 20:49 | 只看该作者
为什么我的仿真里led1602不显示
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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