找回密码
 立即注册
查看: 448|回复: 11

ADC转换

[复制链接]
  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-10 16:05:20 | 显示全部楼层 |阅读模式

问下大家,我做这个自能水箱实验,中的ADC湿度转换,转换结果始终是乱的,(独立的湿度采集都没问题,但是加在主程序中,采集的数据就是乱的)这是什么原因呢?能指点下吗?谢谢了

程序已经上传upload 附件:自能水箱.rar

下面是部分主程序:

#include "stc8.h"
#include "lcd12864.h"
#include "adc.h"
#include "stdio.h"

unsigned char sta[10]={0,0,0,0,0,0,0,0,0,0};//第0、1位装水位百、十个位,第2,3位装湿度。
long int shidu=0;

void setport()
{
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x04; P1M0 = 0x00; //配置P1.2为高阻ADC输入
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
}

void main()
{
setport();//引脚初始化
LCDInit();//液晶初始化
adc_Init();//AD转换初始化
for(;;)

{

shidu=ADC_value();//湿度采集

	sta[2]=shidu/100;
	sta[3]=shidu%100;
	DisplayNUMChar(4,4,sta[2]);
	DisplayNUMChar(5,4,sta[3]);
	DisplayListChar(6, 4, "mv");

}

}

ADC转换程序

ADC.C

#include "adc.h"

void adc_Init(void)
{
ADC_CONTR &= (0xF2);
P_SW2 |=0X80;
ADCTIM |=0X3F;
P_SW2 &=0X7F;
ADCCFG |=0X2F;
ADC_CONTR &=0XDF;
EADC=0;
ADC_CONTR|=0X82;
ADC_delay2ms();
ADC_delay2ms();
}

void ADC_start(void)
{
ADC_CONTR|=0X42;
}

unsigned int ADC_value()
{
float temp1,temp2,temp3;
long int temp4;
unsigned char ADC_H,ADC_L;
ADC_start();
ADC_delay2ms();
ADC_delay2ms();
while(!(ADC_CONTR & 0X20));
ADC_CONTR &=0XDF;
ADC_CONTR &=0XBF;
ADC_H=ADC_RES & 0X0F;
ADC_L=ADC_RESL;
temp1=(ADC_H<<8)+ADC_L;

temp2=temp1*5000;//参考电压为5V,转成mv
temp3=temp2/4096;
temp4=(unsigned int) temp3;//转换成整型
return temp4;
}
void ADC_delay2ms() //@11.0592MHz
{
unsigned char data i, j;

_nop_();
i = 4;
j = 146;
do
{
	while (--j);
} while (--i);

}

ADC.H

#include "stc8.h"
#include <intrins.h>

void adc_Init();
void ADC_start();
void ADC_delay2ms();
unsigned int ADC_value();

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-05-12 09:59:11
已绑定手机

27

主题

341

回帖

1727

积分

金牌会员

机长

积分
1727
发表于 2024-12-10 20:21:57 | 显示全部楼层

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

业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-10 20:38:03 来自手机 | 显示全部楼层
hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

程序上传了的,能不能把程序下载了,看一下下啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-10 20:40:19 来自手机 | 显示全部楼层
hsrzq 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

我现在外面的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-10 20:57:49 | 显示全部楼层
hsr*** 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

好的,刚赶回来
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-10 21:08:22 | 显示全部楼层
hsr*** 发表于 2024-12-10 20:21
给你个机会重新组织一下代码,现在的代码完全没法看……

大佬,重新上传了,能不能看一下,谢谢了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:465
  • 最近打卡:2025-05-12 09:59:11
已绑定手机

27

主题

341

回帖

1727

积分

金牌会员

机长

积分
1727
发表于 2024-12-11 10:39:37 | 显示全部楼层
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;
}

只能说这段代码的类型好混乱。其它的代码太多看不过来了……

业余撸代码,专业开飞机
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-11 11:17:58 来自手机 | 显示全部楼层
hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
        float temp1, temp2, temp3;

我也觉得这段代码的类型有些乱,也尝试修改过,数据还是乱的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2025-05-11 09:37:45
已绑定手机

23

主题

177

回帖

894

积分

高级会员

积分
894
发表于 2024-12-11 11:21:20 来自手机 | 显示全部楼层
hsrzq 发表于 2024-12-11 10:39
unsigned int ADC_value()
{
        float temp1, temp2, temp3;

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-05-12 08:32:53
已绑定手机

17

主题

446

回帖

1193

积分

金牌会员

积分
1193
发表于 2024-12-11 11:28:18 | 显示全部楼层
shuiwei=150;
                sta[0]=shuiwei/100;
                sta[1]=shuiwei%100;//将水位信息装进数组中

这里水位是3位数,两个位置显示肯定乱码
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-12 23:59 , Processed in 0.124637 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表