ADC转换
<p>问下大家,我做这个自能水箱实验,中的ADC湿度转换,转换结果始终是乱的,(独立的湿度采集都没问题,但是加在主程序中,采集的数据就是乱的)这是什么原因呢?能指点下吗?谢谢了</p><p>程序已经上传<a href="forum.php?mod=attachment&aid=71364" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:自能水箱.rar</a></p>
<p>下面是部分主程序:</p>
<p>#include "stc8.h"<br />
#include "lcd12864.h"<br />
#include "adc.h"<br />
#include "stdio.h"</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, "mv");
</code></pre>
<p>}</p>
<p>}</p>
<p>ADC转换程序</p>
<p>ADC.C</p>
<p>#include "adc.h"</p>
<p>void adc_Init(void)<br />
{<br />
ADC_CONTR &= (0xF2);<br />
P_SW2 |=0X80;<br />
ADCTIM |=0X3F;<br />
P_SW2 &=0X7F;<br />
ADCCFG |=0X2F;<br />
ADC_CONTR &=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 & 0X20));<br />
ADC_CONTR &=0XDF;<br />
ADC_CONTR &=0XBF;<br />
ADC_H=ADC_RES & 0X0F;<br />
ADC_L=ADC_RESL;<br />
temp1=(ADC_H<<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 "stc8.h"<br />
#include <intrins.h></p>
<p>void adc_Init();<br />
void ADC_start();<br />
void ADC_delay2ms();<br />
unsigned int ADC_value();</p>
<p>给你个机会重新组织一下代码,现在的代码完全没法看……</p>
hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……
程序上传了的,能不能把程序下载了,看一下下啊{:4_167:}{:4_201:} hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……
我现在外面的{:4_167:}{:4_187:} hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……
好的,刚赶回来 hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……
大佬,重新上传了,能不能看一下,谢谢了 <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>
hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
float temp1, temp2, temp3;
我也觉得这段代码的类型有些乱,也尝试修改过,数据还是乱的{:4_167:} hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
float temp1, temp2, temp3;
shuiwei=150;
sta=shuiwei/100;
sta=shuiwei%100;//将水位信息装进数组中
这里水位是3位数,两个位置显示肯定乱码
页:
[1]
2