490 likes | 661 Views
第 2 章 MCS51 单片机内部并行口及应用. 2.1 MCS-51 单片机并行口结构 2.2 MCS-51 单片机并行口应用 2.3 七段 LED 显示器接口 2.4 键盘接口. 1.1 MCS-51 单片机并行口结构. 1.1.1 P0 口结构 1.1.2 P1 口结构 1.1.3 P2 口结构 1.1.4 P3 口结构. 1.1.1 P0 口结构. +5V. 地址 / 数据控制线. 读锁存. &. P0.0. D. Q. DB0.0. 锁存器. CP. Q. 写控制信号. 转换开关. 读引脚. 作用 :
E N D
第2章 MCS51单片机内部并行口及应用 2.1MCS-51 单片机并行口结构 2.2MCS-51 单片机并行口应用 2.3七段LED显示器接口 2.4键盘接口
1.1 MCS-51单片机并行口结构 • 1.1.1 P0口结构 • 1.1.2 P1口结构 • 1.1.3 P2口结构 • 1.1.4 P3口结构
1.1.1 P0口结构 +5V 地址/数据控制线 读锁存 & P0.0 D Q DB0.0 锁存器 CP Q 写控制信号 转换开关 读引脚 作用: 1、外扩芯片时,P0口不再做I/O口使用,而是先传送地址,后传送数据。 2、没有外扩芯片时,P0口可以直接作为输入口或输出口使用。 返回
P0口直接做输出口时,输出信息的过程:(将0送到P0.0的过程)P0口直接做输出口时,输出信息的过程:(将0送到P0.0的过程) +5V 地址/数据控制线 0 读锁存 & P0.0 0 0 D Q DB0.0 锁存器 1 0 CP Q 写控制信号 转换开关 读引脚 注意: P0口做输出口时,内部数据经过锁存器送到P00---P07上。由于上管始终截止,而当下管也截止时,P00—P07被架空,没有标准的高电平,所以P0口作输出口使用时,必须外接上拉电阻。 返回
当CPU执行读—改—写指令(以端口为目的操作数的ANL、ORL、XRL、DEC、INC SETB、CLR等)时,产生读锁存信号,此时是先读锁存器的状态,在修改之后,送回锁存器保存。 P0口直接做输入口时,输入信息的过程:(将P0.0处的1送入DB0.0的过程) 当CPU执行 MOV A,P0或 JB/JNB P0.x,标号 时,产生读引脚控制信号,此时读的是引脚的状态。 +5V 地址/数据控制线 0 读锁存 & P0.0 1 1 D Q DB0.0 锁存器 CP Q 写控制信号 转换开关 0 读引脚 注意: 1、P0口作输入口时,P00—P07上的信号经过缓冲器送到内部数据总线上。在读引脚之前,要先将锁存器置1,否则总是读到0。 2、CPU对P0口的读操作有2种:读引脚和读—改—写锁存器。 返回
1.1.2 P1口结构 +5V 读锁存 P1.0 D Q DB0.0 锁存器 CP Q 写控制信号 读引脚 作用: P1口只能可以直接作为输入口或输出口使用。 返回
P1口直接做输出口时,输出信息的过程:(将1送到P1.0的过程)P1口直接做输出口时,输出信息的过程:(将1送到P1.0的过程) +5V 读锁存 P1.0 1 1 D Q DB0.0 锁存器 0 0 CP Q 写控制信号 读引脚 注意:P1口做输出口时,内部数据经过锁存器送到P10---P17上。 由于内部有上拉电阻,所以P1口作输出口使用时,不用外接上拉电阻。 返回
当CPU执行读—改—写指令(以端口为目的操作数的ANL、ORL、XRL、DEC、INC 、SETB、CLR等)时,产生读锁存信号,此时是先读锁存器的状态,在修改之后,送回锁存器保存。 P1口直接做输入口时,输入信息的过程:(将P1.0处的0送入DB0.0的过程) 当CPU执行 MOV A,P1或 JB/JNB P1.x,标号 时,产生读引脚控制信号,此时读的是引脚的状态。 +5V 读锁存 0 P1.0 D Q DB0.0 锁存器 CP Q 写控制信号 0 读引脚 注意: 1、P1口作输入口时,P10—P17上的信号经过缓冲器送到内部数据总线上。在读引脚之前,要先将锁存器置1,否则总是读到0。 2、CPU对P1口的读操作有2种:读引脚和读—改—写锁存器。 返回
1.1.3 P2口结构 地址控制线 +5V 读锁存 P2.0 D Q DB0.0 锁存器 转换开关 CP Q 写控制信号 读引脚 作用: 1、外扩芯片时,P2口不再做I/O口使用,而是传送高8位地址。 2、没有外扩芯片时,P2口可以直接作为输入口或输出口使用。 返回
P2口直接做输出口时,输出信息的过程:(将0送到P2.0的过程)P2口直接做输出口时,输出信息的过程:(将0送到P2.0的过程) 地址控制线 +5V 0 读锁存 0 1 P2.0 0 D Q DB0.0 锁存器 0 转换开关 CP Q 写控制信号 读引脚 注意:P2口做输出口时,内部数据经过锁存器送到P20---P27上。 由于内部有上拉电阻,所以P2口作输出口使用时,不用外接上拉电阻。 返回
当CPU执行读—改—写指令(以端口为目的操作数的ANL、ORL、XRL、DEC、INC 、SETB、CLR等)时,产生读锁存信号,此时是先读锁存器的状态,在修改之后,送回锁存器保存。 P2口直接做输入口时,输入信息的过程:(将P2.0处的0送入DB0.0的过程) 当CPU执行 MOV A,P2或 JB/JNB P2.x,标号 时,产生读引脚控制信号,此时读的是引脚的状态。 地址控制线 +5V 0 读锁存 0 P2.0 D Q DB0.0 锁存器 转换开关 CP Q 写控制信号 0 读引脚 注意: 1、P2口作输入口时,P20—P27上的信号经过缓冲器送到内部数据总线上。在读引脚之前,要先将锁存器置1,否则总是读到0。 2、CPU对P2口的读操作有2种:读引脚和读—改—写锁存器。 返回
1.1.4 P3口结构 1 .当使用单片机内部串行口时,若CPU执行MOV A,SBUF指令,则P3.0(RXD)作为接收信号线,接收由外界串行输入的数据;若CPU执行MOV SBUF,A指令,则P3.1(TXD)作为发送信号线,串行发送数据至外界。 2.当单片机使用外中断时,P3.2(INT0)作为外中断0的中断请求输入线,3.3(INT1) 作为外中断1的中断请求输入线。 3.当单片机使用定时器,且定时器工作于计数方式时,P3.4(T0)作为定时器0的计数脉冲输入线,P3.5(T1)作为定时器1的计数脉冲输入线。 4.当单片机外扩RAM或I/O接口芯片时,P3.6(WR)作为RAM或I/O接口芯片的写控制信号,P3.7(RD)作为RAM或I/O接口芯片的读控制信号。 当P3口的一些引脚没有作为第二功能使用时,这些引脚就被释放,直接作为I/O口线使用。 +5V 第二功能输出 读锁存 P3.0 & D Q DB0.0 锁存器 CP Q 写控制信号 读引脚 第二功能输入 作用: 1、P3口可以直接作为输入口或输出口使用。 2、P3口的引脚又具有第二功能。 返回
P3口直接做输出口时,输出信息的过程:(将1送到P3.0的过程)P3口直接做输出口时,输出信息的过程:(将1送到P3.0的过程) +5V 第二功能输出 读锁存 1 P3.0 & 0 1 D Q DB0.0 锁存器 0 CP Q 写控制信号 读引脚 第二功能输入 注意:P3口做输出口时,内部数据经过锁存器送到P30---P37上。 由于内部有上拉电阻,所以P2口作输出口使用时,不用外接上拉电阻。 返回
当CPU执行读—改—写指令(以端口为目的操作数的ANL、ORL、XRL、DEC、INC 、SETB、CLR等)时,产生读锁存信号,此时是先读锁存器的状态,在修改之后,送回锁存器保存。 P3口直接做输入口时,输入信息的过程:(将P3.0处的0送入DB0.0的过程) 当CPU执行 MOV A,P3或 JB/JNB P3.x,标号 时,产生读引脚控制信号,此时读的是引脚的状态。 +5V 第二功能输出 读锁存 P3.0 0 & D Q DB0.0 锁存器 CP Q 写控制信号 0 读引脚 第二功能输入 注意: 1、P3口作输入口时,P30—P37上的信号经过缓冲器送到内部数据总线上。在读引脚之前,要先将锁存器置1,否则总是读到0。 2、CPU对P3口的读操作有2种:读引脚和读—改—写锁存器。 返回
1.2 MCS-51单片机并行口的应用 • 在没有外扩任何芯片时,MCS-51单片机内部并行口可以作为输出口,直接与输出外设连接,常用的输出外设是发光二极管; MCS-51单片机内部并行口也可以作为输入口,直接与输入外设连接,常用的输入外设是开关。 • 1.2.1 直接做输出口 • 1.2.2 直接做输入口 例1 例2 例1 例2
电阻的作用是当流过发光二极管的电流过大时,它就会被烧坏。这个电阻可以限制流过发光二极管的电流,因此这个电阻叫作限流电阻。限流电阻阻值的计算方法如下:电阻的作用是当流过发光二极管的电流过大时,它就会被烧坏。这个电阻可以限制流过发光二极管的电流,因此这个电阻叫作限流电阻。限流电阻阻值的计算方法如下: R=(5-1.75)/Id ;Id 是流过发光二极管的电流,一般从8mA到20mA,其值越大,发光二极管越亮,但不能太大,当流过发光二极管的电流超过20mA时,容易烧坏发光二极管。 例1:用89C51的P1口驱动8个发光二极管,使8个发光二极管由左向右轮流点亮。试画出连接图,编制驱动程序。 +5V • 1.2.1 直接做输出口 89C51 解: P1.0 1、画电路图 P1.1 P1.2 2、编程 P1.3 mov a,#0feh up: mov p1,a lcall delay rl a sjmp up delay1: mov r7,#2 delay11: mov r6,#250 djnz r6,$ djnz r7,delay11 ret P1.4 P1.5 P1.6 P1.7 思考
例1:用89C51的P1口驱动8个发光二极管,使8个发光二极管由左向右轮流点亮。试画出连接图,编制驱动程序。例1:用89C51的P1口驱动8个发光二极管,使8个发光二极管由左向右轮流点亮。试画出连接图,编制驱动程序。 思考: ① 如果用P0口驱动发光二极管,则如何修改? ② 如果使8个发光二极管由右向左轮流点亮,则如何修改? ③ 如果使8个发光二极管闪亮,则如何修改? ④ 如果使8个发光二极管由内向外轮流点亮,则如何修改? ⑤ 如果使8个发光二极管由右向左依次点亮,则如何修改? ⑥ 如果使延时时间延长或缩短,会出现什么现象? 预习实验并思考: 熟悉实验板上与发光二极管有关的电路。 编制驱动程序,实现如下操作: ⑴ 由左向右轮流点亮 ⑵ 由外向里轮流点亮 ⑶ 由右向左依次点亮 ⑷ 闪亮 +5V 89C51 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
a f b g c e 例2:用8051的P1口驱动1个数码管,制成1位秒表. 试画出连接图,编制驱动程序。 d Dp • 1.2.1 直接做输出口 89C51 解: a P1.0 1、画电路图 b P1.1 2、编程 c P1.2 +5V UP0: MOV R7,#10 MOV R2,#00H MOV DPTR,#TAB UP: MOV A,R2 MOVC A,@A+DPTR MOV P1 , A LCALL D1S INC R2 DJNZ R7,UP SJMP UP0 TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H d P1.3 e P1.4 f P1.5 g P1.6 Dp P1.7 思考
例2:用8051的P1口驱动1个数码管,制成1位秒表.试画出连接图,编制驱动程序。例2:用8051的P1口驱动1个数码管,制成1位秒表.试画出连接图,编制驱动程序。 思考: ① 如果用P2口驱动发光二极管,公共端接P3.0,则如何修改? ② 如果制成0.1S的表,则如何修改? 89C51 a CLR P3.0 UP0: MOV R7,#10 MOV R2,#00H MOV DPTR,#TAB UP: MOV A,R2 MOVC A,@A+DPTR MOV P2 , A LCALL D1S INC R2 DJNZ R7,UP SJMP UP0 TAB: DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H,80H,98H P2.0 b P2.1 c P2.2 P3.0 d P2.3 e P2.4 f P2.5 g P2.6 Dp P2.7
开关处的电阻称为上拉电阻,它的 作用是当开关断开时,使P3口的电 压上拉为准确的高电平,避免悬空 状态。 例1:用89C51的P1口传送8个开关状态,用P2口显示8个开关状态,若开关合则对应灯亮,试画出连接图,编制驱动程序。 解: • 1.2.2 直接做输入口 +5V +5V 1、画电路图 P1.0 P2.0 2、编程 P1.1 P2.1 MOV P1,#0FFH UP:MOV A,P1 MOV P2,A SJMP UP P1.2 P2.2 P1.3 P2.3 P1.4 P2.4 P1.5 P2.5 P1.6 P2.6 强调: 8051内部并行口 直接作为输入口时, 必须先将口锁存器 置1。 P1.7 P2.7 89C51 思考
思考:如果将发光二极管反接,则如何修改程序?思考:如果将发光二极管反接,则如何修改程序? +5V P1.0 P2.0 MOV P1,#0FFH UP:MOV A,P1 CPL A MOV P2,A SJMP UP P1.1 P2.1 P1.2 P2.2 P1.3 P2.3 P1.4 P2.4 P1.5 P2.5 P1.6 P2.6 P1.7 P2.7 89C51
例2:用8051的P1口驱动8个发光二极管,P3.4接一个开关K1,当开关按下时,8个发光二极管由左向右轮流点亮;开关断开时,8个发光二极管不亮。试画出连接图,编制驱动程序。 解: • 1.2.2 直接做输入口 89C51 +5V +5V 1、画电路图 P1.0 P1.1 2、编程 P3.4 mov p3,#0ffh up0: mov a,#0feh up1: jb p3.4,up1 mov p1,a lcall delay1 rl a sjmp up1 delay1: mov r7,#2 delay11: mov r6,#250 djnz r6,$ djnz r7,delay11 ret P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 思考
例2:用8051的P1口驱动8个发光二极管,P3.4接一个开关K1,当开关按下时,8个发光二极管由左向右轮流点亮;开关断开时,8个发光二极管不亮。试画出连接图,编制驱动程序。例2:用8051的P1口驱动8个发光二极管,P3.4接一个开关K1,当开关按下时,8个发光二极管由左向右轮流点亮;开关断开时,8个发光二极管不亮。试画出连接图,编制驱动程序。 思考: ① 在上述程序中,开关必须一直按着,灯才能轮流点亮,当开关断开时,停留在某个灯点亮状态。如果当开关断开时,灯全灭,如何修改程序? ② 如果开关作为启动开关,开关按下并抬起时,灯才开始轮流点亮,则如何编程? 预习实验 熟悉实验板上与发光二极管和开关有关的电路。 编制驱动程序,实现如下操作: 1.读入4个按键并使对应的LED点亮。 2.K1按下时,LED每2个为一组由右向左依次点亮。 3.K2按下并抬起时,LED由内向外轮流点亮。 +5V P3.2 P3.3 P3.4 P3.5
1.3 七段LED显示器接口 • 在单片机控制系统中显示器是必不可少的外设。常用的显示器有发光二极管,数码管和液晶显示器。本节介绍数码管接口。 • 1.3.1 数码管简介 • 1.3.2 单个七段LED数码管的接口 • 1.3.3 多个七段LED数码管的接口
1.3.1 数码管简介 a a • 组成:LED数码管由7段或8段发光二极管组成,在平面上排成8字 • 型。 • 分类:有共阴极和共阳极两种。 b b c c COM a COM d d f b g e e c e f f d Dp g g Dp Dp 共阳极 共阴极 显示原理:使某些段点亮而另一些段不亮就可以显示0---9,A---F等字型。 使某段点亮必须具备2个条件: ① 共阴极管的公共端接地和共阳极管的公共端接电源。 ② 共阴极管的控制端接电源和共阳极管的控制端接地。
1.3.2 单个七段LED数码管的接口 • 单个七段LED数码管与单片机的连接方法有2种: • 1、软译码连接法 • 2、硬译码连接法 a f b g c e d Dp
a 软译码连接法 f b g • 在软译码连接法下,LED数码管与单片机的连接图 : c e • 1、欲使LED数码管显示2,试编程。 • MOV P1,#01011011B • 注意:字形与字形码的区别,字形是欲显示的数或字符的形状;字形码是为了在数码管上显示数或字符,CPU应该送出的数据。字形转换成字形码的2种方法:软译码法和硬译码法。 • 2、编程让LED数码管显示30H单元的内容(30H单元的内容在0—9之间)。 • UP: MOV A,30H • MOV DPTR,#TAB • MOVC A,@A+DPTR • MOV P1,A • SJMP UP d Dp 89C51 共阳极LED a P1.0 b P1.1 c P1.2 +5V d P1.3 e P1.4 f P1.5 g P1.6 Dp P1.7 TAB : DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H
a 硬译码连接法 f b g • 在硬译码连接法下,LED数码管与单片机的连接图 : c e • 利用BCD码—七段码译码器实现字形到字形码的转换。常用的BCD码—七段码译码器有74LS48和74LS47。 • 编程让LED数码管显示30H单元的内容(30H单元的内容在0—9之间)。 • MOV P1,30H d Dp 74LS48 共阴极LED 89C51 a a P1.0 A b P1.1 B b c P1.2 C c d P1.3 D d COM +5V e P1.4 e f P1.5 LT f g P1.6 RBO g P1.7 RBI 思考:如果7448的ABCD接到8051的P14—P17,则如何修改程序? 答案 注意:在硬译码连接法下,直接送欲显示的数即可,字形到字形码的转换 是用硬件实现的。
1.3.3 多个七段LED数码管的接口 • 多个数码管与CPU的连接方法有4种: • 1、静态软译码连接法 • 2、静态硬译码连接法 • 3、动态硬译码连接法 • 4、动态软译码连接法 a f b g c e d Dp
a 思考:编程在4个七段LED数码管上显示30H,31H单元中的内容。(30H,31H单元中分别存有2位BCD码)。 静态软译码连接法 f b 答案 g • 在静态软译码连接法下,4个LED数码管与单片机的连接图 : c e 1、编程在4个七段LED数码管上显示1234。 d Dp MOV P0,#06H MOV P1,#5BH MOV P2,#4FH MOV P3,#66H SJMP $ 共阴极LED 89C51 a P1.0 P0.0 a P1.1 P0.1 b b P1.2 P0.2 c c P1.3 P0.3 d COM d 2、编程在4个七段LED数码管上显示30H, 31H,32H,33H单元中存放的1位BCD码 的内容 。 COM P1.4 P0.4 e e P1.5 P0.5 f f P1.6 P0.6 g g MOV DPTR,#TAB UP0: MOV A,30H MOVC A,@A+DPTR MOV P0,A MOV A,31H MOVC A,@A+DPTR MOV P1,A MOV A,32H MOVC A,@A+DPTR MOV P2,A MOV A,33H MOVC A,@A+DPTR MOV P3,A SJMP UP0 TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH P1.7 P0.7 Dp Dp a a P3.0 P2.0 b P3.1 P2.1 b c P3.2 P2.2 c d P3.3 P2.3 d COM COM e P3.4 P2.4 e f P3.5 P2.5 f g P3.6 P2.6 g P3.7 P2.7 Dp Dp
a 思考:编程在4个七段LED数码管上显示30H, 31H,32H,33H单元中存放的1位BCD码的内容 。 答 案 静态硬译码连接法 f b g • 在静态硬译码连接法下,4个LED数码管与单片机的连接图 : c e d Dp 74LS47 89C51 74LS47 a a a A P1.0 P2.0 A a b +5V b B P1.1 P2.1 B b b c c C P1.2 P2.2 C +5V c c d d COM D P1.3 P2.3 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp 74LS47 74LS47 a a a A P1.4 P2.4 A a b b B +5V P1.5 P2.5 B b b c c +5V C P1.6 P2.6 C c c d d COM D P1.7 P2.7 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp 编程在4个七段LED数码管上显示30H,31H单元中的内容。(30H,31H单元中分别存有2位BCD码)。 程 序
a 思考:编程在4个七段LED数码管上显示 30H,31H,32H,33H单元中的内容。 答 案 动态硬译码连接法 f b g • 在动态硬译码连接法下,4个LED数码管与单片机的连接图 : c e d 89C51 74LS48 Dp a P2.0 A b P2.1 B c P2.2 C d P2.3 D +5V e f LT g RBO RBI a b c d e f g a b c d e f g a b c d e f g a b c d e f g 1 2 3 4 COM COM COM COM P2.4 P2.5 P2.6 P2.7 程 序 例: 编程在4个七段LED数码管上显示1234。 在动态连接法下,数码管公共端均受控。驱动程序的编制充分利用了人眼的视觉滞留效应,循环扫描各数码管,使各数码管不是连续显示,但给人的视觉印象是连续地在显示。每个数码管的显示时间不得低于1ms,不亮的时间不能超过20 ms。 利用人眼的视觉滞留现象,实现让4个七段LED数码管上不同时显示1234,但人眼看到的效果 却是同时显示1234。
a 动态软译码连接法 f b g • 在动态软译码连接法下,4个LED数码管与单片机的连接图 : c e 89C51 d Dp P2.0 驱 动 器 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 a b c d e f g a b c d e f g a b c d e f g a b c d e f g 1 2 3 4 COM COM COM COM P3.0 P3.1 P3.2 P3.3 例: 编程在4个七段LED数码管上显示1234。 例:编程在4个七段LED数码管上显示30H,31H,32H,33H单元中的内容。 程 序 程 序
1.4 键盘接口 • 键盘是单片机控制系统最常用、最简单的输入设备。用户可以通过键盘输入数据或命令,实现简单的人机通信。 • 1.4.1 键盘类型 • 1.4.2 非编码键盘与单片机的接口 • 1.4.3 矩阵非编码键盘与单片机的接口
1.4.1 键盘类型 • 单片机控制系统所用的键盘有编码键盘和非编码键盘两种。 • 1、编码键盘除了键开关外,还有专门的硬件电路,用于识别闭合键并产生键代码。不仅如此,编码键盘一般还有去键抖动电路和防串键保护电路等。这种键盘的优点是所需软件简短,但硬件电路较复杂,价格较昂贵。目前在单片机控制系统中使用不多。 • 2、非编码键盘仅由键开关组成,其它工作如键识别、键代码的产生、去抖动等,不是由硬件完成而是由软件完成的。为了简化硬件电路,降低成本,目前单片机控制系统中大多数采用非编码键盘。 • 非编码键盘的键开关可以排列成线性形式或矩阵形式,因此非编码键盘有线性非编码键盘和矩阵非编码键盘两种。
1.4.1 键盘类型 • 单片机控制系统所用的键盘有编码键盘和非编码键盘两种。 • 1、编码键盘除了键开关外,还有专门的硬件电路,用于识别闭合键并产生键代码。不仅如此,编码键盘一般还有去键抖动电路和防串键保护电路等。这种键盘的优点是所需软件简短,但硬件电路较复杂,价格较昂贵。目前在单片机控制系统中使用不多。 • 2、非编码键盘仅由键开关组成,其它工作如键识别、键代码的产生、去抖动等,不是由硬件完成而是由软件完成的。为了简化硬件电路,降低成本,目前单片机控制系统中大多数采用非编码键盘。 • 非编码键盘的键开关可以排列成线性形式或矩阵形式,因此非编码键盘有线性非编码键盘和矩阵非编码键盘两种。
1.4.1 键盘类型 • 单片机控制系统所用的键盘有编码键盘和非编码键盘两种。 • 1、编码键盘除了键开关外,还有专门的硬件电路,用于识别闭合键并产生键代码。不仅如此,编码键盘一般还有去键抖动电路和防串键保护电路等。这种键盘的优点是所需软件简短,但硬件电路较复杂,价格较昂贵。目前在单片机控制系统中使用不多。 • 2、非编码键盘仅由键开关组成,其它工作如键识别、键代码的产生、去抖动等,不是由硬件完成而是由软件完成的。为了简化硬件电路,降低成本,目前单片机控制系统中大多数采用非编码键盘。 • 非编码键盘的键开关可以排列成线性形式或矩阵形式,因此非编码键盘有线性非编码键盘和矩阵非编码键盘两种。
1.4.2 非编码键盘与单片机的接口 • 线性非编码键盘的键开关排成一行或一列的形式,它与单片机的接口电路如图所示: 线性非编码键盘的工作原理:当键未被按下时,与此键相连的I/O线获得高电平;当键被按下时,与此键相连的I/O线获得低电平,单片机只要读取I/O口状态,就可以获取按键信息,识别有无键按下和哪个键被按下。 键处理程序如下: MOV P1,#0FFH UP1: MOV A,P1 ;读I/O口状态 ANL A,#0FH ;屏蔽无用位 CJNE A,#0FH,NEXT1 ;有闭合键? SJMP UP1 NEXT1: LCALL D10ms ;延时10ms去抖动 MOV A,P1 ;再读I/O口状态 ANL A,#0FH CJNE A,#0FH,NEXT2 ;有闭合键? SJMP UP1 NEXT2:JB P1.0,NEXT3 ;K1按下? LCALL K1 ;K1键处理程序 NEXT3: JB P1.1,NEXT4 ;K2按下? LCALL K2 ;K2键处理程序 NEXT4: JB P1.2,NEXT5 ;K3按下? LCALL K3 ;K3键处理程序 NEXT5: JB P1.3,UP1 ;K4按下? LCALL K4 ;K4键处理程序 LJMP UP1 +5V 89C51 K1 P1.0 K2 P1.1 K3 P1.2 K4 P1.3 例
例 某单片机控制系统,P1口接有8发光二极管,P3.0、P3.1、P3.2、P3.3接有4个开关K1、K2、K3、K4,试画出接口电路,并编程使得当K1按下时8个发光二极管全亮;当K2按下时8个发光二极管闪亮;当K3按下时8个发光二极管由左向右点亮;当K4按下时8个发光二极管全灭。 +5V 89C51 K1 P1.0 P3.0 K2 P1.1 P3.1 K3 P1.2 P3.2 K4 P1.3 P3.3 P1.4 P1.5 P1.6 P1.7 程 序
程 序 子程序 K1: MOV P1,#0FFH RETK2: MOV P1,#0FFH LCALL D2S MOV P1,#00H LCALL D2S RETK3: MOV P1,B LCALL D2S MOV A,B RL A MOV B,A RETK4: MOV P1,#00H RET MOV B,#01H MOV P3,#0FFH MOV P1,#00H UP1: MOV A,P3 ANL A,#0FH CJNE A,#0FH,NEXT1 SJMP UP1 NEXT1: LCALL D10ms MOV A,P3 ANL A,#0FH CJNE A,#0FH,NEXT2 SJMP UP1NEXT2:JB P3.0,NEXT3 LCALL K1 NEXT3: JB P3.1,NEXT4 LCALL K2 NEXT4: JB P3.2,NEXT5 LCALL K3 NEXT5: JB P3.3,UP1 LCALL K4 LJMP UP1
思考:如果7448的ABCD接到8051的P14—P17,则如何修改程序?思考:如果7448的ABCD接到8051的P14—P17,则如何修改程序? a f b g 89C51 c e P1.0 d P1.1 Dp P1.2 74LS48 共阴极LED P1.3 a a P1.4 A b P1.5 B b c P1.6 C c d P1.7 D d COM +5V e e f LT f g RBO g RBI UP:MOV A,30H SWAP A MOV P1,A SJMP UP
思考:编程在4个七段LED数码管上显示30H,31H单元中的内容。(30H,31H单元中分别存有2位BCD码)。思考:编程在4个七段LED数码管上显示30H,31H单元中的内容。(30H,31H单元中分别存有2位BCD码)。 a f b g c e MOV DPTR,#TAB UP0: MOV A,30H ANL A,#0FH MOVC A,@A+DPTR MOV P0,A MOV A,30H SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV P1,A MOV A,31H ANL A,#0FH MOVC A,@A+DPTR MOV P2,A MOV A,31H SWAP A ANL A,#0FH MOVC A,@A+DPTR MOV P3,A SJMP UP0 TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH d Dp 共阴极LED 89C51 a P1.0 P0.0 a P1.1 P0.1 b b P1.2 P0.2 c c P1.3 P0.3 d COM d COM P1.4 P0.4 e e P1.5 P0.5 f f P1.6 P0.6 g g P1.7 P0.7 Dp Dp a a P3.0 P2.0 b P3.1 P2.1 b c P3.2 P2.2 c d P3.3 P2.3 d COM COM e P3.4 P2.4 e f P3.5 P2.5 f g P3.6 P2.6 g P3.7 P2.7 Dp Dp
a 编程在4个七段LED数码管上显示30H,31H单元中的内容。(30H,31H单元中分别存有2位BCD码)。 UP: MOV P1,30H MOV P2,31H SJMP UP b g f c e d Dp 74LS47 89C51 74LS47 a a a A P1.0 P2.0 A a b +5V b B P1.1 P2.1 B b b c c C P1.2 P2.2 C +5V c c d d COM D P1.3 P2.3 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp 74LS47 74LS47 a a a A P1.4 P2.4 A a b b B +5V P1.5 P2.5 B b b c c +5V C P1.6 P2.6 C c c d d COM D P1.7 P2.7 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp
a 思考:编程在4个七段LED数码管上显示30H,31H,32H,33H单元中存放的1位BCD码的内容 。 f b UP:MOV A,31H SWAP A ORL A,30H MOV P1,A g MOV A,33H SWAP A ORL A,32H MOV P2,A SJMP UP c e d Dp 74LS47 89C51 74LS47 a a a A P1.0 P2.0 A a b +5V b B P1.1 P2.1 B b b c c C P1.2 P2.2 C +5V c c d d COM D P1.3 P2.3 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp 74LS47 74LS47 a a a A P1.4 P2.4 A a b b B +5V P1.5 P2.5 B b b c c +5V C P1.6 P2.6 C c c d d COM D P1.7 P2.7 D d d e +5V e COM +5V e e f f LT LT f f g g RBO RBO g g Dp RBI RBI Dp
a 例: 编程在4个七段LED数码管上显示1234。 f b g c e d 89C51 74LS48 Dp a START:MOV P2,#11100001B LCALL D2MS MOV P2,#11010010B LCALL D2MS MOV P2,#10110011B LCALL D2MS MOV P2,#01110100B LCALL D2MS SJMP START P2.0 A b P2.1 B c P2.2 C d P2.3 D +5V e f LT g RBO RBI a b c d e f g a b c d e f g a b c d e f g a b c d e f g 1 2 3 4 COM COM COM COM P2.4 P2.5 P2.6 P2.7
START: MOV R0,#30H MOV R7,#4 MOV R2,#0E0H UP: MOV A,@R0 ORL A,R2 MOV P1,A LCALL D2MS INC R0 MOV A,R2 RL A MOV R2,A DJNZ R7,UP SJMP START a 思考:编程在4个七段LED数码管上显示30H,31H, 32H,33H单元中的内容。 f b g c e d 89C51 74LS48 Dp a P2.0 A b P2.1 B c P2.2 C d P2.3 D +5V e f LT g RBO RBI a b c d e f g a b c d e f g a b c d e f g a b c d e f g 3 4 COM COM COM COM P2.4 P2.5 P2.6 P2.7
a 例: 编程在4个七段LED数码管上显示1234。 f b g UP:MOV P1,#06H MOV P3,#0FEH LCALL D2Ms MOV P1,#5BH MOV P3,#0FDH LCALL D2mS MOV P1,#4FH MOV P3,#0FBH LCALL D2mS MOV P1,#66H MOV P3,#0F7H LCALL D2mS SJMP UP c e 89C51 d Dp P2.0 驱 动 器 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 a b c d e f g a b c d e f g a b c d e f g a b c d e f g 1 2 3 4 COM COM COM COM P3.0 P3.1 P3.2 P3.3
例:编程在4个七段LED数码管上显示30H,31H,32H,33H单元中的内容。例:编程在4个七段LED数码管上显示30H,31H,32H,33H单元中的内容。 a START: MOV R0,#30H MOV R7,#4 MOV R2,#0FEH MOV DPTR,#TAB UP: MOV A,@R0 MOVC A,@A+DPTR MOV P1,A MOV P3,R2 LCALL D2MS INC R0 MOV A,R2 RL A MOV R2,A DJNZ R7,UP SJMP START TAB : DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH f b g 89C51 c e P2.0 驱 动 器 d Dp P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 a b c d e f g a b c d e f g a b c d e f g a b c d e f g 3 4 COM COM COM COM P3.0 P3.1 P3.2 P3.3
习题与思考: • 用8051实现如下功能: • 4个开关,1个蜂鸣器,当4个开关的状态与30H单元的低四位相同时,蜂鸣器以100Hz的频率响5下,否则蜂鸣器不响。 • 在动态硬译码连接法下,编程: • 1.在4个数码管上同时显示8 • 2.在4个数码管上轮流显示3 • 3.在4个数码管上依次显示5 • 实验板上数码管电路如下: • 欲使最右边的数码管显示3,试编程。 • ② 欲使最右边的数码管显示30H单元的内容(30H单元的内容在0—9之间),试编程, • 编制一位秒表的驱动程序。 • 预习实验板上数码管电路,编程: • ① 在4个数码管上显示秒数 • 实现分秒表 • 预习实验板上数码管电路和按键电路,编程: • K1按下时,最右面数码管的显示数加1;K2按下时,最右面数码管的显示数减1。 • K1按下时,4个数码管的显示数加1;K2按下时,4个数码管的显示数减1 返回