完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
比较常用的3 个IO 口实现6 个按键方便,给初学者参考,实现比较简单测序如下:
/*--------------------------------------------------*/ /* AVR 系统的处理器为: ATMega32 */ /* AVR 系统的晶振频率: 7.3728 Mhz */ /* 作者: xininye */ /* 日期: 2007-08-27 */ /*--------------------------------------------------*/ /* 文件名: KEYPAD.C */ /* 功能: 按键扫描 */ /*--------------------------------------------------*/ #include #include #include "delay.h" #include "uart.h" #include "keypad.h" // ScanKey 按键扫描函数,被定时器0 中断调用 //-----------------------------------------------------------------------------// unsigned char ScanKey(void) { unsigned char key; KEY_DDR = (1< KEY_OUT = ((1< if(!(KEY_IN & (1< key = S_DOWN; return key; } if(!(KEY_IN & (1< key = S_ENTER; return key; } KEY_DDR = (1< KEY_OUT = ((1< if(!(KEY_IN & (1< key = S_LEFT; return key; } if(!(KEY_IN & (1< key = S_ESC; return key; } KEY_DDR = (1< KEY_OUT = ((1< if(!(KEY_IN & (1< key = S_UP; return key; } if(!(KEY_IN & (1< key = S_RIGHT; return key; } return (0); // 扫描不到按键返回 0 } unsigned char key_code = 0; // 存放按键值的全局变量 // GetKey 函数 // 返回当前键值,后清空按键 unsigned char GetKey(void) { unsigned char key; key = key_code; if(key) { key_code = 0; return (key); } else { return 0; } } unsigned char kpush,key_h; unsigned int key_l; #pragma interrupt_handler timer0_ovf_isr:12 //iv_TIM0_OVF void timer0_ovf_isr(void) { unsigned char key; TCNT0 = 0x70; //reload counter value key = ScanKey(); if (key == 0) //按键扫描 { if ((key_l>3)&&(key_l<160)&&(key_h>6)) //释放按键,如果之前按键时间少于1 秒,读入键值 { key_code = kpush; } if ((++key_h)>40)key_h=40; key_l=0; if (key_code>=0x80) key_code=0; //如果之前的按键为长按1 秒,清除键值 } else { kpush = key; key_l++; if ((key_l>160)&&(key_h>6)) //如果按键超过1 秒,键值加0x80 标志长按键 { key_code = kpush|0x80; key_h=0; key_l=0; } } } |
|
相关推荐
|
|
学习了111111111111
|
|
|
|
|
|
比较常用的3 个IO 口实现6 个按键方便
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
3979 浏览 0 评论
8536 浏览 0 评论
5954 浏览 0 评论
4098 浏览 1 评论
5189 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
414浏览 2评论
655浏览 2评论
4761浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
586浏览 1评论
820浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 02:45 , Processed in 0.507198 second(s), Total 54, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号