關於微控制器中C語言給P1口賦值問題

2021-05-04 18:23:45 字數 1618 閱讀 7760

1樓:匿名使用者

你這變成了直接給p1口上的所有燈賦值了,假如像你寫的p1口上有8個燈,執行你這語句以後,8個燈的狀態是01010101,直接都定好了,當然不是間隔,你要間隔的話要這樣

p1^0 =1;

delay(100);//延時

p1^1=1;

delay(100);//延時

以此類推

2樓:夜盡天明

c語言中好像不能直接用二進位制表示數吧 一般都換成十六進製制的數再輸出

01010101表示第乙個口高電平第二個低電平第三個高電平第四個低電平如此乙個高乙個低,就能實現間隔點亮led。給分吧

3樓:匿名使用者

微控制器中對每個p口的控制都是用二進位制控制的 即使你對它賦了八進位制或十進位制或十六進製制的數 它也會先轉換成二進位制然後再進行計算的 所以

p1是乙個8位暫存器 p1=0x55 0x是16進製制的意思 這樣化成二進位制就是01010101

p1=01010101 好的 你對它進行了八進位制的賦值 01010101(你可以試一試 對p1進行0~15的簡單十進位制賦值 賦3 那麼二進位制進製是00000011 六個亮兩個滅 15 11111111 全滅 八進位制同理 數值以0開頭為八進位制)8位暫存器範圍0~255 恭喜你 你賦的值超出範圍了 那麼255後又從0開始計數 直到01010101賦完 得出的數再轉換成二進位制 就是你燈亮的狀態了

如果你想對p1口的單獨的乙個位進行控制 那就可以使用sbit位宣告

如:第一位就是sbit p1_0=p1^0 其中p1_0只是乙個名字而已 你想叫什麼就叫什麼 對它進行控制 p1_0=0;你對p1口的第一位進行了低電平賦值 類推

4樓:

p1接受的數是用來控制電平的,每乙個二進位制位的0、1分別表示高低電平。所以0x55轉化為二進位制是(01010101)正好一高一低的交替。

而01010101直接寫的話是8進製數轉化成那個二進位制就不是一高一低的了。而c裡面沒有直接寫2進製的數字只能通過函式或者寫成相應的十進位制八進位制十六進製制的數了。

ps.0x開頭的是十六進製制

0開頭的是八進位制

非0開頭的是十進位制

希望有幫助

基本的微控制器c語言程式設計問題p1=0xff高電平

5樓:匿名使用者

p2=0xff,就是將p2.0~p2.7全部設為1,也就是p2=11111111,當然就不是p2=0x01了咯.

十六進製制的0xff就是二進位制的11111111,你換算成十進位制就是255.

6樓:匿名使用者

51微控制器是8位的,意思就是每一組埠都有8個位;轉換成2進製為1111 1111,10進製為255,16進製為0xff,

比如我現在要讓p1口全亮版(高電平為亮權),那麼是不是p1^0到p1^7這個8個埠全部為1,那麼就為:

p1 = 2#1111 1111;但是在keil軟體中不可以用2進製表示,那麼我們就用10進製或16進製制來賦值,

p1 = 0xff;

p1 = 255;

如果 p1 = 0x01,這個意思就是p1^0這個埠為1,其它的埠都為0;

你主要是進製沒學好,回去複習下各種進製轉換就好了.

求51微控制器組合語言要求P1口LED燈閃爍並且P2口接

org 0000h ljmp main org 0003h ljmp ex0int org 0030h main mov sp,5fh setb it0 setb ex0 setb ea mov r0,0 mov dptr,table mov a,r0 movc a,mov p2,a loop mo...

要求用AT89C51微控制器的P1口點亮發光二極體分為兩組

真的是很簡單的,用點心學幾天就可以寫,看到沒人回,幫忙 12m include void timer0 init void main void timer0 isovf interrupt 1 程式如下 絕對沒有錯 led燈的一端接p1口的各各引腳,另一端接地。同時在p1口的每個管腳上加1k的上拉電...

用c語言如何對微控制器單個io口賦值如給IOA1賦值

可能這樣的吧 int port 位址偏移量 port 值 51微控制器c語言程式設計能合併不同的io口來賦值嗎 你有兩種方法可以達到這個目的,一種是用定義巨集的方式,另外一種就是寫乙個賦值函式。我個人建議用函式的方法,巨集容易出錯誤。c 使用了未賦值的區域性變數,如何賦值?string name1 ...