2440裸機程式分析之led

2021-06-07 18:06:16 字數 1466 閱讀 1446

今天 用心 把 led 顯示 的原理弄懂了一下。。 注釋如下

首先,對照著tq_2440_v2原理圖觀察到了4個led燈的管腳分別為gpb5,gpb6,gpb7,gpb8.有詳細觀察 發現gpb共有11個管腳 ,其中gpb0到gpb3為高電平有效,gpb4到gpb10為低電平有效,這不是用0***x 就可以控制這11個管腳嗎 ?帶著這個疑問我將main函式中的while(1)中加入了 這幾句話 ,目的是讓4個led燈以1秒間隔 亮滅閃爍,如下

while(1)

{     rgpbdat=0xe00;         既1110 0000 0000   作用是讓gpb5,gpb6,gpb7,gpb8.為低電平,即點亮led燈,而其他管腳保持未被觸發的狀態

delay(1000);

rgpbdat=0xfe0;

1111 1110 0000     作用是讓gpb5,gpb6,gpb7,gpb8.為高電平,即熄滅led燈,

delay(1000);

}如果大家仔細的話 ,可能會發現 gpb0是控制蜂鳴器 的i/o口,這樣的話 就能讓該程式帶上聲音了 ,既將上方的 rgpbdat=0xe00;rgpbdat=0xfe0; 改為 rgpbdat=0xe00;rgpbdat=0xfe1;  這樣蜂鳴器 伴隨著 led的亮滅而發出聲音了 。

main函式中有個呼叫為led_display(0x66), 這句話 的意思 就是 點亮led2和 led3 ,

然後 ,我們再來看看 出場的程式

while(1)

{led_display(1);   //led1亮 燈

delay(1000);    //延時1ms

led_display(2);   

delay(1000);

led_display(4);

delay(1000);

led_display(8);

delay(1000);

}void led_display(int data)

{ rgpbdat = (rgpbdat & ~(0xf<<5)) | ((~data & 0xf)<<5);

}   

rgpbdat & ~(0xf<<5) 的意思 就是:(0xf<<5) 等價於1 1110 0000,~(0xf<<5)等價於0 0001 1111,rgpbdat & ~(0xf<<5)等價於讓第6到第9位歸零,而其他的i/o口保持不變。

((~data & 0xf)<<5) 的意思是:(假設date=2)  ~data等價於1101,~data & 0xf等價於 1101&1111=1101,(~data & 0xf)<<5等價於1 1010 0000,然後再讓1 1010 0000| 0 0001 1111= 1 1011 1111,大家 注意看 第6到第九位1 101 ,不就是 讓led2處於低電平,而其他三個燈為高電平嗎 ?

所以 led1亮則呼叫函式 led_display(1),為0001 。led2亮則呼叫函式 led_display(2),為0010。等等  

2440裸機學習之 LED燈的控制

s3c2440有130個i o口,gpa,gpb.gpj通過設定暫存器來確定其功能。gpxcon暫存器 選擇引腳的功能,gpbcon gpjcon每兩位控制一根引腳 00表示輸入,01表示輸出,10表示特殊功能,11保留不用。gpacon特殊,每一位控制一根引腳,共23根,某位為0時,為輸出引腳,當...

mini2440 LED燈裸機硬體控制程式

查詢mini2440的原理圖,找到led部分的原理圖 然後查詢nled 1到nled 4分別連線的s3c2440的引腳 由圖可知 nled 1 gpb5 nled 2 gpb6 nled 3 gpb7 nled 4 gpb8 在s3c2440的引腳劃分中,這四個引腳都屬於port b,因此可以通過配...

S3C2440之裸機之彙編點亮LED燈

虛擬機器環境 oracle vm virtualbox linux系統 ubuntu 14.04.6 交叉編譯工具 100ask分享的所有檔案 100ask分享的所有檔案 002 jz2440資料光碟 20180516 免費 資料光碟 a盤 tools.zip arm linux gcc 4.3.2...