《单片机第8章单片机的并行接口.ppt》由会员分享,可在线阅读,更多相关《单片机第8章单片机的并行接口.ppt(106页珍藏版)》请在课桌文档上搜索。
1、第8章 单片机的并行接口,【本章内容】本章主要介绍MCS-51单片机并行接口的结构、工作原理、并行接口芯片、并行接口的扩展、单片机与键盘、LED的连接等。,8.1.1 并行接口的结构,MCS-51单片机共有4个并行I/O口P0P3,每个均由8位锁存器和8位输出驱动器组成。4个8位数据锁存器和端口号P0、P1、P2和P3同名,均为特殊功能寄存器,通过对锁存器的读写,就可以实现数据的输入/输出操作。,P0口:在单片机没有扩展外部存储器时,P0口可作为通用I/O口使用;当单片机接有外部存储器时,P0口则作为地址/数据口使用,以分时操作方式工作,即先输出外部存储器的低8位地址,然后再切换为传输外部存储
2、器读/写数据方式。P1口:仅作为通用I/O口,用于输入/输出数据。P2口:在单片机没有扩展外部存储器时,作为通用I/O口使用;当单片机接有外部存储器时,用于输出外部存储器的高8位地址。,P3口 的第二功能,1输出数据方式,在输出数据方式下,CPU通过一条字节操作指令就可以把输出数据写入P0P3的端口锁存器,然后通过输出驱动器送到端口引脚。例如,如下指令均可在P1口输出数据:,MOV P1,A;P1(A)ANL P1,#data;P1 dataORLP1,R2;P1(R2)XRLP1,30H;P1(30H),2读端口数据方式,CPU读入的数据并非端口引脚线上输入的数据。因此,CPU只要用一条传送
3、指令就可把端口锁存器中数据读入累加器A或内部RAM中,例如,如下指令可以从P1口输入数据。MOVA,P1;A(P1)MOVR2,P1;R2(P1)MOV30H,P1;30H(P1)MOVR1,P1;(R1)(P1),3读引脚方式,读引脚方式可以从端口引脚线上读入信息。在这种方式下,必须先向欲读端口引脚所对应的锁存器写入1,目的是使接在该引脚内部的场效应驱动管截止,使引脚处于悬浮状态,成为高阻抗输入。然后再用传送指令把引脚线上的数据读入累加器A或内部RAM中。,MOV P1,#0FFH;向P1口写入1,为 读引脚作好准备MOV A,P1;读P1口所有引脚 的数据,读引脚指令:,如下两条指令可以将
4、P1口的8条引脚上的数据读入累加器A中。,如下两条指令可以将P1口低4位4条引脚上的数据读入累加器A的低4位中。,读引脚指令:,ORL P1,#0FH;向P1口低4位写入 1,其余位不变MOV A,P1;读P1口低4位引脚,8.2 并行接口的扩展,8.2.1 并行接口芯片81558.2.2 利用8155扩展并行接口,8.2.1 并行接口芯片8155,8155芯片是一块通用I/O接口芯片,是单片机应用系统中广泛使用的芯片之一,其内部包含两个8位并行口和一个6位并行口,以及256字节的RAM存储器和一个14位定时器/计数器。8155芯片具有地址锁存功能,与单片机接口非常简单,因此,其被广泛应用于M
5、CS-51单片机系统中。,18155的内部结构,图8-1 8155的内部结构,双向数据总线缓冲器:用于缓冲存储单片机与8155的RAM之间的读/写数据。地址锁存器:用于锁存单片机送给8155的端口地址或RAM单元地址。地址译码器:用于对地址锁存器送来的低3位地址进行译码,根据译码输出,选择命令/状态寄存器、定时器/计数器或A、B和C 3个I/O寄存器中的某一个工作。,8155芯片各组成部分的作用:,读写控制器:根据和线上的信号,控制单片机与8155之间所传信息的 读写。RAM存储器:容量为256字节,用于存放实时数据。存储器存储单元地址由地址锁存器指定。,I/O寄存器:A、B和C 3个端口各有
6、一个I/O寄存器。其中A、B端口的I/O寄存器为8位,用于存放外设的输入/输出数据;C口的I/O寄存器为6位,用于存放输入/输出数据或命令/状态信息。8155在某一时刻只能选中某个I/O寄存器工作,这由单片机送给8155的命令字决定。,命令寄存器和状态寄存器:命令寄存器存放单片机送来的命令字,只能写入;状态寄存器存放8155的状态字,只能读出。定时器/计数器:是一个二进制14位的减法计数器。计数器初值由单片机送入,由TIMER IN引脚上输入的脉冲实现减1计数控制,并根据不同的计数输出方式从TIMER OUT引脚输出相应的波形。作为定时器使用时,TIMER IN引脚应输入频率恒定的周期脉冲。,
7、28155的外部引脚,38155的端口地址,8155内部RAM的地址为00HFFH,当IO/=0时被选中。8155内部的其他端口,在IO/=1时,由低3位地址进行选择,具体的端口地址分配如表8-1所示。,表8-18155端口地址分配,表中的“”表示0或1,当高13位地址A15A3不作为、IO/控制线时,可以为任意值,否则,应为具体值。,IO/,48155的命令字,8155的命令字用于选择8155的工作方式,由单片机写入8155的命令寄存器中,从而起控制作用。8155命令字的格式如图8-3所示。,图8-3 8155命令字的格式,PA:A口数据传送方向设置位。为0时表示输入;为1时表示输出。PB:
8、B口数据传送方向设置位。为0时表示输入;为1时表示输出。PC1、PC2:C口工作方式设置位,设置方法如表8-2所示。,8115命令字各位的定义:,表8-2C口工作方式设置,表8-3C口工作方式为ALT3、ALT4时,其各引脚的定义,(1):A口选通。由外设送给8155,用于选通A口。(2)BFA:A口缓冲器满。由8155送给外设,用于通知外设读/写A口数据。(3)INTRA:A口中断请求。由8155送给单片机,用于向单片机提出中断请求。,表8-3中各脚的名称与功能:,(4)、BFB、INTRB:B口使用的3个控制信号,功能与A口的相应信号相同。IEA:A口的中断允许设置位。为0时表示禁止;为1
9、时表示允许。IEB:B口的中断允许设置位。为0时表示禁止;为1时表示允许。TM2、TM1:定时器/计数器工作方式设置位,设置方法如表8-4所示。,表8-3中各脚的名称与功能:,表8-4计数器工作方式设置:,58155的状态字,8155的状态字由8155根据其自身的工作状态生成,并存放在8155的状态寄存器中。单片机可使用一条读片外RAM指令MOVX A,Ri或MOVX A,DPTR将状态字读出,从而得知8155所处的工作状态。,8155状态字的格式如图8-4所示。,图8-4 8155状态字的格式,8155状态字格式,最高位:空出不用。TIMER:定时器/计数器计数中断状态标志位。TIMER=0
10、,表示定时器/计数器处于复位、尚未计数、正在计数或硬件复件;TIMER=1,表示定时器/计数器已计满回零,当状态字被读出后,它被复位为0。,8155状态字各位的定义:,INTEB、INTEA:B口、A口中断允许/禁止标志位。为0时,表示禁止中断;为1时,表示允许中断。INTRB、INTRA:B口、A口中断请求标志位。为0时,表示无中断请求;为1时,表示有中断请求。,8155状态字各位的定义:,BFB、BFA:B口、A口缓冲器状态标志位。为0时,表示缓冲器为空,可以接受外设或单片机送入数据;为1时,表示缓冲器已装满数据,可供外设或单片机读取。,8155状态字各位的定义:,68155的定时器/计数
11、器,8155的定时器/计数器由两个字节构成,低字节地址低3位为100B,高字节地址低3位为101B(详见表8-1)。其中,高字节的高两位为定时器/计数器输出模式选择位,其余为计数位,最大计数长度为14位。8155的定时器/计数器各位的定义如图8-5所示。,图8-5 8155的定时器/计数器各位定义,在M2、M1选择的4种输出模式下,定时器/计数器输出端TIMER OUT输出的波形:,图8-6 8155定时器/计数器输出端TIMER OUT输出的波形,(1)当M2M1=00时,定时器/计数器在计数的后半周期内使定时器/计数器输出端输出低电平,计数结束后,变为高电平,从而形成一个单次矩形波。若计数
12、器初值为偶数,则矩形波为对称方波;若为奇数,则矩形波的高电平持续期比低电平的持续期多一个计数脉冲时间。,4种输出模式说明:,(2)当M2M1=01时,定时器/计数器每当减1到全0时都会自动装入计数初值,并重新开始减1计数。因此,可在定时器/计数器输出端输出连续矩形波。矩形波周期与给定的计数初值有关。,4种输出模式说明:,(3)当M2M1=10时,定时器/计数器每当减1到全0时,便在定时器/计数器输出端输出一个单次脉冲。(4)M2M1=11时与M2M1=01时类似,每当减1到全0时能自动装入计数初值,并重新开始计数,从而输出连续脉冲。脉冲周期由计数初值决定。,4种输出模式说明:,8.2.2 利用
13、8155扩展并行接口,由于8155内部包含一个8位地址锁存器,可以用来锁存单片机送来的8155端口地址或其内部RAM的地址。因此,将8155与单片机连接时,无需外加地址锁存器,直接将单片机的ALE引脚与8155的ALE引脚连接即可。值得注意的是,8155端口地址的低3位是不变的,其余位则随着译码方法的不同而有所不同。,8031与8155的连接,图8-7 8031与8155的连接示意图,地址译码方法选用的是线选译码。8031的P2.7、P2.0分别与8155的 和IO/引脚连接,因此,当P2.7(A15)=0及P2.0(A8)=0时,选中8155的内部RAM,它们的地址范围为00 0000000
14、0B00 11111111B(表示0或1,选0时对应的地址为基本地址,其余为重叠地址);当P2.7(A15)=0及P2.0(A8)=1时,选中8155的I/O端口,所以按图8-7进行连接时,8155的I/O端口地址如表8-5所示(详见P.144)。,图8-7说明:,【项目应用】在应用项目中,利用8155扩展并行口的电路如图8-8所示。,图8-8 应用项目中的并行口扩展电路,8155地址译码方法选用的是线选译码。8155的引脚接为常选。8155的IO/引脚与单片机的P2.7连接,因此,I/O端口地址与RAM地址,主要由P2.7的状态决定。,图8-8说明:,命令/状态口:1000 0000 000
15、0 0000B(8000H)A口:1000 0000 0000 0001B(8001H)B口:1000 0000 0000 0010B(8002H)C口:1000 0000 0000 0011B(8003H)定时器/计数器低字节:1000 0000 0000 0100B(8004H)定时器/计数器高字节:1000 0000 0000 0101B(8005H),端口地址:,当P2.7=1时,选中8155的I/O端口,此时8155各端口的基本地址如下。,当P2.7=0时,选中8155的内部RAM,因此,8155中的RAM基本地址范围为:0000 0000 0000 0000B 0000 0000
16、1111 1111B(即0000H00FFH)。,RAM地址:,由于扩展得到的A口、B口都用作输出口,因此,需要写入8155的命令字为:0000 0011B(03H)。其中,最低两位设为1,用于将A口、B口的数据传送方向设为输出,C口以及其他控制位没有使用,均设为0。,8155的命令字:,应用程序中使用如下3条指令,将8155命令字写入8155的命令口:10 MAIN:MOV A,#03H;8155初始化命令字11 MOV DPTR,#8000H;8155命令口地址12MOVX DPTR,A;向8155写入命令字,写入8155命令字的程序:,8.3 单片机与外设的接口,8.3.1 单片机与键盘
17、的接口8.3.2 单片机与LED的接口,8.3.1 单片机与键盘的接口,1单片机与独立式键盘的接口2单片机与矩阵式键盘的接口,1单片机与独立式键盘的接口,图8-10 单片机与独立键盘的接口电路,在图8-10中,连接按键的是单片机的P1口,由于P1口内部有上拉电阻,所以无需再外接上拉电阻。这种独立式键盘配置灵活,软件结构简单,但每个按键必须占用一根端口线,按键数量多时,需占用的端口线也多。所以独立式按键常用于按键数量不多的场合。,图8-10说明:,(1)随机扫描方式:当CPU空闲时,调用键盘扫描子程序,在子程序中对键盘进行扫描,从而识别按键,响应键盘的输入请求。,独立式键盘扫描方式,(2)定时扫
18、描方式:利用单片机内部的定时器产生定时中断,在中断服务程序中对键盘进行扫描,并在有按键被按下时,转入键功能处理程序。定时扫描方式的硬件接口电路与随机扫描方式相同。,独立式键盘扫描方式,(3)中断扫描方式:当键盘上有按键闭合时,产生中断请求,CPU响应中断并在中断服务程序中判断键盘闭合键的键号,并作相应的处理。采用中断扫描方式的一种键盘接口电路如图8-11所示,独立式键盘扫描方式,采用中断扫描方式的键盘接口电路,图8-11 采用中断扫描方式的键盘接口电路,SCAN:MOV P1,#0FFH;置P1口为输入方式 MOV A,P1;读P1口信息 JNB ACC.0,KEY0;0号键按下,转0号键处理
19、 JNB ACC.1,KEY1;1号键按下,转1号键处理 JNB ACC.7,KEY7;7号键按下,转7号键处理 RET;无键按下,返回主程序,与图8-10对应的键盘扫描子程序(随机扫描方式):,与图8-10对应的键盘扫描子程序:,KEY0:;0号键处理程序 LJMPSCAN;处理完毕,重新扫描KEY1:;1号键处理程序 LJMPSCAN;处理完毕,重新扫描 KEY7:;7号键处理程序 LJMPSCAN;处理完毕,重新扫描,2单片机与矩阵式键盘的接口,矩阵式键盘采用行列式结构,按键设置在行列的交叉点上。当使用单片机的P1口与矩阵式键盘连接时,可以将P1口低4位的4条端口线定义为行线,P1口高4
20、位的4条端口线定义为列线,形成44键盘,可以配置16个按键,如图8-12所示。,单片机与矩阵式键盘的接口电路,图8-12 单片机与矩阵式键盘的接口电路,通常将矩阵式键盘的行线作为输入线,通过上拉电阻接+5V电源(在图8-12中,由于P1口内部有上拉电阻,所以不用外接上拉电阻),使行线的状态为1;列线作为输出线,送出低电平0。当键盘上没有键闭合时,所有行线与列线相互分开,行线均呈高电平1状态;当键盘上某一个按键被按下时,该按键所对应的行线与列线短接,此时该行线的电平将被短接的列线箝位为低电平0。,图8-12说明:,(1)判断是否有按键被按下(2)去抖动处理(3)防窜键处理(4)求出被按键所在的列
21、号(5)求出被按键所在的行号(6)求出被按键的键号,监视键盘的步骤,首先使所有列线为低电平,然后读行线状态,若行线均为高电平,则没有键按下;若读出的行线状态不全为高电平,则可以断定有按键被按下。,(1)判断是否有按键被按下,当某个按键被按下时,由于按键簧片的抖动,导致单片机对一次按键进行多次处理的错误。如图8-9所示。,(2)去抖动处理,图8-9 按键抖动形成的波形,因此,当发现有按键被按下后,需要采用软件延时10ms,然后再进行扫描确认。,窜键是指用户在操作按键时,由于不小心同时按下了两个以上的按键。处理原则:把最后放开的按键当成真正被按的按键。处理方法:在程序中预先设定一个窜键标志寄存器。
22、在查找被按的按键前,将窜键标志寄存器清0,在查找过程中记录被按键个数。若发生窜键时,窜键标志寄存器的值必大于01H。此时,中断本次扫描过程,从头开始重新进行扫描,以识别出用户最后放开的按键。,(3)防窜键处理,在确认有按键按下,并进行了去抖动后,接下来需要确定被按键所在的行号和列号,并在查找过程中进行防窜键处理。求列号的方法是:先让Y0列线送出低电平,其余列线为高电平,然后读入行线状态,如行线状态不全为1,则说明所按键就在该列;否则,不在该列。然后让Y1列线为低电平,其他列线为高电平,从而判断Y1列有无按键按下。其余列类推。,(4)求出被按键所在的列号,在发现某列有按键被按下时,即对行线逐一进
23、行分析,找出其中状态为0的行线,即被按键所在的行。在此过程中,也要进行防窜键处理,以保证最后找出的是唯一被按下的按键。,(5)求出被按键所在的行号,键号是键盘上每个按键的编号。键号的求法,与键盘接口电路的连线和键号的编排方式有关,对应图8-12所示的矩阵式键盘接口电路,可采用如下方法求得键号。键号=所在行号键盘列数+所在列号或:键号=所在行号的行首键号+所在列号,(6)求出被按键的键号,在图8-12中,键号为14的按键,所在行号为3,所在列号为2,键盘的列数为4,所在行号的行首键号是12,所以 键号=所在行号键盘列数+所在列号=34+2=14或:键号=所在行号的行首键号+所在列号=12+2=1
24、4,求被按键的键号例子:,求出被按键的键号后,即可调用执行被按键处理程序,在执行被按键处理程序时,再根据键号执行该键所对应的功能程序,以完成该键被按下时所要实现的系统功能。,(7)执行被按键处理程序,根据图8-12,参照以上步骤编写的矩阵式键盘扫描子程序:(详见P.148-150),矩阵式键盘扫描子程序,SCAN:MOV P1,#0FH;列线输出0,行线设为输入 MOVA,P1;读P1口 ANLA,0FH;屏蔽高4位,留下行线状态 CJNE A,0FH,LOOK;有键按下,转LOOK RET;无键按下,返回主程序LOOK:LCALL DLAY10;延时10ms,去抖动 MOVA,P1;读P1口
25、 ANLA,0FH;屏蔽高4位,留下行线状态 CJNE A,0FH,RANK;确认键已按稳,转RANK LJMPSCAN;是抖动,未按稳,重新扫描RANK:MOV R2,#00H;窜键标志寄存器清0 MOVR3,#04H;查列次数 MOVR4,#0F7H;列扫描字初值 MOVR5,#0FFH;列号初值RLOOP1:INCR5;开始列扫描,列号加1,矩阵式键盘扫描子程序,RLOOP1:INCR5;开始列扫描,列号加1 MOVA,R4;列扫描字送A RLA;列扫描字左移一位 MOVR4,A;暂存列扫描字 MOVP1,A;送出列扫描字 MOVA,P1;读P1口 ANLA,0FH;屏蔽高4位,留下行线
26、状态 CJNE A,0FH,NEXT1;当前列有键按下,转NEXT1RLOOP2:DJNZR3,RLOOP1;列扫描未完,继续 SJMPLINE;列扫描完,转行扫描NEXT1:INC R2;窜键标志加1 MOV20H,R5;暂存有按键的列号 SJMPRLOOP;继续列扫描LINE:CJNER2,#01H,SCAN;若已窜键,转SCAN,重新扫描,矩阵式键盘扫描子程序,LINE:CJNER2,#01H,SCAN;若已窜键,转SCAN,重新扫描 MOVR2,#00H;开始查行,窜键标志 寄存器清0 MOVR3,#04H;行扫描次数 MOVR6,#0FFH;行号初值 MOVP1,#0FH;列线送0,
27、准备读行线 MOVA,P1;读P1口,获取行线状态LLOOP1:INC R6;行号加1 RRCA;从第0行开始,判断有无按键 JNCNEXT2;本行有按键,转NEXT2LLOOP2:DJNZR3,LLOOP1;无按键,继续查下一行 SJMPNEXT3;查完,转NEXT3NEXT2:INC R2;窜键标志加1,矩阵式键盘扫描子程序,NEXT2:INC R2;窜键标志加1 MOV21H,R6;暂存有按键的行号 SJMPLLOOP2;继续行扫描NEXT3:CJNE R2,#01H,SCAN;若窜键,转SCAN,重新扫描GAINKY:MOVA,21H;无窜键,取出行号 MOVB,#04H;键盘列数 M
28、ULAB;行号键盘列数 ADDA,20H;乘积与列号相加,得到键号 MOVB,#03H;为执行键处理程序做准备 MULAB;键号3 MOVDPTR,#PTAB;键处理程序表首地址 送DPTR JMPA+DPTR;散转至与键号对应 的键处理程序PTAB:LJMP PROG0;键处理程序表,矩阵式键盘扫描子程序,PTAB:LJMP PROG0;键处理程序表 LJMPPROG1 LJMPPROG15PROG0:RETPROG1:RET PROG15:RET,矩阵式键盘扫描子程序,DLAY10:MOVR0,#100;约10ms延时(设fOSC为12MHz)DLAY1:MOVR1,#50DLAY2:DJ
29、NZR1,DLAY2 DJNZR0,DLAY1 RET,矩阵式键盘扫描子程序,图8-13 应用项目中单片机与按键的接口电路,【项目应用】在应用项目中,为了进行时间调校,设置了两个按键,分别用于校时和校分。单片机与按键的接口电路如图8-13所示。,【项目应用】图8-13说明,校分和校时的两个按键分别与单片机的外部中断0(P3.2)和外部中断1(P3.3)引脚连接。这两个引脚作为外部中断信号输入引脚时,使用的是P3口的第二功能。因为P3口内部有上拉电阻,所以外接按键时,无需外接上拉电阻。,【项目应用】应用项目中的按键处理程序(校时、校分程序),3 ORG 0003H4 LJMP BREAK0;转
30、中断 7 ORG 0013H8LJMP BREAK1;转 中断 20MOV IE,#87H;允许中断;中断服务程序:24 BREAK0:CLR EX0;关闭中断,;中断服务程序:24 BREAK0:CLR EX0;关闭 中断25 JNB P3.2,$;消除键抖动,等待键释放26 INC 28H;分单元加127 MOV A,28H;十进制调整28 ADD A,#00H29 DA A30 MOV 28H,A31 SUBB A,#60H;不等于计数基制转NEXT132 JC NEXT133 MOV 28H,#00H;相等,分单元清034 NEXT1:LCALL DISP;调用显示子程序35 SETB
31、EX1;开放 中断36 RETI;中断返回;中断服务程序:,;中断服务程序:37BREAKl:CLREXl;关闭 中断38JNB P3.3,$;消除键抖动,等待键释放39INC 29H;时单元加140MOV A,29H;十进制调整41ADD A,#00H42DA A43MOV 29H,A44SUBB A,#24H;不等于计数基制转NEXT245JC NEXT246MOV 29H,#00H;相等,时单元清047NEXT2:LCALL DISP;调用显示子程序48SETB EX1;开放中断49RETI;中断返回,8.3.2 单片机与LED的接口,这里所说的LED(Light Emitting Di
32、ode,发光二极管),指的是在单片机应用系统中,经常用来作为显示器件的LED数码显示管。,1LED数 码显示管的结构与原理,LED数码(显示)管在结构上可分为七段和八段两种,八段编号分别a、b、c、d、e、f、g和dp,分别与相同名称的管脚相连。dp段显示一个圆点,可作为小数点,其余段显示笔画,七段管比八段管少一个dp段。以八段LED数码管为例,其外形及引脚如图8-14(a)所示。,共阴极LDE数码管,八段LED数码管的内部由8个发光二极管组成,为简化驱动电路,通常将各段发光二极管的阴极或阳极连在一起作为公共端。将阴极连在一起的称为共阴(极)LED数码管,用高电平驱动。,共阳极LDE数码管,将
33、阳极连在一起的称为共阳(极)LED数码管,用低电平驱动。,控制相应的发光二极管导通,就使对应的笔画发光,从而显示出相应的字符。例如,欲使八段共阴LED数码管显示0,可依次给dp、g、f、e、d、c、b、a字段加上0011 1111B,使dp、g两段为0V,不亮,其余为高电平而被点亮。我们把0011 1111B=3FH称为使八段共阴LED数码管显示0的字形码或段码。若使八段共阳LED数码管显示0,其字形码则为1100 0000B=C0H,两者互为反码。其他一些字符的字形码如表8-6所示。(P.152),LED数码管的显示原理:,表8-6 八段LED数码管的部分字形码表,2单片机与LED数码显示管
34、的接口,(1)静态显示接口(2)动态显示接口,(1)静态显示接口,静态显示是指LED数码管显示字符时,在时间上是连续恒定发光的。特点是亮度较大,显示稳定,无闪烁现象。缺点是由于每个LED数码管都需要一个并行输出芯片与之连接,所以显示位数较多时,硬件开销较大。,静态显示接口电路举例,单片机与3位共阳LED数码管采用静态显示的一种接口电路如图8-15所示。,图8-15 单片机与3位LED采用静态显示的接口电路,DIPLAY:MOVR0,#20H;数据区首地址MOV R2,#03H;计数初值 ANL P2,#0F7H;P2口低3位输出初值000B MOV DPTR,#SEGCOD;指向字形码表首地址
35、LOOP:MOV A,R0;取出需显示的数据MOVC A,A+DPTR;查表,获取字形码 MOVX R0,A;送字形码到锁存器,点亮LED INC R0;指向下一个显示数据 NC P2;为显示下一个字符做准备 DJNZR2,LOOP;未显示完,继续 RET;显示结束,返回主程序SEGCOD:DB0C0H,0F9H,0A4H;共阳LED字形码表,静态显示接口电路程序,SEGCOD:DB0C0H,0F9H,0A4H;共阳LED字形码表 DB0B0H,99H,92H,82H DB0F8H,80H,90H,88H DB83H,0C6H,0A1H,86H,8EH,静态显示接口电路程序,动态显示,是一位一
36、位地轮流点亮各个LED数码管。每一位LED数码管每隔一段时间才点亮一次。虽然在任一时刻只有一位LED数码管点亮,但只要使点亮的间隔时间小于人眼的视觉暂留时间,我们看到的现象仍然是多个LED数码管在“同时”显示。,(2)动态显示接口,【项目应用】应用项目中的动态显示接口电路,在应用项目中,单片机与6个共阴LED数码管的接口电路如图8-16所示。在图8-16中,利用8155对单片机进行并行口扩展,8155的B口作为字形码输出口(简称字形口),经两片同相驱动器74LS07(其中一片只用两路),与各个LED数码管的对应脚并接在一起,用于输出字形码;8155的A口作为字位口,经一片74LS07分别与各个
37、LED数码管的公共脚连接,用于输出字位控制码。,图8-16 应用项目中单片机与6位LED的接口电路,8000H 命令/状态口8001H A口(字位口)8002H B口(字形口)8003H C口(未使用)8004H 定时器/计数器低字节(未使用)8005H 定时器高8位(未使用),应用项目中8155的端口地址:,26H:0.1S计数单元27H:秒计数单元 28H:分计数单元29H:时计数单元2AH:计时单元指针初值2BH:存放秒计数基制2CH:存放分计数基制2DH:存放时计数基制2EH:数据区地址暂存单元3AH:控制码存储单元3BH、3CH:数据暂存单元 4AH4FH:显示缓冲区5AH:堆栈栈底
38、,应用项目中的程序所用到的内部RAM数据存储单元:,每当应用项目的主程序调用显示子程序时,单片机就会通过8155的B口输出字形码,再通过A口输出字位码,以控制当前的LED数码管点亮。当与时、分、秒对应的字形码轮流输出,相应的字位码从左到右轮流选中LED数码管,打铃机的实时时间就会在LED数码管上动态显示。实现动态显示的子程序流程图如图8-17所示,动态显示的实现:,图8-17 应用项目中LED动态显示子程序流程图,;主程序:9ORG 0050H10 MAIN:MOV A,#03H;8155初始化命令字11MOVDPTR,#8000H;8155命令口地址12MOVX DPTR,A;向8155写入
39、命令字 22 LOOP:LCALLDISP;调用显示子程序23LJMP LOOP;循环,实现动态显示的程序:,;显示子程序:50DISP:MOVR0,#4FH;准备向缓冲区放数51MOV A,27H;取秒值52ACALL PUTT;放秒值53MOV A,28H;取分值54ACALL PUTT;放分值55MOV A,29H;取小时值56ACALL PUTT;放小时值57MOV R0,#4AH;指向显示缓冲区首地址58MOV R2,#0DFH;从左边第一位开始显示59 DISP1:MOV DPTR,#8002H;字形口地址60MOV A,#00H;熄灭码61MOVX DPTR,A;关显示,实现动态
40、显示的程序:,60MOV A,#00H;熄灭码61MOVX DPTR,A;关显示62MOVA,R0;取显示缓冲区中的数63MOV DPTR,#SEGTAB;指向字形码表首64MOVC A,A+DPTR;查表,找字形码65MOV DPTR,#8002H;字形口地址66MOVX DPTR,A;送出字形码67MOV A,R2;取字位码68MOV DPTR,#8001H;字位口地址69MOVX DPTR,A;显示一位数据70MOV R3,#00H;计数延时初值71 DISP2:DJNZ R3,DISP2;延时一段时间(1ms),实现动态显示的程序:,72INCR0;修改显示缓冲区指针73RRA;为显示
41、下一位做准备74MOV R2,A;存字位码75JB ACC.7,DISP1;不到最后一位,则继续76RET;显示完6位,返回77 PUTT:MOV R1,A;暂存78ACALL PUTT1;低4位先放入缓冲区79MOV A,R1;取出原数80SWAP A;高4位放入低4位中81 PUTT1:ANL A,#0FH;屏蔽高4位82MOV R0,A;放进显示缓冲区83DEC R0;缓冲区地址指针减184RET,实现动态显示的程序:,;字形码表:135 SEGTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH136 DB 07H,7FH,6FH,实现动态显示的程序:,练习题,1简述M
42、CS-51单片机4个并行I/O口的结构及各自的功能。2对MCS-51单片机4个并行I/O端口有哪3种操作方式?通过哪些指令实现操作?3对MCS-51单片机I/O端口进行读引脚操作时,为什么必须先向欲读端口引脚所对应的锁存器写入1?,4如何确定并行接口扩展芯片8155的端口地址?分别指出当使用单片机的P0.7或P2.7引脚与8155的IO/引脚连接时,所对应的8155端口地址是什么?58155的命令寄存器和状态寄存器的作用是什么?为什么它们可以共用一个端口地址?,练习题,6如何设置8155的命令字?当8155的A口、B口均为输出,C口为输入时,对应的8155命令字是什么?如何将此命令字写入8155?7单片机与矩阵式键盘连接时,对键盘进行监视的步骤是什么?试绘制出对应的程序流程图。8简述单片机控制LED数码管进行动态显示的工作原理以及编写相关程序的主要步骤。,练习题,