工程建立、點亮1個LED燈、點亮任意幾個LED燈、燒錄
- 一、 建立工程
- 1、建立工程檔案夾
- 2、創建工程檔案
- 3、創建.c源檔案
- 4、添加.c源檔案到工程
- 二、點亮一個LED燈
- 1、察看原理圖,明確電路原理
- 2、撰寫程式
- 3、燒錄
- 三、點亮多個LED燈
- 附錄一 埠選擇
- 附錄二 鎖存器
一、 建立工程
1、建立工程檔案夾
在學習51的時候,養成良好習慣,建立一個工程檔案夾,將學習程序中寫的代碼源檔案、生成的各類檔案都放在該檔案夾下,
在桌面新建檔案夾(如命名【89C52】,我的板子芯片是89C52)

在工程檔案夾下再創建檔案夾,我們每進行一次實驗或者一類實驗,就新建一個子檔案夾,方便代碼管理,
2、創建工程檔案
①打開keil軟體(本博是keil2)

②點擊【New Project…】

③選擇檔案夾,找到我們創建的檔案夾【89C52】——>【lesson1】
檔案名為本次實驗的名稱(如LED),格式唯一為【.uv2】,點擊【保存】

③選擇芯片型別(本博芯片為AT89C52)
芯片型別察看如下



找到AT89C52,點擊【確定】

上圖點擊【確定】
此時狀態欄有了下圖所示資訊,到這一步為止,我們建立了一個關于【AT89C52】的工程,但是還沒有把代碼與工程連接起來,整個工程就是一個空殼,

3、創建.c源檔案
①點擊【Flies】——>【new…】,建立文本

或者直接如下快捷鍵


②點擊保存

保存位置為剛剛新建檔案的位置,注意現在保存的檔案是以后寫C代碼的檔案,所以檔案后綴為【.c】,名稱與剛剛建立專案時的名稱一樣,故改為【LED.c】,點擊保存,

建立了C代碼檔案,但是并不知道C代碼是寫給誰的,所以應該把C代碼檔案添加到工程中,
4、添加.c源檔案到工程
①右擊【Source Group 1】——>【Add Files to Group ‘Source Group 1’】

②選擇剛剛的創建的.c檔案,點擊【Add】

此時狀態欄有了.c源檔案

到此,整個工程的建立結束,通過在.c源檔案中撰寫代碼,編譯后形成單片機可執行的.hex檔案,通過燒錄軟體將可執行檔案燒錄到單片機,
二、點亮一個LED燈
1、察看原理圖,明確電路原理

①找到芯片

②找到LED

上圖1是1k的排阻,2是8個LED,可以理解為每個LED接1K的電阻,如下圖

3是鎖存器,我用的單片機A/D實驗與LED實驗都是用的單片機的P1^0——P1 ^7,在進行A/D實驗時,為了防止對LED形成干擾,就在LED與P1間加了一個鎖存器,在進行A/D實驗時,將LED鎖住,
鎖存器見本博附錄,現只需知道當OE為低電平、LE為高電平時,鎖存器的輸入DB1——DB8與鎖存器的輸出Q0——Q7,電平同高、同低,即DB輸入為高電平、對應Q輸出為高電平,DB輸入為低電平,對應Q輸出為低電平,

由上圖可知,單片機的P1的0——>7引腳連接鎖存器的D0——>D7
P1的某一引腳編程式置0,則該引腳輸出低電平,鎖存器輸出端Q對應引腳也變為低電平,此時對應的LED左邊是VCC高電平,右邊是低電平,LED點亮,
故LED1——>LED8 對應:Q0——>Q7; 對應D1——>D8; 對應單片機P1^0——P1 ^7
只需將P1^0——P1 ^7某個引腳置低電平就可點亮對應LED,
在.c文本下撰寫#include <reg52.h>,右鍵打開頭檔案


可以看到P0、P1、P2等被定義為8位暫存器(暫存器定義方法:sfr…(八位),sfr16…(16位)),則可以通過位定義陳述句:sbit led1=P1^0;
將P1暫存器某一位重新命名,程式中可以通過新名稱對該位進行操作,
2、撰寫程式
#include <reg52.h>
sbit led1=P1^0;
void main()
{
led1=0;
}
以上代碼,第二行:sbit led1=P1^0;是對 P1的第一引腳重命名,進行led1=0;操作后會點亮第一個LED,
如果需要點亮其他的LED,則可將P1^0改為 P1 ^1、P1 ^2…P1 ^7
3、燒錄
①生成hex檔案
點擊下圖圖示

勾選下圖選項,點擊【確定】

再重新編譯

此時顯示生成了hex檔案,它與.c源檔案存放在相同位置
②打開stc-isp(下載地址:http://www.stcmcudata.com/)


芯片選擇型號為89C52,埠號選擇(見本博附錄),打開程式檔案,選擇工程檔案下的hex檔案

點擊【下載/編程】,再打開單片機開關(注意操作順序),顯示操作成功,此時單片機的第一個LED被點亮

三、點亮多個LED燈
我們之前是利用暫存器的位操作,將P1暫存器的某一位重新命名,再對該位置低電平來點亮對應的LED,我們還可以對整個P1暫存器進行操作,
之前總結過,在點亮LED實驗中P1暫存器每一位的輸出與鎖存器的DB和Q同高電平、同低電平,現用一個16進制的數控制該暫存器,
例如需要LED燈的1、3、5、7燈亮,則Q0——>Q7或DB1——>DB8或者P1的0——>7引腳輸出的電平分別是01010101,其中D1燈在低位,所以這串01數字看作是二進制數的話一個是10101010(從下往上讀,下面是高位),變成16進制為0xaa,所以程式中只需進行P1=0xaa操作及可點亮1、3、5、7LED燈

代碼如下:
#include <reg52.h>
void main()
{
P1=0xaa;
}
同理,若點亮2、4、6、8,則需要輸出分別是10101010,二進制為01010101(從下往上),十六進制為0x55

代碼如下:
#include <reg52.h>
void main()
{
P1=0x55;
}
附錄一 埠選擇
1、滑鼠右鍵我的電腦——>【管理】

2、選擇【設備管理器】,察看埠


3、若找不到埠,則選擇【顯示隱藏的設備】

4、電腦初次連接單片機可能需要安裝相應的串口驅動,該驅動買單片機時賣家給的資料里會有,直接運行就好,或者直接網上搜索CH340下載

附錄二 鎖存器


上面倆圖中,第一圖的74HC573是鎖存器,第二圖是單片機芯片,倆圖的連接方式是:
單片機P1的8個引腳P10——>P17依次接鎖存器的輸入,即D0——>D7,
鎖存器的輸出,即Q0——>Q7接8個LED,LED接排阻后接到VCC,
下圖是鎖存器的真值表,根據上圖一,OE接地,所以鎖存器只存在下圖的前三種作業狀態,

LE是在程式中置高、置低電平的,在進行LED實驗時,將LE置高電平(LE默認高電平,所以LED實驗時可以不對LE進行軟體置1),上面真值表的D和Q,分別表示鎖存器的輸入和輸出,可以看到輸入和輸出是同高電平、同低電平,
所以單片機的P1的某一引腳輸出低電平,則鎖存器的對應引腳的輸入D為低電平,鎖存器對應引腳的輸出Q也為低電平,此時LED左邊是VCC和排阻,右邊是低電平,LED導通,LED點亮,
當進行A/D實驗時,因為要用到單片機的P1,此時為了防止LED燈亂跑,將LE軟體置低電平,此時無論P1的各個引腳輸出為高電平還是低電平,鎖存器的輸出端始終為Q0,這個定值大于使LED導通的臨界電平值,這樣,LED左右倆邊都為高電平,LED不導通,鎖存器相當與將LED“鎖了起來”,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263344.html
標籤:其他
