资料编号:078
功能介绍:采用stm32单片机作为主控CPU,采用精密电阻分压将高电压分压后接入STM32单片机ADC接口,采用ADC可以采集出当前的电压值,通过功率电阻来测量电路中的电流,通过串联电路电流相同的原理,可以测出当前负载的电流,通过LCD1602显示电流和电压值,程序有中文注释,新手容易看懂,全套实物资料齐全:
下面是实物演示视频和相关实物图片
下面是程序部分展示(程序有中文注释,新手容易看懂)
程序部分展示:
int main(void)
{
u16 adcx,adcx1,tmp;
unsigned char chr[5];
float temp,temp1 ;
int dianya,dianliu;
u16 buf ;
delay_init(); //延时函数初始化
uart_init(9600);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
Adc_Init();
LCD1602_Init();
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_8,10);//读取电压
adcx1=Get_Adc_Average(ADC_Channel_9,10);//读取电流
temp=(float)adcx/4096*3.300*2;
temp1=(float)adcx1/4096*3.300/2.2;
printf("V=%.3f V\r\n",temp);
printf("I=%.3f A\r\n",temp1);//数据上传电脑
dianya=temp*1000;//小数点后移三位,全部变成整数LCD显示
dianliu=temp1*1000;//小数点后移三位,全部变成整数LCD显示
LCD_Write_Command(0x80);//第一行的首地址
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date('V');
LCD_Write_Date('=');
LCD_Write_Date(' ');
LCD_Write_Date(dianya%10000/1000+0x30); //显示电压
LCD_Write_Date('.');
LCD_Write_Date(dianya%1000/100+0x30);
LCD_Write_Date(dianya%100/10+0x30);
LCD_Write_Date(dianya%10+0x30);
LCD_Write_Date('V');
LCD_Write_Command(0x80+0x40);
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date(' ');
LCD_Write_Date('I');
LCD_Write_Date('=');
LCD_Write_Date(' ');
LCD_Write_Date(dianliu%10000/1000+0x30); //显示电流
LCD_Write_Date('.');
LCD_Write_Date(dianliu%1000/100+0x30);
LCD_Write_Date(dianliu%100/10+0x30);
LCD_Write_Date(dianliu%10+0x30);
LCD_Write_Date('A');
delay_ms(300);
}
}
void LCD_Write_Command(u8 com)
{
rs=0; //写指令函数和写数据函数其实可以并一起价格 BOOL变量判断是写指令就rs=0写数据就rs=1。
rw=0;
en=1; //写指令 输入:RS=L,RW=L,E=下降沿脉冲
GPIO_Write(GPIOA, 0X00FF&com);//该函数一般用来往一次性一个GPIO的多个端口设置
delay_ms(2);
en=0;
}
/*******************写数据函数************************/
void LCD_Write_Date(u8 date)
{
rs=1;
rw=0;
en=1; //写数据 输入:RS=H,RW=L,E=下降沿脉冲
GPIO_Write(GPIOA, 0X00FF&date);//GPIOA的第八位用来作为8位数据口
delay_ms(2);
en=0;
}
程序打开方法:采用keil5打开,公众号有软件安装包
原理图采用【AD】altium designer打开,公众号有安装包
下面是资料包里面包含的相关文件展示
付费后即可在下方获取资料下载链接