基于51单片机和ADC0809的数字电压表设计

畅学单片机 2021-08-11 16:15

本课题是利用单片机设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过A/D转换变为数字信号,输送给单片机。然后由单片机给数码管数字信号,控制其发光,从而显示数字。

注:因为ADC0809的通道选择端口是使用插针,做出电路板后再用导线连起来的,在程序里也少了通道选择的语句,请注意一下。

一.原理图

二,仿真图

三.存储空间定义

(1)70H用于存放A/D转换结果,71H、72H、73H、74H分别存储显示用的三位数据如表所示。

(2)地址30H~39H存放显示在数码管上0~9的数。如表所示。


四.程序



程序可分为数据采集系统、数据转换系统、显示系统,这三部分先独立测试,然后整体调试。

①数据采集系统:因为ADC0809本身并没有内部时钟,需要外部时钟来提供工作的时钟频率。如果利用单片机ALE端脚提供的频率为6MHZ,而ADC0809工作的频率在10KHZ-1MHZ。因此,需要增加含触发器功能的器件,从面增加了系统的复杂程度。后来,最终用软件编程来提供ADC0809工作的时钟频率,从而解决了这个问题。

②显示系统的调试:要显示的数据存放在71H、72H、73H、74H单元中,先在30H~39H分单元中存放0~9的数,运行显示程序,进行查表指令,察看显示的结果是否与存放值一样。在测试的过程中发现小数点没有显示,通过下面几条指令,把小数点显示出来。

MOVC A,@A+DPTR

CJNER2,#0FEH,NOT_ONE ;不是左边第一个数码管,则转移

ORL A,#80H ;左边第一个数码管显示小数点

NOT_ONE: MOVP0,A ;数码管段选


(1)汇编语言程序清单

QIANEQU71H

BAI EQU 72H

SHI EQU 73H


GEWEI EQU 74H ;71H-74H存放显示数据,依次为个位、十位、百位、千位


SHUJU EQU 70H ;地址70H存放采集数据


STBITP3.0 ;START和ALE共用一个端口


OEBIT P3.6


EOC BIT P3.7


CLK BITP3.3


ORG0000H


LJMPSTART


ORG 0030H


TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

START:


MAIN: LCALLTEST ;数据采集函数


LCALL TURNDATA ;数据处理函数


LCALLDISPLAY ;显示函数


LJMP MAIN


DELAY: MOV R7,#06H ;约延时1.5ms


LOOP1: MOVR6,#0FFH


LOOP2: DJNZ R6,LOOP2


DJNZR7,LOOP1


RET


TEST: CLRST


CLROE


SETB ST


CLRST ;ST端口下降沿,开始转换


LOOPCLK: SETBCLK ;由软件来提供ADC0809工作的时钟频率


CLRCLK


JNB EOC,LOOPCLK ;EOC=1时,退出循环


SETBOE ;转换后数据的传送


MOV P1,#0FFH ;P1端口读数据,需先给高电平


MOV A,P1


CLROE


MOV SHUJU,A ;存储数据到地址70H


RET


TURNDATA:


MOVA,SHUJU


MOVB,#51


DIV AB ;余数在B,相除以后C=0


MOVQIAN,A ;储存千位


CLRF0


MOV A,B


SUBBA,#1AH ;A减去26,测试上面AB相除时,余数与26相比较


MOV F0,C ;余数<26,则C=1,不用加5调整


MOVA,#10


MULAB


MOVB,#51


DIVAB


JB F0,LP1


ADD A,#5 ;若AB相除后B>=26,百位加五


LP1: MOV BAI,A ;储存百位


CLRF0


MOV A,B


SUBBA,#1AH


MOVF0,C


MOVA,#10


MULAB


MOVB,#51


DIVAB


JB F0,LP2 ;F0=1时,转移


ADD A,#5 ;若AB相除后B>=26,十位加五


LP2: MOV SHI,A ;储存十位


CLRF0


MOVA,B


SUBBA,#1AH


MOVF0,C


MOVA,#10


MULAB


MOVB,#51


DIVAB


JB F0,LP3 ;F0=1时,转移


ADD A,#5 ;若AB相除后B>=26,个位加五


LP3: MOV GEWEI,A ;储存个位


RET


DISPLAY:


MOVR1,#4 ;循环四次


MOV R2,#0FEH


MOVR0,#71H ;存放显示初始地址


XIANSHI:


MOV DPTR,#TAB


MOVA,@R0


MOVCA,@A+DPTR


CJNER2,#0FEH,NOT_ONE ;不是左边第一个数码管,则转移


ORL A,#80H ;左边第一个数码管显示小数点


NOT_ONE: MOVP0,A ;数码管段选


MOVP2,R2 ;数码管位选


LCALLDELAY ;延时


MOV A,R2


RL A ;循环左移


MOV R2,A


INCR0 ;选取下一个地址


DJNZR1,XIANSHI


RET


END


(2) C语言程序清单


#include<reg51.h>


sbit CLK=P3^3;


sbit OE=P3^6;


sbit ST=P3^0;


sbit EOC=P3^7;


unsigned int dianya;


unsigned char code table[]={


0x3f,0x06,0x5b,0x4f,


0x66,0x6d,0x7d,0x07,


0x7f,0x6f,0x77,0x7c,


0x39,0x5e,0x79,0x71};


void delay(unsigned int z)


{


while(z--);


}


void ADC_0809()


{


unsignedchar temp=2;


ST=0;


OE=0;


ST=1;


ST=0;


CLK=1;


CLK=0;


CLK=1;


CLK=0;


while(!EOC)


{


CLK=1;


CLK=0;


}


OE=1;


P1=0xff; //读取P1端口数据


temp=P1;


dianya=(unsigned int)temp*19.53;


OE=0;


}


void Vpp_Show()


{


unsignedchar qian,bai,shi,ge;


qian=dianya/1000;


bai=dianya00/100;


shi=dianya0/10;


ge=dianya;


P2=0xfe;


P0=table[qian]|0x80; //显示小数点


delay(50);


P2=0xfd;


P0=table[bai];


delay(50);


P2=0xfb;


P0=table[shi];


delay(50);


P2=0xf7;


P0=table[ge];


}


void main()


{


while(1)


{


ADC_0809();


Vpp_Show();


}


}

为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!

畅学单片机 以单片机为核心,带你全面了解和单片机相关的知识技巧,经验心得。关注我们,一起来学习吧!
评论
  • 11-29学习笔记11-29学习笔记习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-02 23:58 90浏览
  • TOF多区传感器: ND06   ND06是一款微型多区高集成度ToF测距传感器,其支持24个区域(6 x 4)同步测距,测距范围远达5m,具有测距范围广、精度高、测距稳定等特点。适用于投影仪的无感自动对焦和梯形校正、AIoT、手势识别、智能面板和智能灯具等多种场景。                 如果用ND06进行手势识别,只需要经过三个步骤: 第一步&
    esad0 2024-12-04 11:20 92浏览
  • 概述 说明(三)探讨的是比较器一般带有滞回(Hysteresis)功能,为了解决输入信号转换速率不够的问题。前文还提到,即便使能滞回(Hysteresis)功能,还是无法解决SiPM读出测试系统需要解决的问题。本文在说明(三)的基础上,继续探讨为SiPM读出测试系统寻求合适的模拟脉冲检出方案。前四代SiPM使用的高速比较器指标缺陷 由于前端模拟信号属于典型的指数脉冲,所以下降沿转换速率(Slew Rate)过慢,导致比较器检出出现不必要的问题。尽管比较器可以使能滞回(Hysteresis)模块功
    coyoo 2024-12-03 12:20 154浏览
  •         温度传感器的精度受哪些因素影响,要先看所用的温度传感器输出哪种信号,不同信号输出的温度传感器影响精度的因素也不同。        现在常用的温度传感器输出信号有以下几种:电阻信号、电流信号、电压信号、数字信号等。以输出电阻信号的温度传感器为例,还细分为正温度系数温度传感器和负温度系数温度传感器,常用的铂电阻PT100/1000温度传感器就是正温度系数,就是说随着温度的升高,输出的电阻值会增大。对于输出
    锦正茂科技 2024-12-03 11:50 135浏览
  • 作为优秀工程师的你,已身经百战、阅板无数!请先醒醒,新的项目来了,这是一个既要、又要、还要的产品需求,ARM核心板中一个处理器怎么能实现这么丰富的外围接口?踌躇之际,你偶阅此文。于是,“潘多拉”的魔盒打开了!没错,USB资源就是你打开新世界得钥匙,它能做哪些扩展呢?1.1  USB扩网口通用ARM处理器大多带两路网口,如果项目中有多路网路接口的需求,一般会选择在主板外部加交换机/路由器。当然,出于成本考虑,也可以将Switch芯片集成到ARM核心板或底板上,如KSZ9897、
    万象奥科 2024-12-03 10:24 86浏览
  • 最近几年,新能源汽车愈发受到消费者的青睐,其销量也是一路走高。据中汽协公布的数据显示,2024年10月,新能源汽车产销分别完成146.3万辆和143万辆,同比分别增长48%和49.6%。而结合各家新能源车企所公布的销量数据来看,比亚迪再度夺得了销冠宝座,其10月新能源汽车销量达到了502657辆,同比增长66.53%。众所周知,比亚迪是新能源汽车领域的重要参与者,其一举一动向来为外界所关注。日前,比亚迪汽车旗下品牌方程豹汽车推出了新车方程豹豹8,该款车型一上市就迅速吸引了消费者的目光,成为SUV
    刘旷 2024-12-02 09:32 131浏览
  • RDDI-DAP错误通常与调试接口相关,特别是在使用CMSIS-DAP协议进行嵌入式系统开发时。以下是一些可能的原因和解决方法: 1. 硬件连接问题:     检查调试器(如ST-Link)与目标板之间的连接是否牢固。     确保所有必要的引脚都已正确连接,没有松动或短路。 2. 电源问题:     确保目标板和调试器都有足够的电源供应。     检查电源电压是否符合目标板的规格要求。 3. 固件问题: &n
    丙丁先生 2024-12-01 17:37 111浏览
  • 当前,智能汽车产业迎来重大变局,随着人工智能、5G、大数据等新一代信息技术的迅猛发展,智能网联汽车正呈现强劲发展势头。11月26日,在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上,紫光展锐与上汽海外出行联合发布搭载紫光展锐A7870的上汽海外MG量产车型,并发布A7710系列UWB数字钥匙解决方案平台,可应用于数字钥匙、活体检测、脚踢雷达、自动泊车等多种智能汽车场景。 联合发布量产车型,推动汽车智能化出海紫光展锐与上汽海外出行达成战略合作,联合发布搭载紫光展锐A7870的量产车型
    紫光展锐 2024-12-03 11:38 121浏览
  • 光伏逆变器是一种高效的能量转换设备,它能够将光伏太阳能板(PV)产生的不稳定的直流电压转换成与市电频率同步的交流电。这种转换后的电能不仅可以回馈至商用输电网络,还能供独立电网系统使用。光伏逆变器在商业光伏储能电站和家庭独立储能系统等应用领域中得到了广泛的应用。光耦合器,以其高速信号传输、出色的共模抑制比以及单向信号传输和光电隔离的特性,在光伏逆变器中扮演着至关重要的角色。它确保了系统的安全隔离、干扰的有效隔离以及通信信号的精准传输。光耦合器的使用不仅提高了系统的稳定性和安全性,而且由于其低功耗的
    晶台光耦 2024-12-02 10:40 134浏览
  • 遇到部分串口工具不支持1500000波特率,这时候就需要进行修改,本文以触觉智能RK3562开发板修改系统波特率为115200为例,介绍瑞芯微方案主板Linux修改系统串口波特率教程。温馨提示:瑞芯微方案主板/开发板串口波特率只支持115200或1500000。修改Loader打印波特率查看对应芯片的MINIALL.ini确定要修改的bin文件#查看对应芯片的MINIALL.ini cat rkbin/RKBOOT/RK3562MINIALL.ini修改uart baudrate参数修改以下目
    Industio_触觉智能 2024-12-03 11:28 104浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦