欢迎哈哈哈3 发表于 2024-12-10 16:05:20

ADC转换

<p>问下大家,我做这个自能水箱实验,中的ADC湿度转换,转换结果始终是乱的,(独立的湿度采集都没问题,但是加在主程序中,采集的数据就是乱的)这是什么原因呢?能指点下吗?谢谢了</p>
<p>程序已经上传<a href="forum.php?mod=attachment&amp;aid=71364" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:自能水箱.rar</a></p>
<p>下面是部分主程序:</p>
<p>#include &quot;stc8.h&quot;<br />
#include &quot;lcd12864.h&quot;<br />
#include &quot;adc.h&quot;<br />
#include &quot;stdio.h&quot;</p>
<p>unsigned char sta={0,0,0,0,0,0,0,0,0,0};//第0、1位装水位百、十个位,第2,3位装湿度。<br />
longint shidu=0;</p>
<p>void setport()<br />
{<br />
P0M1 = 0x00;   P0M0 = 0x00;<br />
P1M1 = 0x04;   P1M0 = 0x00; //配置P1.2为高阻ADC输入<br />
P2M1 = 0x00;   P2M0 = 0x00;<br />
P3M1 = 0x00;   P3M0 = 0x00;<br />
P4M1 = 0x00;   P4M0 = 0x00;<br />
P5M1 = 0x00;   P5M0 = 0x00;<br />
P6M1 = 0x00;   P6M0 = 0x00;<br />
P7M1 = 0x00;   P7M0 = 0x00;<br />
}</p>
<p>void main()<br />
{<br />
setport();//引脚初始化<br />
LCDInit();//液晶初始化<br />
adc_Init();//AD转换初始化<br />
for(;;)</p>
<p>{</p>
<p>shidu=ADC_value();//湿度采集</p>
<pre><code>        sta=shidu/100;
        sta=shidu%100;
        DisplayNUMChar(4,4,sta);
        DisplayNUMChar(5,4,sta);
        DisplayListChar(6, 4, &quot;mv&quot;);
</code></pre>
<p>}</p>
<p>}</p>
<p>ADC转换程序</p>
<p>ADC.C</p>
<p>#include &quot;adc.h&quot;</p>
<p>void adc_Init(void)<br />
{<br />
ADC_CONTR &amp;= (0xF2);<br />
P_SW2 |=0X80;<br />
ADCTIM |=0X3F;<br />
P_SW2 &amp;=0X7F;<br />
ADCCFG |=0X2F;<br />
ADC_CONTR &amp;=0XDF;<br />
EADC=0;<br />
ADC_CONTR|=0X82;<br />
ADC_delay2ms();<br />
ADC_delay2ms();<br />
}</p>
<p>void ADC_start(void)<br />
{<br />
ADC_CONTR|=0X42;<br />
}</p>
<p>unsigned int ADC_value()<br />
{<br />
float temp1,temp2,temp3;<br />
long int temp4;<br />
unsigned char ADC_H,ADC_L;<br />
ADC_start();<br />
ADC_delay2ms();<br />
ADC_delay2ms();<br />
while(!(ADC_CONTR &amp; 0X20));<br />
ADC_CONTR &amp;=0XDF;<br />
ADC_CONTR &amp;=0XBF;<br />
ADC_H=ADC_RES &amp; 0X0F;<br />
ADC_L=ADC_RESL;<br />
temp1=(ADC_H&lt;&lt;8)+ADC_L;</p>
<p>temp2=temp1*5000;//参考电压为5V,转成mv<br />
temp3=temp2/4096;<br />
temp4=(unsigned int) temp3;//转换成整型<br />
return temp4;<br />
}<br />
void ADC_delay2ms()                //@11.0592MHz<br />
{<br />
unsigned char data i, j;</p>
<pre><code>_nop_();
i = 4;
j = 146;
do
{
        while (--j);
} while (--i);
</code></pre>
<p>}</p>
<p>ADC.H</p>
<p>#include &quot;stc8.h&quot;<br />
#include &lt;intrins.h&gt;</p>
<p>void adc_Init();<br />
void ADC_start();<br />
void ADC_delay2ms();<br />
unsigned int ADC_value();</p>

hsrzq 发表于 2024-12-10 20:21:57

<p>给你个机会重新组织一下代码,现在的代码完全没法看……</p>

欢迎哈哈哈3 发表于 2024-12-10 20:38:03

hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

程序上传了的,能不能把程序下载了,看一下下啊{:4_167:}{:4_201:}

欢迎哈哈哈3 发表于 2024-12-10 20:40:19

hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

我现在外面的{:4_167:}{:4_187:}

欢迎哈哈哈3 发表于 2024-12-10 20:57:49

hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

好的,刚赶回来

欢迎哈哈哈3 发表于 2024-12-10 21:08:22

hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

大佬,重新上传了,能不能看一下,谢谢了

hsrzq 发表于 2024-12-11 10:39:37

<pre><code>unsigned int ADC_value()
{
        float temp1, temp2, temp3;
        long int temp4;
…………
        temp2 = temp1 * 5000; // 参考电压为5V,转成mv
        temp3 = temp2 / 4096;
        temp4 = (unsigned int)temp3; // 转换成整型
        return temp4;
}
</code></pre>
<p>只能说这段代码的类型好混乱。其它的代码太多看不过来了……</p>

欢迎哈哈哈3 发表于 2024-12-11 11:17:58

hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
        float temp1, temp2, temp3;


我也觉得这段代码的类型有些乱,也尝试修改过,数据还是乱的{:4_167:}

欢迎哈哈哈3 发表于 2024-12-11 11:21:20

hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
        float temp1, temp2, temp3;

bkeuqoaq 发表于 2024-12-11 11:28:18

shuiwei=150;
                sta=shuiwei/100;
                sta=shuiwei%100;//将水位信息装进数组中

这里水位是3位数,两个位置显示肯定乱码
页: [1] 2
查看完整版本: ADC转换