AVR矩阵键盘程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AVR矩阵键盘程序
搞了一顿竟然连矩阵键盘的程序都不会写do { i=(i>7); PORTD=i;
DDRD=0X0F;// key=PIND;//不论如何配置DDxn,都可以通过读取PINxn 寄存
器来获得引脚电平j=key&0xf0; }while(j==0xf0);//直到发现按键按下。
若没有找
到按键按下的,继续循环
i 的初值0x7f。
i=(i>7);之后。
i=1111 1110b
第二次,i= 1111 1101b
保证只有一位为0
下面是程序,写得很巧妙
#include #include #define uchar unsigned char#define uint unsigned int#pragma data:code //save to areas of programconst table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,
0x39,0x5e,0x79,0x71,0}; void delay(uint ms){ uint i,j;for(i=0;i>7); PORTD=i; DDRD=0X0F; key=PIND; j=key&0xf0; }while(j==0xf0); while(key_press()); switch(key) { case 0x7e: code=0;break; case 0xbe: code=1;break; case 0xde: code=2;break; case 0xee: code=3;break; case 0x7d: code=4;break; case
0xbd:
code=5;break; case 0xdd: code=6;break; case 0xed: code=7;break; case 0x7b: code=8;break; case 0xbb: code=9;break; case 0xdb: code=10;break; case
0xeb:
code=11;break; case 0x77: code=12;break; case 0xb7: code=13;break; case
0xd7:
code=14;break; case 0xe7: code=15;break; } }return code;}
void main(){ uchar s; show_init();while(1){ if(key_press()) { s=key_scan(); show(0,s); }}}
tips:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。