已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章 输入输出端口的用法,数字端口用法,第 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页,输入/输出端口原理,第 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时,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=0x01; / 循环的初始值 for(i=0;i8;i+) /需要显示8次 PORTC=Data; / 送PORTC显示 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 char TableNumber=0b11000000,0b11111001,0b10100100, 0b10110000,0b10011001,0b10010010,0b10000010, 0b11111000,0b10000000,0b10010000; /字形码数组,第 18页,动态扫描代码的实现(续),void main(void) TRISB=0x00; TRISC=0x00; 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=0x01; / 每次循环不要忘记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 / 位选端口的方向寄存器 #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; / 十位 Number4=Data%10; / 个位 for(i=0;i10;i+) SEG_BITSEL_PORT=k=0x01; / 每次循环不要忘记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“ _CONFIG(HS ,第 22页,第五章 输入输出端口的用法,第 23页,输入端口基本用法,char chTmp; TRISB=0xFF; / 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按键使数码管显示内容加一。,第 27页,例题程序代码,#define SW RD0 /在程序中用SW代表RD0 void main(void) int Data=0; TRISD0=1; / RD0 置位输入状态 SEG_BITSEL_PORT_DIR=0x00; SEG_FONT_PORT_DIR=0x00; while(1) if(SW=0) / 检测到SW变化 delay10ms(40); /在ISIS中的按钮按下到抬起过程比较长。 / 如果是实际硬件的话,延时10毫秒即可。 if(SW=0) /这说明SW真的按下了 Data+; DisplayData(Data); /在数码管上显示变量内容 ,第 28页,第五章 输入输出端口的用法,第 29页,矩阵小键盘的读取方法,在实际项目中可能会用到更多的按键输入,例如银行密码输入按键需要十几个按键,计算机键盘需要一百多个按键。如果每个按键都要独占一个I/O引脚的话会很浪费单片机资源并且程序编写也非常冗长。 如何解决这个问题? 工程中常用矩阵扫描法实现多按键输入的识别,用少量的I/O引脚即可识别多个按键,这是一种典型的软硬件结合设计。,第 30页,44矩阵式键盘与单片机连接原理图,第 31页,扫描式键盘简单示意图,当RC4输出0时, SW2状态能从RC3读入; 当RC3输出0时, SW2状态能从RC4读入;,第 32页,44键盘矩阵原理图示意图,0,1 0 1 1,第 33页,44键盘矩阵原理图示意图,0,1 1 1 0,第 34页,基于C口的44键盘矩阵的扫描流程图,C口高四位输出0 ,低四位输入,C口低四位为1111吗?,C口高四位为1111吗?,Y,KeyL4=C口低四位,C口高四位输入,低四位输出0,KeyValue=KeyL4 | KeyH4;,第 35页,基于C口的44键盘矩阵的扫描代码,char KeyValue=0,keyH4=0,keyL4=0; / KeyValue保存键值,KeyH4保存高四位, TRISC=0x0F; /高四位输出,低四位输入 PORTC=0x00; /高四位输出0000 asm(“nop“); / 延时等待输出稳定 asm(“nop“); / 延时等待输出稳定 keyL4=PORTC; / 读取低四位内容 keyL4=keyL4 / 软件消除抖动 / 未完待续,第 36页,基于C口的44键盘矩阵的扫描代码(续),TRISC=0xF0; / 高四位输入,低四位输出 PORTC=0x00; /低四位输出0000 asm(“nop”); / 延时等待输出稳定 asm(“nop”); / 延时等待输出稳定 keyH4=PORTC; / 读取高四位内容 keyH4=keyH4 / 送D口显示,第 37页,4*4键盘扫描电路图运行图示,第 38页,如何写成函数形式(函数模块编写方法)?,明确函数的功能: 获得按键的键值,即扫描码(高四位+低四位); 函数起名为:GetScanCode 明确函数的输入(参数)和输出(返回值): 输入参数: 无; 输出: 按键的扫描码,是8位数据,char型即可. 则函数声明为: char 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 在项目中添加模块的定义文件keyboard44.c : 在主程序中添加模块的声明文件keyboard44.h: #include “keyboard44.h” main() char chData=0; /临时变量 TRISD=0x00; / D口输出,控制LED while(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页,提问时间,后面内容直接删除就行 资料可以编辑修改使用 资料可以编辑修改使用 资料仅供参考,实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文化熏陶:小学教育经典主题班会课件创意构思
- 世界名胜:领略各地风情小学主题班会课件
- 项目阶段成果验收标准确认通知(6篇范文)
- 友善相处促进团结和谐校园共建成长小学主题班会课件
- 2026作业监督面试题及答案
- 2026年客户资料更新申请确认函(7篇)
- 2026海口教师面试题库及答案
- 2026湖南中南大学湘雅三医院编外人员招聘22人笔试备考题库及答案详解
- 2026浙江衢州市开化县人力社保局下半年开化县机关事业单位选调工作人员29人笔试备考试题及答案详解
- 事业编!2026年西宁市城东区校园引才考试备考试题及答案详解
- 2026年安宁市教育体育系统急需紧缺人才引进(68人)考试备考试题及答案详解
- 2026中国民用航空适航审定中心招聘事业单位40人笔试参考试题
- (2026)继续教育公需课必修课考试题与参考答案(完整版)
- ICU火灾应急预案演练脚本
- 2026科特迪瓦建筑材料市场供需分析与产业链优化
- 重力势能课件2025-2026学年高一下学期物理人教版必修第二册
- 2026年新疆维吾尔自治区克拉玛依市重点学校初一新生入学分班考试试题及答案
- 山东山东技师学院2025年度第一批招聘18人笔试历年参考题库附带答案详解(5卷)
- 2026年高考(北京卷)化学试题及答案
- 2026 年浙江大学招聘考试题库解析
- 2025-2026学年四川省眉山市高一上册期末考试数学试卷(原卷)
评论
0/150
提交评论