基于STM32单片机数字电压表自动切换量程及源程序

一、系统方案
1、本设计采用这STM32单片机作为主控器。
2、液晶1602显示。
3、内部ADC采集电压0-12V,自动切换档位。
在这里插入图片描述
二、硬件设计
原理图如下:
在这里插入图片描述
三、单片机软件设计
1、首先是系统初始化
u8 i;
u16 a,b,c,d;
u16 adcx;
float adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();

LcdWriteCom(0xc0);  //设置数据指针起点for(i=0;i<16;i++)
{LcdWriteData(Disp_Vol[i]);	
}		 

2、液晶显示程序
/*******************************************************************************

  • 函 数 名 : LcdWriteCom
  • 函数功能 : 向LCD写入一个字节的命令
  • 输 入 : com
  • 输 出 : 无
    /
    void LcdWriteCom(uchar com) //写入命令
    {
    // LCD1602_E = 0; //使能
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    // LCD1602_RS = 0; //选择发送命令
    GPIO_ResetBits(GPIOB,GPIO_Pin_1);
    // LCD1602_RW = 0; //选择写入
    GPIO_ResetBits(GPIOB,GPIO_Pin_2);
    // LCD1602_DATAPINS = com; //放入命令
    GPIO_Write(GPIOC,0X00FF&com);
    Lcd1602_Delay1ms(1); //等待数据稳定
    // LCD1602_E = 1; //写入时序
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
    Lcd1602_Delay1ms(5); //保持时间
    // LCD1602_E = 0;
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    }
    /
  • 函 数 名 : LcdWriteData
  • 函数功能 : 向LCD写入一个字节的数据
  • 输 入 : dat
  • 输 出 : 无
    *******************************************************************************/
    void LcdWriteData(uchar dat) //写入数据
    {
    // LCD1602_E = 0; //使能清零
    GPIO_ResetBits(GPIOB,GPIO_Pin_3);
    // LCD1602_RS = 1; //选择输入数据
    GPIO_SetBits(GPIOB,GPIO_Pin_1);
    // LCD1602_RW = 0; //选择写入
    GPIO_ResetBits(GPIOB,GPIO_Pin_2);
    // LCD1602_DATAPINS = dat; //写入数据
    GPIO_Write(GPIOC,0X00FF&dat);
    Lcd1602_Delay1ms(1);

// LCD1602_E = 1; //写入时序
GPIO_SetBits(GPIOB,GPIO_Pin_3);
Lcd1602_Delay1ms(5); //保持时间
// LCD1602_E = 0;
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
3、ADC程序
//获得ADC值
//ch:通道值 0~3
u16 Get_Adc(u8 ch)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 ); //ADC1,ADC通道,采样时间为239.5周期

ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果

}

u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0;
u8 t;
for(t=0;t<times;t++)
{
temp_val+=Get_Adc(ch);
delay_ms(5);
}
return temp_val/times;
}

4、核心算法程序
int main(void)
{
u8 i;
u16 a,b,c,d;
u16 adcx;
float adc;
unsigned char datas[4];
InitGPIO();
LcdInit();
Adc_Init();

LcdWriteCom(0xc0);  //设置数据指针起点for(i=0;i<16;i++)
{LcdWriteData(Disp_Vol[i]);	
}		 while(1)
{adcx=Get_Adc_Average(ADC_Channel_1,10);adc=(float)adcx*(5.0/4096);adcx=adc;a=adcx;adc-=adcx;adcx=adc*100;  //1位有效数字b=adcx;c=a*100+b;d=c*24/10;if(d<500){LcdWriteCom(0x80);  //设置数据指针起点for(i=0;i<16;i++){LcdWriteData(Disp_Vol1[i]);	}	}else {LcdWriteCom(0x80);  //设置数据指针起点for(i=0;i<16;i++){LcdWriteData(Disp_Vol2[i]);	}	}	LcdWriteCom(0xc9);LcdWriteData('0'+d/1000);LcdWriteData('0'+d%1000/100);LcdWriteCom(0xcc);LcdWriteData('0'+d%1000%100/10);LcdWriteData('0'+d%10);}

}

四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/193338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何从Android恢复出厂设置后的手机恢复数据

如果您已使用出厂设置删除了Android设备上的所有数据&#xff0c;或者有一段时间未使用&#xff0c;则需要恢复出厂设置以从Android设备中检索数据。 奇客数据恢复安卓版是一个有用的工具&#xff0c;可以在重置后检索Android数据。 将Android设备恢复出厂设置 如果您需要将A…

在excel中设置图表的标题

已经在excel做好了一个图&#xff0c;默认是没有标题的&#xff1a; 现在来设置一个标题。 双击图表&#xff0c;进入编辑状态&#xff1a; 右键&#xff0c;选择“插入标题”&#xff1a; 输入标题&#xff1a;

【AI】行业消息精选和分析(23-11-19)

行业动态 1、对标GPTs&#xff0c;微软连夜发布100多项更新&#xff01;微软CEO&#xff1a;Copilot时代来了 2、英伟达联手微软推出AI代工服务 3、全新雅虎搜索将于 2024 年上线&#xff0c;未来还会推出更多 AI 和高级功能 4、Instagram 推出定制 AI 贴纸和滤镜功能&#xff…

excel中设置图表图例的位置

例如&#xff0c;在excel中已经做好了一个折线图&#xff1a; 可以看到&#xff0c;默认图例是在图表的右侧&#xff0c;减小了图的横向展示区域。我们可以把图例放到图的上边、或者下边。 双击图表&#xff1a; 鼠标放在图例上方&#xff0c;出现了浮动文字“图例”&#…

反弹Shell

概述 反弹shell&#xff08;reverse shell&#xff09;就是控制端监听在某TCP/UDP端口&#xff0c;被控端发起请求到该端口&#xff0c;并将其命令行的输入输出转到控制端。reverse shell与telnet&#xff0c;ssh等标准shell对应&#xff0c;本质上是网络概念的客户端与服务端…

Python操作Excel常用方法汇总

目录 引言 一、使用pandas库操作Excel 1、读取Excel文件 2、写入Excel文件 3、处理Excel数据 二、使用openpyxl库操作Excel 1、读取Excel文件 2、写入Excel文件 3、处理Excel数据 三、高级功能 总结 引言 Python是一种功能强大的编程语言&#xff0c;它可以用来处理…

记一次解决Pyqt6/Pyside6添加QTreeView或QTreeWidget导致窗口卡死(未响应)的新路历程,打死我都想不到是这个原因

文章目录 💢 问题 💢🏡 环境 🏡📄 代码💯 解决方案 💯⚓️ 相关链接 ⚓️💢 问题 💢 我在窗口中添加了一个 QTreeWidget控件 ,但是程序在运行期间,只要鼠标进入到 QTreeWidget控件 内进行操作,时间超过几秒中就会出现窗口 未响应卡死的 状态 🏡 环境 �…

代码随想录算法训练营第二十七天|39 组合总和 40 组合总和II 131分割回文串

目录 39 组合总和 40 组合总和II 131分割回文串 39 组合总和 class Solution {List<List<Integer>>res new ArrayList<>();List<Integer>newList new LinkedList<>();public List<List<Integer>> combinationSum(int[] candid…

【教3妹学编程-算法题】三个无重叠子数组的最大和

2哥 : 3妹&#xff0c;咋啦&#xff1f;一副苦大仇深的样子&#xff1f; 3妹&#xff1a;不开心呀不开心&#xff0c;羽生结弦宣布离婚。 2哥 : 羽生什么&#xff1f; 3妹&#xff1a;羽生结弦&#xff01; 2哥 : 什么结弦&#xff1f; 3妹&#xff1a;羽生结弦&#xff01;&am…

小美的树上染色

美团2024届秋招笔试第一场编程真题 先提一个小知识&#xff1a;题目中凡是提到树结构都要使用图的存储方式&#xff0c;只有二叉树例外。 分析&#xff1a;在树结构中&#xff0c;孩子和父节点是相邻节点&#xff0c;而父节点可能有多个孩子节点。在染色的过程中&#xff0c;…

AIGC实战 - 使用变分自编码器生成面部图像

AIGC实战 - 使用变分自编码器生成面部图像 0. 前言1. 数据集分析2. 训练变分自编码器2.1 变分自编码器架构2.2 变分自编码器分析 3. 生成新的面部图像4. 潜空间算术5. 人脸变换小结系列链接 0. 前言 在自编码器和变分自编码器上&#xff0c;我们都仅使用具有两个维度的潜空间。…

037、目标检测-算法速览

之——常用算法速览 目录 之——常用算法速览 杂谈 正文 1.区域卷积神经网络 - R-CNN 2.单发多框检测SSD&#xff0c;single shot detection 3.yolo 杂谈 快速过一下目标检测的各类算法。 正文 1.区域卷积神经网络 - R-CNN region_based CNN&#xff0c;奠基性的工作。…