為什麼微控制器上流水燈的程式設計定義用char型不用int型

時間 2022-02-07 14:15:03

1樓:迪克斯達

呵呵,這麼簡單的一個問題,回答居然五花八門……。那我也來湊湊熱鬧吧。

首先,並不確定你的定義是指什麼定義,不過應該是指「顯示暫存器」的定義吧,以後提問最好能把你的**貼出來,這樣更方便網友的解答。

現在假設你指的就是「顯示暫存器」的定義。那可以明確的說,這裡考慮的就是記憶體佔用。這裡一樓的說法差不多正確,不過int的佔用的位元組數要與你所用的微控制器相關,51微控制器int是佔用2個位元組,也就是16位,其它微控制器則不一定。

我這裡主要是想談談三樓說的那幾點。微控制器的「顯示暫存器」的定義的確一般常用「usingned char」,但這並不代表char不能用。有無符號數主要體現在計數過程中的取值範圍有所不同,而流水燈這種程式並沒有涉及到這一方面。

還有int型別也是同樣的道理。就以51為例,int是16位的資料照樣可以傳遞給8位的p口!只不過高8位自動丟掉了而已!

最後,樓主可能也是微控制器初學者吧。像這種簡單的問題,你完全可以自己調調,把型別改改自己看看結果不是更好?學微控制器不動手是不行的。

現附上自己剛剛寫的一段程式,你可以自己調調。「顯示暫存器」就用的int型別。(當然並不推薦這麼定義)

#include

void delay(int x) //延時函式

void main()}}

2樓:匿名使用者

char 和 int 最大的區別是佔用記憶體大小不同char 佔用一個位元組 也就是8位

int 佔用四個位元組

如果你的程式用不到長度那麼大的變數,就用佔用記憶體小的變數,勢必微控制器的ram是有限的,開闢的空間越小,執行速度就越快!

3樓:

先指出提問者的錯誤:

微控制器上流水燈的程式設計定義用usingned char型而不是char型。前者是無符號字元型,後者是有符號的!如果你看到uchar這樣的定義,那就是實現#define uchar usingned char過了,所以uchar就是 usingned char。

char 和usingned char都是一個位元組,是八位,跟微控制器的p口一樣,所以用這個。

再說一樓回答的錯誤:int在微控制器裡是兩個位元組而不是4個位元組,(51裡是這樣,別的不一定)。所以用int定義的變數控制流水燈,而流水燈是p口控制的,16位的資料怎麼傳遞給8位的p口呀!

所以不是佔用記憶體的問題,而是資料格式不對無法用。

c51微控制器流水燈程式。求問大神他為什麼把16進位制數定義成unsign char #include

4樓:匿名使用者

----------那我反問下,為什麼不可以? unsigned char 只是型別而已。只要<=255即可。 你可以寫十進位制,二進位制,8進位制。只要編譯軟體能識別即可。

5樓:匿名使用者

支援樓上的回答 樓主可能搞混了16進位制和16位的概念, char或者unsigned char只是型別,和int float等一樣,只是每種型別佔用的儲存空間不一樣,16進位制或者十進位制這些只是數字的表現方式

6樓:小號很好使

你把十六進位制和16bit(16位)的概念搞混了。

同一個數字,可以用10進製表示、也可以用16進製表示,當然二進位制、8進位制等都可以,甚至你自己造個12進位制都沒問題。

比如你給一個變數a賦值為0xfe,a=0xfe,這個效果與下面這2種完全一樣,看準了,是完全完全完全一樣!!對微控制器來說沒有任何影響:

一、 a=254,(十進位制的254等於16進位制的fe)

二、 a=0376(八進位制的376等於16進位制的fe等於10進位制254)

懂了沒?

16進位制數不一定需要16位元來存放,只要這個數對應的10進位制數不超過255,(或者說不超過十六進位制的0xff,或者說不超過8進位制的377),它就卡一存放在uchar格式的變數裡。

c51微控制器流水燈程式問題定義無效

很簡的51微控制器c語言流水燈程式

7樓:匿名使用者

字元型char 預設為signed型別

所以你的延時子程式裡j迴圈條件一直滿足

程式呼叫第一個delay(100)時陷入死迴圈此時led=11111110 所以只有第一個燈一直亮就會這種解釋了

你確認只把初值

led = 0xfe改成~led = 0?

8樓:匿名使用者

#include

#define led p2

void delay();

void main() }

} void delay() }

} }試試這個程式

我不知道你的編譯器是怎樣定義char的,如果char定義為有符號變數的話,char就是-127至+128大小的有符號的變數,你的for(j=0;j<250;j++)裡面j<250,這個條件就會永遠滿足,所以就死迴圈了

9樓:匿名使用者

#include

#include

#define led p2

void delay(char i);

void main() }

void delay(char i)

10樓:匿名使用者

//---------------------------------------

//標頭檔案

#include

//---------------------------------------

//---------------------------------------

//資料型別替代宣告

#define u8 unsigned char

#define u16 unsigned int

//---------------------------------------

u8 led[8]=;

//---------------------------------------

//延時子函式 延時時間為n毫秒

void delay_ms(u8 n)}}

//---------------------------------------

//---------------------------------------

//流水一次子函式

void liushui(void)

}//---------------------------------------

//---------------------------------------

//主函式

void main(void)

} //---------------------------------------

11樓:學而_無止境

void delay(char i)

12樓:

unsigned char 0~255

char -127~128

電路接法?

你是置低亮 還是拉高亮啊~~~

51微控制器按鍵控制流水燈左移,51微控制器的c語言 左移右移怎麼用?想用來控制流水燈,請幫忙寫個完整的c程式,參考下,埠隨意

按鍵不能用while函式來寫,第八行 if k1 0 按一次執行一次函式內容 開始學習微控制器的同學們寫注意了,在執行程式後,現象不正確的時候,不要首先就找軟體的錯誤,我的經驗是從源頭開始找問題,首先你得確定你的平臺是正確的,你說是按鍵沒效果,先用萬用表測試一下你的引腳的電平,是否被拉低了如果按鍵沒...

求基於51微控制器的流水燈的設計

摩凌文 include define uint unsigned int define uchar unsigned charsbit keya p2 1 這裡看你把按鍵設定在哪個引腳上,這個是實現功能2 sbit keyb p2 2 這個是實現功能2sbit keyc p2 7 實現功能3void...

微控制器8個流水燈的作業 幫忙看看

void main void char j,k p0 0x00 while 1 for j 0 j 8 j p0 p0 pow 2,j 0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff delay for k 7 k 0 k p0 p0 pow 2,k 0x7f,0x3...