99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

暴揍單片機(進階篇) 1 —— 流水燈(上)動一動

總算開始了第一個 so easy 的項目了。你猜,我們準備做的這個項目簡單嘛?話不多說,分享開始。
項目分析(流水燈)
  1. 功能:何為流水燈?其實就很簡單,就是一群燈像水流一樣。簡單兩個字:一直會動的燈。
  2. 具體做法劃分:(最簡單的兩步)
  • 在 proteus 上面搭建一個簡單的模擬電路:單片機 + 一群燈。
  • 在 keil 上面編寫代碼,讓燈動起來。
實際電路分析和編碼前的邏輯分析
實際的效果如下,我們來分析一下如何讓下面圖片的燈依次動起來?有沒有看不懂的?

我簡單舉個例子,比如圖片中左下方的 D6,左端接在 GND 上面,右端接在 P1.6 上面,那么只要 P1.6 提供高電平(1),也就是俗稱的 VCC,那么 D6 就能亮起來了。但是要是 P1.6 提供一個低電平(0),也就是俗稱的 GND,那么 D6 兩端都是 GND 也就滅了。濃縮一下上面的內容也就是兩行編程思維:
  • P1.6 = 0; (相當于燈滅了)
  • P1.6 = 1; (相當于燈亮了)
  • 留一個思考的問題(如何讓 P1.6 = 0 控制燈亮?也就是兩條語句實際的效果調換一下,不會的也別想了,就這么看看吧——正確答案:把上圖中接在 GND 的地方換成 VCC)。
硬件開發提供了底層硬件基礎,才有了我們邏輯實現的平臺。我們只是根據實際的電路圖來分析相關引腳到底需要怎么操作。一個好的硬件工程師會簡化單片機開發人員的編碼工作量。我建議大家硬件軟件一手抓。
其他控制引腳如下:
  • P1.1 控制一個 D1
  • P1.6 控制一個 D2
  • P2.1 控制一個 D3
  • P2.6 控制一個 D4
  • P3.1 控制一個 D5
  • P3.6 控制一個 D6
我們現在的工作就是讓這些燈能依次的亮起來實現一個動畫的效果。也就是對應的控制引腳依次可以輸出高低電平就可以了。
上面這么一分析。是不是突然發現,怎么這么簡單。
實際編碼過程和問題分析
現在燈準備好了,如何讓它“流水”起來呢?
有了上面的分析,下面寫得這段代碼你是不是就能看懂了? 6 - 11行:讓燈全部亮起來。 13 - 19 行:讓燈又滅掉了。好了,這樣一份簡單的功能就做完了。下面我們編譯生產 HEX 文件。

當你點完編譯按鈕之后,你應該就可以得到和我一樣的編譯報錯了。

首先解釋一下,為什么會出現這些報錯信息呢?最根本的原因就是 Keil 這個編譯器啊,它不認識 P1 和 .1(其實就是沒有定義!無定義不允許使用),那么,我們這里需要考慮的應該是:通過什么來控制 P2.6 這個引腳呢?那當然是自己定義了。看看下面這個代碼和實際的運行結果。

好了,我們依次解釋一下,上面這個是什么意思。第一行:sbit P2_6 = 0xA6 這句話就是我們本章的重重之重。具體什么意思呢?其實你可以這么理解:0xA6 是芯片的控制開關,P2_6 是我們軟件的控制開關。sbit 相關于讓兩個開關發生關系。當他們發生關系之后,我們就可以通過 P2_6 這個符號控制 0xA6 對應的引腳了。(除了寫成 P2_6 的樣子,你也可以寫成 abc,sbit abc = 0xA6,那么 abc 就也可以控制 P2.6 的引腳了)。
好了,那我們依次把全部的引腳定義一下吧,把代碼重新整理一下就是下面這個樣子了。到了這一步,我們總算控制了全部的引腳。

現在大家是不是很疑惑?難道這些什么 0xA1,0x96 的都需要背下來?是的,確實有些牛人都全部記下來了。51 芯片自己也已經幫我們把這些全部統一定義好了。那我們怎么才能用呢?我們就需要把 51 給我們寫的 reg52.h 文件(有些喜歡用 reg51.h,兩個只是差了部分寄存器,基本一樣)。#include "reg52.h" 就可以了。如果感興趣,你們可以打開 reg52.h 這個文件看看,它幫我們把全部寄存器都定義好了專門的標簽,那么我們就可以直接用了。
好了,下面我準備變形了,注意了!

同樣的功能,更精簡的代碼。但是你們發現沒有,好像其他引腳的狀態也被意外修改了?這不就尷尬了,就好像拆了東墻補西墻。比如我只想修改其中某一個引腳該怎么辦呢?我給你們總結出了兩個標準公式。(先記公式吧,用個兩天再百度原因,這種效率才是最高的)。

代碼又進一步的優化了。至此,我們總算將所有引腳都可以做到隨心所欲的控制了。

好了,我們現在讓燈能夠亮和滅了,如何讓它動起來呢?

理論上講,是不是這樣,小燈是不是就該閃起來了?但是當你打開仿真的時候,你會發現,其實燈只是一直亮著,根本沒有閃過,這是什么原因呢?我明明寫好了呀!這時候有些所謂的程序員就開始找硬件的麻煩了,可是事實真的是這樣嗎?
大家好好看下程序,滅 -> 亮 -> 滅 -> 亮,程序流程確實是對的,但是它忽略了一個最重要的問題,我們人眼最快也需要間隔 2ms 以上,才能分辨出兩個狀態。很簡單的一個道理,就是你的大腦反應不過,當然你也可以嘗試修煉一下自己的大腦,讓它能觀察出us級別的變化間隔,然后你就能看到,哇!真的閃爍起來了。但是作為一個正常的地球人,我們還是老老實實的改程序吧!最主要原因就是由滅到亮的時間太快了唄?那好,我們讓它慢一點。

我們在每次狀態變化的后面,增加一個計算,讓它滅完以后,經過大量的計算,再到亮的狀態。然后在經過大量的計算,再到滅的狀態,這樣就相當于有了一定的延時。讓它多個狀態之間有了時間的間隔,這樣眼睛就可以區分了。實際動態效果如下:

竟然真的動起來!本篇文章就寫到這里,下一篇我再進一步地講解。
聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 4
收藏 2
關注 54
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 国产精品综合不卡 | 一区二区三区精品视频免费看 | 久草在线免费在线观看 | 国产精品视频xxx | 精品少妇XXXX | 国产在线va| 狠狠躁天天躁夜夜躁婷婷 | 色欲久久久天天天综合影院 | 网红主播大秀福利视频日韩精品 | 亚洲三区在线观看无套内射 | 亚洲精品一区二区另类图片 | 久久精品人妻无码专区 | 欧美色香蕉 | 狠狠躁躁夜夜躁波多野结依 | 人人摸人人操 | 蜜臀av免费 | 中文字幕一综合88久久 | 国产精品高清乱码在线观看 | 日韩人妻精品一区二区三区视频 | 午夜精品一区二区三区三上悠亚 | 翁吻乳婷婷小玲21 | GOGOGO免费高清视频3 | 成人影院在线视频 | 亚洲乱码日产精品bd在线观看 | 97人妻人人做人碰人人添 | 九九天堂网 | japanese中国丰满成熟 | 国产欧美成人不卡视频 | 欧美《熟妇的荡欲》在线观看 | 亚洲综合图片区色 | 天天爽狠狠噜天天噜日日噜 | 国产激情高中生呻吟视频 | freesexvideos性少妇kant | 中文字幕国产精品 | 爽爽午夜影视窝窝看片 | 毛片无码一区二区三区a片视频 | 日韩精品无码免费专区午夜 | 放荡老师张开双腿任我玩 | 国产在线精品国自产拍影院同性 | 国产第二区国产一级片播放 | 久久噜噜 |