基于89C52的可调电压表设计(全部内容)

1. 功能与指标

  1. ADC0809芯片:通过模数转换芯片将电压模拟量转为数字量;
  2. STC89C52主控芯片:将模数转换后的数字量收集并计算还原测量电压;
  3. 分压模块:根据模数转换芯片指标设计分压,输入电压不可超过5V;
  4. 手动调节量程:使用按键实现手动更换量程功能,将0~35V分压为4个档位;
  5. LCD显示:使用液晶屏显示被测电压数值,结果保留3位小数,测量值误差控制在1%以内;
    测量单片机3.3V电源 实物演示:
    在这里插入图片描述

2. 设计方案与工作原理

采用STC89C52芯片配合ADC08091。模数转换芯片进行电压采集与数据处理构成一个简易电压表,避免ADC0809过载烧坏,对被测电压分压后再输入AD转换芯片,经计算将0-35V电压分为四个通道测量,分别为:0-5V、5-15V、15-25V、25-35V。
硬件框图:硬件框图
系统通过ADC0809的输入端口IN3-IN6分别将不同量程的电压信号采集,经过模数转换后,产生的数字量经过其输出端口D0-D7传送给STC89C52芯片的P0口,需注意D0接P7、D1接P6、D2接P5以此类推,高低位反向连接。STC89C52负责把接收到的数字量经过数据处理,通过P1口发送到LCD1602进行显示。同时P2.1连接按键,通过判断按下次数使P2.5-P2.7三个IO口输出不同高低电平配置ADC0809的ADCA、ADCB、ADCC三个位选端口,产生位选信号控制电压输入端口的输入。
另外STC89C52还控制着ADC0809的工作,使用主控芯片的定时器T0定时功能通过P3.5为ADC0809产生5KHz的工作时钟脉冲;P3.4采集ADC0809的转换结束信号(EOC)判断电压模数转换是否完成;P3.3控制ADC0809的输出允许端(OE)将数字量收集到主控芯片;P3.2同时控制ADC0809的地址锁存端(ALE)和转换启动端(START)当未启动转换时,输入位选端口等待位选信号输入,启动转换后,输入位选端口锁定,保持输入档位准确性。

3. 硬件模块

3.1 ADC模数转换1

分压模块采用电阻分压,分别为IN3:0-5V、IN4:5-15V、IN5:15-25V、IN6:25-35V,共4个量程,以25-35V为例说明分压原理:
U B = U A ⋅ R 5 R 5 + R 6 = U A 7 U_{B}= U_{A}\cdot \frac {R_{5}}{R_{5}+R_{6}}= \frac {U_{A}}{7} UB=UAR5+R6R5=7UA
电阻分压
即,输入最大电压35V时,IN6电压输入端口为5V,将电压降至合理范围内。其他两个通道同理。

模数转换内容详见ADC0809的原理与使用方法

3.2 89c52数据处理

ADC0809输出的数字量电压到STC89C52进行计算还原,由于浮点数计算相对复杂,且为数据显示方便考虑,将数字量采集到P0端口后,先扩大1000倍为整型数后,再根据按键选择的不同量程,通过代码判断选择不同计算公式: U I N = P 0 ⋅ 5 256 ⋅ 1 0 3 ⋅ A U_{IN}=P0\cdot \frac{5}{256}\cdot10^{3}\cdot A UIN=P02565103AA为分压倍数,如25~35V。理论误差值在1%以内,符合要求。
主控芯片:主控芯片

3.3 LCD1602显示

主控芯片将计算后数据按照十位、个位、十分位、百分位进行拆分,分别输入到LCD1602进行显示,例如:UIN=15786

十位= UIN/10000=1
个位= UIN%10000/1000=5
十分位= UIN%1000/100=7
百分位= UIN%100/10=8
千分位= UIN%10=6

1602显示

4 程序代码2

程序流程图:程序流程图

4.1 按键模块

根据按键按下,将数值从1~4不断循环传出。用来判断选择量程。

软件程序源文件:基于89C52的可调电压表设计(程序代码)

4.2 ADC0809模块

使用定时器0产生ADC工作时钟CLK=5KHz;
在这里插入图片描述

ADC的输入端口位选,其等效为3-8译码器,根据按键次数选择的档位进行判断输入端口的位选配置。ALE地址锁存端口配置为0时,可以对数据采集输入端口位选配置,当转换开始时,ALE随着START端口置1,位选锁存不可更改。
输入位选:
在这里插入图片描述
AD转换:
在这里插入图片描述
软件程序源文件:基于89C52的可调电压表设计(程序代码)

4.3 LCD1602显示

初始化函数
写命令
写数据
代码不过多赘述,可参考程序源文件,也可自行查找。
软件程序源文件:基于89C52的可调电压表设计(程序代码)

4.4 主函数

根据按键按下次数返回的数值,进行判断是哪个量程档位,将对应的档位显示在LCD上,再通过AD转换模块获取转换后的数字量,通过计算、提取数字位,显示在LCD。
在这里插入图片描述
在这里插入图片描述

软件程序源文件:基于89C52的可调电压表设计(程序代码)

5 Proteus仿真3

选择15~25V档位,激励源为直流22V ,测量值为21.96V,误差在允许范围内。

在这里插入图片描述
proteus仿真源文件:基于89C52的可调电压表设计(仿真图)

6 原理图与PCB 4

在这里插入图片描述
原理图与PCB:基于89C52的可调电压表设计(原理图+PCB)

7 总结

简易电压表的设计让我对单片机基础的模数转换系统设计有了更加深刻的了解,对整个系统多个模块相配合实现功能有了经验,对LCD1602显示原理有了更深的掌握,对ADC0809芯片的工作原理、转换过程有了实践性的了解;实训过程中使用到了Proteus、Keil、Altium Designer等软件,对其使用熟练度有了进一步提高。设计过程中遇到问题通过查阅资料和凭··········此处省略几百字

实验报告完整文件可留言拿

8 元件清单

封装均为插件

元件名称规格型号数量
芯片STC89C521个
芯片ADC08091个
液晶屏LCD16021个
电容0.1uf1个
电容30uF2个
电阻1k3个
电阻2k2个
电阻3k2个
电位器100k1个
晶振12MHz1个
按键开关-------1个
排针排母-------若干

  1. ADC0809的原理与使用方法 ↩︎ ↩︎

  2. 基于89C52的可调电压表设计(程序代码) ↩︎

  3. 基于89C52的可调电压表设计(仿真图) ↩︎

  4. 基于89C52的可调电压表设计(原理图+PCB) ↩︎

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值