找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机电子时钟修改时间的按键没有作用?哪位大佬帮忙看一下?

[复制链接]
跳转到指定楼层
楼主
修改时间的按键没有作用 哪位大佬帮忙看一下?


单片机源程序如下:

  1. #include <reg51.h>
  2. #include "lcd1602.h"
  3. #include "ds1302.h"
  4. #include "ds18b20.h"
  5. #include "delay.h"


  6. #define uint unsigned int
  7. #define uchar unsigned char

  8. void play1();
  9. void play2();

  10. sbit key1=P3^3;
  11. sbit key2=P3^4;
  12. sbit key3=P3^5;
  13. sbit key4=P3^6;
  14. sbit key5=P2^4;

  15. sbit LED=P1^4;
  16. sbit LED1=P1^3;
  17. sbit Beef=P2^0;

  18. uchar sec;
  19. unsigned int Temp;
  20. unsigned int TMP;
  21. unsigned char flag=0;
  22. unsigned char flag1=0;
  23. unsigned char num,count,key4num,key5num;

  24. unsigned char shi=21,fen=55,miao=0;




  25. uchar code tone1[]={
  26. 115,115,102,115,86,91,115,115,102,115,77,86,
  27. 115,115,57,68,86,91,102,61,61,68,86,77,86,0};


  28. uchar code beat1[]={
  29. 3,1,4,4,4,8,3,1,4,4,4,8,
  30. 3,1,4,4,4,4,4,3,1,4,4,4,8,0
  31. };


  32. uchar code tone2[]={
  33. 77,91,77,57,68,57,77,77,115,102,91,102,115,102,
  34. 77,91,11,57,61,68,57,77,77,102,91,86,121,115,0};


  35. uchar code beat2[]={
  36. 2,1,1,4,2,2,4,2,1,1,2,1,1,8,
  37. 2,1,1,2,2,2,2,4,2,1,1,2,2,8,0
  38. };

  39. void play1()
  40. {
  41. uint i=0,j,k;
  42. while(beat1[i]!=0||tone1[i]!=0)       
  43. {
  44. for(j=0;j<beat1[i]*50;j++)
  45. {
  46.    Beef=~Beef;
  47.    for(k=0;k<tone1[i];k++);
  48. }
  49.      Delay_1ms();
  50.          i++;
  51. }
  52. }

  53.         void play2()
  54. {
  55. uint i=0,j,k;
  56. while(beat2[i]!=0||tone2[i]!=0)       
  57. {
  58. for(j=0;j<beat2[i]*50;j++)
  59. {
  60.    Beef=~Beef;
  61.    for(k=0;k<tone2[i];k++);
  62. }
  63.      Delay_1ms();
  64.          i++;
  65. }
  66. }

  67. void display_temp();

  68. void delay(uint n)  
  69. {
  70.     uchar  a,b,c,d;
  71. for(d=n;d>0;d--)
  72.     for(c=1;c>0;c--)
  73.         for(b=222;b>0;b--)
  74.             for(a=12;a>0;a--);
  75. }

  76. void display_time()
  77. {
  78.            LCD1602_num(2,7,BCD_hex(TIME[0]) );//秒         
  79.         LCD1602_char(2,6,':');
  80.         LCD1602_num(2,4,BCD_hex(TIME[1])); //分
  81.         LCD1602_char(2,3,':');
  82.         LCD1602_num(2,1,BCD_hex(TIME[2])); //时

  83.         LCD1602_num(1,7,BCD_hex(TIME[3]) );//日          
  84.         LCD1602_char(1,6,'/');
  85.         LCD1602_num(1,4,BCD_hex(TIME[4])); //月
  86.         LCD1602_char(1,3,'/');
  87.         LCD1602_num(1,1,BCD_hex(TIME[6])); //年
  88.     LCD1602_num(1,12,BCD_hex(TIME[5]-1));//周
  89. }
  90. void display_temp(unsigned int dat)
  91. {
  92.            LCD1602_string(1,10,"W:");
  93.         LCD1602_char(1,15,'0'+sec/10%10);
  94.         LCD1602_char(1,16,'0'+sec%10);
  95.         LCD1602_char(2,10,dat/100%10+'0');
  96.         LCD1602_char(2,11,dat/10%10+'0');
  97.         LCD1602_char(2,12,'.');
  98.         LCD1602_char(2,13,dat%10+'0');
  99.         LCD1602_char(2,14,'C');
  100. }
  101. void Time0_init()
  102. {
  103. TMOD=0x01; //定时器0工作在模式1,
  104. TH0=(65536-50000)/256; //高8位=60
  105. TL0=(65536-50000)%256; //低8位
  106. TR0=1; //开定时器0
  107. ET0=1; //使能定时器0中断
  108. EA=1; //开总中断
  109. }

  110. void display_nz()
  111. {
  112.           LCD1602_num(2,7,miao);//秒         
  113.         LCD1602_char(2,6,':');
  114.         LCD1602_num(2,4,fen); //分
  115.         LCD1602_char(2,3,':');
  116.         LCD1602_num(2,1,shi); //时
  117. }


  118.        
  119. void main(void)
  120. {
  121.         LCD1602_init();   //初始化
  122. //        Ds1302InitTime();
  123.         Init_DS18B20();//初始化ds1820
  124.         Ds1302ReadTime();
  125.         Readtemp();
  126.          sec=60;
  127.    
  128.         while(1)
  129.         {
  130.                              if(BCD_hex(TIME[1])==fen&&BCD_hex(TIME[2])==shi)
  131.                 {
  132.                   LED1=0;
  133.                   Beef=0;

  134.                 }
  135.                 else
  136.                 {
  137.                 LED1=1;
  138.                 Beef=1;
  139.                 }
  140.                 if(Temp>260&&Temp<300)
  141.                 {
  142.                   LED=0;

  143.                 }
  144.                 else
  145.                 {
  146.                 LED=1;
  147.                 }


  148. if(key5==0)
  149.     {
  150.      Delay_1ms();
  151.         if(key5==0)
  152.         {
  153.           key5num++;
  154.         if(key5num>=4)
  155.         {
  156.         key5num=0;
  157.         }
  158.         }         
  159.         }


  160.         if(key5num==1)
  161.         {
  162.         delay(100) ;
  163.            sec--;
  164.         }
  165.         if(key5num==2)
  166.         {
  167.          delay(30);
  168.     play1();
  169.         delay(3000);       
  170.         }
  171.         if(key5num==3)
  172.         {
  173.          delay(30);
  174.     play2();
  175.         delay(3000);       
  176.         }

  177.        
  178.                


  179.                 if(flag==0)          //不修改时间就读取时间显示时间
  180.                 {
  181.                         Ds1302ReadTime(); ;          //读取时间
  182.                         display_time();         //显示时间
  183.                 }
  184.                 else         //修改时间
  185.                 {
  186.                         if(key2==0)
  187.                         {
  188.                            Delay_1ms();
  189.                            if(key2==0 )
  190.                            {
  191.                                 fen++;
  192.                                 if(fen==60)
  193.                                  fen=0;
  194.                                  
  195.                            }
  196.                         }
  197.                         if(key3==0)
  198.                         {
  199.                            Delay_1ms();
  200.                            if(key3==0)
  201.                            {
  202.                                  fen--;
  203.                                  if(fen==-1)
  204.                                  fen=59;
  205.                                
  206.                            }
  207.                         }
  208. //                   display_time();
  209.                    display_nz();                   //显示修改当前时间
  210.                 }

  211.                 Temp=Readtemp();//读取温度
  212.                 display_temp(Temp);        //显示温度

  213. if(key4==0)
  214.     {
  215.      Delay_1ms();
  216.         if(key4==0)
  217.         {
  218.           key4num++;
  219.         if(key4num>=6)
  220.         {
  221.         key4num=0;
  222.         }
  223.         }         
  224.         }


  225.         if(key4num==1)
  226.         {
  227.          Delay_1ms();
  228.                 if(key2==0)
  229.         {
  230.                  Delay_1ms();
  231.              TMP=BCD_hex(TIME[1]);
  232.                  TMP++;       
  233.                  hex_BCD(TIME[1]);
  234.         }
  235.                 if(key3==0)
  236.         {
  237.          Delay_1ms();
  238.               TMP=BCD_hex(TIME[1]);
  239.                  TMP--;       
  240.                  hex_BCD(TIME[1]);
  241.         }  
  242.         }
  243.        
  244.        
  245.         if(key4num==2)
  246.         {
  247.          Delay_1ms();
  248.                 if(key2==0)
  249.         {
  250.                  Delay_1ms();
  251.                TMP=BCD_hex(TIME[2]);
  252.                    TMP++;       
  253.                  hex_BCD(TIME[2]);
  254.         }  
  255.                 if(key3==0)
  256.         {
  257.                  Delay_1ms();
  258.                TMP=BCD_hex(TIME[2]);
  259.                  TMP--;       
  260.                  hex_BCD(TIME[2]);
  261.         }  
  262.         }
  263.        
  264.        
  265.                 if(key4num==3)
  266.         {
  267.          Delay_1ms();
  268.                 if(key2==0)
  269.         {
  270.                  Delay_1ms();
  271.                TMP=BCD_hex(TIME[3]);
  272.                  TMP++;       
  273.                  hex_BCD(TIME[3]);
  274.         }  
  275.                 if(key3==0)
  276.         {
  277.                  Delay_1ms();
  278.                TMP=BCD_hex(TIME[3]);
  279.                  TMP--;       
  280.                  hex_BCD(TIME[3]);
  281.         }  
  282.         }
  283.        
  284.        
  285.        
  286.                 if(key4num==4)
  287.         {
  288.          Delay_1ms();
  289.                 if(key2==0)
  290.         {
  291.                  Delay_1ms();
  292.                TMP=BCD_hex(TIME[4]);
  293.                  TMP++;       
  294.                  hex_BCD(TIME[4]);
  295.         }  
  296.                 if(key3==0)
  297.         {
  298.                  Delay_1ms();
  299.               TMP=BCD_hex(TIME[4]);
  300.                  TMP--;       
  301.                  hex_BCD(TIME[4]);
  302.         }  
  303.         }

  304.        
  305.                 if(key4num==5)
  306.         {
  307.          Delay_1ms();
  308.                 if(key2==0)
  309.         {
  310.                  Delay_1ms();
  311.                TMP=BCD_hex(TIME[6]);
  312.                  TMP++;       
  313.                  hex_BCD(TIME[6]);
  314.         }  
  315.                 if(key3==0)
  316.         {
  317.                  Delay_1ms();
  318.                TMP=BCD_hex(TIME[6]);
  319.                  TMP--;       
  320.                  hex_BCD(TIME[6]);
  321.         }  
  322.         }
  323.             }


  324.                 if(key1==0)                        //++1s
  325.                 {
  326.                   Delay_1ms();
  327.                            if(key1==0)
  328.                         {
  329.                                 flag=!flag;
  330.                                 Ds1302InitTime();
  331.                         }
  332.                 }
  333.     /*888888888888888888888888888888888888888888*/

  334.                 if(key4==0)                        //++1s
  335.                 {
  336.                   Delay_1ms();
  337.                            if(key4==0)
  338.                         {
  339.                                 flag1=!flag1;
  340.                         }
  341.                 }

  342.          }

  343.        
  344.            /*888888888888888888888888888888888888888888*/
  345.          
复制代码

所有资料51hei提供下载:
电子时钟.zip (151.06 KB, 下载次数: 8)


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

使用道具 举报

沙发
ID:96682 发表于 2019-4-23 23:48 | 只看该作者
按键与 GND  没有节点
回复

使用道具 举报

板凳
ID:434390 发表于 2019-4-24 08:55 | 只看该作者
你得先测量IO电压,送开按键是否高(是否需要上拉),按下按键是否低(接地是否可靠),在检查寄存器与IO口是否对应
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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