tft每日頭條

 > 生活

 > 通過學習單片機學到的知識

通過學習單片機學到的知識

生活 更新时间:2024-07-03 11:51:52

2020年注定是不平凡的一年,無數大學生被困家中無所事事,我也是其中一員,在家學習對一個自制力弱的人來說是比較難的事情,但是一直頹廢下去也是讓人心裡很難受的,所以我就想着随便學點自己感興趣的東西,總比什麼也不幹強點。于是我就在這些天開始學習了單片機。

我一直覺得單片機是一個很酷的東西,可以用它做小車,做無人機,尤其是做無人機和玩無人機算是我這兩年的夢想了吧,其實我以前就學過一點51單片機,當時也買了一套清翔的51開發闆,不過當時就學了一點,好像是剛學到中斷,我是一個懶散沒有常性的人,這次既然想要好好學學,希望着有一天學成可以自己做很多有意思的東西玩意,那麼一些額外的督促等手段可以說是必不可少的。我思來想去決定用寫知乎的方法來監督自己,同時也可以通過寫文章的方法來總結單片機開始學習路上遇到問題和我的嘗試解決,我準備做成一個實時更新的系列,學完一部分便總結反思一部分,既可以加深印象提升自己,又可以分享給和我一樣的小白在學習路上所碰到的問題(菜雞都是有共性的,所以可能遇到和我一樣的問題),雖然可能沒有人看。

因為我是想自己做一個小四軸玩的,我給我自己準備的學習路線是先學習51單片機,等學的紮實後就去買小馬哥(一個教四軸的up主)的四軸套件和教程,小馬哥的四軸是32單片機的。我看着教程挺好的,不過 我現在連51單片機都沒有學會,所以不先考慮學32單片機的。聽同學說32是很難學,我準備考完研的寒假學小馬哥的這個。

我學重新學51單片機的時間大概有一個月了 吧,因為有課加準備考研加自己懶散,所以進度緩慢,我清翔老師的教程倒是先過了一遍,但是感覺還是沒啥用,該會的也還是不會,所以我是準備把老師上課寫的程序再自己重新敲一遍,估摸着把課上的所有程序都自己獨自敲一遍并且編譯成功我的51 單片機就算小成了,我也可以考慮學32 了,其實我在學習51單片機的時候感覺并不簡單,甚至覺得還挺難得,我一度懷疑郭天祥10天學會51單片機是吹牛逼。

--------------------------------------------------------------------------------------------

持續更新中~~~~~~~~

雖然很多大佬說51單片機非常簡單,但是我還是一直覺得要想學好51單片機10天根本做不到,特别在我看了電子萬年曆這個比較綜合的項目,我是更覺得學10天不可能自己寫得出來(也是可能是因為我太笨了),清翔老師是說能獨立寫出電子萬年曆這個項目51單片機就算學的可以了,我看完了大概得講解也是一頭霧水,什麼應用層,底層驅動啥得感覺特别懵逼,附個圖

通過學習單片機學到的知識(我的單片機學習之路)1

對于我這種看課基本是一遍過,也沒有課下寫程序練習的笨比小白可以說是太難了,我回想LCD1602液晶, DS18B20數字溫度傳感器, DS1302實時時鐘,隻覺得腦袋一片空白,再想想紅外通訊,I2C通訊,好像也是寫不出來,隻對定時器中斷好像有點印象,那天我真的是備受打擊,雖然我是剛學的小白,但我也明白,寫無人機的飛控應該比這個電子萬年曆要難太多。真的是一度心灰意冷,以為自己笨的什麼都學不會。不過還好我沒心沒肺,難受的快忘的的也快,接受現實也快,要是我隻看一遍教程就能學會,那我也就不是我了哈哈哈。

通過學習單片機學到的知識(我的單片機學習之路)2

通過學習單片機學到的知識(我的單片機學習之路)2

其實這個過程已經過去兩天了,我昨天才開始打定主意寫知乎的,給大家先看一下我的進度

通過學習單片機學到的知識(我的單片機學習之路)4

這是我前兩天寫的,我沒有寫點燈的,因為我學會了哈哈哈哈(笨比笑),我是從矩陣按鍵和數碼管那開始寫的。但現在已經過去好幾天了,我就粗略的總結一下,以後當天的内容肯定要更加詳細的說的,那麼現在正式開始分享~

矩陣鍵盤篇

#include<reg52.h>

#define uint unsigned int

#define uchar unsigned char

uint KeyValue;

void delay(uint z)

{

uint x,y;

for(x = z; x > 0; x--)

for(y = 114; y > 0; y--);

}

void KeyScan()

{

//4*4¾ØÕó¼üÅÌɨÃè

P3 = 0XF0;//ÁÐɨÃè

if(P3 != 0XF0)//Åжϰ´¼üÊÇ·ñ±»°´ÏÂ

{

delay(10);//Èí¼þÏû¶¶10ms

if(P3 != 0XF0)//Åжϰ´¼üÊÇ·ñ±»°´ÏÂ

{

switch(P3) //ÅжÏÄÇÒ»Áб»°´ÏÂ

{

case 0xe0: KeyValue = 0; break;//µÚÒ»Áб»°´ÏÂ

case 0xd0: KeyValue = 1; break;//µÚ¶þÁб»°´ÏÂ

case 0xb0: KeyValue = 2; break;//µÚÈýÁб»°´ÏÂ

case 0x70: KeyValue = 3; break;//µÚËÄÁб»°´ÏÂ

}

P3 = 0X0F;//ÐÐɨÃè

switch(P3) //ÅжÏÄÇÒ»Ðб»°´ÏÂ

{

case 0x0e: KeyValue = KeyValue; break;//µÚÒ»Ðб»°´ÏÂ

case 0x0d: KeyValue = KeyValue 4; break;//µÚ¶þÐб»°´ÏÂ

case 0x0b: KeyValue = KeyValue 8; break;//µÚÈýÐб»°´ÏÂ

case 0x07: KeyValue = KeyValue 12; break;//µÚËÄÐб»°´ÏÂ

}

while(P3 != 0X0F);//ËÉÊÖ¼ì²â

}

}

}

void main()

{

while(1)

{

KeyScan();

if(KeyValue == 0)

{

P1 = 0x6F;

}

if(KeyValue == 1)

{

P1 = 0;

}

if(KeyValue == 2)

{

P1 = 0xFF;

}

}

}

不知道為啥代碼複制到知乎上會有注釋亂碼現象,有點頭大,以後黏貼代碼把注釋去掉。

矩陣鍵盤倒是也不難基本操作和獨立按鍵差不多,說到底矩陣按鍵就是一大堆按鍵排列到一起,都是需要消抖加松手檢測這兩個步驟。我的開發闆矩陣按鍵是4x4的,16個按鍵,接在P3上,矩陣按鍵在檢測哪個按鍵被按下是需要鍵盤掃描->我是先進行的列掃描然後又行掃描,列掃描時先把接在列上面的所有IO口拉高,接在行上的所有IO置低。當其中有一列内任何一個按鍵按下那麼整條列線都會被拉低。也就是先将P3 = 0xF0; 這一塊倒是不難,印象中沒有碰到問題。

通過學習單片機學到的知識(我的單片機學習之路)5

我當時自己寫程序的時候其實隻有一個疑惑,就是switch case 語句,進行列掃描,uint 了一個KeyValue, 列掃描初值是 0, 1, 2 , 3, 然後行掃描的時候使 KeyValue 0, 4, 8 ,12; 我開始的時候怎麼也想不起來為啥非得加4 的倍數,到後來又看了下視頻

--------------------------------------------------------------------------------------------

持續更新中~~~~~~~~2020/4/29繼續更新

我覺得在沒人指導的情況下自學一些東西是挺難的,你總會遇到一些問題,有的問題很簡單但是你腦子當時轉不過來圈,有的問題真的很難,你的知識儲備不夠邏輯能力不強就是沒辦法解決。對小白來說最可怕的是遇到的一些對别人來說是常識問題的,百度都不怎麼知道百度一個确切的問題,很多時候就是想要放棄~

今天精神很差,我白天學習的心思太淡了,晚上就容易亢奮,昨晚看完考研設定的目标量後已經11點多了,又開始學51單片機,昨天把URAT串口看手冊看教程最後獨立寫完整個程序已經12點多了~昨晚寫完串口發送數據數碼管顯示的程序,基本沒問題,想要真正學好還是要自己重新做一遍啊,隻看視頻效果接近沒有,後續得總結一下經驗。洗完澡躺床上玩會手機再睡覺到差不多淩晨2點,今早又7點起床屬實有點萎靡~今天想想怎麼安排一下時間,時間管理可是個技術活。

随便扯點繼續順着昨天向下寫,看完矩陣按鍵視頻教程後,又看了下開發闆,這他娘的不是16個按鍵嘛!0~15一個數對應一個按鍵,想明白之後是真覺得自己傻*,寫完這個基礎的矩陣按鍵程序之後其實我還寫了一個麻瓜通過矩陣按鍵觸發外部中斷0進行控制流水燈模塊,但是就是實現不了,編譯倒是0waining 0error,我又看教程,又看原理圖,又看手冊,後來又百度都沒找到問題,很多時候我真覺得我愚笨,腦子不會轉。折騰了一個小時,我又對着原理圖重新敲程序,我是用的外部中斷0下降沿觸發嘛,當時跟着清翔老師說的通過一根杜邦線讓P32口和P37相連通過P37口賦值1再賦值0來控制下降沿觸發中斷。

通過學習單片機學到的知識(我的單片機學習之路)6

開發闆P3口

當我寫到位定義的時候我突然想明白了為什麼矩陣按鍵程序寫的沒問題,外部中斷0程序寫的沒問題,偏偏它們兩個合起來就發揮不出來我預期的作用呢。我買的開發闆的矩陣按鍵是接在P3口上

sbit P32 = P3^2;

sbit P37 = P3^7;

恰好外部中斷0是由P3.2口觸發,這樣矩陣鍵盤在行列掃描的時候就出錯了。

學完矩陣鍵盤這我算是意識到看手冊和原理圖對小白來說是很重要的,下邊的圖是我截的手冊中斷裡面的一小塊

通過學習單片機學到的知識(我的單片機學習之路)7

矩陣按鍵這塊我這些問題,因為我是先開始重新學的,學了幾天後開始弄的知乎總結,分享,知乎總結有點跟不上我學的速度了。也可能是前面的内容過于簡單的原因,我本來想着數碼管動态掃描還有定時器中斷啥的各作為一部分進行寫的,今天想想好像不可行,我串口那也沒遇到什麼特别的問題,所以接下來計劃将數碼管顯示加串口部分一塊寫完,今天晚上開始學習I2C。定時器中斷啥的也都會用到,不想再作為單獨的知識總結了。

數碼管我準備總結兩塊内容,1是延時部分寫delay函數延時和定時器延時,2是在動态掃描中我犯的錯誤;串口這一部分我就分享一下我遇到的問題,并分享出來,希望有大佬以後可以在評論講解一下~今天白天就寫這麼多吧~大部分時間還是準備考研要緊,嘿嘿

--------------------------------------------------------------------------------------------

持續更新中~~~~~~~~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved