




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一 按键行列扫描与蜂鸣器 1 技术体会 在行列式扫描结构的薄膜按键里 干扰很大 按键扫描程序非常讲究 尤 其是去抖动的处理 2 功能需求 每按一个按键 蜂鸣器就响一次 3 硬件原理 a 用 4 个 IO 来做 2X2 按键行列扫描 其中作为输入的 2 个 IO 口必须接上拉电阻 20K 左右 b 用 1 个 IO 经过 8050 三极管来驱动有源蜂鸣器 有源蜂鸣器通电就一直响 断电就 停止 而无源蜂鸣器是要靠断断续续的开关信号来驱动才能响 就是要频率来驱动 4 源码适合的单片机 PIC18F4620 晶振为 22 1184MHz 5 源代码讲解如下 include 包含芯片相关头文件 补充说明 吴坚鸿程序风格是这样的 凡是输出 IO 后缀都是 dr 凡是输入的 IO 后缀都 是 sr define beep dr LATA1 蜂鸣器输出 define key dr1 LATB3 2X2 按键行输出 define key dr2 LATB4 2X2 按键行输出 define key sr1 RB6 2X2 按键行输入 define key sr2 RB7 2X2 按键行输入 补充说明 吴坚鸿程序风格是这样的 凡是做延时计数阀值的常量 前缀都用 cnt 表示 define cnt delay cnt1 25 按键去抖动延时阀值 define cnt voice time 60 蜂鸣器响的声音长短的延时阀值 void delay1 unsigned int de 小延时程序 时间不宜太长 因为内部没有喂看门狗 补充说明 吴坚鸿程序风格是这样的 凡是按键扫描函数都放在定时中 断里 凡是按键服务程序都是放在 main 函数循环里 有人说不应该把子程序 放在中断 里 别听他们 信鸿哥无坎坷 void key scan 按键扫描函数 放在定时中断里 void key service 按键服务函数 放在 main 函数循环里 补充说明 吴坚鸿程序风格是这样的 凡是 switch 语句括号里面的变量名 后缀都用 step 表示 unsigned char key step 1 按键扫描步骤变量 在 switch 语句的括号里 补充说明 吴坚鸿程序风格是这样的 凡是按键或者感应输入的自锁变量名 后缀都用 lock 表示 unsigned char key lock1 0 按键自锁标志 补充说明 吴坚鸿程序风格是这样的 凡是计数器延时的变量 后缀都用 cnt 表示 unsigned int delay cnt1 0 延时计数器的变量 unsigned int voice time cnt 蜂鸣器响的声音长短的计数延时 补充说明 吴坚鸿程序风格是这样的 凡是做类型的变量的分类 后缀都用 sec 表示 Unsigned char key sec 0 哪个按键被触发 主程序 main ADCON0 0 x00 ADCON1 0 x0f 全部为数字信号 ADCON2 0 xa1 右对齐 RBPU 0 上拉电阻 SSPEN 0 决定 RA5 不作为串口 TRISB3 0 配置按键行扫描 IO 为输出 TRISB4 0 配置按键行扫描 IO 为输出 TRISB6 1 配置按键列扫描 IO 为输入 TRISB7 1 配置按键列扫描 IO 为输入 T1CON 0 x24 定时器中断配置 TMR1H 0 xF5 TMR1L 0 x5F TMR1IF 0 TMR1IE 1 TMR1ON 1 TMR1IE 1 补充说明 以上的内容为寄存器配置 每种不同的单片机会有点差异 大家不用过度关注以上寄存器的配置 只要知道有这么一回事即可 beep dr 0 关蜂鸣器 上电初始化 IO while 1 CLRWDT 喂看门狗 大家不用过度关注此行 key service 按键服务 void key scan 按键扫描函数 补充说明 如果中断一次就把所有的按键都扫描完 中断占用的时间片就会太多 势 必会影响 main 函数里其他子程序的运行 为了避免一口气把所 的按键都扫描完 此 处用 switch 语句把 4 个按键分成 2 等分 一次中断只扫描 2 个按键 switch key step 按键扫描步骤 case 1 扫描 1 号键 2 号键 key dr1 0 按键行扫描输出第一行低电平 key dr2 1 delay1 40 小延时 等待列输入的信号稳定 但不是传统的 去抖动延时 if key sr1 1 如果没有按键按下 下一个中断扫描下 2 个 按键 key lock1 0 按键自锁标志清零 delay cnt1 0 按键去抖动延时计数器清零 此行非常巧妙 Else if key sr1 0 延时计数器 补充说明 有按键触发之后 不要马上响应 要延时一段时间去抖动 此处本人设计非常 巧妙 很多人仅仅知道按键延时的时候要保证还能去处理别的程序 这样是还不够的 在延时去抖动的时候 还必须要监控延时这段时间里 按键 IO 输入口是否会由于受到某 种干扰突然由低变成高 如果一旦变成高 那么延时计数器 delay cnt1 必须重新清零 我当年就是因为这样处理 把卖给富士康 100 台受干扰死机的设备修好了 老板马上 给我加薪 1000 元 if delay cnt1 cnt delay cnt1 延时计数器超过一定的数值 delay cnt1 0 key lock1 1 自锁按键置位 避免一直触发 只有松开按键 此标志位才会被清零 key sec 1 触发 1 号键 else if key sr1 1 if delay cnt1 cnt delay cnt1 delay cnt1 0 key lock1 1 自锁按键置位 避免一直触发 key sec 2 触发 2 号键 break case 2 扫描 扫描 3 号键 4 号键 key dr1 1 key dr2 0 按键行扫描输出第二行低电平 delay1 40 if key sr1 1 key lock1 0 delay cnt1 0 Else if key sr1 0 if delay cnt1 cnt delay cnt1 delay cnt1 0 key lock1 1 key sec 3 触发 3 号键 else if key sr1 1 if delay cnt1 cnt delay cnt1 delay cnt1 0 key lock1 1 自锁按键置位 避免一直触发 key sec 4 触发 4 号键 break if key step 2 第 1 组按键与第 2 组按键反复轮流扫描 key step 1 void key service 按键服务函数 switch key sec 按键服务状态切换 case 1 1 号键 补充说明 voice time cnt 只要不为 0 蜂鸣器就会响 中断里判断 voice time cnt 不为 0 时 会不断自减 一直到它为 0 时 自动把蜂鸣器关闭 voice time cnt cnt voice time 蜂鸣器响 滴 一声就停 key sec 0 相应完按键处理程序之后 把按键选择变量清 零 避免一直触发 break case 2 2 号键 voice time cnt cnt voice time 蜂鸣器响 滴 一声就停 key sec 0 相应完按键处理程序之后 把按键选择变量清 零 避免一直触发 break case 3 3 号键 voice time cnt cnt voice time 蜂鸣器响 滴 一声就停 key sec 0 相应完按键处理程序之后 把按键选择变量清 零 避免一直触发 break case 4 4 号键 voice time cnt cnt voice time 蜂鸣器响 滴 一声就停 key sec 0 相应完按键处理程序之后 把按键选择变量清 零 避免一直触发 break 中断 void interrupt timer1rbint void if TMR1IE 1 定时中断标志位关闭 TMR1ON 0 定时中断开关关闭 key scan 按键扫描函数 if voice time 控制蜂鸣器声音的长短 beep dr 1 蜂鸣器响 voice time cnt 蜂鸣器响的声音长短的计数延时 else beep dr 0 蜂鸣器停止 TMR1H 0 xF5 重新设置定时时间间隔 TMR1L 0 x5F TMR1ON 1 定时中断开关打开 void delay1 unsigned int de unsigned int t for t 0 t de t 6 小结 以上是我常用的编程结构 后续我做的所有项目基本上是这样一种编程结构 这一节技 术上要特别重视按键扫描 有按键触发之后 不要马上响应 要延时一段时间去抖动 此 处本人设计非常巧妙 很多人仅仅知道按键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时政知识培训方案策划课件
- 早期阅读课件
- 纪念白求恩的课件
- 早教小猫咪主题运动课件
- 史前文明探秘教学教案:历史与考古知识普及
- 2025年软件质量工程师全国计算机技术与软件专业技术资格(水平)考试试卷
- 鲸的奥秘:五年级科学知识与生物种类探索教案
- 2025年砌筑工(中级)职业技能鉴定模拟试题库
- 纪委业务知识培训目的课件
- 钦州2024年数学试卷
- 出货管理实施手册标准版
- 2000立方米液化石油气球罐设计
- 心肺复苏术英文课件
- 绿色简历封面小升初通用学生个人简历自荐信Word模板
- 临床实践指南的制定与应用
- 米线加工坊管理制度
- 文化长廊、荣誉墙施工方案(技术方案)
- 【人教部编版语文五年级下册】全册课内阅读(附答案)共计30篇
- 自动喷水灭火系统调试记录
- 更换双电源更换施工方案
- 煤化工气化工艺系统知识课件
评论
0/150
提交评论