




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章输入输出端口的用法 数字端口用法 第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 inti 0 DelayCNT 0 charData 0 用来记录向PORTC输出内容的变量TRISC 0 把C口置为输出状态while 1 主循环必须是死循环 Data 0 x01 循环的初始值for i 0 i 8 i 需要显示8次 PORTC Data 送PORTC显示for DelayCNT 0 DelayCNT 10000 DelayCNT 延时Data Data 1 每显示一次后Data左移一次 第14页 多数码管的显示控制 第15页 4数码管控制 Proteus原理图 第16页 动态扫描基本思想 只让第1个数码管亮 显示个位 延时20ms 只让第2个数码管亮 显示十位 延时20ms 只让第3个数码管亮 显示百位 延时20ms 第17页 动态扫描代码的实现 voiddelay10ms intm 定义延时函数 inti 0 j 0 for i 0 i m i for j 0 j 67 j 不同频率下67需要修改 constcharTableNumber 0b11000000 0b11111001 0b10100100 0b10110000 0b10011001 0b10010010 0b10000010 0b11111000 0b10000000 0b10010000 字形码数组 第18页 动态扫描代码的实现 续 voidmain void TRISB 0 x00 TRISC 0 x00 while 1 chari 0 j 0 k 0 Number 5 0 0 0 0 0 Number 1 2 Number 2 9 Number 3 1 Number 4 3 for i 0 i 10 i PORTC k 0 x01 每次循环不要忘记k赋初始值for j 1 j 4 j 共需要刷新四个数码管位置 PORTC k 设置要点亮的位置PORTB TableNumber Number j 设置字形delay10ms 1 延时显示字形 造成视觉暂留现象k k 1 左移为显示下一位置做准备 第19页 将数码管扫描写成函数形式 seg4 h ifndef SEGMENT74 H 防止重复编译本头文件 define SEGMENT74 H defineSEG BITSEL PORTPORTC 位选端口 defineSEG BITSEL PORT DIRTRISC 位选端口的方向寄存器 defineSEG FONT PORTPORTB 字形输出端口 defineSEG FONT PORT DIRTRISB 字形端口的方向寄存器voidDisplayData unsignedintiData 第20页 将数码管扫描写成函数形式 seg4 c voidDisplayData unsignedintData chari 0 j 0 k 0 Number 5 0 0 0 0 0 Number 0 未用Number 1 Data 1000 千位Number 2 Data 1000 100 百位Number 3 Data 100 10 十位Number 4 Data 10 个位for i 0 i 10 i SEG BITSEL PORT k 0 x01 每次循环不要忘记k赋初始值for j 1 j 4 j 共需要刷新四个数码管位置 SEG BITSEL PORT k 设置要点亮的位置SEG FONT PORT TableNumber Number j 设置字形delay10ms 2 延时显示字形 造成视觉暂留现象k k 1 左移为显示下一位置做准备 第21页 在主程序中调用 四位数码管动态扫描主程序 主频为4MHz include pic h include delay h include seg74 h CONFIG HS 第22页 第五章输入输出端口的用法 第23页 输入端口基本用法 charchTmp 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按键使数码管显示内容加一 第27页 例题程序代码 defineSWRD0 在程序中用SW代表RD0voidmain void intData 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页 第五章输入输出端口的用法 第29页 矩阵小键盘的读取方法 在实际项目中可能会用到更多的按键输入 例如银行密码输入按键需要十几个按键 计算机键盘需要一百多个按键 如果每个按键都要独占一个I O引脚的话会很浪费单片机资源并且程序编写也非常冗长 如何解决这个问题 工程中常用矩阵扫描法实现多按键输入的识别 用少量的I O引脚即可识别多个按键 这是一种典型的软硬件结合设计 第30页 4 4矩阵式键盘与单片机连接原理图 第31页 扫描式键盘简单示意图 当RC4输出0时 SW2状态能从RC3读入 当RC3输出0时 SW2状态能从RC4读入 第32页 4 4键盘矩阵原理图示意图 0 1011 第33页 4 4键盘矩阵原理图示意图 0 1110 第34页 基于C口的4 4键盘矩阵的扫描流程图 C口高四位输出0 低四位输入 C口低四位为1111吗 C口高四位为1111吗 Y KeyL4 C口低四位 C口高四位输入 低四位输出0 KeyValue KeyL4 KeyH4 第35页 基于C口的4 4键盘矩阵的扫描代码 charKeyValue 0 keyH4 0 keyL4 0 KeyValue保存键值 KeyH4保存高四位 TRISC 0 x0F 高四位输出 低四位输入PORTC 0 x00 高四位输出0000asm nop 延时等待输出稳定asm nop 延时等待输出稳定keyL4 PORTC 读取低四位内容keyL4 keyL4 软件消除抖动 未完待续 第36页 基于C口的4 4键盘矩阵的扫描代码 续 TRISC 0 xF0 高四位输入 低四位输出PORTC 0 x00 低四位输出0000asm nop 延时等待输出稳定asm nop 延时等待输出稳定keyH4 PORTC 读取高四位内容keyH4 keyH4 送D口显示 第37页 4 4键盘扫描电路图运行图示 第38页 如何写成函数形式 函数模块编写方法 明确函数的功能 获得按键的键值 即扫描码 高四位 低四位 函数起名为 GetScanCode明确函数的输入 参数 和输出 返回值 输入参数 无 输出 按键的扫描码 是8位数据 char型即可 则函数声明为 charGetScanCode void 由于此函数功能相对独立 所以建立一个 c文件保存函数内容 同时建立 h文件保存函数声明 设分别为keyboard44 c和keyboard44 h 第39页 函数内容编写 keyboard44 c charGetScanCode void 函数首部 根据功能流程编写函数内容 函数结束时用return获得返回值 returnKeyValue 头文件编写 keyboard44 h charGetScanCode void 第40页 模块的使用方法 函数定义 keyboard44 c函数声明 keyboard44 h在项目中添加模块的定义文件keyboard44 c 在主程序中添加模块的声明文件keyboard44 h include keyboard44 h main charchData 0 临时变量TRISD 0 x00 D口输出 控制LEDwhile 1 chData GetScanCode 读取按键if chData 0 不等0则显示按键值PORTD chData 扫描码赋值 第41页 思考与练习 6 1I O的全称是什么 6 2简述4位数码管动态扫描输出原理 6 3单片机读取机械按键状态时为什么要消除抖动 如何消除抖动 6 4简述4 4按键动态扫描输入原理 6 5电路如图6 18所示 要求编程控制L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乐园房间课件
- 背离合同(标准版)
- 绿化模范市申请报告(3篇)
- 留守儿童夏季申请报告(3篇)
- DMTr-2-O-C16-rC-Ac-3-CE-phosphoramidite-生命科学试剂-MCE
- 临近和短时天气预报课件
- 有限区域应急疏散预案 (特定车间或区域)
- Y染色体微缺失课件
- 重要访客设备进入安全检查应急预案
- 信息安全合规性检查发现问题应急预案
- 教科版(2017)小学科学六年上册《斜面》说课稿(附反思、板书)课件
- 幼儿园财务审批报销制度
- 统编版七年级道德与法治上册《第三课梦想始于当下》单元检测卷(含答案)
- 合同制消防员违纪处理
- 《谵妄评估培训》课件
- 高级考评员职业技能鉴定考试题库(含答案)
- 8《荷花淀》《小二黑结婚》《党费》群文阅读课件 2024-2025学年统编版高中语文选择性必修中册
- GB/T 10069.3-2024旋转电机噪声测定方法及限值第3部分:噪声限值
- DL∕ T 1060-2007 750KV交流输电线路带电作业技术导则
- 汛期安全隐患重点排查清单
- JB-T 12192-2015 深锥浓缩机介绍
评论
0/150
提交评论