? 導讀:《藍橋杯單片機組》專欄文章是博主2018年參加藍橋杯的單片機組比賽所做的學習筆記,在當年的比賽中,博主是獲得了省賽一等獎,國賽二等獎的成績。成績雖談不上最好,但至少問心無愧。如今2021年回頭再看該系列文章,仍然感觸頗多。為了能更好地幫助到單片機初學者,今年特地抽出時間對當年的文章邏輯和結構進行重構,以達到初學者快速上手的目的。需要指出的是,由于本人水平有限,如有錯誤還請讀者指出,非常感謝。那么,接下來讓我們一起開始愉快的學習吧。
一、硬件電路基礎知識
工欲善其事必先利其器,閱讀電路原理圖是單片機開發(fā)的基礎,正式開始寫程序之前,我們先來補充一下藍橋單片機組這個原理圖的基礎知識吧。硬件電路總體來說并不太難,這里僅拿74HC573和ULN2003組成的電路做重點介紹。
1.1、74HC573 電路
藍橋的這塊板子主要靠74HC573 電路和74HC138撐起外設的門面,74HC138數(shù)電常講(詳情看這里),這里不再重復。74HC573可能有點陌生,其實也沒啥,記住一點它是個鎖存器,存狀態(tài)的器件就行了。
非得深入了解的話,可以看看這里,了解完之后對付這個比賽也完全夠用了。
如果程序中使用完573后,記得及時的禁止使能!在程序中,可以這樣寫:
注:看到后面會發(fā)現(xiàn)這樣寫不太好,因為容易影響IO的其他位,這里僅僅為了方便入門!
P2 = P2 & 0x1F;
1.2、ULN2003 電路
這個可得好好說說,感覺挺好使的,其內部電路示意圖如下所示。
主要記住幾個信息:
- 特點①、它是個驅動芯片,可以驅動諸如繼電器和電機此類感性負載!
- 特點②、輸出端可達500mA/50V.
注:感性負載的緣故,輸出端具有的二極管學名續(xù)流二極管。
ULN2003的9腳是COM口,為內部7個續(xù)流二極管負極的公共端,各二極管的正極分別接各達林頓管的集電極。
用于感性負載時,該腳接負載電源正極,實現(xiàn)續(xù)流作用。如果該腳接地,實際上就是達林頓管的集電極對地接通。所以最好接上VCC!
注:達林頓管是兩個三極管接在一起,極性只認前面的三極管
- 特點③、ULN2003是一個非門電路!
若要深入了解ULN2003的具體參數(shù)信息,可以看這里,但是還是那句話,上面介紹的足矣應付這個比賽。
1.3、了解IO控制原理 - 以驅動蜂鳴器為例
干說的話,有點不直觀,先來看看怎么驅動蜂鳴器吧。板載蜂鳴器為有源蜂鳴器,只要兩端有壓差就會響!板載電路原理圖如下所示:
通過電路圖,不難看出,也就是說我們只需要控制 N_BUZZ
是低電平就OK了,那么再順藤摸瓜就可以找到N_BUZZ
是連接到那個IO引腳。
聽起來那豈不是so easy的事么,確實如此...
繼續(xù)往下走咯~
順藤摸瓜的原理圖見上。
再提醒一下 ULN2003 驅動芯片是個非門。
故順藤摸瓜可得:想要OUT7=0
,那么只能IN7=1
了;IN7對應到鎖存器573,不改變狀態(tài),再對應到IO口就是P06了,也就是我們讓 P0^6=1
, 這時候蜂鳴器就會響了。
確實是這樣的,但是別忘了573上面的LE,是需要使能的。也就是Y5C=1
開啟使能,再根據(jù)上面的思路,順藤摸瓜就來到了74HC02這個或非門
WR是J13上的,當我們是IO編程的時候,J13的2、3腳是相連的。
關于IO編程這個概念,后面會繼續(xù)深入的。
J13是個3腳排針,它的3腳連接的是GND。那么2、3腳是相連,也即是說WR是接地的。
74HC02同時還是個非門,想要Y5C=1
,那么Y5=0
即可,Y5又是38譯碼器的輸出,Y5等于0就是38譯碼器選中對應的引腳,因為它是低電平輸出(數(shù)電有講)。
也即是讓C/B/A=1/0/1
,C/B/A
又分別對應P2口的P27/P26/P25
,如下圖所示。
那么一切就理清楚了,若想驅動有源蜂鳴器,只需要讓P2 = (P2&0x1F|0xA0)
即可。
二、實驗寫代碼
代碼如下
#include <stc15.h>
sbit Buzz=P0^6;
void main()
{
P2 = ((P2&0x1F)|0xA0);
Buzz = 1;
P2 = P2 & 0x1F;
while(1);
}
關于繼電器,它和蜂鳴器一樣都是Y5C所在寄存器使能控制,只需改變相應的IO口,就可以實現(xiàn)控制繼電器,直接上代碼。
#include <stc15.h>
sbit Buzz = P0^6;
sbit Relay = P0^4;
void main()
{
P2 = ((P2&0x1F)|0xA0); //使能573
Buzz = 0; //關閉蜂鳴器
Relay = 0; //關閉繼電器
P2 = P2 & 0x1F; //禁止573
while(1);
}
LED燈不過是換成了Y4C,對應選中Y4就可以操作LED了,上代碼。
#include <stc15.h>
sbit Buzz = P0^6;
sbit Relay = P0^4;
void main()
{
P2 = ((P2&0x1F)|0xA0); //使能573
Buzz = 0; //關閉蜂鳴器
Relay = 0; //關閉繼電器
P2 = P2 & 0x1F; //禁止573
P2 = ((P2&0x1F)|0x80);
P0 = 0x00; //點亮所有LED
P2 = P2 & 0x1F;
while(1);
}
三、總結
后期當不使用 LED、繼電器和蜂鳴器 的時候,記得直接關閉,亂響的話很容易影響心情的?。èq(╯^╰)╮)
關閉代碼模板如下:
void CloseFucker()
{
P2 = (P2 & 0x1F) | 0x80;//關閉LED
P0 = 0xFF;
P2 = 0x00;
P2 = (P2 & 0x1F) | 0xA0;//關閉蜂鳴器繼電器
P0 = P0 & 0xAF;
P2 = 0x00;
}
小結:本篇文章從藍橋單片機板子的硬件電路入手,詳細介紹了74HC573和ULN2003這兩個不那么熟悉的器件電路功能及作用。接著以驅動蜂鳴器為例,介紹了單片機IO的控制方式。最后舉一反三,介紹了單片機IO控制LED和繼電器的方式。
希望大家多多支持我的原創(chuàng)文章。如有錯誤,請大家及時指正,非常感謝。