上面是網上 傳的 ”十天艹單片機“的資源,我沒去下,我是用買學習板子的時候送的光盤裏面的視頻和書來的,不過我猜應該是一樣的
第一課。
目標: 點亮第一個 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();
還有一個是 方法內用到的變量都要在 放在方法內的第一行,或者最前前面聲明 不能 隨處用隨處聲明(這個甚是蛋疼)