第5章 与显示器、开关、键盘接口设计
《单片机原理及应用》第5章 P0~P3口应用基础

3、矩阵键盘:
5.4 实验与设计
• 实验1 闸刀型开关输入/8段LED静态显示输出
5.4 实验与设计
• 设计1:LED模拟交通
• 6个灯—南北:黄、红、绿
•
东西:黄、红、绿
• (红、绿是10秒,黄闪烁2秒)
• 2个应急开关:南北绿或东西绿
• 画出硬件设计,编出模拟程序。
实验2 并行接口键盘/LED指示灯输出
同,每个显示缓冲器对应着一位显示器。
(3)查表并操作相应的显示器
• MOV • MOV • MOVC
A,#data DPTR,#DSPTAB A,@A+DPTR
• (4)显示子程序的调用
3、静态显示示例
• 【例5-4】利用51单片机的并行口作为静态显示的控制 口的示例
请修改:
(1)显示“12”; (2)轮流显示“12”、“--”、“AB”; (3)计数器:从00开始,1S加1。
设计1 计时秒表的设计
• (1)两位LED显示 • 可以显示00~99秒; • (2)两个按键 • 分别为启动/停止键、清零键。 • 要求:设计硬件电路,编写出软件程序(延时由软件
形成)。
设计2 模拟交通信号灯控制装置的设计
• (1)6个发光二极管模拟交通灯 • 南北:黄、红、绿 ;东西:黄、红、绿。 • (2)2个应急开关 • 南北绿东西红或东西绿南北红。 • 要求:设计硬件模拟电路,编写软件程序。
• 单片机原理及应用(第4版)
• 姜志海 王蕾 姜沛勋 编著
• 电子工业出版社
第5章 P0~P3口应用基础
• 片内并行I/O口的应用。 • 5.1 P0~P3口概述 • 5.2 输出操作 • 5.3 输入操作 • 5.4 实验与设计
XK3190-A10 称重显示器 说明书

使用说明书2006年07月版目录第一章主要参数 1 第二章安装连接2第二章显示与键盘3一. 仪表显示与键盘功能示意图二. 键盘功能第三章操作说明4一. 开机及开机自动置零二. 手动置零(半自动置零)三. 去皮功能四. 重量累计功能五. 时钟调校功能六. 用户功能设置七. 上下限设置与应用第四章维护保养和注意事项8第五章信息提示8附录:标定方法9亲爱的用户:在使用仪表前,敬请仔细阅读说明书!X K 3 1 9 0 – A 1 0第一章主要参数1 . 型号: XK3190-A10称重显示器2 . 准确度: Ⅲ级,n=30003. A/D转换原理: 采用Δ-∑方式4 . 采样速度: 10次/秒5 . 传感器灵敏度范围: 1.5~3mV / V6 . 非线性: ≤0.001%F.S7 . 传感器供桥电源: DC:5V8 . 满量程温度系数: ≤2.5 PPM/℃9 . 分度值:1/2/5/10/20/50可选10 . 接传感器个数:4个350Ω传感器(带长线补偿)11 . 显示: 6位LCD,显示灰度7级可调,绿色LED背光亮度7级可调12 . 键盘: 采用轻触式按钮开关, 共5个功能键,1个开关键13 . USB接口(可选): 兼容USB1.1和USB2.014 . 通讯接口(可选): RS232C;波特率1200/ 2400/ 4800/ 9600可选15 . 使用电源: AA镍氢/碱性电池×2节16 . 使用温度、湿度: 0~40℃;≤90%RH17 . 储运温度: -20~50℃★★★注1:USB和RS-232C通讯接口只可选用其中任意一种。
若需要使用USB或RS-232C的通讯功能,请在订货时声明。
使用USB通讯接口的用户,上海耀华称重系统有限公司可以提供WINDOWS操作系统的驱动程序和相应的说明文档★★★注2:若用户不使用USB或RS-232C通讯,请将通讯功能设置菜单P5中选择:OFF,关闭通讯,可以节约电能,延长电池使用时间。
并行接口P0~P3

K
30P
XTAL2 GND
第5章 并行接口P0~P3和单片机的中断系统
编程如下:
CLR P1.0 AGA:SETB P1.1 JB P1.1,LIG SETB P1.0 SJMP AGA LIG: CLR P1.0 SJMP AGA
;使发光二极管灭 ;先对P1口写入“1” ;开关开,转LIG ;开关合上,二极管亮
LED数码管的g~a七个发光二极管因加正电压而发亮, 因加零电压而不能发亮,不同亮暗的组合就能形成不同的字 形,这种组合称之为字形码,显然共阳极和共阴极的字形码 是不同的 ,其字形码见下表。LED数码管每段需10~20ma 的驱动电流,可用TTL或CMOS器件驱动。 字形码的控制输出可采用硬件译码方式,如采用BCD 7段译码/驱动器74LS48、74LS49、CD4511(共阴极)或 74LS46、74LS47、CD4513
P1.7
SCቤተ መጻሕፍቲ ባይዱ引脚,在系统编程时钟输入
第5章 并行接口P0~P3和单片机的中断系统
3.P2口 内部上拉电阻的8位准双向并行I/O口,P2口的位结构比P1 多了一个转换控制部分,当P2口作通用I/O口时,多路开关 MUX倒向左; 读锁存器
1 内部总线 写锁存器 P2.x 锁存器 CL 2 读引脚 D Q
/数据复用总线(用于口扩展) 两个输入缓冲器(BUF1和BUF2) 读锁存器
P0R1
地址/数据
BUF1
AD0
控制 Vcc
b c
内部总线
D0
D C
a
T1
写锁存器
P0W
锁存器
Q
Q
P00
3、P0W为端口输出写信号,用于 推拉式I/O驱动器 锁存输出状态 多路开关 4、P0R1为读锁存器信号,执行 功能:用于控制选通I/O方式 “ANL P0,#0FH”时该信号有效 A 还是地址/数据输出方式 5、P0R2为读引脚信号,执行 2) “MOV A,P0”时该信号有效 方式控制:由内部控制信号
1-单片机键盘与显示电路设计

独立式按键 单片机控制系统中,往往只需要几个 功能键,此时,可采用独立式按键结构。 1.独立式按键结构 独立式按键是直接用I/O口线构成的单 个按键电路,其特点是每个按键单独占 用一根I/O口线,每个按键的工作不会影 响其它I/O口线的状态。独立式按键的典 型应用如图9-3所示。
V CC
P 1.0 P 1.1 P 1.2 P 1.3 P 1.4 P 1.5 P 1.6 P 1.7
P1口某位结构
P1口电路中包含有一个数据输出锁存器、一个三态数据输入缓冲器 、一个数据输出的驱动电路。 P1口的功能和驱动能力
P1口只可以作为通用的I/O口使用;
P1可以驱动4个标准的TTL负载电路; 注意在P1口作为通用的I/O口使用时,在从I/O端口读入数据时,应 该首先向相应的I/O口内部锁存器写“1”。 举例:从P1口的低四位输入数据 MOV MOV P1,#00001111b ;;先给P1口底四位写1 A,P1 ;;再读P1口的底四位
依此规律循环,即可使各位数码管显 示将要显示的字符。虽然这些字符是在不 同的时刻分别显示,但由于人眼存在视觉 暂留效应,只要每位显示间隔足够短就可 以给人以同时显示的感觉。 采用动态显示方式比较节省I/O口,硬 件电路也较静态显示方式简单,但其亮度 不如静态显示方式,而且在显示位数较多 时,CPU要依次扫描,占用CPU较多的时 间。
矩阵式按键 单片机系统中,若使用按键较多时,通 常采用矩阵式(也称行列式)键盘 1.矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位 于行、列线的交叉点上,其结构如下图9-4 所示。
+5 V 0 4 8 12 0 1 5 9 13 1 2 6 10 14 2 3 7 11 15 3 0 1 2 3
06 12864LCD显示计算器键盘按键实验

目录1 课程设计概述和要求 (1)1.1 课程设计要求与任务 (2)1.2 课程设计思路 (2)1.3 课程设计需要配置的环境 (3)2 系统设计 (3)2.1 设计框图 (3)2.2 元件解析 (3)2.2.1 LCD12864芯片……………………………………………………………42.2.2 AT89C51芯片 (5)2.2.3 其他部件 (6)2.2.4 电路分析 (7)3 软件设计 (12)3.1 程序流程图 (12)3.2 程序代码 (12)4 系统的仿真与调试 (13)4.1 硬件调试 (13)4.2 软件调试 (14)4.3 软硬件调试 (14)5 总结 (14)附录1:程序代码附录2:12864LCD显示计算器键盘按键实验Proteus仿真图1 课程设计概述和要求1.1 课程设计任务与要求设计任务:利用AT89C51单片机结合12864LCD显示器设计计算器键盘按键。
设计要求1:本设计实现一个12864LCD显示12864LCD显示器设计计算器键盘按键2.利用AT89C51控制整个电路来实现. 显示12864LCD显示器设计计算器键盘按键,系统主要包括硬件和软件两部分。
重点就是各部分硬件的连接设计以及程序的编写。
本章讲述的就是系统硬件的设计,其中包括各模块的器件选择和电路设计。
将计算器按键上的信息传送至AT89C51主芯片之中,利用P2端口使之显示于12864LCD液晶显示屏上。
1.2 课程设计目的思路1、先把与题目有关的芯片资料找到,熟悉一下芯片资料2、把此程序的电路图看懂,了解一下它的实现原理,以及实现的功能。
3、分析一下此程序的各部分的功能,各零件的工作原理。
4、对程序进行调试,分析调试结果,观察并得出结论。
1.3 课程设计需要配置的环境1、一台主机,一台显示器2、Keil uVision3/Keil uVision4 应用程序软件3、ISIS 7 Professional 仿真软件4、老师交给的仿真电路图,及案例5、纸张,以及一些参考资料2 系统设计2.1.设计框图框图设计是为了能够从整体上把握系统的各个大的模块以及各个模块之间的联系。
第5章 输入、输出接口P0~P3--1讲解

武汉科技大学
电信系
2. P1口 字节地址90H,位地址90H—97H
P1.0—P1.7: 准双向I/O口 输出时一切照常,输入时要先对其写“1”
读锁存器
内部 总线
写锁 存器
2
DQ CK /Q
1
读引脚
单片机及接口技术
Vcc 内部上拉电阻
引脚P1.X
17
第五章 输入、输出接口P0~P3
武汉科技大学
电信系
P1口
输入数据时,要先对其写“1”
读锁存器
Vcc 内部上拉电阻
内部 总线 1
写锁 存器
2
DQ
1
CK /Q
0
截 引脚P1.X 止
1
读引脚 =1
18
单片机及接口技术
第五章 输入、输出接口P0~P3
武汉科技大学
电信系
P1口
读锁存器
输出数据 1 时
内部 总线 1
写锁 存器
2
DQ
1
CK /Q
0
1
Vcc 内部上拉电阻
1
读引脚 =0
控制=1时,此脚作通用输出口: 输出=1时
23
单片机及接口技术
第五章 输入、输出接口P0~P3
武汉科技大学
电信系
P2口
读锁存器
内部 总线 0
写锁 存器
2
DQ CK /Q
地址高8位 控制 =1
Vcc 内部上拉电阻
0
1
3
=0
导 引脚P2.X 通
1 读引脚 =0
单片机及接口技术
控制=1 时,此脚作通用输出口: 输出=0 时
例5-1.设计一电路,监视某开关K,用发光二极 管LED显示开关状态,如果开关合上,LED亮、 开关打开,LED熄灭
第5章 MCS–51单片机的接口与应用 99页 5.8M

(1) 用键盘连接的I/O线的二进制组合表示键码。例如用4行、
4列线构成的16个键的键盘,可使用一个8位I/O口线的高、低4 位口线的二进制数的组合表示16个键的编码,如图5.4(a)所示。 各键相应的键值为88H、84H、82H、81H、48H、44H、42H、 41H、28H、24H、22H、21H、18H、14H、12H、11H。这种键 值编码软件较为简单直观,但离散性大,不便安排散转程序的 入口地址。
第5章 MCS–51单片机的接口与应用 JNB ACC.2,K2 JNB ACC.3,K3 JNB ACC.4,K4 JNB ACC.5,K5 JNB ACC.6,K6 ;检测2号键是否按下,按下转 ;检测3号键是否按下,按下转 ;检测4号键是否按下,按下转 ;检测5号键是否按下,按下转 ;检测6号键是否按下,按下转
;0号键功能程序
;0号键功能程序执行完返回 ;0号键功能程序
JMP START
……………………… PROM7: ……………………… JMP START …
;1号键功能程序执行完返回
;7号键功能程序 ;7号键功能程序执行完返回
第5章 MCS–51单片机的接口与应用
5.1.4 行列式键盘
行列式键盘又叫矩阵式键盘。用I/O口线组成行、列结构, 按键设置在行列的交点上。例如4×4的行列结构可组成16个键 的键盘。因此,在按键数量较多时,可以节省I/O口线。 1.行列式键盘的接口 行列式键盘的接口方法有许多,例如直接接口于单片机的 I/O口上;利用扩展的并行I/O接口;用串行口扩展并行I/O口接 口;利用一种可编程的键盘、显示接口芯片8279进行接口等。 其中,利用扩展的并行I/O接口方法方便灵活,在单片机应用系
MOVX @DPTR,A
MCS-51与键盘.ppt

工作过程:
(1)在键盘扫描子程序中,先判断有无键按下。
方法:PA口8位输出全0,读PC口低4位状态,若PC0~ PC3为全1,则说明键盘无键按下;若不全为1,则说明 键盘可能有键按下。
2020/10/22
(2)用软件来消除按键抖动的影响。如有键按下,则 进行下一步。 (3)求按下键的键号。 (4)等待按键释放后,再进行按键功能的处理操作。 2. 定时扫描工作方式
LJMP PKEY3
;S3按下,转PKEY3处理
KEY4: CJNE A,#17H,KEY5 ;S4键未按下,转KEY5
LJMP PKEY4
;S4按下,转PKEY4处理
KEY5: CJNE A,#0FH,PASS ;S5未按下,转RETURN
LJMP PKEY5
;S5按下,转PKEY5处理
RETURN:RET
2020/10/22
识别键盘有无键被按下的方法,分两步进行:
第1步:识别键盘有无键按下; 第2步:如有键被按下,识别出具体的按键。
把所有列线置0,检查各行线电平是否有变化,如 有变化,说明有键按下,如无变化,则无键按下。
上述方法称为扫描法,即先把某一列置低电平, 其余各列为高电平,检查各行线电平的变化,如果某 行线电平为低,可确定此行列交叉点处的按键被按 下。 b. 线反转法
MOV A,#00H
;0行有键闭合,首键号0→A
AJMP LKP
;跳LKP,计算键号
LONE:JB Acc.1,LTW0 ;1行线为高,无键闭合,跳LTW0,
1.动态显示程序设计 8031内部RAM 6个显示缓冲单元:79H~7EH,存
放要显示的6位数据。 8155H的PB口输出相应位的段码,依次改变PA口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
5.1 单片机控制发光二极管显示
发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。 大部分发光二极管工作电流1~5mA之间,其内阻为20~100Ω。电流越大 ,亮度也越高。 为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重要,若
供电电压为+5V,则限流电阻可选1~3kΩ。
5.1.1
1.P0口
注意: 作地址/数据复用口 作通用I/O口用 图4-1 P0口某一位的位电路结构
2017/12/17
2.P1口
与P0口不同,P1口内部有上拉电阻。
(1)P1口作通用I/O口使用
(准三态双向口)
图4-2 P1口某一位的位电路结构
2017/12/17
3.P2口
图4-3 P2口某一位的位电路结构
单片机与发光二极管的连接
第2章已介绍,P0口作通用I/O用,由于漏极开路,需外接上拉电阻。而P1~P3口内部有 30kΩ 左右上拉电阻。 P1~P3口如何与LED发光二极管驱动连接? 单片机并行端口P1~P3直接驱动发光二极管,电路见图5-1。与P1、P2、P3口相比,P0口 每位可驱动8个LSTTL输入,而P1~P3口每一位驱动能力,只有P0口一半。
【例5-2】电路见图5-2,制作由上至下再由下至上反复循环点亮显示的 流水灯,3种方法实现。
思路:
循环 点亮 反复
(1)数组的字节操作实现 建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依次送P1口。参考程 序: #include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前8个数据为左移点亮 数据,后8个为右移点亮数据*/
图5-1 发光二极管与单片机并行口的连接 当P0口某位为高电平时,可提供400µA的拉电流;当P0口某位为低电平(0.45V)时,可 提供3.2mA的灌电流,而P1~P3口内有30kΩ左右上拉电阻,如高电平输出,则从P1、P2和 P3口输出的拉电流Id仅几百µA,驱动能力较弱,亮度较差,见图5-1(a)。 如端口引脚为低电平,能使灌电流Id从单片机外部流入内部,则将大大增加流过的灌电流 值,见图5-1(b)。AT89S51任一端口要想获得较大的驱动能力,要用低电平输出。如一定要 高电平驱动,可在单片机与发光二极管间加驱动电路,如74LS04、74LS244等。
参考程序:
思路:
状态检测 状态判断输出 状态编码
图5-4 开关检测指示器2接口电路与仿真
24
#include <reg51.h> // 包含头文件reg51.h void main( ) //主函数main( ) { char state; do { P1=0xff; // P1口为输入 state=P1; // 读入P1口的状态,送入state state=state&0x03; // 屏蔽P1口的高6位 switch (state) // 判P1口低2位开关状态 { case 0: P2=0x01; break;// P1.1、P1.0=00,点亮P2.0脚LED case 1: P2=0x02; break;// P1.1、P1.0=01,点亮P2.1脚LED case 2: P2=0x04; break;// P1.1、P1.0=10,点亮P2.2脚LED case 3: P2=0x08; break;// P1.1、P1.0=11,点亮P2.3脚LED } }while ( 1 ); 关注:程序段中用到循环结构控制语句do-while以及 switch-case语句。 }
第5章 单片机的开关检测、键盘输入
与显示的接口设计
1
复习
单片机的并行I/O口有几个?特点?
4个双向的8位并行I/O端口:P0~P3,表 特殊功能寄存器P0、P1、P2和P3就是这4个端口的输出锁 存器。4个端口除按字节输入/输出外,还可按位寻址,以便 位控功能的实现。
P0口既可作地址/数据总线使用, 也可作通用I/O口使用。
(2)移位运算符实现
使用移位运算符“>>”、“<<”,把送P1口显示控制数据进行移位, 从而实现发光二极管依次点亮。参考程序:
#include <reg51.h> #define uchar unsigned char void delay( ) {
uchar i,j;
for(i=0; i<255; i++) for(j=0; j<255; j++);
(3)用循环左、右移位函数实现
使用C51提供的库函数,即循环左移n位函数和循环右移n位函数,控制 发光二极管点亮。参考程序:
#include <reg51.h> #include <intrins.h> #define uchar unsigned char void delay( ) { uchar i,j; for(i=0; i<255; i++) for(j=0; j<255; j++); } //包含循环左、右移位函数的头文件
5.2.2 开关检测案例2
【例5-4】 如图5-4,P1.0和P1.1引脚接有两只开关S0和S1,两引脚上的高低电平共4
种组合,4种组合分别点亮P2.0~P2.3引脚控制的4只LED,即S0、S1均闭合,LED0 亮,其余灭;S1闭合、S0打开,LED1亮,其余灭;S0闭合、S1打开,LED2亮,其余 灭;S0、S1均打开,LED3亮,其余灭。编程实现此功能。
{ for(t=0;t<120;t++); }
//包含移位函数_crol_( )的头文件
//延时函数
} void main( ) //主程序 { P1=0xfe; //向P1口送出点亮数据 while (1) { delay( 500 ); //500为延时参数,可根据实际需要调整 P1=_crol_(P1,1) ; // 函数_crol_(P1,1)把P1中的数据循环左移1位 } }
参考程序如下:
#include <reg51.h> #define uchar unsigned char void delay( ) //延时函数 { uchar i,j; for(i=0; i<255; i++) for(j=0; j<255; j++); } void main( ) //主函数 {while (1) { unsigned char temp; //定义临时变量temp P1=0xff; //P1口低4位置1,作为输入;高4位置1,发光二极管熄灭 temp=P1&0xf0; //读P1口并屏蔽低4位,送入temp 中 temp=temp>>4; //temp内容右移4位,P1口高4位移至低4位 P1=temp; // temp中的数据送P1口输出 delay( ); } }
void main( ) { uchar i,temp; while (1) { temp=0xfe; for(i=0; i<7; i++) { P1=temp; delay( ); temp=_crol_( temp,1) ; } for(i=0; i<7; i++) { P1=temp;
// 主函数
程序说明:
(1)while(1) 两种用法: “while(1);”: while(1)后有分号,是使程序停留在这指令上;
“while(1) {……;}”:反复循环执行大括号内程序段,本例用法,即控制
流水灯反复循环显示。 (2)C51函数库中的循环移位函数:循环移位函数包括:
循环左移函数“_crol_” 循环右移函数“_cror_”。
// temp中的数据取反后送P1口 // 延时 // temp 中数据左移一位 // 赋右移初值给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据右移一位
程序说明: 注意使用移位运算符“>>”、“<<”与使用循环左移 函数“_crol_”和循环右移函数“_cror_” 区别。 左移移位运算“<<”是将高位丢弃,低位补0 ;右移移位运算、 “>>”是将低位丢弃,高位补0。 而循环左移函数“_crol_” 是将移出的高位再补到低位,即循环 18 移位;同理循环右移函数“_cror_” 是将移出的低位再补到高位
}
void main( ) { uchar i,temp; while (1) //主函数
{ temp=0x01; for(i=0; i<8; i++) { P1=~temp; delay( ); temp=temp<<1; } temp=0x80; for(i=0; i<8; i++) { P1=~temp; delay( ); temp=temp>>1; } } } //左移初值赋给temp
5.1.2 I/O端口的编程举例
对I/O端口编程控制时,要对I/O端口特殊功能寄存器声明,在C51的编 译器中,这项声明包含在头文件reg51.h中,编程时,可通过预处理命令 #include<reg51.h>,把这个头文件包含进去。下面通过案例介绍如何编程 对发光二极管输出控制。
【例5-1】 制作流水灯,原理电路见图5-2,8个发光二极管LED0~LED7经限 流电阻分别接至P1口的P1.0~P1.7引脚上,阳极共同接高电平。编写程序来控制 发光二极管由上至下的反复循环流水点亮,每次点亮一个发光二极管。