lhcyy 发表于 2012-5-17 15:01:46

想把AD转换结果在12864显示出来,有点问题,大家看看

我的转换结果处理函数如下:

int ADC_av(uchar ch)
      {
          int ADC_avl=0;
               
       
                uchar num;
                num=10;
                for(num=10;num>0;num--)
                {
                  ADC_avl = ADC_avl +GET_ADCresult(ch);          //GET_ADCresult(ch)是一个ad转换驱动函数的转换结果
                  
                }
                  ADC_avl/=10;                                                       //求10次平均值
                  
                  
                   ADC_CHresult =(ADC_avl*4)/10;           //想把转换结果的十位和个位存在一个数组里面
                   ADC_CHresult =(ADC_avl*4)%10;


                  //return(ADC_CHresult );
         }

但是每次让lcd读取ADC_CHresult[ ] 里面的结果显示的时候,总是显示不出来正确的值,有的是乱码有的是其他东西。有没有
做过的或者懂的帮忙下

eduhf_123 发表于 2012-5-17 16:22:34

ADC_avl能保证在25以下么?

如果可能大于25,乘4以后就可能大于100,那么你用“%10”操作将得到其个位,可用“/10”操作将得到什么呢?还能显示么??

lhcyy 发表于 2012-5-17 16:28:27

eduhf_123 发表于 2012-5-17 16:22 static/image/common/back.gif
ADC_avl能保证在25以下么?

如果可能大于25,乘4以后就可能大于100,那么你用“%10”操作将得到其个位, ...

我的采样电压不超过5v其实那个结果乘以4其实是adval*1000/250的意思,想的到流过250电阻的电流值。/ 这个是求模的意思

eduhf_123 发表于 2012-5-17 17:53:24

lhcyy 发表于 2012-5-17 16:28 static/image/common/back.gif
我的采样电压不超过5v其实那个结果乘以4其实是adval*1000/250的意思,想的到流过250电阻的电流值。/ 这个 ...

首先没问你adval表示什么意思,你只要考虑它的值是不是会超过25就好。

其次,“/”运算符表示取模?你用的什么C语言教材??

lhcyy 发表于 2012-5-18 09:54:01

eduhf_123 发表于 2012-5-17 17:53 static/image/common/back.gif
首先没问你adval表示什么意思,你只要考虑它的值是不是会超过25就好。

其次,“/”运算符表示取模?你用 ...

/是取模这个解释我是在郭天祥的新概念51单片机教程里面看到的。至于上面程序,我是想把得到的采样值变成十进制数,取个位和十位放入数组,然后在lcd显示时候从数组取出应用

USACH 发表于 2012-5-18 10:04:57

lhcyy 发表于 2012-5-18 09:54 static/image/common/back.gif
/是取模这个解释我是在郭天祥的新概念51单片机教程里面看到的。至于上面程序,我是想把得到的采样值变成 ...

再去看一遍这个教程……

lhcyy 发表于 2012-5-18 11:09:17

本帖最后由 lhcyy 于 2012-5-18 11:13 编辑

USACH 发表于 2012-5-18 10:04 static/image/common/back.gif
再去看一遍这个教程……

可是教程里面好像就是这样的啊上个教程里面的截图

USACH 发表于 2012-5-18 11:18:22

lhcyy 发表于 2012-5-18 11:09 static/image/common/back.gif
可是教程里面好像就是这样的啊上个教程里面的截图

再看一遍吧?

anta09 发表于 2012-5-18 11:20:03

你的数超过了吧

USACH 发表于 2012-5-18 11:30:36

我见到的说法是这样的:
取模(或者余数)运算符 (%)比如5.1%0.5余数是0.1   比如7%3余数是1

除法运算符 (/)   比如6/3   等于2   注:这个是除法……

sn516952 发表于 2012-5-18 13:50:38

int ADC_avl=0;改成unsigned int 类型

lhcyy 发表于 2012-5-21 11:33:21

USACH 发表于 2012-5-18 11:30 static/image/common/back.gif
我见到的说法是这样的:
取模(或者余数)运算符 (%)比如5.1%0.5余数是0.1   比如7%3余数是1



这位兄弟你好好看看看吧。在郭天祥的书里面是用“/”来取得一个数除以另一个数的模,也就是整数部分

eduhf_123 发表于 2012-5-22 18:26:03

lhcyy 发表于 2012-5-21 11:33 static/image/common/back.gif
这位兄弟你好好看看看吧。在郭天祥的书里面是用“/”来取得一个数除以另一个数的模,也就是整数部分



那个叫“取商”,通常我们所说的“取模”指的都是“取余”。

tlptotop 发表于 2012-5-23 09:13:40

本帖最后由 tlptotop 于 2012-5-23 09:15 编辑

USACH 发表于 2012-5-18 11:30 static/image/common/back.gif
我见到的说法是这样的:
取模(或者余数)运算符 (%)比如5.1%0.5余数是0.1   比如7%3余数是1



%是求余(取模),用于计算左操作数除以右操作数的余数。该操作符的操作数只能为整形,包括char short int long类型,以及对应的unsigned类型(C++中还包括bool类型)。所以你举的第一个例子是完全错误的!

zxc2769 发表于 2012-5-23 10:53:26

取模 取余

xiaobendan001 发表于 2012-5-23 11:03:20

不管取啥了,反正意思就是转成10进制数了
问一下楼主,ch*2是什么意思?这样操作数组元素会不会产生越界?

lhcyy 发表于 2012-5-23 11:28:38

xiaobendan001 发表于 2012-5-23 11:03 static/image/common/back.gif
不管取啥了,反正意思就是转成10进制数了
问一下楼主,ch*2是什么意思?这样操作数组元素会不会产生越界? ...

你把ch取“0.1.2.3.4等等”代入就可以i帧到为什么ch*2了,

lhcyy 发表于 2012-5-23 11:29:57

tlptotop 发表于 2012-5-23 09:13 static/image/common/back.gif
%是求余(取模),用于计算左操作数除以右操作数的余数。该操作符的操作数只能为整形,包括char short in ...

这位大侠说的对,“/”,“%”两边的确应该是整数。对于小数是不成立的

xiaobendan001 发表于 2012-5-23 11:51:24

lhcyy 发表于 2012-5-23 11:28 static/image/common/back.gif
你把ch取“0.1.2.3.4等等”代入就可以i帧到为什么ch*2了,

你的意思是把很多个结果都转换为10进制然后一次按照十位个位的顺序都存到一个数组里面,我问的是这个数组有没有越界操作?

xiaomu 发表于 2012-5-23 12:15:53

lhcyy 发表于 2012-5-17 16:28 static/image/common/back.gif
我的采样电压不超过5v其实那个结果乘以4其实是adval*1000/250的意思,想的到流过250电阻的电流值。/ 这个 ...

采样电压不超过5v, 你的模拟参考电压是多少,如果也是5v的话,
你的AD转换值 就在 0-255之间,adval 不能超过25, 经过这样计算的话
你的采样点电压绝对不能超过 (25*5)/255 = 0.49v,
请楼主仔细确认,你的采样电阻的电压有没有超过0.49v

xiaomu 发表于 2012-5-23 12:17:01

xiaomu 发表于 2012-5-23 12:15 static/image/common/back.gif
采样电压不超过5v, 你的模拟参考电压是多少,如果也是5v的话,
你的AD转换值 就在 0-255之间,adval 不能 ...

我的计算结果是以8位AD为参考的

lhcyy 发表于 2012-5-23 14:30:20

xiaomu 发表于 2012-5-23 12:15 static/image/common/back.gif
采样电压不超过5v, 你的模拟参考电压是多少,如果也是5v的话,
你的AD转换值 就在 0-255之间,adval 不能 ...

谢谢,首先我上面发的程序里面数据类型发错了。我的adval和函数我都定义为uint,而不是int,在int下的确如你所说。但在uint下可以为65536.所以没问题了。。我采样结果是10位的。现在我已经能分离出十位个个位了。而且也在12864上面都显示出来。

现在遇到的问题是想把结果转换为小数。然后带小数显示在12864上面。这个不知道怎么弄了。求指导下

tlptotop 发表于 2012-5-23 14:33:40

lhcyy 发表于 2012-5-23 11:29 static/image/common/back.gif
这位大侠说的对,“/”,“%”两边的确应该是整数。对于小数是不成立的

我可没有这么说哟,我只说“%”的两边必须是整数,没有说“/”的两边必须是整数。

USACH 发表于 2012-5-24 06:26:02

本帖最后由 USACH 于 2012-5-24 06:37 编辑

tlptotop 发表于 2012-5-23 09:13 static/image/common/back.gif
%是求余(取模),用于计算左操作数除以右操作数的余数。该操作符的操作数只能为整形,包括char short in ...

不想多说,请看微软vs说明吧。虽然我从来没用过小数,但是确实存在这种用法。

给证据吧:http://msdn.microsoft.com/zh-cn/library/h6zfzfy7(v=vs.80).aspx

USACH 发表于 2012-5-24 06:28:35

lhcyy 发表于 2012-5-21 11:33 static/image/common/back.gif
这位兄弟你好好看看看吧。在郭天祥的书里面是用“/”来取得一个数除以另一个数的模,也就是整数部分 ...

好吧,如果你觉得老郭的书才是对的,而且你觉得你看懂啦,那你赢啦,我们都错啦,还不行?

tlptotop 发表于 2012-5-24 09:30:24

USACH 发表于 2012-5-24 06:26 static/image/common/back.gif
不想多说,请看微软vs说明吧。虽然我从来没用过小数,但是确实存在这种用法。

给证据吧:http://msdn.mi ...

是的,这种用法的确存在,但是不是在C / C++中。在51单片板块里,通常是C语言,你这样说,很容易误导初学者。
你提供的证据能证明这种用法在vs里是正确的,但vs支持多种语言,在Jscipt里正确,在C / C++里是错误的。我在14楼说的那句,基本上是 C++ Primer中文版(第四版)里的原话。
下面是 5.1 % 0.5 在VC++2010 和 Keil uV4 里的错误信息:

USACH 发表于 2012-5-24 11:38:10

tlptotop 发表于 2012-5-24 09:30 static/image/common/back.gif
是的,这种用法的确存在,但是不是在C / C++中。在51单片板块里,通常是C语言,你这样说,很容易误导初学 ...

其实我为了说明\%哪是求余数。

页: [1]
查看完整版本: 想把AD转换结果在12864显示出来,有点问题,大家看看