单片机输入输出端口.ppt

上传人:小飞机 文档编号:6449720 上传时间:2023-11-01 格式:PPT 页数:43 大小:742KB
返回 下载 相关 举报
单片机输入输出端口.ppt_第1页
第1页 / 共43页
单片机输入输出端口.ppt_第2页
第2页 / 共43页
单片机输入输出端口.ppt_第3页
第3页 / 共43页
单片机输入输出端口.ppt_第4页
第4页 / 共43页
单片机输入输出端口.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《单片机输入输出端口.ppt》由会员分享,可在线阅读,更多相关《单片机输入输出端口.ppt(43页珍藏版)》请在三一办公上搜索。

1、第 1页,第五章 输入输出端口的用法,数字端口用法,第 2页,【学习目标】,掌握输入输出端口方向的控制方法;熟练掌握数码管动态扫描的设计和编程;掌握矩阵式键盘设计思路和编程;,第 3页,第六章 输入输出端口的用法,第 4页,第五章 输入输出端口的用法,第 5页,1 输入/输出端口原理,第 6页,输入/输出端口简介,PIC16F877共有40个引脚,其中有33个I/O引脚、与五个端口相对应。PORTA对应RA0到RA5共6个引脚、PORTB对应RB0到RB7共8个引脚、PORTC对应RC0到RC7共8个引脚、PORTD对应RD0到RD7共8个引脚、PORTE对应RE0到RE2共3个引脚。,第 7

2、页,输入/输出端口原理,第 8页,输入/输出端口的相关寄存器,当B口处于输出状态时,PORTB的内容能决定其对应引脚的电平状态。1对应高电平,0对应低电平。,当B口处于输入状态时,外部引脚的电平能决定其对应寄存器位的值。高电平对应1,低电平对应0。,第 9页,PIC的方向寄存器TRISX,TRISB是PORTB的方向寄存器。TRISA是PORTA的方向寄存器。TRISC是PORTC的方向寄存器。TRISD是PORTD的方向寄存器。TRISE是PORTE的方向寄存器。TRISX也是8位寄存器。当TRISX某二进制位为1时,PORTX对应位处于输入(Input)状态。当TRISX某二进制位为0时,

3、PORTX对应位处于输出(Output)状态。,第 10页,第五章 输入输出端口的用法,第 11页,输出端口用法例题1,第 12页,输出端口用法例题1,编程实现跑马灯的运行效果,即D0到D7循环被依次点亮,但同一时刻只有一个灯亮。单片机主频为4MHz。,第 13页,输出端口用法例题代码,main()int i=0,DelayCNT=0;char Data=0;/用来记录向PORTC输出内容的变量 TRISC=0;/把C口置为输出状态 while(1)/主循环必须是死循环 Data=0 x01;/循环的初始值 for(i=0;i8;i+)/需要显示8次 PORTC=Data;/送PORTC显示

4、for(DelayCNT=0;DelayCNT10000;DelayCNT+);/延时 Data=Data1;/每显示一次后Data左移一次,第 14页,多数码管的显示控制,第 15页,4数码管控制:Proteus原理图,第 16页,动态扫描基本思想,只让第1个数码管亮;显示个位;延时20ms;只让第2个数码管亮;显示十位;延时20ms;只让第3个数码管亮;显示百位;延时20ms;.,第 17页,动态扫描代码的实现,void delay10ms(int m)/定义延时函数int i=0,j=0;for(i=0;im;i+)for(j=0;j67;j+)/不同频率下67需要修改;const ch

5、ar TableNumber=0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000,0b10010000;/字形码数组,第 18页,动态扫描代码的实现(续),void main(void)TRISB=0 x00;TRISC=0 x00;while(1)char i=0,j=0,k=0,Number5=0,0,0,0,0;Number1=2;Number2=9;Number3=1;Number4=3;for(i=0;i10;i+)PORTC=k=0 x0

6、1;/每次循环不要忘记k赋初始值 for(j=1;j=4;j+)/共需要刷新四个数码管位置 PORTC=k;/设置要点亮的位置 PORTB=TableNumberNumberj;/设置字形 delay10ms(1);/延时显示字形,造成视觉暂留现象 k=k1;/左移为显示下一位置做准备,第 19页,将数码管扫描写成函数形式”seg4.h”,#ifndef _SEGMENT74_H_/防止重复编译本头文件#define _SEGMENT74_H_#define SEG_BITSEL_PORT PORTC/位选端口#define SEG_BITSEL_PORT_DIR TRISC/位选端口的方向寄

7、存器#define SEG_FONT_PORT PORTB/字形输出端口#define SEG_FONT_PORT_DIR TRISB/字形端口的方向寄存器void DisplayData(unsigned int iData);,第 20页,将数码管扫描写成函数形式”seg4.c”,void DisplayData(unsigned int Data)char i=0,j=0,k=0,Number5=0,0,0,0,0;/Number0未用 Number1=Data/1000;/千位 Number2=Data%1000/100;/百位 Number3=Data%100/10;/十位 Numb

8、er4=Data%10;/个位for(i=0;i10;i+)SEG_BITSEL_PORT=k=0 x01;/每次循环不要忘记k赋初始值 for(j=1;j=4;j+)/共需要刷新四个数码管位置 SEG_BITSEL_PORT=k;/设置要点亮的位置 SEG_FONT_PORT=TableNumberNumberj;/设置字形 delay10ms(2);/延时显示字形,造成视觉暂留现象 k=k1;/左移为显示下一位置做准备,第 21页,在主程序中调用,/四位数码管动态扫描主程序,主频为4MHz#include pic.h#include delay.h#include seg74.h _CON

9、FIG(HS,第 22页,第五章 输入输出端口的用法,第 23页,输入端口基本用法,char chTmp;TRISB=0 xFF;/B口全置为输入状态chTmp=PORTB;/读取B口当前状态并保存在变量chTmp中,第 24页,单个按键状态的读取分析,当K1未按下时,RB0通过电阻R9与电路中的供电电源信号VCC相连,使RB0的电位也为高电平。即RB0输入值为1。当K1按下时,RB0与接地信号GND相连,使RB0输入为低电平,即逻辑的0。由于有R9的存在,即使K1按下也不会使VCC和GND短路。,第 25页,按键输入引脚电平抖动示意图,第 26页,单个按键输入例题,要求编程实现每按一次K1按

10、键使数码管显示内容加一。,第 27页,例题程序代码,#define SW RD0/在程序中用SW代表RD0void main(void)int Data=0;TRISD0=1;/RD0 置位输入状态 SEG_BITSEL_PORT_DIR=0 x00;SEG_FONT_PORT_DIR=0 x00;while(1)if(SW=0)/检测到SW变化 delay10ms(40);/在ISIS中的按钮按下到抬起过程比较长。/如果是实际硬件的话,延时10毫秒即可。if(SW=0)/这说明SW真的按下了 Data+;DisplayData(Data);/在数码管上显示变量内容,第 28页,第五章 输入输

11、出端口的用法,第 29页,矩阵小键盘的读取方法,在实际项目中可能会用到更多的按键输入,例如银行密码输入按键需要十几个按键,计算机键盘需要一百多个按键。如果每个按键都要独占一个I/O引脚的话会很浪费单片机资源并且程序编写也非常冗长。如何解决这个问题?工程中常用矩阵扫描法实现多按键输入的识别,用少量的I/O引脚即可识别多个按键,这是一种典型的软硬件结合设计。,第 30页,44矩阵式键盘与单片机连接原理图,第 31页,扫描式键盘简单示意图,当RC4输出0时,SW2状态能从RC3读入;当RC3输出0时,SW2状态能从RC4读入;,第 32页,44键盘矩阵原理图示意图,0,1 0 1 1,第 33页,4

12、4键盘矩阵原理图示意图,0,1 1 1 0,第 34页,基于C口的44键盘矩阵的扫描流程图,C口高四位输出0,低四位输入,KeyValue=KeyL4|KeyH4;,第 35页,基于C口的44键盘矩阵的扫描代码,char KeyValue=0,keyH4=0,keyL4=0;/KeyValue保存键值,KeyH4保存高四位,TRISC=0 x0F;/高四位输出,低四位输入PORTC=0 x00;/高四位输出0000asm(nop);/延时等待输出稳定asm(nop);/延时等待输出稳定keyL4=PORTC;/读取低四位内容keyL4=keyL4/软件消除抖动/未完待续,第 36页,基于C口的

13、44键盘矩阵的扫描代码(续),TRISC=0 xF0;/高四位输入,低四位输出 PORTC=0 x00;/低四位输出0000 asm(“nop”);/延时等待输出稳定 asm(“nop”);/延时等待输出稳定 keyH4=PORTC;/读取高四位内容 keyH4=keyH4/送D口显示,第 37页,4*4键盘扫描电路图运行图示,第 38页,如何写成函数形式(函数模块编写方法)?,明确函数的功能:获得按键的键值,即扫描码(高四位+低四位);函数起名为:GetScanCode明确函数的输入(参数)和输出(返回值):输入参数:无;输出:按键的扫描码,是8位数据,char型即可.则函数声明为:char

14、 GetScanCode(void);由于此函数功能相对独立,所以建立一个.c文件保存函数内容,同时建立.h文件保存函数声明.设分别为keyboard44.c和keyboard44.h,第 39页,函数内容编写(keyboard44.c),char GetScanCode(void)/函数首部/根据功能流程编写函数内容;/函数结束时用return获得返回值;return KeyValue;,头文件编写(keyboard44.h),char GetScanCode(void);,第 40页,模块的使用方法,函数定义:keyboard44.c函数声明:keyboard44.h在项目中添加模块的定义

15、文件keyboard44.c:在主程序中添加模块的声明文件keyboard44.h:#include“keyboard44.h”main()char chData=0;/临时变量 TRISD=0 x00;/D口输出,控制LEDwhile(1)chData=GetScanCode();/读取按键if(chData!=0)/不等0则显示按键值 PORTD=chData;/扫描码赋值,第 41页,思考与练习,6.1 I/O的全称是什么?6.2 简述4位数码管动态扫描输出原理。6.3 单片机读取机械按键状态时为什么要消除抖动,如何消除抖动。6.4 简述44按键动态扫描输入原理。6.5 电路如图 6.18所示。要求编程控制LED实现效果:D0到D7依次全被点亮,即先是D0亮,过一会儿是D0和D1亮,再过一会儿是D0、D1、D2亮,最后是D0到D7全亮,而后是重新循环。,第 42页,思考与练习,6.6 用“Proteus ISIS”设计单片机控制两只数码管的电路。并编程实现在数码管上循环加一的显示0到99的数字。6.7 请把【例6.7】中基于矩阵键盘扫描的C语言代码采用模块化的函数形式改写,函数名为GetKey,返回值为某个按键的扫描码,并用此函数改写源程序相关部分。,第 43页,提问时间,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号