hsj2801654252 发表于 2019-8-22 12:20:10

大神们,帮帮忙呀

数码管计数0-59,计数到59的时候,蜂鸣器鸣叫一次,可以利用按键进行调节
第一次按下k1数码管停止计时,按下k2个位加,按下k3,个位减,第二次按下k1,按下k2十位加,按下k3十位减,第三次按下k1,从定时的数字继续向下走。
这个应该怎么做鸭
我自己做的有很大的问题,麻烦各位大神教教我
刚刚开始自己学单片机
只学到动态数码管


#include "reg52.h"
#include "intrins.h"   
typedef unsigned char u8;
typedef unsigned int u16;

u8 code smgduan={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u8 code white={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

u8i,n,j;

sbit LSA=P2^2;                                                                          
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;


void delay(u16 i)
{
   while(i--);
}

/*
void keypros()
{
   if(k1==0)
   {
             delay(1000);
          if(k1==0)
          {
       



          }
   }
   
}
*/











void DigDisplay()
{
   i++;
   delay(50000);
   P0=smgduan;
   if(i==10)
    i=0;
}

void DigDisplay_1()
{
P0=white;
if(i==9)
   delay(5000);
   j++;
   P0=white;
if(j==6)
   j=0;


}









void main()
{       
        while(1)
        {
          for(n=0;n<2;n++)
          {       
             switch(n)
               {
                   case(0):
                   LSA=0,LSB=0,LSC=0;
                   DigDisplay();
                   break;
                   case(1):
                   LSA=1,LSB=0,LSC=0;
                   DigDisplay_1();
                   break;
               }
               delay(100);
          }
          
        }               
}

hsj2801654252 发表于 2019-8-22 12:20:38

:'(:'(:'(:'(:'(:'(

神奇 发表于 2019-8-22 13:31:18

设置一个标志,比如 mode,mode=0时正常走时,每按K1一下就令 mode=(mode+1)%3,那么它就会在0,1,2范围内不断变换了。mode=1时,K2、K3只能改变个位数,mode=2时K2、K3只能改变十位数就行了。

hsj2801654252 发表于 2019-8-22 19:49:25

神奇 发表于 2019-8-22 13:31
设置一个标志,比如 mode,mode=0时正常走时,每按K1一下就令 mode=(mode+1)%3,那么它就会在0,1,2范围内 ...

请问我这个0~59的循环有那些问题?:P

神奇 发表于 2019-8-22 23:49:30

你的按键函数还没写好,定时器中断也没有,哪里来的0-59循环 ...
页: [1]
查看完整版本: 大神们,帮帮忙呀