找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的打铃系统程序

[复制链接]
跳转到指定楼层
楼主
老东西了

单片机源程序如下:
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535

  4. bit flag_200ms ;
  5. bit flag_100ms ;
  6. sbit beep = P3^7;          //蜂鸣器定义
  7. bit flag_beep_en;
  8. uint clock_value;     //用作闹钟用的

  9. uchar menu_1,menu_2;

  10. uchar key_time,flag_value;      //用做连加的中间变量
  11. bit key_500ms  ;

  12. //#include "key.h"
  13. #include "ds1302.h"
  14. #include "lcd1602.h"

  15. uchar fen1=0x30,shi1=0x06;          //第1个打铃的时间                 起床
  16. uchar fen2=0x30,shi2=0x07;          //第2个打铃的时间                 早自习
  17. uchar fen3=0x10,shi3=0x08;          //第3个打铃的时间                 早自习下         
  18. uchar fen4=0x20,shi4=0x08;          //第4个打铃的时间                 第一节上课   
  19. uchar fen5=0x00,shi5=0x09;          //第5个打铃的时间                 第一节下课  
  20. uchar fen6=0x10,shi6=0x09;          //第6个打铃的时间                 第二节上课      
  21. uchar fen7=0x50,shi7=0x09;          //第7个打铃的时间                 第二节下课   
  22. uchar fen8=0x00,shi8=0x10;          //第8个打铃的时间                 第三节上课   
  23. uchar fen9=0x40,shi9=0x10;          //第9个打铃的时间                 第三节下课  
  24. uchar fen10=0x50,shi10=0x10;          //第10个打铃的时间 第四节上课  
  25. uchar fen11=0x30,shi11=0x11;          //第11个打铃的时间 第四节下课  
  26. uchar fen12=0x30,shi12=0x13;          //第12个打铃的时间 第五节上课  
  27. uchar fen13=0x10,shi13=0x14;          //第13个打铃的时间 第五节下课
  28. uchar fen14=0x20,shi14=0x14;          //第14个打铃的时间 第六节上课
  29. uchar fen15=0x00,shi15=0x15;          //第15个打铃的时间 第六节下课
  30. uchar fen16=0x20,shi16=0x15;          //第16个打铃的时间 第七节上课
  31. uchar fen17=0x00,shi17=0x16;          //第17个打铃的时间 第七节下课
  32. uchar fen18=0x10,shi18=0x16;          //第18个打铃的时间 第八节上课
  33. uchar fen19=0x50,shi19=0x16;          //第19个打铃的时间 第八节下课
  34. uchar fen20=0x00,shi20=0x19;          //第20个打铃的时间 晚自习上课
  35. uchar fen21=0x30,shi21=0x20;          //第21个打铃的时间 晚自习下课
  36. uchar fen22=0x30,shi22=0x22;          //第22个打铃的时间 熄灯
  37. uchar fen23=0x00,shi23=0x00;          //第23个打铃的时间
  38. uchar fen24=0x00,shi24=0x00;          //第24个打铃的时间
  39. uchar fen25=0x00,shi25=0x00;          //第25个打铃的时间
  40. uchar fen26=0x00,shi26=0x00;          //第26个打铃的时间


  41. /******************1ms 延时函数*******************/
  42. void delay_1ms(uint q)
  43. {
  44.         uint i,j;
  45.         for(i=0;i<q;i++)
  46.                 for(j=0;j<120;j++);
  47. }

  48. /*************定时器0初始化程序***************/
  49. void init_1602_ds1302()
  50. {
  51.         write_sfm2_ds1302(2,3,nian);       
  52.         write_sfm2_ds1302(2,6,yue);       
  53.         write_sfm2_ds1302(2,9,ri);       
  54.         write_sfm2_ds1302(1,2,shi);       
  55.         write_sfm2_ds1302(1,5,fen);       
  56.         write_sfm2_ds1302(1,8,miao);
  57.         write_sfm1(1,14,week);               
  58. }                                                                          

  59. /*************定时器0初始化程序***************/
  60. void init_time0()          
  61. {
  62.         EA   = 1;                   //开总中断
  63.         TMOD = 0X01;          //定时器0、工作方式1
  64.         ET0  = 1;                  //开定时器0中断
  65.         TR0  = 1;                  //允许定时器0定时
  66. }

  67. /*************闹钟报警函数***************/
  68. void menu_dis()
  69. {
  70.         static uchar mm,value;
  71.         if(flag_100ms == 1)                  //100ms执行一次
  72.         {
  73.                 flag_100ms = 0;
  74.                 {       
  75.                         if(miao == 0)
  76.                         if(((fen == fen1) && (shi == shi1) && (shi1 != 0)) ||
  77.                            ((fen == fen2) && (shi == shi2) && (shi2 != 0)) ||         //第2个打铃时间判断
  78.                            ((fen == fen3) && (shi == shi3) && (shi3 != 0)) ||         //第3个打铃时间判断
  79.                            ((fen == fen4) && (shi == shi4) && (shi4 != 0)) ||         //第4个打铃时间判断
  80.                            ((fen == fen5) && (shi == shi5) && (shi5 != 0)) ||         //第5个打铃时间判断
  81.                            ((fen == fen6) && (shi == shi6) && (shi6 != 0)) ||         //第6个打铃时间判断
  82.                            ((fen == fen7) && (shi == shi7) && (shi7 != 0)) ||         //第7个打铃时间判断
  83.                            ((fen == fen8) && (shi == shi8) && (shi8 != 0)) ||         //第8个打铃时间判断
  84.                            ((fen == fen9) && (shi == shi9) && (shi9 != 0)) ||         //第9个打铃时间判断
  85.                            ((fen == fen10) && (shi == shi10) && (shi10 != 0)) ||         //第10个打铃时间判断
  86.                            ((fen == fen12) && (shi == shi12) && (shi12 != 0)) ||         //第12个打铃时间判断
  87.                            ((fen == fen13) && (shi == shi13) && (shi13 != 0)) ||         //第13个打铃时间判断
  88.                            ((fen == fen14) && (shi == shi14) && (shi14 != 0)) ||         //第14个打铃时间判断
  89.                            ((fen == fen15) && (shi == shi15) && (shi15 != 0)) ||         //第15个打铃时间判断
  90.                            ((fen == fen17) && (shi == shi17) && (shi17 != 0)) ||         //第17个打铃时间判断
  91.                            ((fen == fen18) && (shi == shi18) && (shi18 != 0)) ||         //第18个打铃时间判断
  92.                            ((fen == fen19) && (shi == shi19) && (shi19 != 0)) ||         //第19个打铃时间判断
  93.                            ((fen == fen20) && (shi == shi20) && (shi20 != 0)) ||         //第20个打铃时间判断
  94.                            ((fen == fen21) && (shi == shi21) && (shi21 != 0)) ||         //第21个打铃时间判断
  95.                            ((fen == fen22) && (shi == shi22) && (shi22 != 0)) ||         //第22个打铃时间判断
  96.                            ((fen == fen24) && (shi == shi24) && (shi24 != 0)) ||         //第24个打铃时间判断
  97.                            ((fen == fen25) && (shi == shi25) && (shi25 != 0)) ||         //第25个打铃时间判断
  98.                            ((fen == fen26) && (shi == shi26) && (shi26 != 0))          //第26个打铃时间判断
  99.                                 )
  100.                                 flag_beep_en = 1;        //打铃蜂鸣器响的标志位                               
  101.                         if(flag_beep_en == 1)        //打铃以被打开
  102.                         {
  103.                                 clock_value++;
  104.                                 //  15 秒后自动关闭闹钟
  105.                                 value ++;
  106.                                 if(value >= 10)
  107.                                 {
  108.                                         value = 0;
  109.                                         mm++;
  110.                                         if(mm >= 15)
  111.                                         {
  112.                                                 mm = 0;
  113.                                                 flag_beep_en = 0;
  114.                                                 beep = 1;
  115.                                         }
  116.                                 }                                       
  117.                         }
  118.                 }       
  119.         }
  120. }


  121. /********************独立按键程序*****************/
  122. uchar key_can;         //按键值

  123. void key()         //独立按键程序
  124. {
  125.         static uchar key_new;
  126.         key_can = 20;                   //按键值还原
  127.         P3 |= 0x78;                     //对应的按键IO口输出为1
  128.         if((P3 & 0x78) != 0x78)                //按键按下
  129.         {
  130.                 delay_1ms(1);                     //按键消抖动
  131.                 if(((P3 & 0x78) != 0x78) && (key_new == 1))
  132.                 {                                                //确认是按键按下
  133.                         key_new = 0;
  134.                         switch(P3 & 0x78)
  135.                         {
  136.                                 case 0xfe:  key_can = 4;  break;         //得到按键值
  137.                                 case 0xfd:  key_can = 3;  break;         //得到按键值
  138.                                 case 0xfb:  key_can = 2;  break;         //得到按键值
  139.                                 case 0xf7:  key_can = 1;  break;         //得到按键值
  140.                         }
  141. //                        write_sfm2(1,0,key_can);                                 //显示按键值
  142.                 }                       
  143.         }
  144.         else
  145.                 key_new = 1;       
  146. }


  147. /**********************设置函数************************/
  148. void key_with()
  149. {
  150.         if(key_can == 1)        //设置键
  151.         {
  152.                 menu_1++;
  153.                 if(menu_1 == 1)          //设置时间
  154.                 {
  155.                         menu_2 = 1;
  156.                         write_string(1,0,"    -  -    W:  ");                       
  157.                         write_string(2,0," 20  -  -       ");       
  158.                 }
  159.                 menu_2 = 1;
  160.                 if(menu_1 > 15)    //回到正常显示
  161.                 {
  162.                         menu_1 = 0;
  163.                         write_guanbiao(1,2,0);          //关闭光标
  164.                         init_1602_dis_csf();      //初始化液晶显示               
  165.                 }
  166.         }
  167.         if(key_can == 2)        //选择键
  168.         {
  169.                 flag_200ms = 1;
  170.                 if(menu_1 == 1)                  //设置时间
  171.                 {
  172.                         menu_2 ++;
  173.                         if(menu_2 > 7)
  174.                                 menu_2 = 1;
  175.                 }
  176.                 if(menu_1 != 1)                 //设置
  177.                 {
  178.                         menu_2 ++;
  179.                         if(menu_2 > 4)
  180.                                 menu_2 = 1;                               
  181.                 }
  182.         }
  183.         if(menu_1 == 1)
  184.         {
  185.                 if(menu_2 == 1)                  //设置时
  186.                 {
  187.                         if(key_can == 3)        //加
  188.                         {
  189.                                 shi+=0x01;
  190.                                 if((shi & 0x0f) >= 0x0a)
  191.                                         shi = (shi & 0xf0) + 0x10;
  192.                                 if(shi >= 0x24)
  193.                                         shi = 0;
  194.                         }               
  195.                         if(key_can == 4)        //减
  196.                         {
  197.                                 if(shi == 0x00)
  198.                                         shi = 0x24;
  199.                                 if((shi & 0x0f) == 0x00)
  200.                                         shi = (shi | 0x0a) - 0x10;
  201.                                 shi -- ;
  202.                         }                                         
  203.                 }
  204.                 if(menu_2 == 2)                  //设置分
  205.                 {
  206.                         if(key_can == 3)        //加
  207.                         {
  208.                                 fen+=0x01;
  209.                                 if((fen & 0x0f) >= 0x0a)
  210.                                         fen = (fen & 0xf0) + 0x10;
  211.                                 if(fen >= 0x60)
  212.                                         fen = 0;
  213.                         }               
  214.                         if(key_can == 4)        //减          
  215.                         {
  216.                                 if(fen == 0x00)
  217.                                         fen = 0x5a;
  218.                                 if((fen & 0x0f) == 0x00)
  219.                                         fen = (fen | 0x0a) - 0x10;
  220.                                 fen -- ;
  221.                         }       
  222.                 }
  223.                 if(menu_2 == 3)                  //设置秒
  224.                 {
  225.                         if(key_can == 3)        //加
  226.                         {
  227.                                 miao+=0x01;
  228.                                 if((miao & 0x0f) >= 0x0a)
  229.                                         miao = (miao & 0xf0) + 0x10;
  230.                                 if(miao >= 0x60)
  231.                                         miao = 0;
  232.                         }       
  233.                         if(key_can == 4)        //减          
  234.                         {
  235.                                 if(miao == 0x00)
  236.                                         miao = 0x5a;
  237.                                 if((miao & 0x0f) == 0x00)
  238.                                         miao = (miao | 0x0a) - 0x10;
  239.                                 miao -- ;                       
  240.                         }
  241.                 }
  242.                 if(menu_2 == 4)                  //设置星期
  243.                 {
  244.                         if(key_can == 3)        //加
  245.                         {
  246.                             week+=0x01;
  247.                                 if((week & 0x0f) >= 0x0a)
  248.                                         week = (week & 0xf0) + 0x10;
  249.                                 if(week >= 0x08)
  250.                                         week = 1;
  251.                         }               
  252.                         if(key_can == 4)        //减          
  253.                         {
  254.                                 if(week == 0x01)
  255.                                         week = 0x08;
  256.                                 if((week & 0x0f) == 0x00)
  257.                                         week = (week | 0x0a) - 0x10;
  258.                                 week -- ;
  259.                         }       
  260.                 }
  261.                 if(menu_2 == 5)                  //设置年
  262.                 {
  263.                         if(key_can == 3)        //加
  264.                         {
  265.                             nian+=0x01;
  266.                                 if((nian & 0x0f) >= 0x0a)
  267.                                         nian = (nian & 0xf0) + 0x10;
  268.                                 if(nian >= 0x9a)
  269.                                         nian = 1;
  270.                         }               
  271.                         if(key_can == 4)        //减          
  272.                         {
  273.                                 if(nian == 0x01)
  274.                                         nian = 0x9a;
  275.                                 if((nian & 0x0f) == 0x00)
  276.                                         nian = (nian | 0x0a) - 0x10;
  277.                                 nian -- ;               
  278.                         }       
  279.                 }
  280.                 if(menu_2 == 6)                  //设置月
  281.                 {
  282.                         if(key_can == 3)        //加
  283.                         {
  284.                             yue+=0x01;
  285.                                 if((yue & 0x0f) >= 0x0a)
  286.                                         yue = (yue & 0xf0) + 0x10;
  287.                                 if(yue >= 0x13)
  288.                                         yue = 1;
  289.                         }               
  290.                         if(key_can == 4)        //减          
  291.                         {
  292.                                 if(yue == 0x01)
  293.                                         yue = 0x13;
  294.                                 if((yue & 0x0f) == 0x00)
  295.                                         yue = (yue | 0x0a) - 0x10;
  296.                                 yue -- ;                                       
  297.                         }       
  298.                 }
  299.                 if(menu_2 == 7)                  //设置日
  300.                 {
  301.                         if(key_can == 3)        //加
  302.                         {
  303.                     ri+=0x01;
  304.                         if((ri & 0x0f) >= 0x0a)
  305.                                 ri = (ri & 0xf0) + 0x10;
  306.                         if(ri >= 0x32)
  307.                                 ri = 0;                       
  308.                         }               
  309.                         if(key_can == 4)        //减          
  310.                         {
  311.                                 if(ri == 0x01)
  312.                                         ri = 0x32;
  313.                                 if((ri & 0x0f) == 0x00)
  314.                                         ri = (ri | 0x0a) - 0x10;
  315.                                 ri -- ;                       
  316.                         }       
  317.                 }
  318.                 write_sfm2_ds1302(1,2,shi);           //显示时
  319.                 write_sfm2_ds1302(1,5,fen);           //显示分
  320.                 write_sfm2_ds1302(1,8,miao);           //显示秒
  321.                 write_sfm1(1,14,week);           //显示星期                                       
  322.                 write_sfm2_ds1302(2,3,nian);           //显示年
  323.                 write_sfm2_ds1302(2,6,yue);           //显示月
  324.                 write_sfm2_ds1302(2,9,ri);           //显示日
  325.                 switch(menu_2)           // 光标显示
  326.                 {
  327.                         case 1:  write_guanbiao(1,2,1);  break;
  328.                         case 2:  write_guanbiao(1,5,1);  break;
  329.                         case 3:  write_guanbiao(1,8,1);  break;
  330.                         case 4:  write_guanbiao(1,14,1); break;
  331.                         case 5:  write_guanbiao(2,3,1);  break;
  332.                         case 6:  write_guanbiao(2,6,1);  break;
  333.                         case 7:  write_guanbiao(2,9,1);  break;
  334.                 }
  335.                 write_time();           //把时间写进去
  336.         }       
  337. /***************设置1 2打铃时间*********************/
  338.         if(menu_1 == 2)
  339.         {       
  340. /////////////////////           第1个打铃时间
  341.                 if(menu_2 == 1)                  //设置打铃时
  342.                 {
  343.                         if(key_can == 3)        //加       
  344.                                 set_ds1302time(1,&shi1,0x24);               
  345.                         if(key_can == 4)        //减          
  346.                                 set_ds1302time(0,&shi1,0x24);               
  347.                 }
  348.                 if(menu_2 == 2)                  //设
  349.                 {
  350.                         if(key_can == 3)        //加
  351.                                 set_ds1302time(1,&fen1,0x60);               
  352.                         if(key_can == 4)        //减          
  353.                                 set_ds1302time(0,&fen1,0x60);               
  354.                 }       
  355. /////////////////////           第2个打铃时间       
  356.                 if(menu_2 == 3)                  //设置打铃分
  357.                 {
  358.                         if(key_can == 3)        //加        第2个打铃时间
  359.                                 set_ds1302time(1,&shi2,0x24);               
  360.                         if(key_can == 4)        //减          
  361.                                 set_ds1302time(0,&shi2,0x24);               
  362.                 }
  363.                 if(menu_2 == 4)                  //设
  364.                 {
  365.                         if(key_can == 3)        //加
  366.                                 set_ds1302time(1,&fen2,0x60);               
  367.                         if(key_can == 4)        //减          
  368.                                 set_ds1302time(0,&fen2,0x60);               
  369.                 }
  370.                 write_string(1,0," set1 00:00    ");                       
  371.                 write_string(2,0," set2 00:00      ");       
  372.                 write_sfm2_ds1302(1,6,shi1);           //显示时
  373.                 write_sfm2_ds1302(1,9,fen1);           //显示分
  374.                 write_sfm2_ds1302(2,6,shi2);           //显示时
  375.                 write_sfm2_ds1302(2,9,fen2);           //显示分
  376.                 switch(menu_2)           // 光标显示
  377.                 {
  378.                         case 1:  write_guanbiao(1,6,1);  break;
  379.                         case 2:  write_guanbiao(1,9,1);  break;
  380.                         case 3:  write_guanbiao(2,6,1);  break;
  381.                         case 4:  write_guanbiao(2,9,1);  break;
  382.                 }       
  383.         }       
  384. /***************设置3 4打铃时间*********************/
  385.         if(menu_1 == 3)
  386.         {       
  387. /////////////////////           第1个打铃时间
  388.                 if(menu_2 == 1)                  //设置打铃时
  389.                 {
  390.                         if(key_can == 3)        //加       
  391.                                 set_ds1302time(1,&shi3,0x24);               
  392.                         if(key_can == 4)        //减          
  393.                                 set_ds1302time(0,&shi3,0x24);               
  394.                 }
  395.                 if(menu_2 == 2)                  //设
  396.                 {
  397.                         if(key_can == 3)        //加
  398.                                 set_ds1302time(1,&fen3,0x60);               
  399.                         if(key_can == 4)        //减          
  400.                                 set_ds1302time(0,&fen3,0x60);               
  401.                 }       
  402. /////////////////////           第2个打铃时间       
  403.                 if(menu_2 == 3)                  //设置打铃分
  404.                 {
  405.                         if(key_can == 3)        //加        第2个打铃时间
  406.                                 set_ds1302time(1,&shi4,0x24);               
  407.                         if(key_can == 4)        //减          
  408.                                 set_ds1302time(0,&shi4,0x24);               
  409.                 }
  410.                 if(menu_2 == 4)                  //设
  411.                 {
  412.                         if(key_can == 3)        //加
  413.                                 set_ds1302time(1,&fen4,0x60);               
  414.                         if(key_can == 4)        //减          
  415.                                 set_ds1302time(0,&fen4,0x60);               
  416.                 }
  417.                 write_string(1,0," set3 00:00    ");                       
  418.                 write_string(2,0," set4 00:00      ");       
  419.                 write_sfm2_ds1302(1,6,shi3);           //显示时
  420.                 write_sfm2_ds1302(1,9,fen3);           //显示分
  421.                 write_sfm2_ds1302(2,6,shi4);           //显示时
  422.                 write_sfm2_ds1302(2,9,fen4);           //显示分
  423.                 switch(menu_2)           // 光标显示
  424.                 {
  425.                         case 1:  write_guanbiao(1,6,1);  break;
  426.                         case 2:  write_guanbiao(1,9,1);  break;
  427.                         case 3:  write_guanbiao(2,6,1);  break;
  428.                         case 4:  write_guanbiao(2,9,1);  break;
  429.                 }       
  430.         }       
  431. /***************设置5 6打铃时间*********************/
  432.         if(menu_1 == 4)
  433.         {       
  434. /////////////////////           第5个打铃时间
  435.                 if(menu_2 == 1)                  //设置打铃时
  436.                 {
  437.                         if(key_can == 3)        //加       
  438.                                 set_ds1302time(1,&shi5,0x24);               
  439.                         if(key_can == 4)        //减          
  440.                                 set_ds1302time(0,&shi5,0x24);               
  441.                 }
  442.                 if(menu_2 == 2)                  //设
  443.                 {
  444.                         if(key_can == 3)        //加
  445.                                 set_ds1302time(1,&fen5,0x60);               
  446.                         if(key_can == 4)        //减          
  447.                                 set_ds1302time(0,&fen5,0x60);               
  448.                 }       
  449. /////////////////////           第6个打铃时间       
  450.                 if(menu_2 == 3)                  //设置打铃分
  451.                 {
  452.                         if(key_can == 3)        //加       
  453.                                 set_ds1302time(1,&shi6,0x24);               
  454.                         if(key_can == 4)        //减          
  455.                                 set_ds1302time(0,&shi6,0x24);               
  456.                 }
  457.                 if(menu_2 == 4)                  //设
  458.                 {
  459.                         if(key_can == 3)        //加
  460.                                 set_ds1302time(1,&fen6,0x60);               
  461.                         if(key_can == 4)        //减          
  462.                                 set_ds1302time(0,&fen6,0x60);               
  463.                 }
  464.                 write_string(1,0," set5 00:00    ");                       
  465.                 write_string(2,0," set6 00:00      ");       
  466.                 write_sfm2_ds1302(1,6,shi5);           //显示时
  467.                 write_sfm2_ds1302(1,9,fen5);           //显示分
  468.                 write_sfm2_ds1302(2,6,shi6);           //显示时
  469.                 write_sfm2_ds1302(2,9,fen6);           //显示分
  470.                 switch(menu_2)           // 光标显示
  471.                 {
  472.                         case 1:  write_guanbiao(1,6,1);  break;
  473.                         case 2:  write_guanbiao(1,9,1);  break;
  474.                         case 3:  write_guanbiao(2,6,1);  break;
  475.                         case 4:  write_guanbiao(2,9,1);  break;
  476.                 }       
  477.                
  478.         }       
  479. /***************设置7 8打铃时间*********************/
  480.         if(menu_1 == 5)
  481.         {       
  482. /////////////////////           第7个打铃时间
  483.                 if(menu_2 == 1)                  //设置打铃时
  484.                 {
  485.                         if(key_can == 3)        //加       
  486.                                 set_ds1302time(1,&shi7,0x24);               
  487.                         if(key_can == 4)        //减          
  488.                                 set_ds1302time(0,&shi7,0x24);               
  489.                 }
  490.                 if(menu_2 == 2)                  //设
  491.                 {
  492.                         if(key_can == 3)        //加
  493.                                 set_ds1302time(1,&fen7,0x60);               
  494.                         if(key_can == 4)        //减          
  495.                                 set_ds1302time(0,&fen7,0x60);               
  496.                 }       
  497. /////////////////////           第8个打铃时间       
  498.                 if(menu_2 == 3)                  //设置打铃分
  499.                 {
  500.                         if(key_can == 3)        //加       
  501.                                 set_ds1302time(1,&shi8,0x24);               
  502.                         if(key_can == 4)        //减          
  503.                                 set_ds1302time(0,&shi8,0x24);               
  504.                 }
  505.                 if(menu_2 == 4)                  //设
  506.                 {
  507.                         if(key_can == 3)        //加
  508.                                 set_ds1302time(1,&fen8,0x60);               
  509.                         if(key_can == 4)        //减          
  510.                                 set_ds1302time(0,&fen8,0x60);               
  511.                 }
  512.                 write_string(1,0," set7 00:00    ");                       
  513.                 write_string(2,0," set8 00:00      ");       
  514.                 write_sfm2_ds1302(1,6,shi7);           //显示时
  515.                 write_sfm2_ds1302(1,9,fen7);           //显示分
  516.                 write_sfm2_ds1302(2,6,shi8);           //显示时
  517.                 write_sfm2_ds1302(2,9,fen8);           //显示分
  518.                 switch(menu_2)           // 光标显示
  519.                 {
  520.                         case 1:  write_guanbiao(1,6,1);  break;
  521.                         case 2:  write_guanbiao(1,9,1);  break;
  522.                         case 3:  write_guanbiao(2,6,1);  break;
  523.                         case 4:  write_guanbiao(2,9,1);  break;
  524.                 }       
  525.                
  526.         }       
  527. /***************设置9 10打铃时间*********************/
  528.         if(menu_1 == 6)
  529.         {       
  530. /////////////////////           第9个打铃时间
  531.                 if(menu_2 == 1)                  //设置打铃时
  532.                 {
  533.                         if(key_can == 3)        //加       
  534.                                 set_ds1302time(1,&shi9,0x24);               
  535.                         if(key_can == 4)        //减          
  536.                                 set_ds1302time(0,&shi9,0x24);               
  537.                 }
  538.                 if(menu_2 == 2)                  //设
  539.                 {
  540.                         if(key_can == 3)        //加
  541.                                 set_ds1302time(1,&fen9,0x60);               
  542.                         if(key_can == 4)        //减          
  543.                                 set_ds1302time(0,&fen9,0x60);               
  544.                 }       
  545. /////////////////////           第10个打铃时间       
  546.                 if(menu_2 == 3)                  //设置打铃分
  547.                 {
  548.                         if(key_can == 3)        //加       
  549.                                 set_ds1302time(1,&shi10,0x24);               
  550.                         if(key_can == 4)        //减          
  551.                                 set_ds1302time(0,&shi10,0x24);               
  552.                 }
  553.                 if(menu_2 == 4)                  //设
  554.                 {
  555.                         if(key_can == 3)        //加
  556.                                 set_ds1302time(1,&fen10,0x60);               
  557.                         if(key_can == 4)        //减          
  558.                                 set_ds1302time(0,&fen10,0x60);               
  559.                 }
  560.                 write_string(1,0," set9 00:00    ");                       
  561.                 write_string(2,0,"set10 00:00    ");       
  562.                 write_sfm2_ds1302(1,6,shi9);           //显示时
  563.                 write_sfm2_ds1302(1,9,fen9);           //显示分
  564.                 write_sfm2_ds1302(2,6,shi10);           //显示时
  565.                 write_sfm2_ds1302(2,9,fen10);           //显示分
  566.                 switch(menu_2)           // 光标显示
  567.                 {
  568.                         case 1:  write_guanbiao(1,6,1);  break;
  569.                         case 2:  write_guanbiao(1,9,1);  break;
  570.                         case 3:  write_guanbiao(2,6,1);  break;
  571.                         case 4:  write_guanbiao(2,9,1);  break;
  572.                 }       
  573.                
  574.         }                       

  575. /***************设置9 10打铃时间*********************/
  576.         if(menu_1 == 6)
  577.         {       
  578. /////////////////////           第9个打铃时间
  579.                 if(menu_2 == 1)                  //设置打铃时
  580.                 {
  581.                         if(key_can == 3)        //加       
  582.                                 set_ds1302time(1,&shi9,0x24);               
  583.                         if(key_can == 4)        //减          
  584.                                 set_ds1302time(0,&shi9,0x24);               
  585.                 }
  586.                 if(menu_2 == 2)                  //设
  587.                 {
  588.                         if(key_can == 3)        //加
  589.                                 set_ds1302time(1,&fen9,0x60);               
  590.                         if(key_can == 4)        //减          
  591.                                 set_ds1302time(0,&fen9,0x60);               
  592.                 }       
  593. /////////////////////           第10个打铃时间       
  594.                 if(menu_2 == 3)                  //设置打铃分
  595.                 {
  596.                         if(key_can == 3)        //加       
  597.                                 set_ds1302time(1,&shi10,0x24);               
  598.                         if(key_can == 4)        //减          
  599.                                 set_ds1302time(0,&shi10,0x24);               
  600.                 }
  601.                 if(menu_2 == 4)                  //设
  602.                 {
  603.                         if(key_can == 3)        //加
  604.                                 set_ds1302time(1,&fen10,0x60);               
  605.                         if(key_can == 4)        //减          
  606.                                 set_ds1302time(0,&fen10,0x60);               
  607.                 }
  608.                 write_string(1,0," set9 00:00    ");                       
  609.                 write_string(2,0,"set10 00:00    ");       
  610.                 write_sfm2_ds1302(1,6,shi9);           //显示时
  611.                 write_sfm2_ds1302(1,9,fen9);           //显示分
  612.                 write_sfm2_ds1302(2,6,shi10);           //显示时
  613.                 write_sfm2_ds1302(2,9,fen10);           //显示分
  614.                 switch(menu_2)           // 光标显示
  615.                 {
  616.                         case 1:  write_guanbiao(1,6,1);  break;
  617.                         case 2:  write_guanbiao(1,9,1);  break;
  618.                         case 3:  write_guanbiao(2,6,1);  break;
  619.                         case 4:  write_guanbiao(2,9,1);  break;
  620.                 }       
  621.                
  622.         }

  623. /***************设置11 12打铃时间*********************/
  624.         if(menu_1 == 7)
  625.         {       
  626. /////////////////////           第11个打铃时间
  627.                 if(menu_2 == 1)                  //设置打铃时
  628.                 {
  629.                         if(key_can == 3)        //加       
  630.                                 set_ds1302time(1,&shi11,0x24);               
  631.                         if(key_can == 4)        //减          
  632.                                 set_ds1302time(0,&shi11,0x24);               
  633.                 }
  634.                 if(menu_2 == 2)                  //设
  635.                 {
  636.                         if(key_can == 3)        //加
  637.                                 set_ds1302time(1,&fen11,0x60);               
  638.                         if(key_can == 4)        //减          
  639.                                 set_ds1302time(0,&fen11,0x60);               
  640.                 }       
  641. /////////////////////           第12个打铃时间       
  642.                 if(menu_2 == 3)                  //设置打铃分
  643.                 {
  644.                         if(key_can == 3)        //加       
  645.                                 set_ds1302time(1,&shi12,0x24);               
  646.                         if(key_can == 4)        //减          
  647.                                 set_ds1302time(0,&shi12,0x24);               
  648.                 }
  649.                 if(menu_2 == 4)                  //设
  650.                 {
  651.                         if(key_can == 3)        //加
  652.                                 set_ds1302time(1,&fen12,0x60);               
  653.                         if(key_can == 4)        //减          
  654.                                 set_ds1302time(0,&fen12,0x60);               
  655.                 }
  656.                 write_string(1,0,"set11 00:00    ");                       
  657.                 write_string(2,0,"set12 00:00    ");       
  658.                 write_sfm2_ds1302(1,6,shi11);           //显示时
  659.                 write_sfm2_ds1302(1,9,fen11);           //显示分
  660.                 write_sfm2_ds1302(2,6,shi12);           //显示时
  661.                 write_sfm2_ds1302(2,9,fen12);           //显示分
  662.                 switch(menu_2)           // 光标显示
  663.                 {
  664.                         case 1:  write_guanbiao(1,6,1);  break;
  665.                         case 2:  write_guanbiao(1,9,1);  break;
  666.                         case 3:  write_guanbiao(2,6,1);  break;
  667.                         case 4:  write_guanbiao(2,9,1);  break;
  668.                 }       
  669.                
  670.         }
  671. /***************设置13 14打铃时间*********************/
  672.         if(menu_1 == 8)
  673.         {       
  674. /////////////////////           第13个打铃时间
  675.                 if(menu_2 == 1)                  //设置打铃时
  676.                 {
  677.                         if(key_can == 3)        //加       
  678.                                 set_ds1302time(1,&shi13,0x24);               
  679.                         if(key_can == 4)        //减          
  680.                                 set_ds1302time(0,&shi13,0x24);               
  681.                 }
  682.                 if(menu_2 == 2)                  //设
  683.                 {
  684.                         if(key_can == 3)        //加
  685.                                 set_ds1302time(1,&fen13,0x60);               
  686.                         if(key_can == 4)        //减          
  687.                                 set_ds1302time(0,&fen13,0x60);               
  688.                 }       
  689. /////////////////////           第12个打铃时间       
  690.                 if(menu_2 == 3)                  //设置打铃分
  691.                 {
  692.                         if(key_can == 3)        //加       
  693.                                 set_ds1302time(1,&shi14,0x24);               
  694.                         if(key_can == 4)        //减          
  695.                                 set_ds1302time(0,&shi14,0x24);               
  696.                 }
  697.                 if(menu_2 == 4)                  //设
  698.                 {
  699.                         if(key_can == 3)        //加
  700.                                 set_ds1302time(1,&fen14,0x60);               
  701.                         if(key_can == 4)        //减          
  702.                                 set_ds1302time(0,&fen14,0x60);               
  703.                 }
  704.                 write_string(1,0,"set13 00:00    ");                       
  705.                 write_string(2,0,"set14 00:00    ");       
  706.                 write_sfm2_ds1302(1,6,shi13);           //显示时
  707.                 write_sfm2_ds1302(1,9,fen13);           //显示分
  708.                 write_sfm2_ds1302(2,6,shi14);           //显示时
  709.                 write_sfm2_ds1302(2,9,fen14);           //显示分
  710.                 switch(menu_2)           // 光标显示
  711.                 {
  712.                         case 1:  write_guanbiao(1,6,1);  break;
  713.                         case 2:  write_guanbiao(1,9,1);  break;
  714.                         case 3:  write_guanbiao(2,6,1);  break;
  715.                         case 4:  write_guanbiao(2,9,1);  break;
  716.                 }       
  717.                
  718.         }

  719. /***************设置17 18打铃时间*********************/
  720.         if(menu_1 == 10)
  721.         {       
  722. /////////////////////           第17个打铃时间
  723.                 if(menu_2 == 1)                  //设置打铃时
  724.                 {
  725.                         if(key_can == 3)        //加       
  726.                                 set_ds1302time(1,&shi17,0x24);               
  727.                         if(key_can == 4)        //减          
  728.                                 set_ds1302time(0,&shi17,0x24);               
  729.                 }
  730.                 if(menu_2 == 2)                  //设
  731.                 {
  732.                         if(key_can == 3)        //加
  733.                                 set_ds1302time(1,&fen17,0x60);               
  734.                         if(key_can == 4)        //减          
  735.                                 set_ds1302time(0,&fen17,0x60);               
  736.                 }       
  737. /////////////////////           第18个打铃时间       
  738.                 if(menu_2 == 3)                  //设置打铃分
  739.                 {
  740.                         if(key_can == 3)        //加       
  741.                                 set_ds1302time(1,&shi18,0x24);               
  742.                         if(key_can == 4)        //减          
  743.                                 set_ds1302time(0,&shi18,0x24);               
  744.                 }
  745.                 if(menu_2 == 4)                  //设
  746.                 {
  747.                         if(key_can == 3)        //加
  748.                                 set_ds1302time(1,&fen18,0x60);               
  749.                         if(key_can == 4)        //减          
  750.                                 set_ds1302time(0,&fen18,0x60);               
  751.                 }
  752.                 write_string(1,0,"set17 00:00    ");                       
  753.                 write_string(2,0,"set18 00:00    ");       
  754.                 write_sfm2_ds1302(1,6,shi17);           //显示时
  755.                 write_sfm2_ds1302(1,9,fen17);           //显示分
  756.                 write_sfm2_ds1302(2,6,shi18);           //显示时
  757.                 write_sfm2_ds1302(2,9,fen18);           //显示分
  758.                 switch(menu_2)           // 光标显示
  759.                 {
  760.                         case 1:  write_guanbiao(1,6,1);  break;
  761.                         case 2:  write_guanbiao(1,9,1);  break;
  762.                         case 3:  write_guanbiao(2,6,1);  break;
  763.                         case 4:  write_guanbiao(2,9,1);  break;
  764.                 }       
  765.                
  766.         }
  767. /***************设置19 20打铃时间*********************/
  768.         if(menu_1 == 11)
  769.         {       
  770. /////////////////////           第19个打铃时间
  771.                 if(menu_2 == 1)                  //设置打铃时
  772.                 {
  773.                         if(key_can == 3)        //加       
  774.                                 set_ds1302time(1,&shi19,0x24);               
  775.                         if(key_can == 4)        //减          
  776.                                 set_ds1302time(0,&shi19,0x24);               
  777.                 }
  778.                 if(menu_2 == 2)                  //设
  779.                 {
  780.                         if(key_can == 3)        //加
  781.                                 set_ds1302time(1,&fen19,0x60);               
  782.                         if(key_can == 4)        //减          
  783.                                 set_ds1302time(0,&fen19,0x60);               
  784.                 }       
  785. /////////////////////           第20个打铃时间       
  786.                 if(menu_2 == 3)                  //设置打铃分
  787.                 {
  788.                         if(key_can == 3)        //加       
  789.                                 set_ds1302time(1,&shi20,0x24);               
  790.                         if(key_can == 4)        //减          
  791.                                 set_ds1302time(0,&shi20,0x24);               
  792.                 }
  793.                 if(menu_2 == 4)                  //设
  794.                 {
  795.                         if(key_can == 3)        //加
  796.                                 set_ds1302time(1,&fen20,0x60);               
  797.                         if(key_can == 4)        //减          
  798.                                 set_ds1302time(0,&fen20,0x60);               
  799.                 }
  800.                 write_string(1,0,"set19 00:00    ");                       
  801.                 write_string(2,0,"set20 00:00    ");       
  802.                 write_sfm2_ds1302(1,6,shi19);           //显示时
  803.                 write_sfm2_ds1302(1,9,fen19);           //显示分
  804.                 write_sfm2_ds1302(2,6,shi20);           //显示时
  805.                 write_sfm2_ds1302(2,9,fen20);           //显示分
  806.                 switch(menu_2)           // 光标显示
  807.                 {
  808.                         case 1:  write_guanbiao(1,6,1);  break;
  809.                         case 2:  write_guanbiao(1,9,1);  break;
  810.                         case 3:  write_guanbiao(2,6,1);  break;
  811.                         case 4:  write_guanbiao(2,9,1);  break;
  812.                 }       
  813.                
  814.         }
  815. /***************设21 22打铃时间*********************/
  816.         if(menu_1 == 12)
  817.         {       
  818. /////////////////////           第21个打铃时间
  819.                 if(menu_2 == 1)                  //设置打铃时
  820.                 {
  821.                         if(key_can == 3)        //加       
  822.                                 set_ds1302time(1,&shi21,0x24);               
  823.                         if(key_can == 4)        //减          
  824.                                 set_ds1302time(0,&shi21,0x24);               
  825.                 }
  826.                 if(menu_2 == 2)                  //设
  827.                 {
  828.                         if(key_can == 3)        //加
  829.                                 set_ds1302time(1,&fen21,0x60);               
  830.                         if(key_can == 4)        //减          
  831.                                 set_ds1302time(0,&fen21,0x60);               
  832.                 }       
  833. /////////////////////           第22个打铃时间       
  834.                 if(menu_2 == 3)                  //设置打铃分
  835.                 {
  836.                         if(key_can == 3)        //加       
  837.                                 set_ds1302time(1,&shi22,0x24);               
  838.                         if(key_can == 4)        //减          
  839.                                 set_ds1302time(0,&shi22,0x24);               
  840.                 }
  841.                 if(menu_2 == 4)                  //设
  842.                 {
  843.                         if(key_can == 3)        //加
  844.                                 set_ds1302time(1,&fen22,0x60);               
  845.                         if(key_can == 4)        //减          
  846.                                 set_ds1302time(0,&fen22,0x60);               
  847.                 }
  848.                 write_string(1,0,"set21 00:00    ");                       
  849.                 write_string(2,0,"set22 00:00    ");       
  850.                 write_sfm2_ds1302(1,6,shi21);           //显示时
  851.                 write_sfm2_ds1302(1,9,fen21);           //显示分
  852.                 write_sfm2_ds1302(2,6,shi22);           //显示时
  853.                 write_sfm2_ds1302(2,9,fen22);           //显示分
  854.                 switch(menu_2)           // 光标显示
  855.                 {
  856.                         case 1:  write_guanbiao(1,6,1);  break;
  857.                         case 2:  write_guanbiao(1,9,1);  break;
  858.                         case 3:  write_guanbiao(2,6,1);  break;
  859.                         case 4:  write_guanbiao(2,9,1);  break;
  860.                 }       
  861.                
  862.         }       
  863. /***************设23 24 打铃时间*********************/
  864.         if(menu_1 == 13)
  865.         {       
  866. /////////////////////           第23个打铃时间
  867.                 if(menu_2 == 1)                  //设置打铃时
  868.                 {
  869.                         if(key_can == 3)        //加       
  870.                                 set_ds1302time(1,&shi23,0x24);               
  871.                         if(key_can == 4)        //减          
  872.                                 set_ds1302time(0,&shi23,0x24);               
  873.                 }
  874.                 if(menu_2 == 2)                  //设
  875.                 {
  876.                         if(key_can == 3)        //加
  877.                                 set_ds1302time(1,&fen23,0x60);               
  878.                         if(key_can == 4)        //减          
  879.                                 set_ds1302time(0,&fen23,0x60);               
  880.                 }       
  881. /////////////////////           第24个打铃时间       
  882.                 if(menu_2 == 3)                  //设置打铃分
  883.                 {
  884.                         if(key_can == 3)        //加       
  885.                                 set_ds1302time(1,&shi24,0x24);               
  886.                         if(key_can == 4)        //减          
  887.                                 set_ds1302time(0,&shi24,0x24);               
  888.                 }
  889.                 if(menu_2 == 4)                  //设
  890.                 {
  891.                         if(key_can == 3)        //加
  892.                                 set_ds1302time(1,&fen24,0x60);               
  893.                         if(key_can == 4)        //减          
  894.                                 set_ds1302time(0,&fen24,0x60);               
  895.                 }
  896.                 write_string(1,0,"set23 00:00    ");                       
  897.                 write_string(2,0,"set24 00:00    ");       
  898.                 write_sfm2_ds1302(1,6,shi23);           //显示时
  899.                 write_sfm2_ds1302(1,9,fen23);           //显示分
  900.                 write_sfm2_ds1302(2,6,shi24);           //显示时
  901.                 write_sfm2_ds1302(2,9,fen24);           //显示分
  902.                 switch(menu_2)           // 光标显示
  903.                 {
  904.                         case 1:  write_guanbiao(1,6,1);  break;
  905.                         case 2:  write_guanbiao(1,9,1);  break;
  906.                         case 3:  write_guanbiao(2,6,1);  break;
  907.                         case 4:  write_guanbiao(2,9,1);  break;
  908.                 }       
  909.                
  910.         }

  911. /***************设 25 26打铃时间*********************/
  912.         if(menu_1 == 14)
  913.         {       
  914. /////////////////////           第25个打铃时间
  915.                 if(menu_2 == 1)                  //设置打铃时
  916.                 {
  917.                         if(key_can == 3)        //加       
  918.                                 set_ds1302time(1,&shi25,0x24);               
  919.                         if(key_can == 4)        //减          
  920.                                 set_ds1302time(0,&shi25,0x24);               
  921.                 }
  922.                 if(menu_2 == 2)                  //设
  923.                 {
  924.                         if(key_can == 3)        //加
  925.                                 set_ds1302time(1,&fen25,0x60);               
  926.                         if(key_can == 4)        //减          
  927.                                 set_ds1302time(0,&fen25,0x60);               
  928.                 }       
  929. /////////////////////           第26个打铃时间       
  930.                 if(menu_2 == 3)                  //设置打铃分
  931.                 {
  932.                         if(key_can == 3)        //加       
  933.                                 set_ds1302time(1,&shi26,0x24);               
  934.                         if(key_can == 4)        //减          
  935.                                 set_ds1302time(0,&shi26,0x24);               
  936.                 }
  937.                 if(menu_2 == 4)                  //设
  938.                 {
  939.                         if(key_can == 3)        //加
  940.                                 set_ds1302time(1,&fen26,0x60);               
  941.                         if(key_can == 4)        //减          
  942.                                 set_ds1302time(0,&fen26,0x60);               
  943.                 }

  944.                 write_string(1,0,"set25 00:00    ");                       
  945.                 write_string(2,0,"set26 00:00    ");       
  946.                 write_sfm2_ds1302(1,6,shi25);           //显示时
  947.                 write_sfm2_ds1302(1,9,fen25);           //显示分
  948.                 write_sfm2_ds1302(2,6,shi26);           //显示时
  949.                 write_sfm2_ds1302(2,9,fen26);           //显示分
  950.                 switch(menu_2)           // 光标显示
  951.                 {
  952.                         case 1:  write_guanbiao(1,6,1);  break;
  953.                         case 2:  write_guanbiao(1,9,1);  break;
  954.                         case 3:  write_guanbiao(2,6,1);  break;
  955.                         case 4:  write_guanbiao(2,9,1);  break;
  956.                 }       
  957.                
  958.         }
  959.        
  960.                                
  961. }

  962. /*****************主函数********************/
  963. void main()
  964. {       
  965.         beep = 0;                                    //开机蜂鸣器叫一声
  966.         delay_1ms(200);
  967.         P0 = P1 = P2 = P3 = 0xff;   //初始化IO口
  968.         init_time0();                 //初始化定时器
  969.         init_ds1302();                 //ds1302初始化
  970.         init_1602();                 //lcd1602初始化
  971.         init_1602_dis_csf(); //lcd1602初始化显示
  972.         while(1)
  973.         {
  974.                 key();                         //按键程序
  975.                 if(key_can < 10)
  976.                 {
  977.                         key_with();       
  978.                         if(menu_1 == 0)                //手动打铃
  979.                         {
  980.                                 if(key_can == 4)               
  981.                                         flag_beep_en = 1;               
  982.                         }
  983.                 }
  984.                
  985.                 if(flag_200ms == 1)
  986.                 {       
  987.                         flag_200ms = 0;
  988.                         if(menu_1 == 0)
  989.                         {
  990.                                 read_time();                  //读时间
  991.                                 init_1602_ds1302();   //显示时钟
  992.                         }
  993.                 }
  994.                 menu_dis();           //闹钟报警函数
  995.                 delay_1ms(1);
  996.         }
  997. }

  998. void time0() interrupt 1
  999. {                         
  1000.         static uchar value;
  1001.         TH0 = 0X3C;
  1002.         TL0 = 0XB0;           //50ms
  1003.         value ++;          
  1004.         if((value % 2) == 0)         //100ms  
  1005.                 flag_100ms = 1;         
  1006.         if(value >= 6)                         //200ms
  1007.         {
  1008.                 value = 0;
  1009.                 flag_200ms = 1;
  1010.         }
  1011. }
复制代码

所有资料51hei提供下载:
程序.rar (65.99 KB, 下载次数: 68)


捕获.PNG (89.79 KB, 下载次数: 101)

捕获.PNG

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:59572 发表于 2020-2-13 13:37 | 只看该作者
非常感谢!学习一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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