㈠ 單片機里的C語言函數間的數組傳遞
sizeof(Logo) 計算出來的數值是字元數組Logo的長度加一(包括了字元串的結束字元'\0')之後減一就好理解了,即是計算字元數組Logo的長雀扮度。
另在這程序里sizeof(Logo) - 1 可以用函數strlen(Logo)代替 (需提示的是函數strlen是遇到'爛纖\0'結束的,因為這里你的Logo是加上code修飾的不用擔心會修改數組的某一內容為'\0'的情況,如在其他的地方用的需留意,免得會出現bug)
再提醒下sizeof(Logo) - 1 和 strlen(Logo)的一個重要的區別就是sizeof(Logo)是頃歷灶在編譯時就計算出數值;而strlen(Logo)是在運行時才調用函數來計算長度的,每用到一次都要調用一次函數,用sizeof(Logo)相對於strlen(Logo)可以節省程序執行的時間
㈡ 單片機數組的定義和使用方法
單片機數組的定義和使用方法,單片機數組的定義就是說他是通過一個單機片組成個主板,然後使用方法是相對來說比較簡單的,然後可以參照使用說明來操作
㈢ 單片機C語言如何實現數組動態調用
sizeof一般是在編譯時計算,不適合用在你這種情況,如下修改已模擬驗證可切換傳送。
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********埠定義*************/
//SCLK串列同步時鍾
//SID串列數據輸入端
//CS片選,高#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
/*********埠定義*************/
//SCLK串列同步時鍾
//SID串列數據輸入端
//CS片選,高電平有效
sbitCS=P1^2;
sbitSID=P1^1;
sbitSCLK=P1^0;
/******************************/
/*******字幕顯示定義***********/
ucharcodeTable1[]={"ILoveMCU"};
ucharcodeTable2[]={"我愛單片機!"};
/******************************/
voidDelaynms(ucharx)
{
uchari,j;
for(i=0;i<x;i++)
{
for(j=0;j<110;j++);
}
}
voidDatComOperation(uchardatas,uchardatcom)
{
uchartemp;
uinti;
temp=datas;
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
temp=datcom;
temp<<=4;
for(i=0;i<8;i++)
{
SID=(bit)(temp&0x80);
SCLK=0;
SCLK=1;
temp<<=1;
}
CS=0;
Delaynms(10);
}
voidSendCommand(ucharcomm)//12232發送指令
{
DatComOperation(0xf8,comm);
}
voidSendData(uchardatas)//12232發送數據
{
DatComOperation(0xfa,datas);
}
voidLcd12Initial()
{
Delaynms(100);
SendCommand(0x30);
SendCommand(0x02);
SendCommand(0x06);
SendCommand(0x0c);
SendCommand(0x01);
SendCommand(0x80);
}
voidDispInfor(ucharx,ucharcode*arrays)//???????
{
uchari,j;
SendCommand(x);//定義字元顯示的位置
//for(i=0;i<sizeof(arrays)/sizeof(arrays[0]);i++)
//SendData(arrays[i]);
i=0;
while(j=arrays[i++])SendData(j);
}
voidmain()
{
Lcd12Initial();
DispInfor(0x80,Table1);//DisInfor(0x80,Table1);
DispInfor(0x90,Table2);//DisInfor(0x90,Table2);
while(1);//等待
}
㈣ 單片機c語言語法,數組的使用
dat&0xf 是取低四位差敬。
例: 0x11111111 (dat)
0x0000000f (0xf)
就是取低四位 結果為0x00000001.
table[]數據只用16個,剛剛好旁慶嘩。運行
㈤ 單片機怎麼同時調用數組中的多個數據
單備此兄片機同時調扒氏用數組中的多個數據可以用分時的方案平衡仿襲各個任務的處理時間。比如,我們可以引入一個計數器i,假如有5個任務,可以讓i在0~4之不斷循環,當i=0時執行任務1,當i=1時執行任務2,當i=3時執行任務4,當i=4時執行任務5就可以了。
㈥ 單片機中C語言中函數間的數組傳遞
sizeof是C/C++中的一個操作符(operator),簡單的說其作用就是返回模羨一個對象或者類型所佔的內存位元組數。
其返回值類型為size_t,在埋慧頭文件stddef.h中定義。這是彎碼答一個依賴於編譯系統的值,一般定義為
typedef unsigned int size_t;
Send_String(sizeof(Logo)-1,Logo); 既是把Logo字元串的長度減掉1作為第一個參數,Logo字元串本身的首地址作為第二個參數傳遞給函數Send_String()。
㈦ 關於單片機 數組使用
你給的信息太有限,
我需要知道你的單片機的具體型號,還有你創建工程的屬性。
我先猜一下:
你用的是stc增強型52單片機,除了自帶的256位元組內存還有256位元組的擴展內存,並且你在工程屬性裡面選擇的是大內存模式(large:
variables
in
xdata
)這樣在你定義內存的時候如果不加data,idata,pdata關鍵字的話,默認就是xdata。這用的是外部ram,是通過p0和p2口用匯流排模式擴展晶元得到的,可訪問64k的內存空間。但是stc增強型52內置了256位元組(某些版本會更大,我猜你用的是256的),默認訪問方式一樣,但是被stc集成到了片內。你定義了一個a[160]一個b[160],加起來遠遠超過256.按你的說法,有用的是160+48(這里你又有一個表達錯誤,a[0]~a[47]應該是48個。)=208個,算上你其他地方定義的變數,應該滿256個,那麼a[48]~a[159]是怎麼出現的呢,理論上是從p0口讀回來的。但是這里你還有一個不嚴謹的地方,不知道你有沒有證明到底是a[48]~a[159]全部成為了0xff還是b[48]~b[159]早早的就成為了0xff。
處理辦法一:內存模式先改成small:variables
in
data
.
這時你應該都無法通過編譯。
然後改變這句話:void
2(char
a[160])
變成
void
2(char
pdata
a[160])
方法二:直接改
char
b[160]=
變成
char
code
b[160]=
試試看。
如果猜錯了,請別笑話我。
㈧ 51單片機 類似數組調用的方法控制一組IO口 for循環語句控制多個IO口
很簡單的。
用序號0~7,可以對一個 8 位的 IO 口,隨意操作。
iunsigned char num[8]={1, 2, 4, 8, 16, 32, 64, 128};
P2 |= num[3]; //P2.3 = 1
P2 &= ~num[5]; //P2.5 = 0
P2 ^= num[7]; //P2.7 取非
編寫循環程序,也可。