第4章并行口的输入输出操作_第1页
第4章并行口的输入输出操作_第2页
第4章并行口的输入输出操作_第3页
第4章并行口的输入输出操作_第4页
第4章并行口的输入输出操作_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4 4章章 P0P0P3P3口应用基础口应用基础 片内并行片内并行I/OI/O口的应用。口的应用。 4.1 4.1 认识认识5151单片机的单片机的P0P0P3P3口口 4.2 4.2 输出操作输出操作 4.3 4.3 输入操作输入操作 4.4 4.4 实验与设计实验与设计4.1 4.1 认识认识5151单片机的单片机的P0P0P3P3口口 读引脚 写锁存器 内部总线 读锁存器 2 1 D CP 锁存器 Q Q VCC V1 内部上拉电阻 P1.X 第二功能输入 读引脚 写锁存器 内部总线 读锁存器 D CP 锁存器 Q Q 1 4 2 3 & 第二功能输出 VCC P3.X 内部

2、上拉电阻 读锁存器 内部总线 写锁存器 读引脚 2 1 D CP 锁存器 Q 1 & MUX V1 PO.X V2 VCC 控制 地址/数据 Q 读锁存器 内部总线 写锁存器 读引脚 2 1 D CP 锁存器 Q Q 1 V1 P2.X VCC 控制 地址 从输出位置看:从输出位置看: P0P0与与P1P1、P2P2、P3P3不同,不同, 因此:因此: P0P0称为称为“双向口双向口”, 其余的称为其余的称为“准双向口准双向口”。双向口:双向口:单片机的单片机的I/OI/O口为了提高接口口为了提高接口的驱动能力,具有由场效应管组成的输的驱动能力,具有由场效应管组成的输出驱动器。当驱动器

3、场效应管的漏极具出驱动器。当驱动器场效应管的漏极具有开路状态时,该口就具有有开路状态时,该口就具有高电平、低高电平、低电平和高阻抗电平和高阻抗3 3种状态种状态,称为双向口。,称为双向口。准双向口:准双向口:单片机单片机I/OI/O口的输出场效应口的输出场效应管的漏极接有上拉电阻,该口具有管的漏极接有上拉电阻,该口具有高电高电平、低电平两种状态平、低电平两种状态,称为准双向口。,称为准双向口。4.2 4.2 输出操作输出操作 输出高、低电平。输出高、低电平。 4.2.1 4.2.1 基本输出基本输出-字节、位字节、位 4.2.2 4.2.2 扩展输出扩展输出-流水灯、霹雳灯流水灯、霹雳灯 4.

4、2.3 4.2.3 扩展输出扩展输出88段段LEDLED显示显示4.2.1 4.2.1 基本输出基本输出-字节、位字节、位【例例4-14-1】字节输出。字节输出。8 8灯亮、灭闪烁灯亮、灭闪烁 #include #include void delay( unsigned int d )void delay( unsigned int d ) while(-d0); while(-d0); void main( ) void main( ) while(1) while(1) P1P1=0 xff;=0 xff;delay(50000);delay(50000); P1P1=0X00; dela

5、y(50000);=0X00; delay(50000); 【例【例4-24-2】位操作。编程实现位操作。编程实现P1.3P1.3所接的所接的发光二极管亮、灭闪烁发光二极管亮、灭闪烁 #include #include sbit LED3=P13; sbit LED3=P13; void delay(unsigned int d)void delay(unsigned int d) while(-d0); while(-d0); void main( ) void main( ) while(1) while(1) LED3=0;LED3=0; delay(50000); delay(5000

6、0); LED3=1;LED3=1; delay(50000); delay(50000); 请修改:请修改: (1 1)P1.7P1.7对应的灯亮、灭闪烁对应的灯亮、灭闪烁 (2 2)P1.1P1.1、P1.3P1.3、P1.5P1.5对应的灯亮、对应的灯亮、灭闪烁灭闪烁 (3 3)P1.0P1.0对应的灯亮时,对应的灯亮时,P1.7P1.7对应的对应的灯灭;灯灭; P1.0 P1.0对应的灯灭时,对应的灯灭时,P1.7P1.7对应对应的灯亮。的灯亮。 (4 4)将)将P1P1口改为口改为P3P3口。口。4.2.2 4.2.2 扩展输出扩展输出-流水灯、霹雳灯流水灯、霹雳灯 【例例4-34-

7、3】流水灯流水灯。编程实现。编程实现8 8个灯从低个灯从低到高流水灯的显示闪烁。到高流水灯的显示闪烁。 流水灯闪烁规律:流水灯闪烁规律: 11111110B11111101B11111011B-11111110B11111101B11111011B-01111111B-01111111B。 从初值从初值11111110B 11111110B 循环循环左移一位左移一位就就可以。可以。 #include #include #include#include void delay( unsigned int d )void delay( unsigned int d ) while(-d0); whi

8、le(-d0); void main( ) void main( ) unsigned char sel; unsigned char sel; sel=0 xfe; sel=0 xfe; while(1) while(1) P1=sel; delay(50000); P1=sel; delay(50000); sel sel=_crol_(sel,1); =_crol_(sel,1); 也可以这样也可以这样: : #include #include void delay(unsigned int d) void delay(unsigned int d) while(-d0); while(

9、-d0); void main( )void main( ) unsigned char i, sel, a; unsigned char i, sel, a; while(1) while(1) sel=0 xfe; sel=0 xfe; for(i=0;i8;i+) for(i=0;i8;i+) P1=sel; delay(50000); P1=sel; delay(50000); a=sel1; sel=a|0 x01; a=sel1; sel=a|0 x01; 修改:修改: (1 1)两个灯左循环。)两个灯左循环。 (2 2)右循环。)右循环。 (3 3)从左到右,一个一个亮保持到全)

10、从左到右,一个一个亮保持到全亮,然后再重复。亮,然后再重复。【4-44-4】霹雳灯。】霹雳灯。由由P1P1口驱动口驱动8 8个个LEDLED灯,灯,编程实现霹雳灯闪烁。编程实现霹雳灯闪烁。 分析:分析: 所谓的霹雳灯是指一排所谓的霹雳灯是指一排LEDLED里,任何一里,任何一个时间只有一个个时间只有一个LEDLED亮,而亮灯的顺序亮,而亮灯的顺序为由左而右再由右到左,感觉就像一个为由左而右再由右到左,感觉就像一个LEDLED由左跑到右再由右跑到左。霹雳灯由左跑到右再由右跑到左。霹雳灯规律:规律: 11111110B11111110B11111101B-11111101B-01111111B01

11、111111B10111111B10111111B11011111-11011111-11111110-11111110-。 修改:修改: 实现双灯的实现双灯的 霹雳灯功能。霹雳灯功能。4.2.3 4.2.3 扩展输出扩展输出88段段LEDLED显示显示 1 1、认识、认识8 8段段LED LED 结构、驱动结构、驱动2 2、显示函数的编写、显示函数的编写 (1 1)根据硬件电路的结构建立一个显根据硬件电路的结构建立一个显示的代码表示的代码表完成显示内容与显示代码完成显示内容与显示代码的转换。(的转换。(P202)P202) unsigned char code table18=unsigne

12、d char code table18= 0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x70 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;d,0 x07,0 x7f,0 x6f;/显示的代码表显示的代码表 (2 2)开辟显示缓冲区)开辟显示缓冲区 unsigned char data dis_buf6;unsigned char data dis_buf6;/显示缓冲区显示缓冲区 (3 3)查表并操作相应的显示器)查表并操作相应的显示器 (4 4)显示函数的调用)显示函数的调用3.8段段LE

13、D静态显示技术静态显示技术 【例例4-54-5】编程显示:编程显示:ABAB #include#include #define uchar unsigned char#define uchar unsigned char #define uint unsigned int#define uint unsigned int uchar data dis_buf2;/uchar data dis_buf2;/显示缓冲区显示缓冲区 uchar code table = 0 x77,0 x7c;uchar code table = 0 x77,0 x7c; void display(void)void

14、 display(void)/显示函数显示函数 uchar segcode;uchar segcode;segcode=dis_buf0;/P1segcode=dis_buf0;/P1口显示口显示 segcode=tablesegcode; segcode=tablesegcode; P1=segcode; P1=segcode; segcode=dis_buf1;/P3 segcode=dis_buf1;/P3口显示口显示 segcode=tablesegcode; segcode=tablesegcode; P3=segcode; P3=segcode; void main(void)vo

15、id main(void)/主函数主函数 dis_buf0=0;dis_buf0=0; dis_buf1=1; dis_buf1=1;display( );display( ); / /调用显示函数调用显示函数while(1);while(1); 示例中的显示函数示例中的显示函数display( )display( )可以再简可以再简单一些,如下面程序段:单一些,如下面程序段: void display(void)void display(void) P1=tabledis_buf0;P1=tabledis_buf0; /P0 /P0口显示口显示 P3=tabledis_buf1; P3=ta

16、bledis_buf1; /P3 /P3口显示口显示 修改:修改: (1 1)显示)显示“1212”。 (2 2)轮流显示)轮流显示 “1212”、“- - -”和和“ABAB”。 延时时间采用软件延时。延时时间采用软件延时。 (3 3)计数器:)计数器:1s1s显示器加显示器加1 1。4.84.8段段LEDLED动态显示技术动态显示技术 段口、位口段口、位口 (余辉、视觉暂留)(余辉、视觉暂留)【例【例4-64-6】利用利用5151单片机的并行口作为动单片机的并行口作为动态显示的段口与位口的示例。态显示的段口与位口的示例。4.3 4.3 输入操作输入操作 作为作为5151单片机片内并行单片机

17、片内并行I/OI/O口输入信号口输入信号,是属于数字信号的,是属于数字信号的“高、低电平高、低电平”或或脉冲信号的脉冲信号的“上升沿、下降沿上升沿、下降沿”两大类两大类,这两类信号可以通过,这两类信号可以通过: “闸刀闸刀型型开关开关”、“按钮按钮型型开关开关”两类两类开关来模拟。开关来模拟。 4.3.1 4.3.1 闸刀型输入信号闸刀型输入信号 4.3.2 4.3.2 单个按钮型开关输入信号单个按钮型开关输入信号 4.3.3 4.3.3 多个按钮型开关多个按钮型开关键盘键盘 4.3.1 4.3.1 闸刀型输入信号闸刀型输入信号【例【例4-74-7】 闸刀型开关输入信号例子。编闸刀型开关输入信

18、号例子。编程实现相应的开关闭合时,相应的灯亮程实现相应的开关闭合时,相应的灯亮 #include sbit LED0=P10; sbit LED1=P11; sbit LED2=P12; sbit LED3=P13; sbit K0=P14; sbit K1=P15; sbit K2=P16; sbit K3=P17; void main( ) while(1) K0=1;K1=1;K2=1;K3=1; LED0=K0; LED1=K1; LED2=K2; LED3=K3; 思考:思考: 为什么在读键状态之前要先置为什么在读键状态之前要先置1 1? 修改:修改: (1 1)开关闭合时灯灭。)开

19、关闭合时灯灭。 (2 2)K0K0控制控制LED3LED3,K1K1控制控制LED2LED2,K2K2控控制制LED1LED1,K3K3控制控制LED0LED0。4.3.2 4.3.2 单个单个按钮开关型按钮开关型 输入信号输入信号【例【例4-84-8】按钮开关。编程实现按钮开关。编程实现S1S1按钮按按钮按一下,一下,4 4个灯一组亮、灭交替。个灯一组亮、灭交替。【例【例4-94-9】开始是所有的灯都亮,按一下开始是所有的灯都亮,按一下S1S1,灯变为,灯变为500ms500ms闪烁,再按一下,变为闪烁,再按一下,变为全亮。全亮。分析:分析: 相当于相当于S1S1为一个控制开关,控制着等的为

20、一个控制开关,控制着等的亮、灭闪烁亮、灭闪烁 注意和例题注意和例题4-84-8的不同。定义一个位单的不同。定义一个位单元,按键每动作一次,该位单元取反:元,按键每动作一次,该位单元取反:该单元为该单元为0 0时,灯全亮,该单元为时,灯全亮,该单元为1 1时,时,灯闪烁。灯闪烁。4.3.3 4.3.3 多个按钮型开关输入信号多个按钮型开关输入信号键盘键盘(独立、矩阵)(独立、矩阵) 1.1.键号、键值、键值表键号、键值、键值表 2.2.独立式键盘接口技术独立式键盘接口技术【例【例4-104-10】P1P1口作为独立式按键接口示例口作为独立式按键接口示例。编程显示按键的键号编程显示按键的键号0 0

21、7 7。 扩展与修改:扩展与修改: 两个输入按键(如两个输入按键(如P1.6P1.6、P1.7P1.7)一个为)一个为“+1+1”键,一个为键,一个为“-1-1”键,开始显示键,开始显示器显示器显示“5 5”,然后根据按键显示后面,然后根据按键显示后面的内容。的内容。2.2.矩阵键盘接口矩阵键盘接口 (1 1)硬件:)硬件: 行输出口、行输出口、 列输入口列输入口(2 2)软件:)软件: 判断整个键盘是否有键按下判断整个键盘是否有键按下 判断被按键的具体位置判断被按键的具体位置 计算被按键的键值,以确定要完成的功计算被按键的键值,以确定要完成的功能能。【例【例4-114-11】P1P1口作为口作为4 44 4矩阵键盘接口示矩阵键盘接口示例例。编程显示按键的号码编程显示按键的号码0 0F。 当按键的数量比较多时,一种通用当按键的数量比较多时,一种通用的算法是:将行的信息转变为行号(在的算法是:将行的信息转变为行号(在0000000011111111之间),将列的信息转变为之间),将列的信息转变为列号(在列号(在0000000011111111之间),这样就可之间),这样就可以将行号作为高以将行号作为高4 4位(或低位(或低4 4位),列号位),列号作为低作为低4 4位(或高位(或高4 4位),二者组成一个位),二者组成一个字节。字节。4.4 4.4 实验与设计实验

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论