目錄
一 前言
二 繼電器和蜂鳴器實物
三 分析部分
(1)bsp_init.c
(2)蜂鳴器和繼電器原理圖
(3)ULN2003
(4)他們倆所連接的鎖存器
四 代碼
在這里要特別說一點!!!
一 前言
本章會介紹一些藍橋杯中 考的不是那么頻繁的知識點,但是最好還是要學一學。后續會寫一些關于pwm、NE555、串口等,國賽需要的超聲波和一些比較難的,后續再寫相關博客。
二 繼電器和蜂鳴器實物
看上面這張圖,繼電器和蜂鳴器在官方所提供的右側,畫黃色圈的這部分,一定要把短接帽插在右側,這樣他們倆才能正常工作
關于他們倆的原理圖,請看到第三部分,我會一步步進行分析,那么我們想要實現讓繼電器打開同時蜂鳴器叫,那么我們該如何操作呢,請看下面的分析的部分
三 分析部分
(1)bsp_init.c
在曾經我們寫過的初始化函數當中,我們關閉了蜂鳴器和繼電器,所以我們本次的主角就集中在了曾經最初學過的地方
void Cls_Peripheral(void)
{P0 = 0xFF; P2 = P2 & 0x1F | 0x80; //0x80??í¨Y4£???êy?Yí?′?1y襣???LED1?±?P2 &= 0x1F; //????′??÷1?±?P0 = 0;P2 = P2 & 0x1F | 0xA0; //0xA0??í¨Y5£???íaéè′|àíμ?P2 &= 0x1F; //????′??÷1?±? }
注意力集中在了0xA0這三行代碼上,而真正決定著蜂鳴器和繼電器是否開始工作,我們就應該把P0賦值成某一個數。
(2)蜂鳴器和繼電器原理圖
?要給buzz和RELAY低電平,才能讓蜂鳴器和繼電器工作
(3)ULN2003
?關于鎖存器上鏈接的ULN2003,這上面是對應的原理圖,可以發現內部說白了就是八個取反器,那么也就是說,在M74HC573M1R鎖存器邊上接了一個取反器。
(4)他們倆所連接的鎖存器
?首先想要讓鎖存器工作的,就必須要打開Y5C(這塊不懂的,請看第一篇文章),其次,觀察RELAY和BUZZ,他們所對應的位是P04和P06,如果我想讓RELAY和BUZZ輸出低電平0,那么15和13部分就得是高電平1,所對應的P04和P06就是高電平1,其他是零,P07到P00,0101 0000那么我就需要將P0賦值成0x50,才可以將對應的繼電器和蜂鳴器打開。
四 代碼
現在我們已經將最開始的bsp_init.c中的代碼改成了如下代碼,同時為了保證其他地方不改變,我們要寫成P0或上0x50。
P0 |= 0x50;P2 = P2 & 0x1F | 0xA0; P2 &= 0x1F;
在這里要特別說一點!!!
由于數碼管和燈都用到了P0這個位置,所以我們不能直接對P0處進行賦值,最好在mian.c上引入全局變量,unsigned char beep_relay_flag= 0;
我們只需要對全局變量beep_relay_flag賦值即可,不會影響到P0本身~
?代碼如下:
switch(Key_Down)
{case 11:beep_relay_flag |= 0x50;P0 = beep_relay_flag;P2 = P2 & 0X1F | 0xA0;P2 &= 0X1F; break;case 10:beep_relay_flag &= (~0x50);P0 = beep_relay_flag;P2 = P2 & 0X1F | 0xA0;P2 &= 0X1F; break;
}
這是在模板的main.c中的Key_Proc(void)函數中添加的代碼,實現的是按下按鍵11打開蜂鳴器和繼電器,按下按鍵10關閉蜂鳴器和繼電器,同時,記得在上面添加全局變量unsigned char?beep_relay_flag哦。
為什么這里要寫成beep_relay_flag &= (~0x50);?
保持其他位置不變,不影響其他設備,如果直接賦值為零,會破壞其他設備的狀態,影響正常運行