470 likes | 710 Views
模块 3 数码管接口控制. 课题 1 5 位数码管的串行静态显示控制接口控制. 任务 1 数码管的编码控制. 任务 2 1 个数码管显示控制. 任务 3 串行静态显示 “ 89C52 ”. 任务 4 串行静态跳变显示 “ 000 ~ 255 ”. 课题 2 6 位数码管的动态扫描显示接口控制. 任务 1 动态扫描显示 “ bj2008 ”. 任务 2 动态显示. 数码管显示. 任务 1. 一、数码管的识别与测量. 1 、数码管的识别. ( 1 )结构:. 7 段数码管由 7 个长形发光二极管和 1 个圆形发光二极管构
E N D
模块3 数码管接口控制 课题1 5位数码管的串行静态显示控制接口控制 任务1 数码管的编码控制 任务2 1个数码管显示控制 任务3 串行静态显示“89C52” 任务4 串行静态跳变显示“000~255” 课题2 6位数码管的动态扫描显示接口控制 任务1 动态扫描显示“bj2008” 任务2 动态显示
数码管显示 任务1 一、数码管的识别与测量 1、数码管的识别 (1)结构: 7段数码管由7个长形发光二极管和1个圆形发光二极管构 成,它们的阳极(或阴极)接在一起作为公共端(COM), 阴极(或阳极)各自引出作为控制端引脚dp、g、f、e、d、c、 b、a(按二进制的位权左高右低的顺序排列)。
数码管显示 任务1 1、数码管的识别 (2)分类: 公共端是阳极的数码管称为共阳极数码管,公共端是阴极 的数码管称为共阴极数码管。 共阳极数码管 共阴极数码管
数码管显示 任务1 2、数码管的测量 使用数字万用表的PN结测试档对数码管中的8个发光二极 管加上正向电压,正常情况下8个发光二极管都会发光,以此 可以判断该数码管是共阳极还是共阴极。
数码管显示 任务1 二、数码管的编码 1、数码管的编码方法 将数码管的公共端接上直流电源的正极(共阳极)或 负极(共阴极),并通过控制各控制端高低电平可显示如 图3-1-3所示的字符。 例1:让共阴极数码管显示“2” 5BH 0 1 0 1 1 0 0 0
数码管显示 任务1 ★共阳极7段数码管各段的数字排列表 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H, 0 1 2 3 45 6 7 8 90H,88H, 83H,0C6H,0A1H,86H,8FH 9 A B C D E F ★共阴极7段数码管各段的数字排列表 03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 0 1 2 3 45 6 7 8 9 77H,7CH, 39H,5EH,79H,71H A B C D E F
数码管显示 任务1 三、数码管的控制参数及控制电路设计 1、控制参数 数码管中每个发光二极管的额定参数与普通发光二极管 一样:额定电压为3V,额定电流为10mA。
数码管显示 任务1 三、数码管的控制参数及控制电路设计 2、控制电路设计 单片机电源为5V,因此输到数码管时要进行分压:即 在公共端(COM)接20欧电阻。 一个数码管由8个发光二极管,正好构成一个字节的控 制字,1个数码管可由1个I/O端口(如P1口)的位来控制, 但是单片机的I/O口的驱动能力很小,不能用来直接驱动额 定电流为10mA的发光二极管,因此,需要采用具有电流放 大能力的元件(如锁存器74LS245、74LS373、74LS164、 达林顿管或三极管)来驱动。
数码管显示 任务1 A B C D E F G 四、数码管显示例子 1、让一个共阴极数码管显示数字“8”。
数码管显示 任务1 参考程序 ORG 0000H LJMP START ORG 0030H START: MOV P0,#80H SETB P2.0 LJMP $ END
数码管显示 任务1 A B C D E F G 四、数码管显示例子 2、让一个共阴极数码管循环显示字符“0~F”。
数码管显示 任务1 ☆新指令剖析 1、制表指令DB 功能:将程序写入单片机的程序存储器(ROM)时, 在ROM中开辟一空间存储一些程序运行时所需 要的数据。这些常数都是单字节常数。 格式: 段码表头标号: DB data,data,data DB data,data,data ⊙段码表一般放在结束指令的前面。
数码管显示 任务1 ☆新指令剖析 例1:将共阴极数码管显示“0-F”的断码存入单片机的 ROM中。 SEGTAB: ;段码表 DB 03FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH ,77H,7CH ;6,7,8,9,A,B DB 39H,5EH ,79H,71H ;C,D,E,F
数码管显示 任务1 ☆新指令剖析 2、查表指令MOVC 功能:将以上制表指令在ROM中产生的常数取出, 需借用此指令和数据指针寄存器“DPTR” 格式: MOV A,# data MOV DPTR, # 段码表头标号 MOVC A,@A+DPTR ⊙查出表格中第“data+1”个数据。
数码管显示 任务1 ☆新指令剖析 例2:用查表指令查出段码表SEGTAB中数据“6FH”, 并传送到寄存器R0中。 SEGTAB: ;段码表 DB 03FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH ,77H,7CH ;6,7,8,9,A,B DB 39H,5EH ,79H,71H ;C,D,E,F 参考答案: MOV A,# 9 MOV DPTR, # SEGTAB MOVC A,@A+DPTR MOV R0,A
数码管显示 任务1 ☆练习 MOV A,#3 MOV DPTR,#TABLE MOVC A,@A+DPTR TABLE: DB 08H, 0C5H, 0B0H, 45H, 60H, 4FH DB 6FH, 03CH END 问:执行完此程序后,A= ( )
数码管显示 任务1 ☆新指令剖析 3、比较不相等转移指令CJNE 功能:比较两个字节中的值,若两个字节中的值不 相等,则转移。 格式: CJNE A, #data,rel CJNE A, direct,rel CJNE @Ri, #data,rel CJNE Rn,#data,rel
数码管显示 任务1 ☆新指令剖析 3、比较不相等转移指令CJNE ⊙注意:具有比较和判断双重功能,可产生3个分支 程序,即相等分支、大于分支、小于分支 不相等情况下,若第一操作数内容小于第二操作数 内容,则(CY)=1,否则(CY)=0.
数码管显示 任务1 ☆新指令剖析 例3:试写出以下指令的执行结果: MOV R0,#0 DL0: INC R0 CJNE R0,#6,DL0 LJMP $ 结果:(R0)=( ) 例4:若(R2)=60H, 问执行完指令 CJNE R2, #68H, DL0后,(CY)=( )。
数码管显示 任务1 例2:让一个共阴极数码管循环显示字符“0~F”。 1、制段码表 SEGTAB: ;段码表 DB 03FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH ,77H,7CH DB 39H,5EH ,79H,71H
数码管显示 任务1 ORG 0000H LJMP START ORG 0030H 2、程序流程图 START MOV R1,#0 MOV DPTR,#SEGTAB MOV A,R1 MOVC A,@A+DPTR MOV P0,A SETB P2.0 INC R1 LCALL DELAY CJNE R1,#16,DISP LJMP START DISP
ORG 0000H LJMP START ORG 0030H START: MOV R1,#0 MOV DPTR,#SEGTAB DISP: MOV A,R1 MOVC A,@A+DPTR MOV P0,A SETB P2.0 INC R1 LCALL DELAY CJNE R1,#16,DISP LJMP START DELAY: ... ...(略) SEGTAB: ;段码表 DB 03FH,06H,5BH,4FH,66H,6DH,7DH,07H, DB 7FH,6FH ,77H,7CH, 39H,5EH ,79H,71H END
数码管显示 课前复习 1、制表指令DB 格式: 段码表头标号: DB data,data,data DB data,data,data 2、查表指令MOVC 格式: MOV A,# data MOV DPTR, # 段码表头标号 MOVC A,@A+DPTR ⊙查出表格中第“data+1”个数据。
数码管显示 课前复习 3、比较不相等转移指令CJNE 格式: CJNE A, #data,rel CJNE A, direct,rel CJNE @Ri, #data,rel CJNE Rn,#data,rel
数码管显示 任务1 课堂练习 1、将以下数据:03FH,06H,5BH,4FH,66H,6DH,7DH, 07H,7FH,6FH ,77H,7CH,39H,5EH ,79H,71H存入 单片机的ROM中(即编制成程序表格,要求表头为 TABLE)。 2、编写程序,查出以上表格中的第8个数据,并传送到 寄存器B中。
数码管显示 任务1 课堂练习 3、试写出以下指令的执行结果: MOV R0,#12 DL0: DEC R0 CJNE R0,#6,DL0 LJMP $ 结果:(R0)=( )
数码管显示 课堂练习 4、让一个共阴极数码管循环显示字符“1-9”,试在例题程序 的基础上做修改,完成此功能。 5、让一个共阴极数码管循环显示字符“F-1”,试在例题程序 的基础上做修改,完成此功能。
数码管显示 任务2 应用举例 例1:采用AT89C51单片机的2位I/O口来控制下图所示 的串行静态显示电路,将5位“89C52”的断码通过串行 方式输出到5片移位寄存器的输出端锁存,并由5位数 码管显示。
数码管显示 任务2 一、硬件电路 1、硬件电路的组成 由单片机最小应用系统、5个由串行输入并行输 出的74LS164锁存器驱动的共阴极数码管组成。数据 输入口为“Din”,并将它接到单片机的P3.0口,移位脉 冲输入“CLK”接到单片机的P3.1口。
数码管显示 任务2 ☆8位串行输入并行输出移位锁存器74LS164 (1)74LS164芯片的引脚功能 ●1、2脚为与门输入端“Din”,并一 起作为输入引脚; ● 3-6脚、10-13脚(QA-QH)为并行 输出端; ●8脚“CLK”为移位脉冲输入端,上 升沿时移入一位; ●9脚为清零端,低电平时并行输出 清零,一般常接高电平。
数码管显示 任务2 ☆8位串行输入并行输出移位锁存器74LS164 (2)74LS164芯片的数据传送原理 ●电路中的“CLK”出现一个移位脉冲时(即由低电平变为高电平),“Din”端 的状态移入到Q0,而原来Q0的状态将 移到Q1,从“Din”端输入的状态就逐位 从Q0到Q7,这样移位8次后74LS164 芯片的Q0-Q7的状态与单片机输出端的 数据状态是一致的。
数码管显示 任务2 ☆8位串行输入并行输出移位锁存器74LS164 (2)74LS164芯片的数据传送原理 ●多个74LS164进行连接时,前一个寄 存器的第13脚(Q7)连接到下一个寄 存器的“Din”脚。这样再移位8次后前一 个74LS164芯片的Q0-Q7的状态则移位 到下一个74LS164芯片的Q0-Q7中,而 前一个74LS164芯片的Q0-Q7的状态则 与当前单片机输出端的数据状态是一致 的。
数码管显示 任务2 ☆8位串行输入并行输出移位锁存器74LS164 (2)74LS164芯片的数据传送原理 ●若要使这5位数码管从左至右显示5位 段码字符,先将要显示的“89C52”编成 共阴极段码“5BH、6DH、58H、6FH、 7FH”,然后将这5个段码数据按逆序逐 个分8位传送即可。如此如此移位5*8 次即可将5位段码完整地输出到5位数码 管显示。
数码管显示 任务2 ☆8位串行输入并行输出移位锁存器74LS164 (3)74LS164的数据传送的实现 ●74LS164串行输入端数据的传送: MOV P3.0,C ●移位脉冲实现指令: CLR P3.1 SETB P3.1
数码管显示 任务2 ☆新指令剖析 ●BIT伪指令 功能:用来给单片机的内部数据存储器的位存储单元 定义一个名字 格式: 名字 BIT 内部数据存储器的位存储单元地址 例: DIN BIT P3.0 CLK BIT P3.1
数码管显示 任务2 一、程序设计 1、程序流程图 主程序 显示子程序
数码管显示 任务2 ORG 0000H LJMP START ORG 0030H START: MOV 40H,#5BH ;“2”的段码 MOV 41H,#6DH ;“5”的段码 MOV 42H,#58H ;“C”的段码 MOV 43H,#6FH ;“9”的段码 MOV 44H,#7FH ;“8”的段码 LCALL DISP LJMP $ 一、程序设计 2、源程序设计
DISP: MOV R0,#40H MOV R1,#5 DP0: MOV R2,#8 MOV A,@R0 DP1: RLC A MOV P3.0,C CLR P3.1 SETB P3.1 DJNZ R2,DP1 INC R0 DJNZ R1,DP0 RET DP1 DP0
ORG 0000H LJMP START ORG 0030H START: MOV 40H,#5BH ;“2”的段码 MOV 41H,#6DH ;“5”的段码 MOV 42H,#58H ;“C”的段码 MOV 43H,#6FH ;“9”的段码 MOV 44H,#7FH ;“8”的段码 LCALL DISP LJMP $ DISP: MOV R0,#40H MOV R1,#5 DP0: MOV R2,#8 MOV A,@R0 DP1: RLC A MOV P3.0,C CLR P3.1 SETB P3.1 DJNZ R2,DP1 INC R0 DJNZ R1,DP0 RET END
数码管显示 任务2 DBUF EQU 30H TEMP EQU 40H DIN BIT P3.0 CLK BIT P3.1 ORG 0000H LJMP START ORG 0030H START: LCALL CRSJ LCALL QDM LCALL DISP SJMP $
DISP: MOV R0,#40H MOV R1,#5 DP0: MOV R2,#8H MOV A,@R0 DP1: RLC A MOV DIN,C CLR CLK SETB CLK DJNZ R2,DP1 INC R0 DJNZ R1,DP0 RET QDM: MOV R0,#DBUF MOV R1,#TEMP MOV R2,#5 QDM1: MOV DPTR,#SEGTAB MOV A,@R0 MOVC A,@A+DPTR MOV @R1,A INC R1 INC R0 DJNZ R2,QDM1 RET CRSJ: MOV 30H,#2H MOV 31H,#5H MOV 32H,#0CH MOV 33H,#9H MOV 34H,#8H RET DBUF EQU 30H TEMP EQU 40H DIN BIT P3.0 CLK BIT P3.1 ORG 0000H LJMP START ORG 0030H START: LCALL CRSJ LCALL QDM LCALL DISP SJMP $
DBUF EQU 30H TEMP EQU 40H DIN BIT P3.0 CLK BIT P3.1 ORG 0000H LJMP START ORG 0030H START: LCALL CRSJ LCALL QDM LCALL DISP SJMP $ CRSJ: MOV 30H,#2H MOV 31H,#5H MOV 32H,#0CH MOV 33H,#9H MOV 34H,#8H RET QDM: MOV R0,#DBUF MOV R1,#TEMP MOV R2,#5 QDM1: MOV DPTR,#SEGTAB MOV A,@R0 MOVC A,@A+DPTR MOV @R1,A INC R1 INC R0 DJNZ R2,QDM1 RET DISP: MOV R0,#40H MOV R1,#5 DP0: MOV R2,#8H MOV A,@R0 DP1: RLC A MOV DIN,C CLR CLK SETB CLK DJNZ R2,DP1 INC R0 DJNZ R1,DP0 RET SEGTAB: ;段码表 DB 03FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH ,77H,7CH DB 39H,5EH ,79H,71H END
动态扫描应用举例 用工作于最小 应用系统的AT89C51 单片机的P1口来控 制动态扫描电路中 的段码借口,P0口 来控制动态扫描显 示电路中的位码接 口,让6位数码管 显示“bj2008”字符。
显示数据段码表 SEGTAB: DB 03FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5 DB 7DH,07H,7FH,6FH ,77H,7CH ;6,7,8,9,A,B DB 39H,5EH ,79H,71H,00H,40H ;C,D,E,F,空,- DB 1EH ;J
;主程序 DBUF EQU 30H TEMP EQU 40H ORG 0000H LJMP START ORG 0030H START: LCALL CRSJ ;调用存入数据子程序 LCALL QDM ;调用取段码子程序 LOOP: LCALL DISP ;调用动态显示子程序 SJMP LOOP
(1)存入数据子程序 CRSJ: MOV 30H,#8 MOV 31H,#0 MOV 32H,#0 MOV 33H,#2 MOV 34H,#18 MOV 35H,#11 RET (2)取段码子程序 QDM: MOV R0,#DBUF MOV R1,#TEMP MOV R2,#06 MOV DPTR,#SEGTAB DP00: MOV A,@R0 MOVC A,@A+DPTR MOV @R1,A INC R0 INC R1 DJNZ R2,DP00 RET
动态显示子程序 DISP: MOV R0,#TEMP MOV R1,#6 MOV R2,#01H DP01: MOV A,@R0 MOV P0,A MOV A,R2 MOV P1,A ACALL DELAY INC R0 RL A MOV R2,A DJNZ R1,DP01 RET