实验三数码管动态显示程序设计实验目的1、理解数码管动态显示原理2、理解数码管动态显示电路的设计方法3、掌握数码管动态显示程序的设计方法实验仪器单片机开发板、万利仿真机、稳压电源、计算机实验内容1、动态扫描显示程序2、特征位小数点控制显示程序实验电路图实验步骤及调试信息1、新建实验项目2、输入实验程序并补充完整;------------------------------------------------------;数码管动态显示程序;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;; 2009-08-20;-------------------------------------------------------LEDCLK bit P3.4LEDDIN bit P2.3LEDDATA data P0dseg at 30hdispbuf: ds 8 ;显示缓冲区8字节disppoint: ds 1 ;小数点控制数据maincode SEGMENT CODECSEG at 0LJMP StartRSEG maincodeStart: CLR E Amov sp,#0c0hmov dispbuf ,#08hmov dispbuf+1, #04hmov dispbuf+2, #00hmov dispbuf+3, #08hmov dispbuf+4, #02hmov dispbuf+5, #00hmov dispbuf+6, #02hmov dispbuf+7, #07hmov disppoint,#02h ;第2位小数点亮LCALL dispSJMP $-3;------------------------------------------------------;数码管动态显示程序;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;; 2009-08-20;-------------------------------------------------------Disp: MOV R7,#8MOV R0,#dispbufCLR LEDCLKSETB L EDDINDisp1: MOV A,@R0MOV DPTR,#DispTabMOVC A,@A+DPTRcpl a; LCALL Dispdot ;显示小数点程序MOV LEDDA TA,A ;在输出之前加入显示小数点程序LCALL DispSelection1 ;输出位选择信号,DispSelection2是第二种; lcall dispsel3LCALL Delay1msmov p2,#0ffhINC R0DJNZ R7,Disp1mov p2,#0ffhRET;-------------------------------------------------;位选码以一次一位方式输出;-------------------------------------------------dispsel3:mov dptr,#DispSTabmov a,r7movc a,@a+dptrcpl a; swap amov p2,aretDispSelection1:CJNE R7,#8,DispSelection11CLR L EDDINDispSelection11:SETB LEDCLKNOPCLR L EDCLKSETB LEDDINRET;-------------------------------------------------;位选码以一次一字节方式输出;-------------------------------------------------DispSelection2:MOV B,#8MOV DPTR,#DispSTabMOV A,R7MOVC A,@A+DPTRCPL ADispSelection21:RLC AMOV LEDDIN,CSETB LEDCLKNOPCLR L EDCLKDJNZ B,DispSelection21RETDispSTab: DB 00H,80H,20H,40H,10H,08H,04H,02H,01H;位选码数据表dispa equ 80h ;数码管各段数据定义dispb equ 40hdispc equ 20hdispd equ 10hdispe equ 08hdispf equ 04hdispg equ 02hdisph equ 01hdisp8 equ 0ffh-disphDispTab: db disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe ;0,1,2 db disp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe;3,4,5db disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe ;6,7,8,9db disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg ;a,b,cdb disp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd;d,e,fdb disp8-dispb-dispc,0ffh,00h,dispg ;H,全亮,全暗,-;--------------------------------------------------------------------;特征位小数点控制显示程序;把小数点显示程序加到显示码输出之前;输入:A : 显示译码值; R7:当前正在显示的LED编号;输出:无;--------------------------------------------------------------------Dispdot:MOV B,AMOV A,R7MOV DPTR,#DispSTabMOVC A,@A+DPTRANL A,disppointSETB C ;本行及以下4行可改成MOV C,PJZ Dispdot1CLR C;点亮小数点Dispdot1:CPL C ;本行根据情况增减MOV A,BCPL AMOV ACC.7,C ;小数点由D7控制; MOV LEDDA TA,A ;本行可以删除RETDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms:PUSH 07MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2POP 07RETEND3、编译下载实验程序,并修改错误(按附录说明)4、全速运行程序,查看实验现象。
数码管稳定的显示8408 20276、单步执行,分析各程序的功能特点。
7、整理实验设备实验现象在LED数码管上稳定显示8408 2027,没有闪烁等情况。
说明显示扫描速度较快,一般大于50Hz以上。
LED数码管有一盏不亮,原因是它对应的三极管不能正常工作。
程序运行之后,0030H后8位为08 04 00 08 02 00 02 07调试信息1、编译无误。
2、程序各主要部分运行时间显示一位数码管用时524us,显示8位用时4195us。
3、通过改变move disppoint,#08H 可以改变显示小数点。
如要显示后3位小数点,可改为move disappoint,#07H.思考题1、运行上面的程序,计算显示程序每秒运行的次数?答:显示8位数码管用时4197us,所以显示程序每秒运行次数为1÷(4197×10-6)﹦238次。
2、请说明数码管的消隐如何实现。
;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;; 2009-08-20;------------------------------------------------------- LEDCLK bit P3.4LEDDIN bit P2.3LEDDATA data P0dseg at 30hdispbuf: ds 8 ;显示缓冲区8字节;disppoint: ds 1 ;小数点控制数据disapper: ds 1maincode SEGMENT CODECSEG at 0LJMP StartRSEG maincodeStart:CLR EAMOV sp,#0c0h ;重定义堆栈空间MOV dispbuf+0 ,#08h ;往显示缓冲区填充数MOV dispbuf+1, #04hMOV dispbuf+2, #00hMOV dispbuf+3, #08hMOV dispbuf+4, #02hMOV dispbuf+5, #00hMOV dispbuf+6, #02hMOV dispbuf+7, #07h;MOV disppoint, #08h ;第4位小数点亮MOV disapper ,#01h ;第1位数码管消隐LCALL dispSJMP $-3;------------------------------------------------------;数码管动态显示程序;包含小数点显示;位选码输出有两种方式:; DispSelection1: 一次一位; DispSelection2: 一次一字节;-------------------------------------------------------Disp:MOV R7,#8MOV R0,#dispbuf ;送缓冲区首地址CLR LEDCLK ;送低电平SETB LEDDIN ;Disp1:MOV A,@R0 ;送要显示的数据MOV DPTR,#DispTab ;表首地址MOVC A,@A+DPTR ;查表;CPL A; LCALL Dispdot ;显示小数点程序LJMP disapper1 ;消隐程序F: MOV LEDDATA,A ;在输出之前加入显示小数点程序LCALL DispSelection1 ;输出位选择信号,DispSelection2是第二种; LCALL dispsel3LCALL Delay1msMOV P2,#0FFHINC R0DJNZ R7,Disp1MOV P2,#0FFHRET;------------------------------------------------------- ;位选码以一次一位方式输出;------------------------------------------------------- ;dispsel3:;; MOV DPTR,#DispSTab; MOV A,R7; MOVC A,@A+DPTR; CPL A; swap A; MOV P2,A; RETdisapper1:mov B,AMOV A,R7MOV DPTR,#DispSTabmovc A,@A+DPTRANL A, disapperJNZ disapper2MOV A,BCPL ALJMP F ;不消隐disapper2:MOV A,#0FFHLJMP F ;消隐DispSelection1:; PUSH ACC; MOV LEDDATA,0FFHCJNE R7,#8,DispSelection11CLR LEDDIN; POP ACC; MOV LEDDATA,ADispSelection11:SETB LEDCLKNOPCLR LEDCLKSETB LEDDINRET;-------------------------------------------------;位选码以一次一字节方式输出;6和7不能显示相反;-------------------------------------------------DispSelection2:MOV B,#8MOV DPTR,#DispSTabMOV A,R7MOVC A,@A+DPTRCPL ADispSelection21:RLC AMOV LEDDIN,CSETB LEDCLKNOPCLR LEDCLKDJNZ B,DispSelection21RETDispSTab:DB 00H,80H,20H,40H,10H,08H,04H,02H,01H;位选码数据表dispa equ 80h ;数码管各段数据定义dispb equ 40hdispc equ 20hdispd equ 10hdispe equ 08hdispf equ 04hdispg equ 02hdisph equ 01hdisp8 equ 0ffh-disphDispTab:db disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe ;0,1,2 dbdisp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe;3,4,5 db disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe ;6,7,8,9 db disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg ;a,b,c dbdisp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd;d,e,f db disp8-dispb-dispc,0ffh,00h,dispg ;H,全亮,全暗,-;-------------------------------------------------------------------- ;特征位小数点控制显示程序;把小数点显示程序加到显示码输出之前;输入:A : 显示译码值; R7:当前正在显示的LED编号;输出:无;-------------------------------------------------------------------- Dispdot:MOV B,AMOV A,R7MOV DPTR,#DispSTabMOVC A,@A+DPTR; ANL A,disppointSETB C ;本行及以下4行可改成MOV C,PJZ Dispdot1CLR C ;点亮小数点Dispdot1:; CPL C ;本行根据情况增减MOV A,BCPL AMOV ACC.0,C ;小数点由D7控制; MOV LEDDATA,A ;本行可以删除RETDelayNms:LCALL Delay1msDJNZ R7, $-3RETDelay1ms:PUSH 07MOV R7,#250 ;1msNOPNOPDJNZ R7, $-2POP 07RETEND。