AVR键盘设计 (2)_第1页
AVR键盘设计 (2)_第2页
AVR键盘设计 (2)_第3页
AVR键盘设计 (2)_第4页
AVR键盘设计 (2)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

基于基于 AVR 单片机的键盘设计单片机的键盘设计 一 设计任务 一 设计任务 实现按键对外部器件的控制 二 设计要求 二 设计要求 1 实现单片机对两位数码管的控制 2 实现按键对数码管的自加功能 自动加 1 加 2 加 3 3 实现按键中断数码管工作的功能 3 所需原件 所需原件 原件名称数量 9cm 15cm 的实验电路板 1 电源插座1 470uF 电容2 104pF 电容2 L7805 稳压器1 8M 石英晶体1 22pF 电容2 ATmega16 单片机1 SPI 程序下载端口1 LED 发光二极管2 按键4 拨动式开关1 120 电阻 1 5 1k 电阻 1 共阴型数码管 2 集成电路插座 40 脚 1 数据下载线 1 排针 跳线若干 4 设计步骤设计步骤 硬件设计硬件设计 设计要点设计要点 1 但键盘中按键数量较多时 为了减少对 I O 口的占用 通常用将按键排 列成矩阵形式 2 如其原理图所示 首先由一个 I O 口来控制其列电平 与此同时对各行 对应的 I O 口依次进行检测 当符合检测条件时 即确定该按键按下 而后进 行对应的软件操作 3 如图 5V 电源经过 5 1k 和 120 的电阻接到 PD0 口 设置 PD0 口为 列电平 在 5 1k 和 120 的电阻之间分别将四个按键的一端连接起来 另一 端则分别于 PD1 PD2 PD3 PD4 相连 电路图电路图 行扫描法也称为逐行扫描法 其按键识别过程如下 首先将行线 PD1 PD4 设置为低电平输出 然后读 PD0 中有无低电平出 现 如果有低电平出现 则说明有按键按下 如果读到的是高电平 则表示无 按键按下 在确定有按键按下后 则要确定具体是哪个按键 其思路是依次将行 设置为低电平 并检测列线的输入 进而确认具体的按键位置 当 PD2 输出低 电平时 PD1 1 PD2 0 PD3 1 PD4 1 测得 PD0 为低电平 PD0 0 则可以 确认是 S5 按下 PCB 图 未铺地 图 未铺地 PCB 图 已铺地 图 已铺地 实物图实物图 软件设计软件设计 功能 功能 设计简单的程序 使得按键操作可以控制数码管的递加数字 并可以控 制数码管再任何时候停止递加 程序说明 程序说明 1 首先要对数码管动态扫描子程序进行编程 2 对各个按键的状态进行扫描 确定被按下的按键 3 对工作停止按键的程序进行编程 使其能够使数码管停止工作 而且再次工作时 数码管数字从零开始计数 程序内容 程序内容 This program was produced by the CodeWizardAVR V1 25 7a Evaluation Automatic Program Generator Copyright 1998 2007 Pavel Haiduc HP InfoTech s r l Project Version Date 2011 11 8 Author Freeware for evaluation and non commercial use only Company Comments Chip type ATmega16 Program type Application Clock frequency 4 000000 MHz Memory model Small External SRAM size 0 Data Stack size 256 include include define Key mask 0b00000001 flash unsigned char led 7 10 0 x3F 0 x06 0 x5B 0 x4F 0 x66 0 x6D 0 x7D 0 x07 0 x7F 0 x6F flash unsigned char position 2 0 xFD 0 xFE unsigned char dis buff 2 unsigned char posit digital 0 key value key line void display void 数码管动态扫描显示子程序 unsigned char i for i 0 i 2 posit 0 delay ms 10 void digital to disbuff void 将数据送至缓存区子程序 unsigned char i 0 dis buff i digital 10 dis buff i digital 10 void main void unsigned char key temp unsigned int i PORTA 0 x00 DDRA 0 xFF PORTC 0 x03 DDRC 0 x03 PORTD 0 x1F DDRD 0 x1E for i 0 i 2 i dis buff i 0 while 1 key line 0b00000010 for i 1 i 4 i PORTD key line PORTD key line key value Key mask if key value Key mask 判定是否有按键按下 key line 100 digital 0 key line 0b00010000 PORTD key line PORTD key line key temp Key mask if key temp Key mask 检测复位键是否按下 digital 0 PORTA 0 x00 break if key line 0b00000100 如果是第二个键按下 while 1 digital to disbuff display digital if digital 100 digital 0 key line 0b00010000 PORTD key line PORTD key line key temp Key mask if key temp Key mask 检测复位键是否按下 digital 0 PORTA 0 x00 break if key line 0b00001000 如果是第三个键按下 while 1 digital to disbuff display digital 2 if digital 100 digital 0 key line 0b00010000 PORTD key line PORTD key line key temp Key mask if key temp Key mask 检测复位键是否按下 digital 0 PORTA 0 x00 break 五 键盘操作的测试结果五 键盘操作的测试结果 当按下第一个键时 数码管自动加 1 至 99 而后自动返回零继续自加 当 按下第二个键时 数码管自动加 2 至 98 而后自动返回零继续自加 当按下第 三个键是 数码管自动加 3 至 99 而后自动返回零继续自加 当按下复位键是 在自加中的数码管自动熄灭 再次操作 1 2 3 键时 数码管从零自加 数码管自加状态数码管自加状态 右面的小面板上有四个按键 其中三个分别控制数码管自动加 1 加 2 加 3 另外一个按键对数码管进行复位操作 复位数码管复位数码管 当按下去复位键时 数码管停止工作 六 总结六 总结 通过本次作业 最大的收获是掌握了扫描键盘的工作原理 以及两位数码 管的工作原理和他们电路焊接 并锻炼了自己独立编程能力 不足之处是自己 看的程序太少 许多东西还是要受别人所编程序的启发才能编写出来 另外 在作业中的程序编写上 首先使用中断来进行对数码管的控制的 但缺点是不能进行复位操作 只能关闭电源 重新启动单片机才能使得其他按 键起作用 后来

温馨提示

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

评论

0/150

提交评论