線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5801
推到 Plurk!
推到 Facebook!

有關8051>LCD顯示變數的問題...(ADC0804)

答題得分者是:aki
cliff1989
一般會員


發表:6
回覆:2
積分:1
註冊:2009-03-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-28 19:19:32 IP:115.43.xxx.xxx 未訂閱
如題,題目是要8051讀取0804的值,轉為伏特數顯示在LCD上,但以往只學過顯示固定字串,變數的實在不知怎麼弄...
另若同時要3個七段顯示器顯示1~256(0~5V),又該如何增加進程式呢
aki
版主


發表:30
回覆:696
積分:755
註冊:2004-01-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-29 00:23:46 IP:61.229.xxx.xxx 訂閱
這是兩個問題,問題(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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-29 00:31:51 IP:61.229.xxx.xxx 訂閱
這是兩個問題,問題(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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-29 02:52:12 IP:115.43.xxx.xxx 未訂閱
仍然不太懂...是要將輸入的變數顯示到LCD上
這是範例程式的顯示副程式
void display(char *string)
{
char k=0;
while(string[k] !=0x00)
{
wrdata(string[k]);
k ;
}
}

目前只會先定一串string再用display(string1);顯示,變數的還是不懂...
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-18 23:56:45 IP:122.121.xxx.xxx 訂閱
版大用的那個似乎是要顯示在超級終端機上用的指令???(我不太清楚耶...)
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);顯示,變數的還是不懂...
編輯記錄
loveforme 重新編輯於 2009-05-18 23:57:52, 註解 無‧
loveforme 重新編輯於 2009-05-19 00:05:00, 註解 無‧
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-19 13:28:13 IP:114.32.xxx.xxx 訂閱
回答第一個問題:

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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-19 19:02:13 IP:115.43.xxx.xxx 未訂閱
此問題以解決~感謝各位的回答~
5V的程式算法後來則是用
A=5.0/255*ADCDB*10000;
table[0]=(A/10000);
table[2]=((A000)/1000);
table[3]=(((A000)00)/100);
剛好沒小數點的問題~
系統時間:2024-04-27 11:30:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!