有關8051>LCD顯示變數的問題...(ADC0804) |
答題得分者是:aki
|
cliff1989
一般會員 發表:6 回覆:2 積分:1 註冊:2009-03-23 發送簡訊給我 |
|
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
這是兩個問題,問題(1)
前幾天有人 post 了類似問題,也有熱心網友回覆了! 轉貼如下: RE: 8051 C 如何作字串相加? 發表時間:2004-05-23 10:30:35 > >請教各位前輩有關 8051 C 的問題: 1.8051 C 如何作字串相加??如下程式嗎 2.8051 C 如何把數字轉成字串?? char code *a ; char code *b ; char code *pp ; a="123"; b="abc"; pp= a b; <<<<錯誤.... for(; *pp !=0 ;){ Data(*pp ); } 謝謝各位前輩.......... ??如下程式嗎 2.8051 C 如何把數字轉成字串?? char code *a ; char code *b ; char code *pp ; a="123"; b="abc"; pp= a b; <<<<錯誤.... for(; *pp !=0 ;){ Data(*pp ); } 謝謝各位前輩.......... > > > 加入 Include嗎 #include "stdio.h" 將a="123" 與 b="abc" 二個字串相"連"起來... 若是這樣的話... 您可以嘗試使用 sprintf... 1. 字串相"連"的部分 char temp[10]; sprintf(temp,"%s%s",a,b); 則...temp = "123abc".... 2. 數字轉字串的部分 char temp[10]; sprintf(temp,"%d",2004); 則...temp = "2004".... Good Luck !! 可是 2. 把數字轉成字串 用 sprintf 的話 code size 會有點大... 所以可以試試用自己寫的 function... ex: WORD X = 1234; itoa(X, str[], 4); // then str[] = {"1234"}; ////////////////////////////////////////////// typedef unsigned int WORD; typedef unsigned char BYTE; void itoa(WORD X, BYTE str[], BYTE Digit) { while(--Digit){ str[Digit] = '0' (X); X/=10; } } 上面程式需修改如下,否則可能會有問題產生: #include typedef unsigned int WORD; typedef unsigned char BYTE; char str[10]; void itoa(WORD X, BYTE str[], WORD Digit) { str[Digit] = '\0'; while(Digit--) { str[Digit] = '0' (X); X/=10; } } main() { WORD x = 1234; printf("x->Int->%d\n",x) itoa(x, str, 4); printf("x->String->%s\n",str); //;str[] = {"1234"}; } ===================引 用 cliff1989 文 章=================== 如題,(1)題目是要8051讀取0804的值,轉為伏特數顯示在LCD上,但以往只學過顯示固定字串,變數的實在不知怎麼弄... (2)另若同時要3個七段顯示器顯示1~256(0~5V),又該如何增加進程式呢 |
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
這是兩個問題,問題(2)
顯示 4 位時的寫法, // caculate temperature void SSegment_temp( void ) { AD_Temp = AD_DATA; Data[3] = AD_DATA / 1000; // 顯示千位數 AD_Temp = AD_Temp % 1000; // 取出百位以後的數 Data[2] = AD_Temp / 100; // 顯示百位數 AD_Temp = AD_Temp % 100; Data[1] = AD_Temp / 10; // 顯示十位數 Data[0] = AD_Temp % 10; // 顯示個位數 } ===================引 用 cliff1989 文 章=================== 如題,(1)題目是要8051讀取0804的值,轉為伏特數顯示在LCD上,但以往只學過顯示固定字串,變數的實在不知怎麼弄... (2)另若同時要3個七段顯示器顯示1~256(0~5V),又該如何增加進程式呢 |
cliff1989
一般會員 發表:6 回覆:2 積分:1 註冊:2009-03-23 發送簡訊給我 |
|
loveforme
一般會員 發表:22 回覆:39 積分:22 註冊:2009-03-24 發送簡訊給我 |
版大用的那個似乎是要顯示在超級終端機上用的指令???(我不太清楚耶...)
lcd裡面好像是你如果輸入一組位元組他就會顯示在字幕上(如果沒指定要顯示在哪邊的話) 所以你的string是一個char的陣列,看你的string指定到哪一個陣列變數 你的副程式就會依陣列中的[0] [1] [2] ....依序顯示出去,所以在LCD上可以看到一排字 你會定一個string其實跟變數應該都差不多吧... 你看你的變數的宣告是否符合你的string的格式 可以的把你宣告的變數post一下 還有你設定的常數字串 看一下你怎嚜帶進副程式的....因為我也想學一下... ===================引 用 cliff1989 文 章=================== 仍然不太懂...是要將輸入的變數顯示到LCD上 這是範例程式的顯示副程式 void display(char *string) { char k=0; while(string[k] !=0x00) { wrdata(string[k]); k ; } } 目前只會先定一串string再用display(string1);顯示,變數的還是不懂... |
阿信
版主 發表:111 回覆:983 積分:813 註冊:2005-03-10 發送簡訊給我 |
回答第一個問題:
ADC0804讀0~5V,對應到0~255,建議修改為 0~5V對應0~250,參考電壓使用5.1V。 如此小數問題會比較好解決。 對應電壓:5V/250格=0.02V/格, 將讀到的AD值乘0.02即為電壓值, 等於乘於2再除100。 [code cpp] unsigned int AD_Data,Volt;//AD值,電壓值。 unsigned char Disp[3];//三位顯示的數字,一位整數,二位小數 AD_Data=Read_ADC(); //讀ADC副程式。<-請自己寫 ADC2Volt() { Volt=AD_Data*2; //乘2,使成為0~500 Disp[0]=Volt/100; //除100,取百位數 Disp[1]=(Volt0)/10;//除100,餘數除10,取十位數 Disp[2]=Volt; //除10的餘數,取個位數 }[/code] ===================引 用 cliff1989 文 章=================== 如題,題目是要8051讀取0804的值,轉為伏特數顯示在LCD上,但以往只學過顯示固定字串,變數的實在不知怎麼弄... 另若同時要3個七段顯示器顯示1~256(0~5V),又該如何增加進程式呢 |
cliff1989
一般會員 發表:6 回覆:2 積分:1 註冊:2009-03-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |