07、基于ADC0808/ADC0809的多通道电压采集程序设计

一、Proteus仿真电路图如下在这里插入图片描述在这里插入图片描述

二、部分程序

#include <reg52.h>
#include <intrins.h>
#define uint  unsigned int
#define uchar unsigned char
#define ulong unsigned long
/*74HC595所有引脚定义*/
sbit HC595_DAT  = P2^0;
sbit HC595_CLK  = P2^1;
sbit HC595_STC  = P2^2;
/*ADC0809所有引脚定义*/
sbit OE  = P1^0;
sbit EOC = P1^1;
sbit ST  = P1^2;
sbit CLK = P1^3;
sbit CC  = P1^6;
sbit BB  = P1^5;
sbit AA  = P1^4;
/*数码管段选(带小数点)*/
uchar LEDData[10]=
{
  0x03,	/*0*/
  0x9F, /*1*/
  0x25, /*2*/
  0x0D, /*3*/
  0x99, /*4*/
  0x49,	/*5*/
  0x41,	/*6*/
  0x1F,	/*7*/
  0x01,	/*8*/
  0x09	/*9*/
};
/*数码管段选(不带小数点)*/
uchar LEDData1[10]=
{
  0x02,	/*0*/
  0x9E, /*1*/
  0x24, /*2*/
  0x0C, /*3*/
  0x98, /*4*/
  0x48,	/*5*/
  0x40,	/*6*/
  0x1E,	/*7*/
  0x00,	/*8*/
  0x08	/*9*/
};
/*毫秒延时函数*/
//void DelayMS(uint ms)
//{
// 	uchar i;
//	while(ms--)
//	{
//	 	for(i=0;i<120;i++);
//	}
//}
/*74HC595显示函数*/
uchar v1[3] = {0x03,0x03,0x03};
uchar v2[3] = {0x03,0x03,0x03};
uchar v3[3] = {0x03,0x03,0x03};
void Send_HC595_Byte(uchar temp8)
{
   uchar i;
   for(i = 0; i < 8; i++)
   {
       HC595_DAT = temp8&0x01;//´Ó¸ßλ¿ªÊ¼´«Êä
       HC595_CLK = 0;
       _nop_();
       _nop_();
       HC595_CLK = 1;
       temp8=temp8>>1; 
   }
}
void Display(uchar v1[3],uchar v2[3],uchar v3[3])
{
   HC595_STC = 0;
   Send_HC595_Byte(v1[0]);
   Send_HC595_Byte(v1[1]);
   Send_HC595_Byte(v1[2]);

   Send_HC595_Byte(v2[0]);
   Send_HC595_Byte(v2[1]);
   Send_HC595_Byte(v2[2]);

   Send_HC595_Byte(v3[0]);
   Send_HC595_Byte(v3[1]);
   Send_HC595_Byte(v3[2]);
   HC595_STC = 1;
}
void main()
{
	TMOD = 0x02;
	TH0  = 0xFB;
	TL0  = 0xFB; //500KHZ
	TR0  = 1;
	ET0  = 1;
	EA   = 1;
	while(1)
	{  
		/*通道0转换*/	
		CC = 0;BB = 0;AA = 0;
		ST = 0;
		ST = 1;
		ST = 0;
		_nop_();_nop_();_nop_();
		while(EOC == 0);
		OE = 1;
		v3[2] = LEDData1[P3/100];
		v3[1] = LEDData[P3%100/10];
		v3[0] = LEDData[P3%10]; 
		OE = 0;
		/**************************/
		//1、联系QQ下载:1661727532
		//2、QQ相关交流群:649692007
		//3、增、改程序同1
		//4、学上党下载只要一杯奶茶哦
		//5、文章末尾资源下载也可以
		_nop_();_nop_();_nop_();
		while(EOC == 0);
		OE = 1;
		v1[2] = LEDData[P3/100];
		v1[1] = LEDData[P3%100/10];
		v1[0] = LEDData[P3%10]; 
		OE = 0;
		/*595显示ADC值*/
		Display(v1,v2,v3);
	}
}
void Timer0_INT() interrupt 1
{
	/**************************/
	//1、联-系-Q-Q-下-载-:1661727532
	//2、Q-Q-相-关-交-流-群:649692007
	//3、增、改程序同1
	//4、学生党下载只要一杯奶茶哦
	//5、文章末尾资源下载也可以
}

三、完整程序链接

https://download.csdn.net/download/BaoTTing/12289324

	//1、扣扣下-载:1661727532
	//2、扣扣交流qun:649692007
	//3、增、改程序同上(接毕设,课程设计)
	//4、学生党下载只要一杯奶茶哦
	//5、文章末尾资源下载也可以
  • 10
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: STM32F103C8T6是一款易于开发的ARM Cortex-M3微控制器。它具有多个通道的模拟输入引脚,可用于采集多通道电压信号。下面是实现将采集到的多通道电压发送至上位机的步骤。 首先,配置STM32F103C8T6的ADC (模拟-数字转换器)模块,以使其能够在多通道模式下进行采集。通过设置相关的寄存器,可以选择要采集通道,并配置采样率等参数。 然后,设置上位机和STM32F103C8T6之间的通信接口。常见的通信接口有串口、USB、以太网等。选择合适的通信接口,根据需求设置相应的参数,确保上位机和STM32F103C8T6可以进行数据传输。 接下来,编写嵌入式程序,在主循环中进行多通道电压采集和发送。通过ADC模块进行模拟信号到数字信号的转换,将采集到的电压值存储在适当的变量中。 将采集到的电压值发送至上位机的方式有多种。如果使用串口进行通信,则可以使用USART (通用同步/异步收发器)模块连接到上位机,并使用串口通信协议,例如UART或USART等,将采集到的电压值通过串口发送给上位机。 如果使用USB进行通信,则可以使用STM32F103C8T6的USB模块与上位机进行连接,并使用USB协议(例如使用虚拟串口通信协议)进行数据传输。 当数据准备好后,使用适当的通信函数将采集到的电压值发送至上位机。 最后,在上位机上编写接收程序,根据所选的通信接口和协议进行数据接收和处理。 综上所述,通过适当配置STM32F103C8T6的ADC模块和通信接口,编写嵌入式程序,即可实现将采集到的多通道电压发送至上位机。 ### 回答2: STM32F103C8T6是一款常用的单片机芯片,它具有多个模拟输入通道,可以用来采集多个电压信号,并将采集到的数据发送至上位机。 这款芯片有10个模拟输入通道,每个通道的输入电压范围为0-3.3V。我们可以通过使用内置的ADC(模数转换器)模块来实现对这些通道采集。可以通过设置ADC的输入通道、采样位数、采样速度等参数来实现灵活的采集。 在采集过程中,可以使用中断或轮询的方式来触发ADC的转换。一旦转换完成,我们可以通过读取ADC寄存器中的值来获取采集到的电压数据。为了提高采样精度,可以使用参考电压源对ADC的基准电压进行校准。 采集到的电压数据可以通过UART等串口通信接口发送至上位机。我们可以将采集到的数据进行打包封装,然后通过串口将数据发送出去。上位机收到数据后,可以进行进一步的处理和显示。 为了能够更好地控制采集和发送过程,我们可以使用中断来触发采集和发送操作。当ADC转换完成时,触发中断,然后在中断服务程序中进行数据的发送。 总的来说,STM32F103C8T6可以通过其内置的ADC模块来实现多通道电压采集,并通过串口将数据发送至上位机。通过合理设置参数和使用中断,可以实现高精度和高效率的数据采集和传输。 ### 回答3: 要实现STM32F103C8T6采集多通道电压并发送至上位机,可以按照以下步骤进行操作: 1. 初始化STM32F103C8T6的ADC模块,设置ADC的工作模式和采样精度。根据需要配置多个通道,并设置采样通道的顺序。 2. 编写ADC中断服务函数,用于处理ADC转换完成后的中断。在中断函数中获取ADC转换结果,并将其存储在相应的变量中。 3. 在主程序中,利用串口或其他通信接口与上位机建立通信连接。配置串口通信参数,并使能串口中断。 4. 在主循环中,通过调用ADC转换函数开启ADC转换,并等待转换完成的中断。 5. 在ADC转换完成的中断中,将转换结果存储在相应的变量中,并发送至上位机。可以使用串口发送函数发送数据。 6. 上位机收到数据后,可以根据需要进行处理或显示。 需要注意的是,采集多通道电压时,需要逐个切换每个通道,并等待转换完成后再切换下一个通道。同时,上位机要能够正确解析接收到的数据,因此需要在通信协议上进行适当的设计和解析。 总之,这是一个比较复杂的任务,需要对STM32的ADC模块和通信模块有一定的了解和掌握。同时,由于涉及到硬件模块的操作,还需要按照硬件规格书进行正确的连接和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值