78-基于stm32单片机电压电流检测LCD1602显示程序源码原理图

功能介绍:采用stm32单片机作为主控CPU,采用精密电阻分压将高电压分压后接入STM32单片机ADC接口,采用ADC可以采集出当前的电压值,通过功率电阻来测量电路中的电流,通过串联电路电流相同的原理,可以测出当前负载的电流,通过LCD1602显示电流和电压值,程序有中文注释,新手容易看懂,资料分享下载链接:设计资料合集

下面是功能演示视频:

78-基于stm32单片机电压电流检测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打开,公众号有安装包

下面是文件包里面包含的相关文件展示

 

stm32单片机最小系统讲解:
电源
电就是MCU要吃的饭,不吃饭,stm32芯片肯定不能工作。
stm32最小系统板需要5v和3.3v两种电压,一般可以直接通过USB提供5v电压,也可以用电源适配器提供5V电压。而3.3v电压可以通过稳压芯片如ASM1117-3.3v等,把5v电压降为3.3v输出。
参考电源电路如下:


图中J1是USB接口,提供的5v电压经过ASM1117-3.3v后降为3v3,C1,C2(10*10^4pF=0.1u)用于电源滤波,高频滤波用小电容,低频滤波用大电容。D3是一个led用以指示电源工况,其上的R1 510R即510.0Ω用以限流,防止led灯烧坏。
J3也是一个USB接口,提供5v电压,同时它也是一个模拟串口,其D-和D+引脚与ch340相应引脚连接构成一个串口设备。
stm32吃的是3v3将其VDD和VSS引脚分别连接到3v3和GND,就解决了stm32的吃饭问题。

注意:VBAT是stm32芯片的备用3.3v电源输入端,当没有备用电源是也需要将VBAT接到VDD上去。
VDDA和VSSA是模拟电源输入口,用以给stm32芯片内部ADC,复位电路供电因此必须分别接到VDD和VSS上。

复位电路
人工作久了容易自闭、精神恍惚,这时需要睡一觉就以重新焕发活力。stm32工作久了也容易“精神恍惚”————程序跑飞,也需要复位。


stm32的NRST引脚是复位信号接收引脚与RESET相连,芯片低电平复位。如上图所示,当芯片刚上电时,电容充电导通,此时RESET=0,芯片复位;当按下复位按钮时,RESET接地,芯片复位。

晶振电路
晶振是芯片的心跳,每一次脉冲激励芯片执行一条指令,因此晶振的重要性不言而喻。


上图是stm32的晶振电路,8M无源晶振,其中R9(1M)用于稳定晶振的脉冲波形,C8(20P)和C9(20P)一方面构成晶振起振的必要回路,另一方面匹配电容,同时还具有调节晶振电路频率的作用。

注意:OSC32IN是外部32.768K晶振输入口,可以直接接时钟信号,也可以不洁作IO用。OSCIN是外部系统时钟输入信号,可以接时钟信号,也可以不接做IO口用,此时stm32用芯片内部的RC电路起振产生时钟信号。

<think>好的,我现在需要分析用户提供的这段JavaScript代码,并解释它的功能。首先,我会通读代码,理解每个部分的作用。 这段代码定义了一个名为getQ的函数。函数一开始获取了user_nickname输入框的值,存储在userid变量中。如果userid是null或undefined,函数返回false。否则,发起一个AJAX POST请求到../services/Qxgl.ashx,传递action和id参数。请求头里有一个Authorization令牌,看起来像是某种认证信息。 成功回调函数处理返回的msg数据,遍历msg.ds数组,对每个item,通过typeid设置对应的复选框为选中状态。然后收集所有选中的复选框的值,用逗号拼接后去掉最后一个逗号,将结果填入typename输入框。 接下来,我需要确认各个部分的细节是否正确。例如,检查jQuery选择器是否正确,AJAX调用的参数是否合理,以及数据处理是否有潜在错误。比如,$.each遍历msg.ds是否正确,假设msg.ds是一个数组。另外,拼接结果时使用substring去除末尾逗号是否可靠,是否有更稳妥的方法。 还要注意可能的安全问题,比如硬编码的Authorization头,这可能存在安全风险,但用户可能已经处理了。此外,用户权限验证是否在服务端进行,这里只是前端控制,需提醒用户不能仅依赖前端验证。 最后,将这些分析整理成结构清晰的解释,分步骤说明代码的功能和潜在注意事项,确保用户能够理解每个部分的作用及可能的改进点。</think>这是一个典型的基于jQuery的AJAX请求实现,主要用于获取并设置用户权限信息。让我们分步骤解析这个函数的功能: 1. **函数定义用户ID获取** ```javascript var getQ = function () { var userid = $('#user_nickname').val(); // 获取用户输入框的值 ``` 2. **空值校验** ```javascript if (userid == null || userid == undefined) { // 验证用户ID有效性 return false; } ``` 3. **AJAX请求配置** ```javascript $.ajax({ type: "POST", // 使用POST方法 url: "../services/Qxgl.ashx", // 后端接口地址 headers: { // 请求头认证信息 "Authorization": "0772A4AA051DDEBB393DC164B19A32E57C4FEEAB27A77820" }, ``` 4. **请求参数传递** ```javascript data: { action: "getQ", // 执行动作类型 id: userid // 传递用户ID参数 }, ``` 5. **成功回调处理** ```javascript success: function (msg) { // 遍历返回数据集 $.each(msg.ds, function (index, item) { // 根据typeid勾选对应复选框 $('#a' + item.typeid).attr("checked", true); }) // 拼接选中值 var result = ""; $("input[name='select_checkbox']:checked").each(function () { result += $(this).val() + ','; }); // 去除末尾逗号 if (result != "") { result = result.substring(0, result.lastIndexOf(',')); } // 填充到显示框 $("#typename").val(result); } ``` **功能总结**: - 这是一个用户权限查询功能 - 通过用户输入的用户名查询关联的权限配置 - 将查询结果转换为复选框勾选状态 - 汇总选中权限显示在文本框中 **潜在注意事项**: 1. 硬编码的`Authorization`头存在安全风险,建议动态生成 2. 缺少错误处理逻辑(error回调) 3. 使用字符串拼接处理结果可以考虑改用`Array.join()` 4. 权限控制不能仅依赖前端验证,必须配套后端验证 5. 对`msg.ds`的数据结构有强依赖,建议增加数据校验 6. 建议使用`.prop()`代替`.attr()`操作复选框状态
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值