资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,实验5 LED显示与定时中断,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,实验5 LED显示与定时中断,一、实验目的,二、实验设备与器材,三、实验电路,四、实验内容、过程及要求,一、实验目的,(1)理解LED数码管静态显示驱动电路的组成、工作原理及LED限流电阻R的取值依据。,(2)掌握中断初始化的方法与定时中断服务程序的编写规则。,(3),理解LED动态显示驱动电路的组成、工作原理及其驱动程序的编写方法。,初步理解事件驱动程序的设计方法。,二、实验设备与器材,仿真器及其附件、数字万用表、图1所示的实验电路板各一套。,本实验涉及实验板上的,U101,、,U204,、,U205,芯片,以及,LED200,、,LED201,数码管,而与其他,IC,元器件无关。接通电源前,先按表,5-1,设置板上相关跳线状态。,表,5-1,相关跳线状态,三、实验电路,实验电路如图,3,所示。通过跳线可构成一位静态,LED,显示驱动电路、两位,LED,动态显示驱动电路及四位,LED,静态,(,串行输出方式,),显示驱动电路。,四、实验内容、过程及要求,1测试实验电路,在特殊功能寄存器窗口内,将P0口锁存器置为00,如果LED200、LED201数码显示器显示“8”,说明电路连接正确。,用数字万用表分别测出限流电阻,R200,R207,之一两端的压降,V,R,、,T201,集电极与,LED,数码管任一笔段之间的电压,(,该电压就是,LED,发光正向压降,V,F,),,然后计算出,LED,工作电流,I,F,,并与实际值,(V,R,/R),比较。,2利用定时中断功能循环显示,利用定时中断功能循环显示,0,、,1,、,2,、,3,、,4,、,5,、,6,、,7,、,8,、,9,、,A,、,B,、,C,、,D,、,E,、,F,等,16,个数码,(,每秒显示一个数码,),。接通电源前,先将,JP205,置为,1-2,、,2-3,引脚开路状态,,SWDIP,置为,OFF,,即只在,LED200,数码管上显示。,假设晶振频率为,11.0592 MHz,,则“,12,时钟,/,机器周期”状态下,机器周期约为,1.085 s,,即使定时器工作在方式,1,状态,最长定时时间为,2,16,121/11.0592 MHz(s),,即,71111 s,。对于,1 s,以上的超长定时,需要结合软件计数和定时中断方式实现。例如,利用定时器,T0,每隔,20 ms,中断一次,对中断进行计数,即可获得所需的定时时间,则定时器初值为,T0=,=47 104,即,B800 H,,因此,TH0=0B8H,,,TL0=00H,参考程序如下:,TCOCON DATA 40H ;定时器溢出计数单元,DISPC DATA 41H ;显示数码计数单元,TIME1 EQU 50 ;溢出次数,ORG 0000H,LJMP MAIN,ORG 000BH,LJMP CTC0 ;定时/计数器T0中断服务程序入口地址,ORG 0050H,;主程序开始,PROC MAIN,MAIN:,MOV SP,#5FH ;对于只有128字节的内部RAM芯片来说,,;将60H7FH共计32字节作为堆栈区,;MOV SP,#0DFH ;对于具有256字节的内部RAM芯片来说,,;将0E0H0FFH共计32字节作为堆栈区,MOV DPTR,#8000H ;暂时关闭蜂鸣器,MOV A,#0FFH,MOVX DPTR,A,;复位后,将08H0FF内部RAM单元清零,MOV R0,,,#08H,;复位后,将08H0FFH内部RAM单元清零,TCOVERB BIT 00H ;定时器溢出标志,LCALL DATA_BUF ;把数码对应笔段码送显示缓冲区,MOV R0,#DISPBUF+1;选择个位笔段码,(2)由于定时器T0、T1工作在方式1时,没有自动重装初值功能,存在一定的定时误差。,;定时/计数器T0中断服务程序,3两位LED数码管动态显示,接通电源前,将JP204、JP205均置为“2-3短路”状态,SWDIP置为ON,即用P1.,MOV TCOCON,#TIME1;T0每20 ms中断一次,则TCOCON回零时间为5020 ms,LCALL BUF_TO_LED ;将显示缓冲区内字模送LED显示,SJMP MAINPROC ;循环,MOV TCOCON,#TIME1;T0每20 ms中断一次,则TCOCON回零时间为5020 ms,;数码 0 1 2 3 4 5 6 7,CLR TIME1S ;清除定时时间到标志,CLR P1.,LOOP1:,MOV R0,#0,INC R0,CJNE R0,#0,LOOP1,;初始化定时器T0,MOV TH0,#0B8H,MOV TL0,#00H ;初值0B800H送定时器T0,ANL TMOD,#0F0H,ORL TMOD,#00000001B,;定时器T0工作在方式1;C/T位为0,定时状态;软件启动,;初始化中断控制器,SETB ET0 ;允许定时器T0中断,SETB EA ;开中断,;,启动定时器,T0,SETB TR0 ;启动T0,MOV TCOCON,#TIME1;T0每20 ms中断一次,则TCOCON回零时间为5020 ms,CLR A ;从0开始显示,MOV DPTR,#LEDTAB ;0F字模表首地址送DPTR,MOVC A,A+DPTR ;取显示数码对应字模,MOV P0,A ;字模送P0口,SJMP$;虚拟主程序,等待中断,END,;定时/计数器T0中断服务程序,PROC CTC0,CTC0:,MOV TL0,#00H ;由于T0工作在方式1,需要重装初值,MOV TH0,#0B8H ;为减小定时误差,进入T0中断服务程序后,;立即重装,PUSH PSW,PUSH ACC,CLR RS0,SETB RS1 ;切换工作寄存器区(这里假设用1区),DJNZ TCOCON,EXIT;溢出次数减1,不为0跳转,;溢出次数已回到0,重新初始化溢出次数,MOV TCOCON,#TIME1,INC DISPC ;,数码计数器加,1,,显示下一个数码,MOV A,DISPC,CJNE A,#16,NEXT1,NEXT1:,JC NEXT2,;显示数码已经大于F,再从0开始显示,MOV DISPC,#0 ;从0开始,MOV A,,,DISPC,NEXT2:,MOV DPTR,#LEDTAB ;0F字模表首地址送DPTR,MOVC A,A+DPTR ;取显示数码对应字模,MOV P0,A ;字模送P0口,EXIT:,POP ACC,POP PSW,RETI,END,LEDTAB:;八段LED共阳数码管字模,;数码 0 1 2 3 4 5 6 7,DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,;数码 8 9 A B C D E F,DB 80H,,,90H,,,88H,,,83H,,,0C6H,,,0A1H,,,86H,,,8EH,【思考】,(1)如果改用定时器T1完成上述功能,则如何修改上述程序段?,(2),由于定时器,T0,、,T1,工作在方式,1,时,没有自动重装初值功能,存在一定的定时误差。如果改用方式,2,,溢出时间又显得太短,最好使用定时器,T2,实现毫秒级精确定时,请写出相应的驱动程序。,3两位LED数码管动态显示,接通电源前,将JP204、JP205均置为“2-3短路”状态,SWDIP置为ON,即用P1.2引脚作为个位(LED200数码管)的位扫描码;用P3.4引脚作为十位(LED201数码管)的位扫描码;笔段码从P0口输出。,在LED201、LED200上显示000FFH数码。,为避免闪烁,笔段刷新频率取,50 Hz,,即显示周期为,20 ms,,每一位显示时间为,10 ms,。为此,可利用定时器,T2,每隔,10 ms,中断一次,定时器初值为,=56 320,T2=,即,DC00H,,因此,TH2=0DCH,,,TL2=00H,。,参考程序如下:,TCOCON DATA 40H ;定时器溢出计数单元,DISPC DATA 41H ;显示数码计数器,DISPP DATA 43H ;显示指针,DISPBUF DATA 48H ;显示缓冲区,48H单元记录十位,49H单元记录个位,TCOVERB BIT 00H ;定时器溢出标志,TIME1S BIT 01H ;1 s定时时间到标志,TIME1 EQU 100 ;溢出次数,ORG 0000H,;将60H7FH共计32字节作为堆栈区,CLR TCOVERB ;清除定时器溢出标志,;显示指针为0,本次中断显示个位,0592 MHz,则“12时钟/机器周期”状态下,机器周期约为1.,SETB TR0 ;启动T0,MOV TL0,#00H ;初值0B800H送定时器T0,MOV DISPP,#0,;MOV SP,#0DFH ;对于具有256字节的内部RAM芯片来说,,CJNE A,#16,NEXT1,SETB TR0 ;启动T0,MOV DPTR,#LEDTAB ;0F字模表首地址送DPTR,PUSH PSW,ANL A,#0FH ;取个位,TCOVERB BIT 00H ;定时器溢出标志,(2)当刷新频率取25 Hz和100 Hz时,每笔段显示时间分别是多少?修改定时器初值后,再执行,观察刷新频率降低、升高后,显示亮度有无变化?是否存在闪烁感?,CJNE A,#2,NEXT1,DISPC DATA 41H ;显示数码计数器,MOV A,DISPP ;取显示指针,LJMP MAIN,ORG 002BH,LJMP CTC2 ;定时/计数器T2中断服务程序入口地址,ORG 0050H,;主程序开始,PROC MAIN,MAIN:,MOV SP,#0DFH ;对于具有256字节的内部RAM芯片来说,将0E0H0FFH共计32,;字节作为堆栈区,MOV DPTR,#8000H;关闭蜂鸣器,MOV A,#0FFH,MOVX DPTR,,,A,;复位后,将08H0FFH内部RAM单元清零,MOV R0,#08H,LOOP1:,MOV R0,#0,INC R0,CJNE R0,#0,LOOP1,;初始化定时器T2,MOV TH2,#0DCH,MOV TL2,#00H ;初值0DC00送定时器T2,MOV RCAP2H,#0DCH,MOV RCAP2L,,,#00H ;,初始化重装初值,MOV T2CON,#00000100B;初始化T2工作方式(自动重装初值、;定时)并启动了T2,;初始化中断控制器,SETB ET2 ;允许定时器T2中断,SETB EA ;开中断,MOV TCOCON,#TIME1;T2每10 ms中断一次,则TCOCON回零时间为10010 ms,MAINPROC:,JNB TIME1S,NEXT1,;1 s定时时间到,CLR TIME1S ;清除定时时间到标志,LCALL DATA_BUF ;把数码对应笔段码送显示缓冲区,INC DISPC ;,计数单元加,1,NEXT1:,JNB TCOVERB,NEXT2,;定时器溢出,CLR TCOVERB ;清除定时器溢出标志,;将显示缓冲区字模送LED显示,LCALL BUF_TO_LED ;将显示缓冲区内字模送LED显示,NEXT2:,SJMP MAINPROC ;循环,END,;定时/计数器T2中断服务程序(采用事件驱动方式,在中断服务程序中,,;仅设置事件出现标志,事件处理由主程序完成),PROC CTC2,CTC2:,PUSH PSW,SETB TCOVERB ;定时器溢出标志,DJNZ TCOCON,EXIT;溢出次数减1,不为0跳转,;溢出次数已经回到0,重新初始化溢出次数,MOV TCOCON,#TIME1,SETB TIME1S ;1 s,定时时间到标志,EXIT:,POP PSW,CLR TF2 ;清除定时器T2溢出标志,RETI,END,PROC DATA_BUF ;把数码对应笔段码送显示缓冲区,DATA_BUF:,MOV DPTR,#LEDTAB ;0F字模表首地址送DPTR,MOV R0,#DISPBUF,MOV A,DISPC,ANL A,,,#0F0H ;,取十位,SWAP A,MOVC A,A+DPTR ;取显示数码对应笔段码,MOV R0,A ;送显示缓冲区,INC R0,MOV A,DISPC,ANL A,#0FH ;取个位,MOVC A,A+DPTR ;取显示数码对应笔段码,MOV R0,A ;送显示缓冲区,RET,END,PROC BUF_TO_LED ;将显示缓冲区内字模送LED显示,BUF_TO_LED:,;,笔段码送,P0,MOV A,DISPP ;取显示指针,CJNE A,#2,NEXT1,NEXT1:,JC NEXT2,;显示指针大于等于2,重新置为0,MOV DISPP,#0,MOV A,DISPP,NEXT2:,CJNE A,#0,NEXT3,;显示指针为0,本次中断显示个位,SETB P3.4 ;关闭十位,CLR P1.2 ;打开个位,MOV R0,,,#DISPBUF+1;,选择个位笔段码,SJMP EXIT,NEXT3:,;不为0,则肯定为1(不用判别),本次中断显示十位,CLR P3.4 ;打开十位,SETB P1.2 ;关闭个位,MOV R0,#DISPBUF ;选择十位笔段码,EXIT:,MOV P0,R0 ;笔段码送P0口,RET,END,LEDTAB:;,八段,LED,共阳数码管字模,;数码 0 1 2 3 4 5 6 7,DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,;数码 8 9 A B C D E F,DB 80H,,,90H,,,88H,,,83H,,,0C6H,,,0A1H,,,86H,,,8EH,操作步骤:,(1),开始时,先注销带灰色背景指令,即固定显示内容,观察LED数码管亮度,以及是否存在明显闪烁感;然后取消注释,允许更新显示内容。,(2),当刷新频率取25 Hz和100 Hz时,每笔段显示时间分别是多少?修改定时器初值后,再执行,观察刷新频率降低、升高后,显示亮度有无变化?是否存在闪烁感?,(3),模拟8位LED动态显示,观察随着显示位数增加,LED数码管亮度变化情况。,尽管实验板上只有两位,LED,,但可以通过模拟方式,观察多位,LED,显示状态。,4测量信号频率,用跳线帽将,JP101,跳线的,1-2,引脚短路,使引脚与引脚相连,用定时器,T2,可编程输出时钟信号作为定时器,T0,的外部计数脉冲源,,对引脚输出的时钟信号进行计数,并验证。,5测量信号周期,JP101,、,JP103,的,1-2,及,2-3,引脚开路,通过导线将引脚与引脚相连,用定时器,T2,可编程输出时钟信号,(,从引脚输出,),作为定时器,T0,的计数控制端,通过定时器,T0,测量引脚输出的时钟信号周期,并验证。,
展开阅读全文