「 51单片机实践笔记—按键系列」2023年11月24日

要求1: 按键1,可以选择设置的时间; 按键2: 可以开始选择的倒计时

实现思路:

首先,KEY1, KEY2 的小电路 连好单片机的IO;

然后,考虑扫描还是外部中断;

考虑扫描,得考虑抖动; 考虑外部中断,得设置定时器;

以下使用的是中断:(发现SWHTCH 比 if  else  if  好用,不知道为啥?)

void key1_ISR() interrupt 0 //按键1中断服务程序,中断号是0  
{        

 
    if(count < 次数) 
        { //如果按键次数小于次数  
            count++; //按键次数加1  
            if(count == 次数) 
                { 
                    key_count = 0 ;
                } 


            switch (count)
                {
                    case 0:
                        //添加要实现的代码;

                        //添加需要在其他程序段引用的棋标;
                        break;

                    case 1:                

                        //添加要实现的代码;

                        //添加需要在其他程序段引用的棋标;
                        break;

                    c。。。。。

                }
        }       
    KEY1 = 1; //按键消抖,防止误操作,这个可以在主循环里面加消抖逻辑或者使用硬件去抖动。具体做法根据你的硬件实现进行编写。  
}  

void key2_ISR() interrupt 2  
{   
    // 这里开启中断, 就是开启单片机对应的中断位设置,或者棋标什么的;

}

void Timer2_ISR() interrupt 12  
{       
    Timercount++;    //10ms加1次
    if (Timercount == 50) //加到500ms,即0.5S时
        {
            LED= ~LED; //闪灯
            temp++;  //temp 加1
            Timecount =0;  // 5次清零一次,重新累计
        }

}

这个是常用的中断闪灯,外加变量累计

这里有个重点: temp++ ,在主程序中引用判断前,需要关掉中断。

void main()   
{  
    //各种初始化
    
   
       while (1) 
           { // 主循环
           
        if( temp > 大目标)
            {
                temp = 0;
            }
        
        else
            {
        switch (temp)
            {
                case 小目标1:  //IE2 &= ~0x04;  可以在这里关掉
                      //  if (棋标满足)  如果需要的话,加这个IF判断
                            {

                                //  IE2 &= ~0x04; 
                                temp = 0;

                                
                                //功能1

                               //功能2

                              
                            }
                    break;
                

                        case 小目标2:  //TR0=0;  可以在这里关掉,tr0只是举例
                      //  if (棋标满足)  如果需要的话,加这个IF判断
                            {

                                //  IE2 &= ~0x04; 
                                temp = 0;

                                
                                //功能1

                               //功能2

                              
                            }
                    break;

}

}

}

 上面只是打了一个框架   ,具体根据硬件设计和单片机 型号具体更改        
              

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

属鼠的金牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值