单片机实验——利用AD完成电压测量及显示1.实验目的(1)掌握A/D转换器的基本原理和使用方法。(2)掌握二进制数和BCD码之间的数值转换方法。2.预习要点(1)A/D转换器的基本原理和使用方法(2)二进制数和BCD码之间的数值转换方法3.实验设备计算机、单片机实验箱,万用表。4.实验内容基本要求:利用电位器,在0~5V范围调节A/D转换器0809的输入端ADIN3的电压,在显示电路上显示00~50数值。扩展要求:相同输入条件下,在显示电路上显示-25~+24的数值实验6ORG0000HSJMPMAIN;****************************************************;主程序ORG0030HMAIN:MOVSP,#70H;显示缓存区MOV32H,#11;为了兼容之前的显示程序,所以就通过改变MOV33H,#11;字型的方式让第3-8个数码管不亮,只显示前两位MOV34H,#11MOV35H,#11MOV36H,#11MOV37H,#11;初始化8155MOVDPTR,#0100HMOVA,#03HMOVX@DPTR,ALOOP:MOVDPTR,#6000H;AD的地址,应接CS3MOVA,#00H;选择通道0IN0MOVX@DPTR,A;启动AD,开始转换LCALLDELAY;延时,等待转换完成,一般转换时间为100us左右LCALLADCON;读取数据并处理LCALLDISPLAY;数码管显示SJMPLOOP;*****************************************;读取数据并处理子程序ADCON:MOVXA,@DPTR;读取AD的输出XMOVB,#51;把00H-FFH之间的数据转换为0-50的数据DIVAB;这个我会给大家讲讲,很简单的,这里就不注释了MOV30H,AMOVA,BMOVB,#5DIVABMOV31H,ARET;*************************************;显示子程序DISPLAY:MOVR0,#30HMOVR3,#0FEHLD0:MOVDPTR,#0102H;送字位MOVA,R3MOVX@DPTR,AMOVDPTR,#DTAB;查表,送字形MOVA,@R0MOVCA,@A+DPTRMOVDPTR,#0101HMOVX@DPTR,ALCALLDELAYINCR0MOVA,R3JNBACC.7,LD1RLAMOVR3,ALJMPLD0LD1:RET;***********************************************;字形表DTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数字0-9DB40H,00H;40H为-00H为不亮;**********************************************;延时1msDELAY:MOVR7,#02HDEL1:MOVR6,#0FFHDEL2:DJNZR6,DEL2DJNZR7,DEL1RET;**********************************************;显示子程序(另一种);这里给大家写本实验的另一种显示方法:;这种方法就是30H和31H分别写显示程序,显示完31H之后就;退出程序,很easy的啦,大家还可以多多试试自己编写别的程序;注:本子程序在主程序中并没有调用DISPLAY1:MOVDPTR,#0102HMOVA,#0BFHMOVX@DPTR,AMOVDPTR,#DTABMOVA,30HMOVCA,@A+DPTRMOVDPTR,#0101HMOVX@DPTR,ALCALLDELAYMOVDPTR,#0102HMOVA,#7FHMOVX@DPTR,AMOVDPTR,#DTABMOVA,31HMOVCA,@A+DPTRMOVDPTR,#0101HMOVX@DPTR,ALCALLDELAYRET;**********************************************;实验6扩展ORG0000HSJMPMAIN;*********************************************;主程序ORG0030HMAIN:MOVSP,#70H;显示缓存区MOV32H,#11;为了兼容之前的显示程序,所以就通过改变MOV33H,#11;字型的方式让第3-8个数码管不亮,只显示前两位MOV34H,#11MOV35H,#11MOV36H,#11MOV37H,#11;初始化8155MOVDPTR,#0100HMOVA,#03HMOVX@DPTR,ALOOP:MOVDPTR,#6000H;;AD的地址,应接CS3MOVA,#00H;选择通道0IN0MOVX@DPTR,A;启动AD,开始转换LCALLDELAY;延时,等待转换完成,一般转换时间为100us左右LCALLADCON;读取数据并处理LCALLDISPLAY;数码管显示SJMPLOOP;***************************************;AD数据读取并处理子程序ADCON:MOVXA,@DPTR;读取AD的输出XCJNEA,#128,NEXT;产生CyNEXT:JCNEXT1;判断要转化为0-25还是-25-0,然后决定要不要加负号CLRC;因为后面用到减法,所以先要清零CySUBBA,#128MOV30H,#11;为0-25之间,符号位什么都不显示SJMPNEXT2NEXT1:CLRC;因为后面用到减法,所以先要清零CyMOV62H,AMOVA,#128SUBBA,62HMOV30H,#10;为-25-0之间,符号位显示负号NEXT2:MOVB,#51;下面是把0-128的数转换为0-25的数,十位存到31H里,各位存到32H里DIVAB;这个和实验6一样的MOV31H,AMOVA,BMOVB,#5DIVABMOV32H,ARET;*************************************;显示子程序DISPLAY:MOVR0,#30HMOVR3,#0FEHLD0:MOVDPTR,#0102H;送字位MOVA,R3MOVX@DPTR,AMOVDPTR,#DTAB;查表,送字形MOVA,@R0MOVCA,@A+DPTRMOVDPTR,#0101HMOVX@DPTR,ALCALLDELAYINCR0MOVA,R3JNBACC.7,LD1RLAMOVR3,ALJMPLD0LD1:RET;***********************************************;字形表DTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;数字0-9DB40H,00H;40H为“00H为不亮;**********************************************;延时1msDELAY:MOVR7,#02HDEL1:MOVR6,#0FFHDEL2:DJNZR6,DEL2DJNZR7,DEL1RET;**********************************************