前言:
單片機(jī)是一種我們常見(jiàn)的開(kāi)發(fā)板,我們經(jīng)常會(huì)在一些項(xiàng)目中使用到它。而今天我們要介紹的是C51單片機(jī),下面來(lái)介紹一下今天的”主角“:STC89C52RC40I-LQFP44單片機(jī)(后面將用到它做一些項(xiàng)目)。
1.了解命名規(guī)則一張圖搞定:
2.學(xué)會(huì)看單片機(jī)電路原理圖
只是一些初中的電路知識(shí)罷了,不用感到害怕!
3.開(kāi)發(fā)環(huán)境安裝:
(1)Keil C51安裝,并搭配好環(huán)境(百度有教程)。
(2)STC-ISP:一款單片機(jī)下載編程燒錄軟件,是針對(duì)STC系列單片機(jī)設(shè)計(jì)。使用如下:
4.入門——點(diǎn)燈
燈為什么會(huì)亮?我們可以這樣思考:你家停電了,燈開(kāi)了也不會(huì)亮。所以燈會(huì)亮就是“有電”,也就是有電流流過(guò)。根據(jù)我們初中學(xué)的知識(shí),電流由高電平流到低電平。把這個(gè)“燈”看作一個(gè)負(fù)載在中間有電流流過(guò),所以也就是相當(dāng)于一邊配高電平,另一邊配的是低電平。我們?cè)俑鶕?jù)單片機(jī)原理圖來(lái)做分析:
很明顯只需要將D5(LED1),D6(LED2),跟D4一樣接地(看單片機(jī)一上電它就會(huì)亮起)即可(配成低電平),同時(shí)根據(jù)芯片圖LED1接的是P3.7引腳,LED2接的是P3.6引腳??梢酝瓿删幊獭4a如下(高電平1,低電平0):
#include "reg52.h"
sbit led1 = P3^7;//根據(jù)原理圖(電路圖),設(shè)備變量led1指向P3組IO口的第7口
sbit led2 = P3^6;//根據(jù)原理圖(電路圖),設(shè)備變量led2指向P3組IO口的第6口
void main()
{
led1 = 0; //根據(jù)電路圖,低電平點(diǎn)亮led
led2 = 0;
while(1);
}
接下來(lái)也可以給燈玩些花樣:
- 燈閃爍
如何實(shí)現(xiàn)燈閃爍?這里給一些思路,結(jié)合上述代碼可以自己去實(shí)現(xiàn):
“燈閃爍”無(wú)非就是亮滅交替。也就是一下子給高電平(燈滅),一下子給低電平(燈亮)。這里很容易想到用延時(shí)函數(shù)。我們可以使用STC-ISP自帶延時(shí)函數(shù)(操作如下圖)。當(dāng)然學(xué)到定時(shí)器后,我們可以自己去定義。
- 按鍵控?zé)?/strong>
傳統(tǒng)按鍵和燈是在同一個(gè)電路中,而單片機(jī)編程按鍵和燈是分開(kāi)的兩個(gè)電路,通過(guò)單片機(jī)作為媒介來(lái)處理數(shù)據(jù),邏輯實(shí)現(xiàn)按鍵控制燈。先來(lái)看一下單片機(jī)原理圖:
看了上述單片機(jī)原理圖,應(yīng)該會(huì)有初步想法:如何證明SW1被按下。很顯然,電路中有個(gè)C3電容相當(dāng)于斷路。所以當(dāng)SW1按下時(shí),KEY1直接接地,表現(xiàn)為低電平(0),當(dāng)SW1沒(méi)有按下時(shí)KEY1 位置通過(guò)上拉電阻到5v表現(xiàn)為高電平(1)。所以我們可以理解下列代碼:
#include "reg52.h"
sbit led1 = P3^7;
sbit key1 = P2^1;
void main()
{
while(1){
if(key1 == 0){
led1=0;
}
}
}
當(dāng)然我們也可以做到SW1開(kāi)燈,SW2關(guān)燈。原理跟上面相似,根據(jù)上面所學(xué)可以自行實(shí)現(xiàn)。(這里注意一下可以采用延時(shí)函數(shù)來(lái)軟件消抖。)
除了以上這些,還可以采用所謂的狀態(tài)位來(lái)控制LED,原理相似。這里提供一下主函數(shù)寫法:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-497064.html
void main()
{
int ledMark = OFF_STATUS; //定義一個(gè)狀態(tài)
led1=1;
//查詢法檢測(cè),是否按下
while(1){
if(key1 == 0){
//按鍵消抖
//感覺(jué)被按下,不知道是抖動(dòng)還是人為,延遲50ms在判斷一次
//軟件消抖
Delay50ms();
if(key1 == 0){
ledMark = ON_STATUS;
}
}
if(key2 == 1){ //KEY2位置和GND接通,表現(xiàn)為低電平,值為0
ledMark = OFF_STATUS;
}
if(ledMark = ON_STATUS){
led1=0;
}
else{
led1=1;
}
}
}
結(jié)語(yǔ):
這次的內(nèi)容就寫到這里了,對(duì)于入門的小伙伴,可以動(dòng)手去嘗試一下。也許剛開(kāi)始你會(huì)遇到一些問(wèn)題,不要著急,也不要慌亂。你可以選擇在下方留言,也可以找百度或?qū)で笏藥椭?。在接下?lái)的博客中,我將持續(xù)更新有關(guān)這個(gè)系列單片機(jī)的上手項(xiàng)目教程。感興趣的可以點(diǎn)一波關(guān)注,讓我們共同進(jìn)步。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-497064.html
到了這里,關(guān)于初識(shí)C51單片機(jī)(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!