找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4108|回復: 46
打印 上一主題 下一主題
收起左側

C語言如何分離每一位顯示變量?

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:705846 發(fā)表于 2023-11-19 16:07 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
請幫忙看看,為什么分離不出正確的結果,現(xiàn)在分離結果的0.03, 我需要的是771

uchar adc_result;
uint adcresult_0,adcresult_1,adcresult_2;


                     adc_result = 771;
                        adcresult_0= (adc_result/100)%100;
                        adcresult_1= (adc_result/10)%10;
                        adcresult_2= adc_result%10;

                        DisplayData[0]=DIG_CODE[adcresult_0]|0x80;
                        DisplayData[1]=DIG_CODE[adcresult_1];
                        DisplayData[2]=DIG_CODE[adcresult_2];

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:883242 發(fā)表于 2023-11-19 16:33 | 只看該作者
uchar adc_result;
adc_result = 771;

上面這兩句反復的看,直到看出問題為止。
回復

使用道具 舉報

板凳
ID:235200 發(fā)表于 2023-11-19 16:40 | 只看該作者
adcresult_0= (adc_result/100)%100;
adcresult_1= (adc_result/10)%10;
adcresult_2= adc_result%10;
這三行應該為:
adcresult_0= adc_result/100;
adcresult_1= (adc_result/10)%10;
adcresult_2= adc_result%10;
回復

使用道具 舉報

地板
ID:883242 發(fā)表于 2023-11-19 16:48 | 只看該作者
csmyldl 發(fā)表于 2023-11-19 16:40
adcresult_0= (adc_result/100)%100;
adcresult_1= (adc_result/10)%10;
adcresult_2= adc_result%10; ...

這三行你寫錯了,樓主是對的。
回復

使用道具 舉報

5#
ID:705846 發(fā)表于 2023-11-19 17:10 | 只看該作者
csmyldl 發(fā)表于 2023-11-19 16:40
adcresult_0= (adc_result/100)%100;
adcresult_1= (adc_result/10)%10;
adcresult_2= adc_result%10; ...

還是不顯示小數(shù)點后的數(shù)。

uchar adc_result;
uint adcresult_0,adcresult_1,adcresult_2;
uchar GetADCResult();

        adc_result = GetADCResult();       

                        //0-1-2母線電壓顯示
                        //3-4-5功率顯示
                        if(adc_result<10)
                        {
                        adcresult_0= adc_result/100;
                        adcresult_1= adc_result/10%10;
                        adcresult_2= adc_result%10;
                        DisplayData[0]=DIG_CODE[adcresult_0]|0x80;
                        DisplayData[1]=DIG_CODE[adcresult_1];
                        DisplayData[2]=DIG_CODE[adcresult_2];
                        }
                        else if(adc_result>10)
                        {
                        adcresult_0= adc_result/10;
                        adcresult_1= adc_result%10;
                        adcresult_2= (adc_result*10)%10;
                        DisplayData[0]=DIG_CODE[adcresult_0];
                        DisplayData[1]=DIG_CODE[adcresult_1]|0x80;
                        DisplayData[2]=DIG_CODE[adcresult_2];
                        }                       

uchar GetADCResult()
{

        ADC_CONTR = 0x89;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while(!(ADC_CONTR & 0x10)); //等待ADC轉(zhuǎn)換完成
        ADC_CONTR &= ~0x10; //CLOSE ADC
        return (ADC_RES*256+ADC_RESL)*(5.05)/1024/0.08;       
}
回復

使用道具 舉報

6#
ID:384109 發(fā)表于 2023-11-19 17:13 | 只看該作者
搞清除法的結果是什么,搞清取余的結果是什么,搞清要的是哪一位數(shù)字,板凳的錯了其中一行代碼
回復

使用道具 舉報

7#
ID:705846 發(fā)表于 2023-11-19 17:30 | 只看該作者
人中狼 發(fā)表于 2023-11-19 17:13
搞清除法的結果是什么,搞清取余的結果是什么,搞清要的是哪一位數(shù)字,板凳的錯了其中一行代碼

懷疑是不是ADC沒有傳小數(shù)位過來
回復

使用道具 舉報

8#
ID:705846 發(fā)表于 2023-11-19 17:34 | 只看該作者
人中狼 發(fā)表于 2023-11-19 17:13
搞清除法的結果是什么,搞清取余的結果是什么,搞清要的是哪一位數(shù)字,板凳的錯了其中一行代碼

真的沒發(fā)現(xiàn)錯誤,我用excel模擬計算沒有錯誤
回復

使用道具 舉報

9#
ID:883242 發(fā)表于 2023-11-19 17:42 | 只看該作者
samxon 發(fā)表于 2023-11-19 17:34
真的沒發(fā)現(xiàn)錯誤,我用excel模擬計算沒有錯誤

把我在沙發(fā)的發(fā)言讀100遍。
回復

使用道具 舉報

10#
ID:705846 發(fā)表于 2023-11-19 17:57 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 17:42
把我在沙發(fā)的發(fā)言讀100遍。

老師,已看101遍,還是發(fā)現(xiàn)不了問題。第三位始終顯示0
adc_result = 12.76543;

                        //0-1-2母線電壓顯示
                        //3-4-5功率顯示
                        if(adc_result<10)
                        {
                        adcresult_0= adc_result/100;
                        adcresult_1= adc_result/10%10;
                        adcresult_2= adc_result%10;
                        DisplayData[0]=DIG_CODE[adcresult_0]|0x80;
                        DisplayData[1]=DIG_CODE[adcresult_1];
                        DisplayData[2]=DIG_CODE[adcresult_2];
                        }
                        else if(adc_result>10)
                        {
                        adcresult_0= adc_result/10;
                        adcresult_1= adc_result%10;
                        adcresult_2= adc_result*10%10;
                        DisplayData[0]=DIG_CODE[adcresult_0];
                        DisplayData[1]=DIG_CODE[adcresult_1]|0x80;
                        DisplayData[2]=DIG_CODE[adcresult_2];
                        }                       
回復

使用道具 舉報

11#
ID:965189 發(fā)表于 2023-11-19 17:58 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 17:42
把我在沙發(fā)的發(fā)言讀100遍。

被門檻石絆腳了,只要你看出問題了,就是一大進步。
回復

使用道具 舉報

12#
ID:965189 發(fā)表于 2023-11-19 18:09 | 只看該作者
君工創(chuàng) 發(fā)表于 2023-11-19 17:58
被門檻石絆腳了,只要你看出問題了,就是一大進步。

                        adcresult_0= adc_result/100;
                        adcresult_1= adc_result/10%10;
                        adcresult_2= adc_result%10;
中間行錯了,應改為,adcresult_0= adc_result/100;
                                adcresult_1= adc_result%100/10;
                                adcresult_2= adc_result%10;
回復

使用道具 舉報

13#
ID:373976 發(fā)表于 2023-11-19 18:10 | 只看該作者
沙發(fā)的內(nèi)容很重要的,
回復

使用道具 舉報

14#
ID:712493 發(fā)表于 2023-11-19 18:24 | 只看該作者
實際看看每個寄存器在遠行后的值,然后按自己寫程序的思路手工算算運行后的值就可以知道問題出在哪里
回復

使用道具 舉報

15#
ID:883242 發(fā)表于 2023-11-19 18:49 | 只看該作者
你們居然都看不懂我在沙發(fā)的發(fā)言,我在說清楚一些
根據(jù):uchar adc_result;

可知下面的語句:
adc_result=771;
編譯器會翻譯成:
adc_result=3;
回復

使用道具 舉報

16#
ID:373976 發(fā)表于 2023-11-19 18:50 | 只看該作者
好好看看沙發(fā)的回復,問題就在那里
回復

使用道具 舉報

17#
ID:965189 發(fā)表于 2023-11-19 19:15 | 只看該作者
樓主沒看出沙發(fā)的問題呢。
回復

使用道具 舉報

18#
ID:397054 發(fā)表于 2023-11-19 19:30 | 只看該作者
samxon 發(fā)表于 2023-11-19 17:57
老師,已看101遍,還是發(fā)現(xiàn)不了問題。第三位始終顯示0
adc_result = 12.76543;

都跟你說了,就是哪兩句話的問題,要是看100遍不行的話,那就看200遍....

不過我可以提示你一下,adc_result = 257;行不行?如果行的話,那就只好請你忠實地按照C規(guī)則執(zhí)行下行語句:

while ("adc_result = 257" 行);
回復

使用道具 舉報

19#
ID:397054 發(fā)表于 2023-11-19 19:39 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 16:48
這三行你寫錯了,樓主是對的。

都是對的。
回復

使用道具 舉報

20#
ID:705846 發(fā)表于 2023-11-19 20:06 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 18:49
你們居然都看不懂我在沙發(fā)的發(fā)言,我在說清楚一些
根據(jù):uchar adc_result;

如果變成3了,為什么第二位又顯示正常呢
回復

使用道具 舉報

21#
ID:883242 發(fā)表于 2023-11-19 20:18 | 只看該作者
samxon 發(fā)表于 2023-11-19 20:06
如果變成3了,為什么第二位又顯示正常呢

把樓主的發(fā)言默寫100遍,樓主要顯示7.71,實際顯示0.03
回復

使用道具 舉報

22#
ID:213173 發(fā)表于 2023-11-19 20:44 | 只看該作者
本帖最后由 wulin 于 2023-11-19 21:04 編輯

        uint adc_result = 771;
//        uint adcresult_0,adcresult_1,adcresult_2;
        
        
//        adc_result = 771;
//        adcresult_0= (adc_result/100)%100;
//        adcresult_1= (adc_result/10)%10;
//        adcresult_2= adc_result%10;
        
        DisplayData[0]=DIG_CODE[adc_result/100%10]|0x80;
        DisplayData[1]=DIG_CODE[adc_result/10%10];
        DisplayData[2]=DIG_CODE[adc_result%10];
回復

使用道具 舉報

23#
ID:61207 發(fā)表于 2023-11-19 20:48 | 只看該作者
uchar adc_result;
回復

使用道具 舉報

24#
ID:61207 發(fā)表于 2023-11-19 20:50 | 只看該作者
uchar adc_result;
adc_result = 771;
771-256-256-256=3


回復

使用道具 舉報

25#
ID:705846 發(fā)表于 2023-11-19 21:06 | 只看該作者
#define uint unsigned int
#define uchar unsigned char
uint adc_result;
adc_result=12.5
一樣分離不出小數(shù)點后的數(shù)
                      adcresult_0= adc_result/10;
                        adcresult_1= adc_result%10;
                        adcresult_2= adc_result*10%10;
                        DisplayData[0]=DIG_CODE[adcresult_0];
                        DisplayData[1]=DIG_CODE[adcresult_1]|0x80;
                        DisplayData[2]=DIG_CODE[adcresult_2];
回復

使用道具 舉報

26#
ID:705846 發(fā)表于 2023-11-19 21:09 | 只看該作者
#define uint unsigned int;
uint adc_result=12.3
adcresult_2= adc_result*10%10;
DisplayData[2]=DIG_CODE[adcresult_2];
還是分離不出第三位
回復

使用道具 舉報

27#
ID:883242 發(fā)表于 2023-11-19 21:14 | 只看該作者
samxon 發(fā)表于 2023-11-19 21:06
#define uint unsigned int
#define uchar unsigned char
uint adc_result;

uint adc_result;
adc_result=12.5

這次矛盾出在這兩句
回復

使用道具 舉報

28#
ID:705846 發(fā)表于 2023-11-19 21:24 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 21:14
uint adc_result;
adc_result=12.5

float adc_result;
adc_result = 12.5
回復

使用道具 舉報

29#
ID:384109 發(fā)表于 2023-11-19 21:26 | 只看該作者
數(shù)據(jù)類型要符合目標的數(shù)據(jù)類型
回復

使用道具 舉報

30#
ID:883242 發(fā)表于 2023-11-19 21:36 | 只看該作者
samxon 發(fā)表于 2023-11-19 21:24
float adc_result;
adc_result = 12.5

還是不對,float不能用/(整除)和%兩個運算。
回復

使用道具 舉報

31#
ID:69038 發(fā)表于 2023-11-19 21:40 | 只看該作者
如果:
    uchar adc_result;  //那么后面的“adc_result = 771;"這個就不對了,除非你的uchar 不是 “unsigned char”

  這個:
     adcresult_0= (adc_result/100)%100;//=>最好能寫成adc_result/100)%10;雖然結果是一樣的。
   而且  adcresult_0也不用定義成uint,除非你的uint是“unsigned char”;雖然結果是一樣的。

還是按常規(guī)化的書寫格式比較好,非常規(guī)的格式指不定會有什么異常發(fā)生。


回復

使用道具 舉報

32#
ID:69038 發(fā)表于 2023-11-19 21:46 | 只看該作者
samxon 發(fā)表于 2023-11-19 17:30
懷疑是不是ADC沒有傳小數(shù)位過來

uchar GetADCResult()//  uchar這個怎么會有小數(shù)點回傳?有小數(shù)點是float
回復

使用道具 舉報

33#
ID:965189 發(fā)表于 2023-11-19 22:07 | 只看該作者
樓主定義的變量是:uchar adc_result;
回復

使用道具 舉報

34#
ID:883242 發(fā)表于 2023-11-19 22:15 | 只看該作者
zhuls 發(fā)表于 2023-11-19 21:40
如果:
    uchar adc_result;  //那么后面的“adc_result = 771;"這個就不對了,除非你的uchar 不是 “u ...

你以為寫成char或者unsigned char就是8位了?naive!我用過char是16位的編譯器,你見識太少。
回復

使用道具 舉報

35#
ID:705846 發(fā)表于 2023-11-20 08:47 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 21:36
還是不對,float不能用/(整除)和%兩個運算。

感謝你的指導,把C教程數(shù)據(jù)類型又看了一遍,現(xiàn)在正常了。
回復

使用道具 舉報

36#
ID:69038 發(fā)表于 2023-11-20 08:49 | 只看該作者
Hephaestus 發(fā)表于 2023-11-19 22:15
你以為寫成char或者unsigned char就是8位了?naive!我用過char是16位的編譯器,你見識太少。

你用的16位的是什么編譯器?說出來讓我見識一下。
回復

使用道具 舉報

37#
ID:1100408 發(fā)表于 2023-11-20 08:50 | 只看該作者
應改為:adcresult_0= adc_result/100;                                 adcresult_1= adc_result%100/10;
回復

使用道具 舉報

38#
ID:272119 發(fā)表于 2023-11-20 10:00 | 只看該作者
這個我也偶爾會煩這樣的錯誤,因為經(jīng)常會處理十進制5-6位數(shù),然后全局變量定義時沒有考慮到大數(shù)值超標問題.
回復

使用道具 舉報

39#
ID:1096212 發(fā)表于 2023-11-20 10:04 | 只看該作者
數(shù)據(jù)類型錯了,后面的一切都是白干。這個很重要
回復

使用道具 舉報

40#
ID:883242 發(fā)表于 2023-11-20 13:51 | 只看該作者
zhuls 發(fā)表于 2023-11-20 08:49
你用的16位的是什么編譯器?說出來讓我見識一下。

你去ti官網(wǎng)找spru514z這份文檔看看。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表