历史上的今天
返回首页

历史上的今天

今天是:2025年01月25日(星期六)

2021年01月25日 | 基于51单片机和ADC0809的数字电压表设计

2021-01-25 来源:eefocus

本课题是利用单片机设计一个数字电压表,能够测量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


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();




}


}


推荐阅读

史海拾趣

Excelitas公司的发展小趣事

作为一家技术驱动型企业,Excelitas公司深知持续创新的重要性。因此,公司不断加大研发投入,积极引进和培养高端人才。通过持续的创新和研发,Excelitas不断推出具有领先技术的产品,满足了市场的多样化需求。同时,公司还注重知识产权的保护,积极申请专利,维护了自身的技术优势和市场竞争力。

GS Yuasa Battery Sales UK Ltd.公司的发展小趣事

随着技术的不断成熟和市场的扩大,Excelitas公司开始寻求全球扩张。公司先后在北美、欧洲和亚洲设立了研发中心和生产基地,以更好地服务全球客户。在全球扩张的过程中,Excelitas注重本土化战略,积极与当地企业合作,共同开拓市场。这一策略不仅帮助公司快速融入当地市场,还促进了公司业务的持续增长。

EM Devices Corporation公司的发展小趣事

作为一家有社会责任感的企业,EM Devices Corporation不仅关注自身的经济效益,还积极履行社会责任。公司严格遵守环保法规,采取了一系列环保措施,减少生产过程中的污染排放。此外,公司还积极参与公益事业,为社会做出了积极的贡献。这种可持续发展的理念为公司赢得了广泛的社会赞誉和尊重。

GREEGOO公司的发展小趣事
使用时钟信号重整器对时钟信号进行重新整形,使时钟信号的时序更加准确。
Beta Dyne Inc公司的发展小趣事

Beta Dyne Inc最初是一家专注于研发新型半导体材料的小型创业公司。在创始人的带领下,公司成功研发出一种具有高效能、低功耗特性的新材料,这一技术突破迅速引起了业界的关注。随后,Beta Dyne积极与各大电子设备制造商合作,将其新材料应用于智能手机、平板电脑等消费电子产品中,成功开拓了新的市场。

Eurohm Resistors公司的发展小趣事

随着市场的不断扩张和竞争的加剧,Eurohm Resistors始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。这种对品质的坚守不仅赢得了客户的信任,也为公司赢得了良好的口碑。

问答坊 | AI 解惑

大家都来讨论一下B题吧 真难。。

本帖最后由 paulhyde 于 2014-9-15 09:07 编辑 音控小车问题 大家一起交流一下吧 可能都有帮助啊。。  …

查看全部问答>

有谁用过红色飓风二代FPGA开发板的么?求助~

我手里的CY1C12开发板上的芯片是FPGA的EP1C12Q240C8,今天我用一个小程序,试图点亮那四个七段数码管。用的动态显示。然而,当我配置管脚,下载到板上后,数码管能够顺序点亮,但是不是之前程序里面设计的数字,有些乱码的感觉。 我怀疑是管脚配置 ...…

查看全部问答>

XILINX FPGA 设计的点滴

XILINX FPGA 设计的点滴 1、为时钟信号选用全局时钟缓冲器BUFG 2、尽量只用一个时钟沿来寄存数据 3、除了用CLKDLL或DCM产生的时钟外不要在内部产生时钟 4、注意状态机编码的可靠性:状态机转移状态改变的位数越少,则功能越可靠。 5、逻辑 ...…

查看全部问答>

windows CE6.0 USB 键盘鼠标

大家好,我在订制系统的时候,想添加USB键盘鼠标的支持,请问一下 需要添加那些组建,Reg文件 和 BIB文件需要添加那些东西 ?…

查看全部问答>

evc中怎样编辑多国语言

evc中怎样编辑多国语言 比如说我要SetWindowText(_T(\"? ?? ??\")); 但在Evc中成了SetWindowText(_T(\"? ?? ??\")); …

查看全部问答>

io口扩展问题

我想做个控制板上16个继电器,再留出一个可控制的扩展板接口也是控制16个继电器的。 我目前想用16f877单片机进行控制,不知道io扩展芯片用什么好 有什么好的设计方案,请帮忙,谢谢!…

查看全部问答>

ARM9260EJ-S MMU初始化问题

我在初始化ARM9260EJ-S CPU(AT91SAM9260EJ-S)时遇到了一个问题,SDRAM 8M,按Section初始化,影射成8个块,每块1M,SDRAM的物理地址为0x20000000,未启动MMU时,SDRAM上的所有读写都正常,启动MMU之后,0x20500000开始的1M SDRAM读写就发现异常,MMU初 ...…

查看全部问答>

EE_FPGA V1.0 调试进展(2010.10.17更新)

正面:   反面: 目前进展: 1. 最小系统工作 2. LED工作 3. key工作 4. usb转串口驱动正常,串口工作正常   稍后上图,敬请关注     10.17更新 [ 本帖最后由 chenzhufly 于 2010-10-17 14:20 编辑 ]…

查看全部问答>

EQ 6 1 10混合动力电动汽车再生

EQ 6 1 10混合动力电动汽车再生制动控制策略研究…

查看全部问答>

【挖电源】3个厂家的LED灯T8管驱动电源

这是为LED灯T8管供电的隔离驱动电源,那个最长的驱动电源,装在灯管后,售价是在200元以上的,只是这些驱动电源在装进灯管时,都是用热缩套管套着得,这在欧美是不允许的,但是国内可以! [ 本帖最后由 dongguanze 于 2011-7-31 09:23 编辑 ]…

查看全部问答>