两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.前講回顧

在上一講的代碼里如果我們按下按鍵一直不松手,則燈會一直閃爍。這是因為“穩(wěn)定接觸狀態(tài)”一直保持著長時間的低電平,所以程序的二次“if(KEY4==0)”判斷一直滿足條件就會在“LED2=0;”和“LED2=1;”之間來回切換,再加上50ms延時才會保持亮一段時間滅一段時間所體現(xiàn)的LED閃爍。

 

2.支持連按概念

這種按鍵模式就叫做“支持連按”,所謂支持連按即我們使用遙控器放大電視的音量時只需按住“+”鍵不放,屏幕上的音量值在一直累加,松手后就停止累加了,這種就叫做按鍵支持連按功能。

 

3.不支持連按概念

另一種按鍵模式叫做“不支持連按”,例如我們用的電磁爐上的“+”鍵,按下不松手時數(shù)值只加一次就不加了,只有松手后再按才會進行數(shù)值的第二次累加。兩種按鍵模式在單片機開發(fā)中都會經(jīng)常使用。

 

4.不支持連按的分析

我們需要思考的是,即使“穩(wěn)定接觸狀態(tài)”的時間再怎么長,我們只能執(zhí)行一次功能代碼。

那么我們可以猜測,IO端口檢測到按鍵按下然后執(zhí)行完功能程序之后,下一個語句就寫:如果IO端口還是保持著低電平(不松手狀態(tài)),那程序就不往下執(zhí)行了,讓程序在這里“停止”,只有IO端口變成高電平(已松手)才允許“放行”程序去運行。

我們知道按鍵抖動的時間少于10ms,所以在滿足第一次“if(KEY4==0)”判斷的時候只做“delay_ms(10);”的延時左右,過了這段時間就是“穩(wěn)定接觸狀態(tài)”了,于是再去二次判斷“if(KEY4==0)”即可。

 

5.雛形的代碼

#include <reg52.h> 
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
 
sbit LED2  = P0^0;
sbit KEY4  = P2^7;
void delay_ms(unsigned int x)
{
    unsigned int i,j;
    if(x==1000)
    {
        for(i=0;i<19601;i++)//延時1s
        {
            for(j=5;j>0;j--);
        }
    }
    else while(x--)for(j=115;j>0;j--);
}

void main()
{  
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************
    P2 = 0xF7;//讓K4能具備有被拉低的條件先
    
    while(1)
    {    
        if(KEY4==0)
        {
            delay_ms(10);//等待抖動過去
            if(KEY4==0)  //二次判斷
            {
                LED2=!LED2;
                while(KEY4==0);//如果IO端口還是保持著低電平,此時也就是沒有松手,那括號里的條件滿足,程序一直在循環(huán)這條語句,
                               //所以程序停止不往下執(zhí)行了,直到KEY4變?yōu)?,也就是按鍵松手了,while里面的條件不成立才退出這個循環(huán),放行了程序
            }
        }
    }
}

可以發(fā)現(xiàn)無論我們的按下手速有多快或多慢,“ LED2=!LED2;”只能被執(zhí)行一次而已。這樣就像按電磁爐上的按鍵一樣,一次只能切換一回?zé)舻牧翜?,即使不松手也不會出現(xiàn)燈的閃爍,這就是不支持連按的代碼書寫方式,不過這樣的代碼還是存在缺陷,我們下一講再解說。

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)