学习情境2课件.ppt
学习情境学习情境2 LED显示显示【学习目标学习目标】v 能力目标能力目标: 1、会设计制作LED显示电路。 2、了解单片机接口驱动LED电路的方法。 3、掌握LED显示电路的编程和调试方法v 知识目标:知识目标: 1、掌握单片机的算术运算和逻辑运算指令功能和编程方法。 2、掌握单片机的控制转移类指令和位操作指令功能和编程方法。任务任务2.1 指令系统指令系统 v 【任务描述任务描述】 通过对最小系统电路的设计,对单片机的硬件电路有了清楚的认识,而单片机的应用还用掌握软件编程的方法。在本任务中将MCS51系列单片机的指令系统介绍完整,通过了解各指令和伪指令的功能和编程方法,学会灵活编写简单的汇编程序的方法。v 【任务分析任务分析】 (1)算术运算类指令的功能和编程方法。 (2)逻辑运算类指令的功能和编程方法。 (3)控制转移类指令的功能和编程方法。 (4)位操作指令的功能和编程方法。 (5)伪指令的功能和在程序中的使用。【知识准备知识准备】一、算术运算类指令 1加法指令 (1)不带进位的加法指令 不带进位的加法指令的功能是将累加器A中的内容和源操作数中的内容相加,加后的和再放入累加器A中。运算结果影响PSW中的Cy、OV、AC和P。ADD A,Rn ;A (A)+(Rn)ADD A,direct ;A (A)+(direct)ADD A,Ri ;A (A)+(Ri)ADD A,#data ;A (A)+datav Cy:当加法运算D7位(最高位)有进位时,Cy=1;否则Cy=0。v AC:当加法运算的低4位向高4位有进位时,AC =1;否则AC =0。v OV:OV=C8+C7(C8为最高位进位位,C7为次高位进位位)。v P:当放入累加器A中的“和”中“1”的个数为奇数个时,P=1;否则P=0。v 例2.1 写出下列指令执行的结果。v MOV A,#78H;(A)=78Hv ADD A,#69H;(A)=0E1H,(PSW)=0C4Hv 加法计算过程为:v 78H=0111 1000Bv +69H=0110 1001Bv 0E1H=1110 0001Bv Cy=0=C8, C7=1,AC=1, OV=C8+C7=0+1=1,P=0则(PSW)=11000100B=0C4Hv(2)带进位的加法指令v带进位加法指令和不带进位加法相比较就是在源操作数和累加器A内容相加后,还要再加上进位位。运算结果对PSW中的Cy、OV、AC和P影响和不带进位加法指令相同。ADDC A,Rn ;A (A)+(Rn)+(Cy)ADDC A,direct ;A (A)+(direct)+(Cy)ADDC A,Ri ;A (A)+(Ri)+(Cy)ADDC A,#data ;A (A)+data+(Cy)v 2减法指令v 带进位减法指令的功能是用累加器中的数减去源操作数后,再减进位位,结果放在累加器中。运算结果影响PSW中的Cy、OV、AC和P。v Cy:当减法运算D7位(最高位)有借位时,Cy=1;否则Cy=0。v AC:当减法运算的低4位向高4位有借位时,AC =1;否则AC =0。v OV:OV=C8+C7(C8为最高位借位位,C7为次高位借位位)。v P:当放入累加器A中的“差”中“1”的个数为奇数个时,P=1;否则P=0。SUBB A,Rn ;A(A)(Rn)(Cy)SUBB A,direct ;A(A)(direct)(Cy)SUBB A,Ri ;A(A)(Ri)(Cy)SUBB A,#data ;A(A)data(Cy)v3加1指令vINC A ;A(A)+1vINC Rn ;Rn(Rn)+1vINC direct ;direct(direct)+1vINC Ri ;(Ri)(Ri)+1vINC DPTR;DPTR(DPTR)+1v加1指令是给目的地址单元中的数加1,结果仍在原来地址单元。加1指令对状态标志寄存器PSW没有影响。v4减1指令v减1指令是把目的地址单元中的数减1,结果仍在原来地址单元中。减1指令对状态标志寄存器PSW没有影响。 DEC A ;A(A)1DEC Rn ;Rn(Rn)1DEC direct ;direct(direct)1DEC Ri ;(Ri)(Ri)1实验步骤实验步骤 v 5十进制调整指令v 十进制调整指令是一条单字节指令,也称为BCD码修正指令,这条指令不能独立出现,必须紧跟在ADD或ADDC指令之后出现。当两个压缩的BCD码用加法指令相加后,在A中的“和”是按照二进制相加的结果,必须用这条指令对BCD码的加法运算结果进行修正。其修正的方法为:v 当低半字节的值9或AC=1时,低半字节加6;v 当高半字节的值9或C=1时,高半字节加6v 在使用时只要在BCD码加法运算指令的后面跟一条十进制调整指令就可以了,但不能用于减法运算。DA A v 6乘法指令v 乘法指令的功能是把累加器A和寄存器B中的两个无符号数相乘,结果的低8位放在A中,高8位放在B中。乘法运算影响PSW的状态标志Cy、OV和P。v OV:当乘积结果大于0FFH时,(OV)=1,否则(OV)=0。v Cy:只要执行乘法运算Cy总是被清0。v P:乘法运算后放在A中的内容的“1”的个数为奇数个,P=1;否则P=0。 MUL AB ;BA(A)(B) v 7除法指令v 除法指令的功能是把累加器A中的无符号数除以寄存器B中的无符号数。结果的商在A中,余数在B中。除法运算影响PSW的状态标志Cy、OV和P。v OV:若除数为0,(OV)=1,否则(OV)=0。v Cy:只要执行除法操作总是清0。v P:除法运算后放在A中的内容的“1”的个数为奇数个,P=1;否则P=0。v 例2.8 写出下列指令执行的结果。v MOV A,#35H;(A)=35Hv MOV B,#08H;(B)=08Hv DIV AB ;(A)=06H,(B)=05H,(CY)=0,(P)=0,(OV)=0DIV AB v二、逻辑运算及移位指令v逻辑运算及移位指令共24条,包括“与”、“或”、“异或”及累加器清“0”、取反、左移和右移指令。除改变累加器A中的内容的指令对奇/偶标志P有影响外,不影响其它状态标志。v 1逻辑“与”运算指令:v 二进制数与逻辑为:有0出0,全1出1。对于十六进制数与逻辑为:任何一个十六进制数和0相与,结果为0;任何一个十六进制数和F相与,结果为本身。逻辑“与”运算指令的功能是把目的操作数与源操作数按位相“与”,结果放在目的地址单元中;可用来屏蔽掉字节数据中的某些位。ANL A,direct; A(A)(direct)ANL A,#data;A(A)dataANL A,Rn;A(A)(Rn)ANL A,Ri;A(A)(Ri)ANL direct,A;direct(direct)(A)ANL direct, #data;direct(direct) datav 2逻辑“或”运算指令v 二进制数或逻辑为:有1出1,全0出0。对于十六进制数或逻辑为:任何一个十六进制数和0相或,结果为它本身;任何一个十六进制数和F相或,结果为F。逻辑“或”运算指令的功能是把目的操作数与源操作数按位相“或”,结果放在目的地址单元中;可用来屏蔽掉字节数据中的某些位。 ORL A,Rn ;A(A)(Rn)ORL A,direct ;A(A)(direct)ORL A,Ri ;A(A)(Ri)ORL A,#data ;A(A)dataORL direct,A ;direct(direct)(A)ORL direct,#data ;direct(direct)data v 3. 逻辑“异或”运算指令v 异或的逻辑为:相同出0,不同出1。对于任何二进制数和0相异或结果是其本身,任何二进制数和1相异或结果被取反。对于十六进制数异或逻辑为:任何数和0相异或结果是其本身,任何数和F相异或结果是按位取反。逻辑“异或”运算指令的功能是把目的操作数与源操作数按位相“异或”,结果放在目的地址单元中v 例如累加器A中的内容为01100111B,执行指令XRL A,#0FH后,累加器A中的内容为01101000B。XRL A,direct;A(A)+( direct) XRL A,#data ;A(A)+dataXRL A,Rn ;A(A)+(Rn)XRL A,Ri;A(A)+( Ri)XRL direct,A;direct(A)+( direct)XRL direct, #data;direct(direct)+datav4取反和清零v例如执行CLR A指令之后,累加器A 中内容被清0,即(A)=0000 0000B;再执行CPL A指令后,累加器A中的内容全部被取反,即(A)=1111 1111B。 取反:CPL A;累加器A中的内容按位取反清零:CLR A;累加器A中的内容变为0v5移位类指令v(1)累加器A左移指令RL A;累加器A各位依次左移,最高位移到最低位 其各个位移位的情况如图所示: 图v(2)带进位位左移v注:带CY左移也可以实现2操作。0256之间的数执行带CY左移指令后被扩大一倍。RLC A;累加器A各位依次左移,最高位移到Cy中,原Cy中内容移到最低位其各个位移位的情况如图所示: 图v(3)累加器A右移指令v注:右移指令可以实现2操作,要保证2结果正确则D0位必须为0。RR A;累加器A各位依次右移,最低位移到最高位 其各个位移位的情况如图所示: 图v(4)带CY右移指令 其各个位移位的情况如图所示:注:带CY右移指令也可以实现2操作,要保证2结果正确则D0位必须为0。RRC A;累加器A各位依次右移,Cy中内容移到累加器A的最高位,最低位的内容移到Cy中v三、控制转移类指令v控制转移类指令共17条,包括无条件转移指令,条件转移指令,调用和返回指令等。其功能是无条件或者有条件地控制程序转移到目的地址单元 v 1无条件转移指令v (1)长转移指令v 这条指令是三字节直接寻址的无条件转移指令,转移地址在指令操作数中直接给出,寻址范围为64K(0000HFFFFH),所以称为长转移指令。v 在程序执行过程中只要遇到LJMP就转移到addr16所指示的位置,转移地址addr16还可以用标号来代替。标号用于表示标号后面的指令所在的地址,标号放在指令的前面,并且用“:”号和指令隔开。LJMP addr16 ;PCaddr16v (2)绝对转移指令v 这条指令是双字节直接寻址的无条件转移指令,转移目的地址在指令操作数中直接给出,寻址范围为2K。v 在程序执行过程中只要遇到AJMP就转移目的地址执行指令,addr11代表目的地址的低11位地址,目的地址的高5位和AJMP指令下一条指令所在地址的高5位相同。转移地址也可以用标号来代替。但是标号表示的地址必须是在2KB范围内的地址。AJMP addr11;PC(PC)+2,PC100addr16v(3)相对转移(短转移)指令v这条指令是双字节相对寻址的无条件转移指令,rel是以补码形式表示的8位的偏移量,寻址范围为256(-128+127),-号表示向回跳转,+号表示向下跳转。转移地址为程序计数器PC的当前值加偏移量,因此称为相对短转移指令。v 在用汇编语言编程时,相对地址的偏移量rel可以用目的地址的标号(符号地址)表示,程序汇编时自动计算偏移量。 SJMP rel;PC(PC)+2+relv4)变址寻址转移指令(散转指令)v这条指令单字节变址寻址的无条件转移指令,累加器A中存放的是相对偏移量,DPTR中存放的是变址基值,二者之和为转移地址,寻址范围为64KB(0000HFFFFH)。 JMP A+DPTR ;PC(A)+(DPTR)v2条件转移指令v(1)累加器判零转移指令v1累加器A中的内容是0转移v这条指令的功能就是若(A)=0,就转移到rel所指示的地址;若(A)0,则不转移,顺序执行下一条指令。JZ rel ;若(A)=0,则PC(PC)+2+rel 若(A)0,则PC(PC)+2v2累加器A中的内容不是0转移 v这条指令的功能和JZ rel相反,若(A) 0,就转移到rel所指示的地址;若(A) =0,则不转移,顺序执行下一条指令。JNZ rel;若(A) 0,则PC(PC)+2+rel 若(A) =0,则PC(PC)+2v(2)比较不相等转移指令 是根据两数比较的结果决定程序是否转移,共有4条,均是相对寻址的三字节指令。比较相等时,程序顺序执行,不相等时转移。并且当目的地址单元中的数小于源地址单元中的数据时,进位位Cy置1,否则清0,不影响其它状态标志位。CJNE A,#data,rel;(A)data,就转移到rel所指示的地址如果(A) data则(CY)=0;如果(A) (direct)则(CY)=0;如果(A) data则(CY)=0;如;果(Rn) data则(CY)=0;如果(Ri)data则(CY)=1 ;(Ri)=data,不转移,顺序执行下一条指令v (3)减1不为零转移指令 对指定单元减1计数,结果不为零时转移,否则顺序执行,共有2条,均是相对寻址的转移指令。v (1)DJNZ指令主要应用于循环程序, 操作数Rn或direct作为循环次数的计数器,每循环一次减1直到减为0,循环结束。v (2)DJNZ指令可以用于延时程序中实现定时操作。 DJNZ Rn,rel;Rn(Rn)-1后,如果(Rn)0,转移到rel所指示的地址。 ; Rn(Rn)-1后,如果(Rn)=0,不转移,顺序执行下一条指令。DJNZ direct,rel;direct(direct)-1后,如果(direct)0,转移到rel所指示的地址。 ; direct(direct)-1后,(direct)=0,不转移,顺序执行下一条指令。v3调用/返回类指令 调用指令在主程序中使用,执行时保护断点,使程序转向子程序入口;返回指令在子程序的末尾使用,其作用是返回到主程序中原来被断开的地方,即断点。v(1)调用指令v这条指令是直接寻址的三字节指令,将程序计数器PC的当前值压入堆栈,子程序入口地址ddr16送PC。寻址范围为64K(0000HFFFFH),称为长调用指令。 LCALL addr16 ;PC(PC)+3(找到断点地址);SP(SP)+1,(SP)PC70(将断点地址的低8位压入堆栈);SP(SP)+1,(SP)PC158(将断点地址的高8位压入堆栈);PCaddr16(转移到子程序入口地址)v 这条指令是直接寻址的双字节指令,使程序计数器PC的当前值压栈,11位的子程序入口地址addr11送PC的低11位,与其高5位合成16位地址,常称为绝对调用指令,指令格式与绝对转移指令AJMP类似,寻址范围为2K。 ACALL addr11 ;PC(PC)+2(找到断点地址);SP(SP)+1,(SP)PC70(将断点地址的低8位压入堆栈);SP(SP)+1,(SP)PC158(将断点地址的高8位压入堆栈);PCaddr11(转移到子程序入口地址)v (2)返回指令v 这条指令是子程序返回指令,单字节,无操作数,其功能是弹栈,把断点地址送回到程序计数器PC中,即返回到调用该子程序的程序断点处。一般用在子程序的末尾。v 这条指令是中断返回指令,单字节,无操作数,其功能与RET相同,使程序返回到被中断的程序断点处。另外,该指令具有清除中断响应时置位的标志,开放低一级的中断以及恢复中断逻辑等功能。 RET ;PC158(SP) , SP(SP)-1 (将断点地址的高8位弹出堆栈);PC70(SP) , SP(SP)-1 (将断点地址的低8位弹出堆栈)RETI;PC158(SP) , SP(SP)-1 (将断点地址的高8位弹出堆栈);PC70(SP) , SP(SP)-1 (将断点地址的低8位弹出堆栈) ;清相应中断状态位v4空操作指令v执行这条指令时单片机不进行任何操作,只是占用一个机器周期的时间,一般用于延时程序中调整时间。 NOP ;PC(PC)+1v四、四、位操作类指令 位操作类指令是对能够进行位寻址的位进行操作的指令,在单片机中可以位寻址的地址包括位寻址区:20H2FH中的128个位地址和SFR中的83个位地址,共有211个位地址,其中PSW中的Cy作为布尔处理器使用,在指令中用“C”表示,其余的210个位地址在指令中用“bit”表示。v共有17条指令,包括位传送、位清0、位取反、按位“与”和按位“或”等,用来对位地址空间进行操作。v1位传送指令v有两条,是位寻址的双字节指令,第二字节为位地址,用来实现位累加器Cy与位地址单元数据传送。在汇编语言程序设计中,寻址位可用位地址、位名称(如F0)及寄存器加标注来表示,如PSW.6 MOV C, bit ;Cy(bit) (将bit位的内容送到布尔累加器Cy中) MOV bit, C ;bit(Cy) (将布尔累加器Cy中的内容送到bit位中) v2位清0和置1指令 CLR C ;Cy0(将CY清0) CLR bit ;bit0(将bit位清0) 有两条,一条是单字节指令,另一条是双字节指令,用来把进位位Cy或指定位清0。例如执行指令CLR ACC.0后累加器A中ACC.0位被清0。 SETB C ;Cy1(将CY置1)SETB bit ;bit1(将bit位置1)v3位逻辑运算指令v(1)按位“与”指令 有两条,均为双字节指令,其功能是把位累加器Cy中的内容与指定位中的内容或其反码“与”,结果在Cy中 ANL C, bit ;Cy(Cy)(bit) (将CY中的内容与bit位的内容相与,与运算结果送到Cy)ANL C, /bit ;Cy(Cy)(bit )(bit位中内容取反,再和CY中内容相与,结果送到CY)v(2)按位“或”指令 有两条,均是双字节指令,其功能是把位累加器Cy中的内容与指定位中的内容或其反码“或”,结果在Cy中。 ORL C, bit ;Cy(Cy)(bit) (将CY中内容与bit位的内容相或,结果送到CY)ORL C, /bit;Cy(Cy)(bit )(bit位中的内容取反,再和CY中内容相或,结果送到CY)v4位取反指令 有两条,一条是单字节指令,另一条是双字节指令,用来把进位位Cy或指定位中的数取反。CPL C ;Cy(Cy ) (将CY的内容取反,再送回到CY中)CPL bit ;bit(bit ) (将bit位的内容取反,再送回到bit位中)v5位条件转移指令v(1)判断CY转移指令 判断CY转移指令是根据特定的条件控制程序的转移,共有2条,均是相对寻址的双字节指令。转移地址为程序计数器PC的当前值加偏移量rel。JC rel;如果(CY)=1,转移到rel所指示的地址 ;如果(CY)1,不转移,顺序执行下一条指令JNC rel;如果(CY)1,转移到rel所指示的地址 ; 如果(CY)=1,不转移,顺序执行下一条指令v(2)判断bit位转移指令 判断bit位转移指令共有3条,均是相对寻址的三字节指令。其中第二字节是位地址,第三字节是偏移量。转移地址为程序计数器PC的当前值加偏移量。JB bit,rel;如果(bit)=1,转移到rel所指示的地址;如果(bit)1,不转移,顺序执行下一条指令JBC bit,rel;如果(bit)=1,转移到rel所指示的地址,并且将bit位清0;如果(bit)1,不转移,顺序执行下一条指令JNB bit,rel;如果(bit)1,转移到rel所指示的地址;如果(bit)=1,不转移,顺序执行下一条指令指令汇总表指令汇总表机器码助记符周期数机器码助记符周期数a10a9a810001, addr70ACALL addr112F8HFFHMOV Rn, A128H2FHADD A,Rn1A8HAFH directMOV Rn ,direct125H directADD A,direct178H7FH dataMOV Rn ,#data126H27HADD A,Ri1F5H directMOV direct, A124H dataADD A,#data188H8FH directMOV direct, Rn138H3FHADDC A,Rn185H direct1 direct2MOV direct1, direct2235H directADDC A,direct186H87H directMOV direct, Ri236H37HADDC A,Ri175H direct dataMOV direct,#data234H dataADDC A,#data1F6HF7HMOV Ri, A1a10a9a800001, addr70AJMP addr112A6HA7H directMOV Ri ,direct258H5FHANL A, Rn176H77H dataMOV Ri ,#data155H directANL A,direct1A2H bitMOV C,bit256H57HANL A,Ri192H bitMOV bit, C254H dataANL A,#data190H data158 data70MOV DPTR # data16252H directANL direct, A 193HMOVC A,A+DPTR253H direct dataANL direct,#data283HMOVC A,A+PC282H bitANL C,bit2F2H-E3HMOVX A, Ri2B0H bitANL C,/bit2F0HMOVX, DPTR2B5H direct relCJNE A,direct,rel2A4HMUL LAB4B4H data relCJNE A, #data,rel200HNOP1B8HBFH data relCJNE Rn, #data,rel248H4FHORL A, Rn1B6HB7H data relCJNE Ri, #data,rel245H directORL A,direct1E4HCLR A146H47HORL A,Ri1C3HCLR C144H dataORL A,#data1C2H bitCLR bit142H directORL direct, A 1F4HCPL A143H direct dataORL direct,#data2B3HCPL C172H bitORL C,bit2B2H bitCPL bit1A0H bitORL C,/bit2D4HDA A1D0H directPOP direct214HDEC A1C0H directPUSH direct218H1FHDEC Rn122HRET215H directDEC direct132HRETI216H17HDEC Ri123HRL A184HDIV AB433HRLC A1D8HDFH relDJNZ Rn,rel203HRR A1D5H direct relDJNZ direct,rel213HRRC A104HINC A1D3HSETB C108H0FHINC Rn1D2H bitSETB bit105H directINC direct180H relSJMP rel 206H07HINC Ri198H9FHSUBB A,Rn1A3HINC DPTR295H directSUBB A,direct120H bit relJB bit,rel296H97HSUBB A,Ri110H bit relJBC bit,rel294H dataSUBB A,#data140H relJC rel2C4HSWAP173HJMP A+DPTR2C8HCFHXCH A, Rn130H bit relJNB bit,rel2C5H directXCH A,direct150H relJNC rel2C6HC7HXCH A,Ri170H relJNZ rel2D6HD7HXCHD A,Ri160H relJZ rel268H6FHXRL A, Rn112H addr158 addr70LCALL addr16265H directXRL A,direct102H addr158 addr70LJMP addr16266H67HXRL A,Ri1E8HEFHMOV A,Rn164H dataXRL A,#data1E5H directMOV A,direct162H directXRL direct, A 1E6HE7HMOV A,Ri163H direct dataXRL direct,#data274H dataMOV A,#data1v五、80C51汇编语言的伪指令 80C51汇编语言的伪指令和前面介绍的111条指令不同,它不是真正的指令,没有对应的机器码,在汇编时不产生目标程序(机器码),只是用来对汇编过程进行控制,所以称为伪指令。v 1汇编起始地址伪指令 汇编起始地址伪指令的一般格式如下: ORG表达式v 2汇编结束伪指令 汇编结束伪指令一般格式如下: 格式1:字符名称END表达式 格式2:字符名称END或者END 该指令是汇编语言源程序的结束标志,在END以后所写的指令,汇编程序都不予处理。因此,在一个源程序中只允许出现一个END语句,它必须放在整个程序的最后。v 3赋值伪指令 赋值伪指令一般格式如下: 字符名称EQU表达式 该指令的功能是将“表达式”赋给“字符名称”。v 4数据地址定义指令 数据地址定义指令一般格式如下: 字符名称DATA表达式 DATA伪指令的功能与EQU有些相似,使用时要注意它们有以下区别: EQU伪指令必须先定义后使用,而DATA伪指令可以后定义先使用; 用EQU伪指令可以把一个汇编符号赋给一个字符名称,而DATA只能把数据赋给字符名称; DATA伪指令可将一个表达式的值赋给一个字符名称,所定义的字符名称也可以出现在表达式中,而EQU定义的字符则不能这样使用。DATA伪指令在程序中常用来定义数据地址。v 5定义标号值伪指令 定义标号值伪指令一般格式如下: 字符名称DL表达式v 6定义字节伪指令 定义字节伪指令一般格式如下: 字符名称 DB 表达式或表达式列表 定义字节伪指令是在程序存储器的某一部分存入一组8位二进制数,或者将一个数据表格存入程序存储器中。这个伪指令在汇编以后,将影响程序存储器的内容。v 7 定义字伪指令 定义字伪指令一般格式如下: 字符名称 DW 表达式或表达式表 DW是从指定的地址开始定义若干16位数据,且把字的高字节数存入低地址单元,低字节数存入高地址单元,按顺序连续存放。v 8 定义存储区伪指令 定义存储区伪指令一般格式如下: 字符名称 DS 表达式 定义存储区伪指令是从指定的地址开始,保留若干字节的内存空间以作备用。汇编时,对这些单元不赋值。v 9位地址符号伪指令 位地址符号伪指令一般格式如下: 字符名称 BIT 位地址 位地址符号伪指令是对位地址赋予所规定的字符名称。 说明:其中,位地址可以是绝对地址,也可以是符号地址。 任务任务2.2 LED显示原理显示原理 v【任务描述任务描述】 七段码LED显示电路分为共阴极和共阳极两种形式,通过本任务了解共阴极和共阳极两种电路的接法和其对应的字型码形式。v【任务分析任务分析】 (1)共阴极和共阳极两种电路的接法。 (2)共阴极和共阳极两种接法电路显示数字时,各个数字对应的字型码。【知识准备知识准备】v 一、 七段码LED显示原理 LED显示块是用发光二极管显示字段,单片机应用系统常用的是七段LED,如图所示,它有共阴极和共阳极两种接法。 图v 对于共阴极接法的发光二极管,只要af中哪一位为高电平1则对应的字段就发光,如果为0则不发光,数字09显示时的字型码如表所示。 表数字显示hgfedcba字型码0001111113FH10000011006H2010110115BH3010011114FH40110011066H5011011016DH6011111017DH70000011107H8011111117FH9011011116FH全灭00000000FFHv 对于共阳极接法的发光二极管,只要af中哪一位为低电平0则对应的字段就发光,如果为1则不发光,数字09显示时的字型码如所示。 表数字显示hgfedcba字型码011000000C0H111111001F9H210100100A4H310110000B0H41001100199H51001001092H61000001082H711111000F8H81000000080H91001000090H全灭11111111FFH 任务任务2.3 一位一位LED显示电路的设计显示电路的设计与调试与调试v【任务描述任务描述】 在了解了七段码LED显示电路基本知识以后,通过本任务学会设计和制作一个共阳极的一位LED显示的电路。并且学会将设计制作好的电路与最小系统电路板连接,编程调试一位LED显示电路的方法。v【任务分析任务分析】 (1)一位LED显示电路的设计。 (2)一位LED显示电路的制作。 (3)编程与调试电路。【任务实施任务实施】v一、LED显示电路的设计 设计一个一位LED显示的电路和设计制作的最小系统线路板通过40线排线连接,并且编写程序实现从数字09进行循环显示,显示时间间隔为1s。 首先设计LED的显示电路如图所示,电路采用共阳极七段码显示。将电路制作成线路板如图所示。 图 图2.3.2 LED显示目标板v LED显示目标板的器件和工具清单如表所示。 表2.3.1 器件和工具清单序号元件标号元件名称规格备注1R1 R8电阻2008个2LED显示块七段码3J40针插座CON401个4LED显示线路板1块5万用表1个6电烙铁1个7偏口钳子1个8尖嘴钳子1个9一字改锥1个10十字改锥1个11烙铁架1个二、编写二、编写LED显示程序显示程序v 1编写循环显示09十个的程序,显示时间间隔为1s,程序如下:v ORG 0000Hv LJMP MAINv ORG 0050Hv MAIN:MOV R2,#00H;(R2)=00Hv MOV DPTR,#TAB;(DPTR)=TAB=006FH,将字形表的首地址送给DPTRv DSUP:MOV A,R2;(A)=(R2)=00Hv MOVC A,A+DPTR;(A)=(0070H)=F9Hv MOV P1,A;(P1)=(A)=F9Hv LCALL DELY1S;延时1sv INC R2;(R2)=02H,为显示下一个数字做准备v CJNE R2,#0AH,DSUP;(R2)10,跳转到DSUP,判断10个数字是否显示完v AJMP MAIN;跳转到MAIN,重新开始显示数字0,v DELY1S:MOV R3,#0AH;延时1s的子程序 v LOOP0:MOV R4,#0C8Hv LOOP1:MOV R5,#0FAHv LOOP2: DJNZ R5,LOOP2v DJNZ R4,LOOP1v DJNZ R3,LOOP0v RETv TAB:DB 0C0H;09十个数字的字型码表v DB 0F9Hv DB 0A4Hv DB 0B0Hv DB 99Hv DB 92Hv DB 82Hv DB 0F8Hv DB 80Hv DB 90Hv ENDv 根据电路的设计图可知最下系统的晶振频率为12MHz,所以机器周期T为1微秒,则计算延时程序的方法为:v DELY1S:MOV R3,#0AH; 1Tv LOOP0:MOV R4,#0C8H; 1Tv LOOP1:MOV R5,#0FAH; (1Tv LOOP2: DJNZ R5,LOOP2; 2T250v DJNZ R4,LOOP1; 2T)200vDJNZ R3,LOOP0; 2T10v RET 2Tv 因为机器周期T=1s,所以这段延时程序的延时时间为1006033s,近似为1s。延时时间t=1T+1T+(1T+2T250+2T)200+2T 5+2T=1T+1T+503T200+2T10+2T =1T+100603T10+2T=1006033Tv2编写程序显示09后全灭再从9显示到0,再全灭从0显示到9,如此循环下去,时间间隔为1s的程序。程序如下:vORG 0000HvLJMP MAINvORG 0200HvMAIN:MOV R2,#00Hv MOV DPTR,#TABvLOP1: MOV A,R2v MOVC A,A+DPTRv MOV P1,Av LCALL DELYv INC R2v CJNE R2,#0BH,LOP1vLOP2: MOV A,R2v MOVC A,A+DPTRv MOV P1,Av LCALL DELYv DJNZ R2,LOP2v AJMP MAINvDELY: MOV R3,#0AH vLOP3: MOV R4,#0C8HvLOP4: MOV R5,#0FAHvLOP5: DJNZ R5,LOP5v DJNZ R4,LOP4v DJNZ R3,LOP3v RETvTAB:DB 0FFHvDB 0C0HvDB 0F9HvDB 0A4HvDB 0B0HvDB 99HvDB 92HvDB 82HvDB 0F8HvDB 80HvDB 90Hv DB 0FFHvENDv三、LED显示电路调试v1将编写的一位LED显示程序输入到Keil编程软件中,对源程序进行汇编,并且创建相应的HEX文件,调试目标程序。如图所示。 图图v 2将单片机的最小系统线路板和一位LED显示线路板用40线排线连接,将最小系统的程序写入线和PC机的串口连接,并且将最小系统的电源线插入PC机的USB口,使用Easy 51Pro软件将编译后的目标代码程序,即机器码程序写入到单片机的最小系统中。如图所示。v 3将程序写入到最小系统后,将程序写入的数据线取下,则程序自动运行,就可以看到数字从0到9显示后全灭,再从9显示到0,再全灭从0显示到9,如此循环下去,时间间隔为1s。如图所示。任务任务2.4 多位多位LED显示显示 v【任务描述任务描述】 在本任务中要学会设计和制作多位LED显示的电路的方法,了解一位LED显示和多位LED显示的异同。并且学会将设计制作好的电路与最小系统电路板连接,编程调试多位LED显示电路的方法。v【任务分析任务分析】 (1)了解多位LED显示的方法。 (2)设计制作多位LED显示电路。 (3)编程与调试电路。【知识准备知识准备】v 一、多位LED显示的方法v 在进行多位LED显示时,为了节省I/O口,简化电路,一般都采用动态显示的七段LED方式 ,例如设计一个8位的数码管显示系统,可以将8个LED电路的各个段选线相应的并联在一起,由一个8位的I/O口控制,形成段选线的多路复用。而各LED电路的共阴极或共阳极分别由相应的I/O口线控制,实现各位的分时选通。如图所示电路的线路板就是,将8个七段码LED电路的段选线并联占用一个8位I/O口P0口,而位选线每个七段码LED电路占用一位,即占用了一个8位I/O口P1口。由于各个电路的段选线并联,段选码的输出对于各个位来说都是相同的,如果要让8个LED电路显示不同的数字,则需要每一时刻只能让一个位选线处于选通状态,而其它位处于关闭状态,在下一时刻,再让下一个位选线处于选通状态,其它的关闭,如此动态扫描下去,虽然这些字符不是在同时刻出现的,而且在同一时刻只有一个在显示,其它的熄灭,但是由于人眼的视觉暂留和发光二极管熄灭时的余晖,只要每位显示间隔足够短,看起来就是多位同时亮的假象,实现了同时扫描的目的。图v二、动态显示的软件设计 1要点: 代码转换:直接驱动7段LED发光的是段码,而我们习惯的是字符0、1、2、9等,因此软件中必须将待显示的字符转换成段码。 每次只能输出同样的段码,因此要使某管亮,必须用软件保证逐位轮流点亮并适当延时,给人的眼睛产生持续发光的效果。v 2八位LED显示程序vORG 0000Hv MAIN:MOV R2,#00Hv SSS: MOV DPTR,#TABvMOV A,R2vMOVC A,A+DPTRvMOV R0,AvMOV R6,#40Hv XSH1:LCALL DISP1vDJNZ R6,XSH1vINC R2vCJNE R2,#0AH,SSSvAJMP