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

1.另一個外部中斷

前面兩講都是圍繞外部中斷0(P3.2的功能)來講解,這里我們也還有一個外部中斷1(P3.3的功能)。P3.3要想實現(xiàn)上一講的功能只需杜邦線接下面的IO端口即可

中斷函數(shù)3

代碼就是把“EX0”改為“EX1”,“IT0”改為“IT1”。

interrupt后面的0要改為2,函數(shù)名我們改為“EXTI1_IRQHandler()”

#include <reg52.h> 
#include <function.h>//詳見第六章第8講

void main()
{  
    IT1 = 1;   //下降沿觸發(fā)模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模塊 
    while(1);
}
 
void EXTI1_IRQHandler() interrupt 2
{
    LED2=!LED2; 
}

再次提醒,杜邦線的一頭接的是P3.3。

至于interrupt后面的數(shù)字為什么要為2,大家先熟悉這張圖了解一下先

中斷函數(shù)4

更多中斷知識的概念參考《手把手教你學51單片機》文檔6.5節(jié)。


2.按鍵觸發(fā)中斷

我們每次要把P3.2和P3.3外部拉低或釋放,都需要拔插杜邦線,這樣太麻煩,我們可以用按鍵來取代這些拔插動作,按鍵按下不放就相當于一直拉低,跟杜邦線一直插著GND一個效果,松開按鍵就跟杜邦線沒插GND一樣。

可是P3.2和P3.3沒有直接相連的按鍵,不過沒關系,我們把杜邦線這樣接,讓P3.3和P2.3一起相連,K4的按鍵動作可以使P2.3和P3.3同步電平

中斷函數(shù)5

我們要用到按鍵,所以別忘了初始化按鍵模塊。

#include <reg52.h> 
#include <function.h>//詳見第六章第8講

void main()
{  
    IT1 = 1;   //下降沿觸發(fā)模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模塊 
    KEY_Init();//初始化按鍵功能模塊
    while(1);
}
 
void EXTI1_IRQHandler() interrupt 2
{
    LED2=!LED2; 
}


3.去抖動

按鍵似乎沒能很靈敏的按一下松手LED2就跳變一次亮或滅的效果,那是因為我們沒有延時消抖,一個按鍵動作就存在好幾個下降沿了,導致中斷函數(shù)被執(zhí)行了幾遍。

在中斷函數(shù)中加延時就可以消除這種失靈現(xiàn)象了,不過在以后編程里不能在中斷函數(shù)里使用延時,這樣會使程序的執(zhí)行效率大打折扣,我們本次只是作為測試代碼才在中斷函數(shù)里用延時。

#include <reg52.h> 
#include <function.h>//詳見第六章第8講

void main()
{  
    IT1 = 1;   //下降沿觸發(fā)模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模塊 
    KEY_Init();//初始化按鍵功能模塊
    while(1);
}
 
//請把P3.3和P2.3用杜邦線連接起來
void EXTI1_IRQHandler() interrupt 2
{
    delay_ms(50);//去抖動
    if(INT1==0)  //P3.3是否還處于低電平的穩(wěn)定接觸狀態(tài),INT1已在“#include <reg52.h>”中定義好了
    {
        LED2=!LED2; 
    } 
}

這樣就可以達到按下松手一次,LED2的狀態(tài)只能取反一次的靈敏效果。如果我們一直按著不放,LED2也只是跳變一次而已,有點像不支持連按功能,這是因為“IT1=1;”的原因。

要是改為“IT1=0;”,這樣K4按鍵就有種支持連按的感覺從而LED2就會不停閃爍了。按鍵按下一直不放就會不停地進入中斷函數(shù)。

#include <reg52.h> 
#include <function.h>//詳見第六章第8講

void main()
{  
    IT1 = 0;   //低電平狀態(tài)下觸發(fā)
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模塊 
    KEY_Init();//初始化按鍵功能模塊
    while(1);
}
 
//請把P3.3和P2.3用杜邦線連接起來
void EXTI1_IRQHandler() interrupt 2
{
    delay_ms(50);//去抖動
    if(INT1==0)  //P3.3是否還處于低電平的穩(wěn)定接觸狀態(tài)
    {
        LED2=!LED2; 
    } 
}
點贊(0)

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

一點編程也不會寫的:零基礎C語言學練課程

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

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

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

信息學奧賽或C++選手的 必學C++課程

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

手把手講解近五年真題的藍橋杯輔導課程

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