51單片機 學習之旅[1] 點亮第一個LED

教程資源

上面是網上 傳的 ”十天艹單片機“的資源,我沒去下,我是用買學習板子的時候送的光盤裏面的視頻和書來的,不過我猜應該是一樣的

第一課。

目標: 點亮第一個 LED

過程:

1.教程裏看了一輪的板子 有什麼器件,什麼功能(有部分沒看懂是幹嘛的,視頻裏也說是後續再說..基本我就留意了 用到的芯片 和 LED部分)

2.介紹了下單片機 51單片機,的各個廠商 的幸好,因爲板子是用 STC 89C52 的,所以基本都是這個。

3.看板子的電路原理圖,媽的蛋。。。完全沒有電路知識的人,看到這裏簡直是要跪,這是什麼鬼????? 到這個時候 老婆在後面問我爲何跪在顯示器前。。

從這裏 想起以前高中學過的電路。。(這特麼一點關係都沒有好不好。。根本沒什麼用),幸好看了下還是大概能看出那裏連那裏,有些標註 什麼 P0,P1,D1的。

基本對着 電路原理圖,和板子 上一一對應都能大概找出 那些是怎麼連的(但是那些什麼中間爲毛線要連個電阻,什麼上拉電阻 又是什麼鬼?,後面自己百度了)

理解在這個板子上的所有功能都通過這些器件連起來,什麼時候通電 什麼時候 通個 ”高電平“ ”低電平“來控制(看成 信號->看成二級制數據的1和0),然後通過 變成 寫入 指令 到 芯片中來執行。

來是說 上面那些電子元件 電路什麼的都不是很清晰,後面慢慢補吧,先把功能跑起來。

4. 從上面的原理圖 看到 LED模塊的電路連接是鏈接到 芯片 的 IO口 (有4組 P0 P1 P2 P3,每個組有8數據口),現在LED 就是鏈接到P0 上

然而 就是通過 變成 來控制 P0 上的 信號輸出來達到搞亮LED。

5. 如何控制?

用C語言 寫出一個點亮程序,這裏用到的編程工具 是Keil .

由於之前沒學過C,頭文件是什麼鬼。。,哦原來是相當於一個 聲明文檔

在 51 單片機中 有定義好的 頭文件

#include

裏面定義 一堆 51單片機的定義 比如 上面說到P0 IO口,都在裏面定義好 具體的地址,通過操作這個P0的變量即可?

由於 這個P0定義的是一組 8位的,對應了這個 LED組8個燈,如果要控制一個燈亮要怎麼搞?

這裏有個語法

sbit LED1 = P0^0;

代表 P0組 第一個位(最低位)的值,指向了LED1這個變量

sbit 類型是 51單片機 的特殊類型

如果要點亮,只需要給這個 LED1 給一個低電平的信號就可以。

LED1 = 0;

爲什麼要低電平?(看上面的電路圖,說的太玄,沒看懂,只是 說那個發光二極管 的什麼鬼的)

然後注意的是 默認的 51單片機所有初始化電平信號 都是高電平的。

#include <REGX52.H>
sbit LED1=P0^0;
void main(){
	LED1 = 0;
}

燒到 板子上,點着 噢耶 亮了,

下面是 去弄個 流水燈點亮一排led

用到流水燈 就要 做到 亮一盞 等一下,再去下一個動作這種等待。

真是吊炸天,,,教程裏面居然 用cpu 每執行一個指令會花一個段時間來當做 等待。。。用個循環 來當做等待

void delay10ms()
  {
    unsigned int a,b;
    for(a=100;a>0;a--)
      for(b=225;b>0;b--);
   }
在上面編譯的時候出現了 問題,在51平臺上 用到的變量,方法 都要在之前做好聲明


比如上面 delay10ms 如果要在main()裏面調用就必須 把這段代碼 寫在 main方法之前,或者 在 main方法之前 聲明定義好這個方法

<span style="white-space: pre;">#define void </span>delay10ms();

還有一個是 方法內用到的變量都要在 放在方法內的第一行,或者最前前面聲明 不能 隨處用隨處聲明(這個甚是蛋疼)


發佈了20 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章