前言
上一節,我們完成了51單片機開發環境的搭建,本節我們正式學習51單片機,程式語言的學習,通常是從第一個&34;開始,而點燈實驗便是單片機學習的開始。
一、基礎知識
1.單片機最小系統
一個最小的單片機系統,需要有單片機、電源電路、晶振電路、復位電路組成,這幾部分存在就可以使單片機正常工作,如果需要頻繁的下載程序,還需增加下載電路。
(1) 單片機
首先,我們先介紹下單片機,
引腳序號名稱說明
以下為I/O埠:
P0:
第一功能:8位,漏極開路的雙向I/O口。用時要加上拉電阻,可驅動8個LS型負載。
第二功能:低8位地址線和8位數據線分時復用;此時為真正的雙向三態口。
P1:
8位準雙向I/O口,可驅動4個LS型TTL負載。
P2:
8位準雙向I/O口,與地址總線(高8位)復用,可驅動4個LS型TTL負載。
P3口:
8位準雙向I/O口,雙功能復用口,可驅動4個LS型TTL負載。
(2) 電源電路
單片機系統需要5V電壓供電,直接輸入的電壓不太穩定性,需要電路穩壓,同時點亮LED2,可以通過LED2的亮滅初步觀察系統運行情況,正常運行情況,LED2常亮。
ESP8266和NRF24L01需要3.3V供電,因此使用ASM1117對VCC進行降壓到3.3V。
(3) 晶振電路
單片機晶振電路如下圖所示,晶振的選擇有兩種:12M或者11.0592M,11.0592串口通信波特率計算會更加精準,而12M的晶振計算延時時間比較方便,本實驗使用開發板採用11.0592M,此外為了增加系統穩定性,防止電感幹擾,需要在晶振兩端增加電容。
(4) 復位電路
單片機有一個RST引腳,只需要將此引腳保持一段時間高電平即可復位STC89C52單片機,當RESET案件按下瞬間,C9還未充電,兩端電壓為0,R4兩端電壓為5V,5V為高電平,作為復位信號經RST引腳送入單片機,對單片機進行復位,同時隨著電源對C9充電,C9電源不斷上升,R4兩端電壓不斷下降,當C9兩端電壓達到5V時,充電結束,此時R4兩端電壓為0,單片機RST引腳變為低電平,單片機進入正常工作裝填,復位完成。
2.LED燈發光原理
LED燈中有電流通過時候,將點亮LED燈,單片機系統中,常見的LED燈如下所示,其中長的引腳一端為正極,短的為負極。
那麼問題來了,如何讓LED中有電流通過呢?電流到多少才能點亮LED呢?我們先看下實際電路設計中常用的LED設計電路
上圖中LED1左邊接入電源正極、右邊接入負極,電流方能通過點亮LED,此時LED電阻幾乎為0,如果電源接反方向了,LED產生很大電阻,阻止電流通過,此時,不能LED不能點亮,一般而言LED正向接入電源,保證通過LED中的電流為20mA左右即可點亮LED。
3.查看開發板LED部分原理圖
從上圖可知,LED3接入了單品阿吉的P10引腳,因此,只需要給P10引腳低電平即可點亮LED。
二、實例
1.新建一個空白工程
打開Keil4,點擊Project->New uVision Project...
然後選擇工程保存路徑,並設置工程名字如下
選擇AT89C52,本實驗使用STC89C52,Keil中默認沒有,選擇與之相近的AT89C52即可。
然後出現下圖,點擊否即可,原因是Keil C51已經幫我們完成了啟動
然後Source Group文件夾,選擇Add Files to Group &39;
緊接著本地創建main.c文件,添加即可
添加完成後,工程中打開main.c,如下圖所示
2.點亮LED
(1) 程序
include <reg52.h>sbit LED3 = P1^0;unsigned char val = 0;void delay_ms(int ms){ int i = 0, j = 0; for (i = ms; i > 0; i--) { for (j = 110; j > 0; j--); }}// 跑馬燈int main(void){ // 滅所有燈 val = 0xFF; // 11111111 while(1) { val = val << 1; P1 = val; if (val == 0) { val = 0xFF; } delay_ms(200); }}
程序中邏輯處理,用到了左移算法,0xFF二進位是1111 1111,對應P10所有引腳都為高電平,LED3-LED10都熄滅,0xFF左移一位是0xFE,二進位為1111 1110,LED3點亮,0xFE左移一位是1111 1100,LED3和LED4同時點亮,依次類推,直到數據為0, 所有燈點亮後,重新賦值0xFF。
(2)下載運行
下載後,可以看到跑馬燈效果,LED燈逐個點亮。
一葉孤沙出品:一沙一世界,一葉一菩提