|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
挑戰(zhàn)自我!幫助他人!算法問題! |
| 作者:byd318 欄目:單片機 |
Instruction: 比如我們做一個AD0809的AD采集(8位),測試電壓在5V時得到的是數(shù)字量是255,如果得到的數(shù)字量是97,則對應計算公式: 5*97/255=1.902;或許你可以寫為:數(shù)字量/51; 我們都知道在C語言中,整數(shù)除以整數(shù)肯定只有得到整數(shù);就是說,如何在整型中得到所需要的BCD碼(1,9,0,2);有人提出定義浮點數(shù)來處理,當然這樣沒問題:今天我們提出的只用整型來處理: Intent: 看看誰能提出更好的實際可用的解決辦法;挑戰(zhàn)自我!幫助他人! |
| 2樓: | >>參與討論 |
| 作者: zhonghuahun212 于 2006/11/7 11:22:39 發(fā)布:
unsigend CHAR *p,i; 你看看能達到要求么,i是控制小數(shù)位的個數(shù),如果要保留1位小數(shù),i就應該<2,2位小數(shù),i<4;3位小數(shù),i<5;以此類推;k是除數(shù),j是被除數(shù);*p里面放的就是要的結果 |
|
| 3樓: | >>參與討論 |
| 作者: zhonghuahun212 于 2006/11/7 11:23:57 發(fā)布:
還需要說明一點,考慮到四舍五入的話, 最后一位小數(shù)要判斷一下,就在后面加一點就行了!這個不用多說了吧!哈哈,不知道對頭部,懇請斧正! |
|
| 4樓: | >>參與討論 |
| 作者: ee168 于 2006/11/8 8:25:36 發(fā)布:
有實用性,我也想得到一個在匯編下看來更有效的C語言程序,我想一想 我現(xiàn)在構思是,通過對整數(shù)51取余來獲得 |
|
| 5樓: | >>參與討論 |
| 作者: byd318 于 2006/11/9 13:19:39 發(fā)布:
對于zhonghuahun212的回復表示衷心的感謝!思路很正確! 只是我建議在51中最好不用指針,那樣代碼會長一些;對于zhonghuahun212中提到保留小數(shù)點問題,我不知道是我理解上是否有誤,單字節(jié)最大值255;(X<=255)/51后肯定是小數(shù),i=2 保留1位,I<3, 對應2;i<4,對應3;依次類推: 謝謝zhonghuahun212的回答,需要的朋友可以放心使用;我只是提出來,讓一些朋友發(fā)起一種用自己的知識幫助別人,同時提高自己的一種思想;國人中做技術要想趕上和超過外國,要想成為精英就應該該有一種務實的精神和幫助自己同胞的思想. 對于那位提倡用查表的方法,肯定的是感謝你對貼的關心,但我認為一個簡單的計算就用查表且空間占3K,如果我只用2051這種小片子,用串行方式得到8位數(shù)據(jù);2051如何裝下3k;現(xiàn)在追求小容量干大事情;違背了實用性強的原則! |
|
| 6樓: | >>參與討論 |
| 作者: thfli 于 2006/11/9 16:55:32 發(fā)布:
以下是引用 byd318 在(2006-11-9 13:19:39)的發(fā)言 對于那位提倡用查表的方法,肯定的是感謝你對貼的關心,但我認為一個簡單的計算就用查表且空間占3K,如果我只用2051這種小片子,用串行方式得到8位數(shù)據(jù);2051如何裝下3k;現(xiàn)在追求小容量干大事情;違背了實用性強的原則!
另外,你在樓頂?shù)馁N子里也沒指明你要用什么MCU,就一般考慮,現(xiàn)在3K空間對大部分單片機來說實在不算什么。如果從成本考慮,你非要用小片子,我的方案中也提到了一個節(jié)省空間的辦法,沒有仔細想,但應該是可行的。 最后,不要把問題的考慮局限于51的MCU。 |
|
| 7樓: | >>參與討論 |
| 作者: weiwei00 于 2006/11/9 18:48:33 發(fā)布:
談點看法:1、LZ要得到的是BCD碼,肯定是用于顯示,由于人眼觀察的滯留性,刷新速率不可能很高。用2051做BCD碼轉(zhuǎn)換是游刃有余。2、0809輸出的8位數(shù)據(jù),轉(zhuǎn)換成相應的BCD 也不復雜,我通常的做法是先確定小數(shù)位數(shù)。比如3位。把ad后的數(shù)據(jù)先乘以5,再乘以1000(擴大1000倍),除255就得到結果。再算成BCD。第一位是整數(shù),后三位是小數(shù),6M的晶體,1mS以內(nèi)就完成,對于顯示速度來說,是能承受的,即使8路完全轉(zhuǎn)換,也耗時不多 |
|
| 8樓: | >>參與討論 |
| 作者: thfli 于 2006/11/9 23:29:16 發(fā)布:
以下是引用 weiwei00 在(2006-11-9 18:48:33)的發(fā)言 談點看法:1、LZ要得到的是BCD碼,肯定是用于顯示,由于人眼觀察的滯留性,刷新速率不可能很高。用2051做BCD碼轉(zhuǎn)換是游刃有余。2、0809輸出的8位數(shù)據(jù),轉(zhuǎn)換成相應的BCD 也不復雜,我通常的做法是先確定小數(shù)位數(shù)。比如3位。把ad后的數(shù)據(jù)先乘以5,再乘以1000(擴大1000倍),除255就得到結果。再算成BCD。第一位是整數(shù),后三位是小數(shù),6M的晶體,1mS以內(nèi)就完成,對于顯示速度來說,是能承受的,即使8路完全轉(zhuǎn)換,也耗時不多 對于顯示速度,明顯是能夠承受的。但問題是在你進行轉(zhuǎn)換的這1ms內(nèi),你的程序如果除非是響應中斷,不能干其它任何事情。明白我的意思沒有?在很多time demanding的應用中,1ms是多么長的時間啊 |
|
| 9樓: | >>參與討論 |
| 作者: ee168 于 2006/11/13 7:42:24 發(fā)布:
uchar jieguo[3]; fun(uint yuan){ |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |