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

1.延時函數(shù)退出舞臺

有了上一講的理論講解,代碼的實現(xiàn)就比較簡單了,實驗現(xiàn)象就是高6位的6盞燈不停流水,我們用K4按鍵控制LED2的亮滅,并且途中并沒有影響到6盞流水燈的運行。

我們知道以前流水燈是需要延時才能看得到流水現(xiàn)象的,那么現(xiàn)在再用延時函數(shù)的話,按鍵就沒有意義了。比如流水燈的跳變需要間隔50ms才看得出是一個燈一個燈的亮,如果在死循環(huán)里使用“delay_ms(50);”,那么不支持連按代碼里的times要加1都需要過了50ms才行,這樣顯然行不通,我們只能從流水燈的代碼去思考了。

其實一次死循環(huán)里不一定就要求燈實現(xiàn)跳變,可以等到過了很多次死循環(huán)再去執(zhí)行燈的跳變的,所以我們在死循環(huán)里讓變量x每次加1,死循環(huán)了3000次之后再執(zhí)行燈的跳變,這樣不就能實現(xiàn)間隔50ms左右燈才跳變了嗎,同時又不影響按鍵代碼的times,也就是一次死循環(huán)所花費的時間被大大縮短了,掃描按鍵IO端口的機(jī)會更多了。那么延時函數(shù)在我們寫一些高效率的代碼的時候就很少去使用了,畢竟這樣不僅影響執(zhí)行效率,還會使某些功能模塊失去作用。

 

2.流水燈代碼新書寫模式

#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 main()
{  
    unsigned char key_up=1;//定義記錄按鍵狀態(tài)值的變量,初始值為1避免程序一開始就進(jìn)入了“if(key_up==0)”
    unsigned char i=0; 
    unsigned int times=0;  //用來記錄進(jìn)入過按鍵判斷語句的次數(shù) 
    unsigned int x;        //作為記錄死循環(huán)的次數(shù)以達(dá)到間隔切換燈的跳變
    ADDR3 = 1;//使能三八譯碼器
    ENLED = 0;// 
  
    ADDR2 = 1;//**************************
    ADDR1 = 1;//讓三八譯碼器的IO6輸出低電平
    ADDR0 = 0;//**************************
    P2 = 0xF7;//讓K4能具備有被拉低的條件先
  
    while(1)
    {     
        if(key_up==0)
        {      
            times++;  
            if(times>=1000&&KEY4==1)
            {
                times=0;
                LED2=!LED2;                   
            }                       
        }
        key_up=KEY4;
    
        //以下是流水燈任務(wù)部分
        x++;
        if(x>=3000)//程序的運行已經(jīng)過去50ms左右了
        {
            x=0;
            P0=~(0x04<<i)&(0xFE|LED2);//既不影響高6位,又可以使LED2隨意亮滅
            i++;
            if(i>=6)i=0; 
        } 
    }
}

還是不明白“P0=~(0x04<<i)&(0xFE|LED2);”的意思大家就一步步用二進(jìn)制地寫出當(dāng)i等于0時“~(0x04<<i)”是等于多少,得到的值再跟“(0xFE|LED2)”相與運算看看當(dāng)LED2為0或者1時,“~(0x04<<i)&(0xFE|LED2)”的最終值是多少。

然后當(dāng)i等于1時“~(0x04<<i)&(0xFE|LED2)”又是等于多少。

我們這個例程代碼是對比了用“while(KEY4==0);”的時候是多么的不足,這樣吧,我們把上面例程的這部分代碼

if(key_up==0)
{      
    times++;  
    if(times>=1000&&KEY4==1)
    {
        times=0;
        LED2=!LED2;                   
    }                       
}
key_up=KEY4;

改為以前初步學(xué)習(xí)的代碼如下

if(KEY4==0)
{
    delay_ms(10);//等待抖動過去
    if(KEY4==0) //二次判斷
    {
        LED2=!LED2;
        while(KEY4==0);
    }
}

延時函數(shù)大家再自己找以前的代碼去添加,實驗現(xiàn)象就是按鍵動作影響了流水燈的流速,如果按著不放直接導(dǎo)致停止流水。

點贊(0)

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

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

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

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

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

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

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

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

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