蓝桥杯(15F2K61S2)实现1、用定时器1定时间隔1秒数码管静态循环显示0-9。按独立键盘SI开始循环显示,按S2暂停,按S3清零并暂停,按S4暂停并将数值加1。

#include <REGX52.H>
void Timer1Init(void);    
unsigned int fen=0;miao=0,opq=0;
void Delay(unsigned int xms);
void panduan(unsigned char n);
unsigned char code SMG_duanma[16]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x80,0xC6,0xC0,0x86,0x8E};     数组从0-F

void Init_HC138(unsigned char n)           38译码器,控制对应Yn的口 
{
  switch(n)           // 4,5,6,7分别开启的是4个对应的锁存器 
    {
      case 4 : P2=(P2 & 0x1F) | 0x80; break;
        
        case 5 : P2=(P2 & 0x1F) | 0xA0; break;
        
        case 6 : P2=(P2 & 0x1F) | 0xC0; break;
        
        case 7 : P2=(P2 & 0x1F) | 0xE0; break;
    }
}
void showSMG_(unsigned dat)
{
  Init_HC138(6);      //数码管的位置
    P0=0x01;
  Init_HC138(7);      //数码管的内容
    P0=dat;
}
void Delay(unsigned int xms)    
{
    unsigned char i,j;
    while(xms--)
    {
        i = 12;
        j = 169;
        do
        {
            while (--j);
        } while (--i);
    }
}
int anjian()
 { 
   if(P3_0==0)
   { 
     Delay(10);
            if(P3_0==0)
    {
                while(P3_0==0);
                        return 0;

    }
   }
  if(P3_1==0)
   { 
     Delay(10);
            if(P3_1==0)
    {
                while(P3_1==0);
                        return 1;
    }
  }
    if(P3_2==0)
   { 
     Delay(10);
            if(P3_2==0)
    {
                while(P3_2==0);
                        return 2;
    }
  }
    if(P3_3==0)
   { 
     Delay(10);
            if(P3_3==0)
    {
                while(P3_3==0);
                        return 3;
    }
  }
}
void panduan(unsigned char n)
{
  switch(n)
  {
        case 0:EA=1;break;
      case 1:EA=0;break;
      case 2:miao=0;EA=0;break;
      case 3:miao+=1;EA=0;break;
   } 

}  
void main()
{
  Timer1Init();    
    while(1)
    { 
    opq=anjian();
    panduan(opq);
   showSMG_(SMG_duanma[miao]);
   Delay(100);
   }
    }

unsigned int men=0;
void Timer1Init_(void)  interrupt 3
{   
    TR1=0;
    TL1=0;
    TH1=0x4C;
//    TL1 = 0xCD;        //设置定时初值
//      TH1 = 0xD4;        //设置定时初值
    men++;
   if(men>=20)
  { 
     men=0;
     miao++;
     if(miao>9)
      {
          miao=0;
     }
  }
TR1=1;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值