完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
//**********延时函数*******// void delay_ms(unsigned int n) { unsigned int i=0,j=0; for(i=0;i } //*******按键二维数组*******// unsigned char key [4][4]= { 1,2,3,4, 5,6,7,8, 9,10,11,12, 13,14,15,16, }; //*********主函数**********// void main() { int row,col,temp; while(1) { //****扫描第四列****// P2=0x7f; col=3; P2=0xff; temp=P2; temp=temp&0xf0; switch(temp) { case 0xfe:row=0;break; case 0xfd:row=1;break; case 0xfb:row=2;break; case 0xf7:row=3;break; } //****扫描第三列****// P2=0xbf; col=2; P2=0xff; temp=P2; temp=temp&0xf0; switch(temp) { case 0xfe:row=0;break; case 0xfd:row=1;break; case 0xfb:row=2;break; case 0xf7:row=3;break; } //****扫描第二列***// P2=0xdf; col=1; P2=0xff; temp=P2; temp=temp&0xf0; switch(temp) { case 0xfe:row=0;break; case 0xfd:row=1;break; case 0xfb:row=2;break; case 0xf7:row=3;break; } //******扫描第一列***// P2=0xef; col=0; P2=0xff; temp=P2; temp=temp&0xf0; switch(temp) { case 0xfe:row=0;break; case 0xfd:row=1;break; case 0xfb:row=2;break; case 0xf7:row=3;break; } P3=key [row][col]; } } |
|
相关推荐
8个回答
|
|
网上一大把例程啊
|
|
|
|
直接发给你一个头文件和源文件好了。直接调用。
#ifndef _arraykeys_h_ #define _arraykeys_h_ #define ARRAYKEYSPORT P3 extern unsigned char arraykeys(void); #endif |
|
|
|
#include
#include"arraykeys.h" void delay5ms(void) { unsigned char a,b; for(b=15;b>0;b--) for(a=152;a>0;a--); } unsigned char arraykeys(void) { unsigned char x,y,z=0; ARRAYKEYSPORT=0xf0;//端口置11110000 if((ARRAYKEYSPORT&0xf0)!=0xf0) { delay5ms(); if((ARRAYKEYSPORT&0xf0)!=0xf0) { x=ARRAYKEYSPORT&0xf0;//保存反列态 ARRAYKEYSPORT=x|0x0f;//端口反置00001111 y=ARRAYKEYSPORT&0x0f;//保存反行态 for(;(ARRAYKEYSPORT&0x0f)!=0x0f;)//按键松手死循环 { //此处可以添加按键松手死循环时候的可执行代码 } z=x+y;//行列值合并 } } switch(z) { //第一行 case 0xee: return 0x01; break; case 0xde: return 0x02; break; case 0xbe: return 0x03; break; case 0x7e: return 0x04; break; //第二行 case 0xed: return 0x05; break; case 0xdd: return 0x06; break; case 0xbd: return 0x07; break; case 0x7d: return 0x08; break; //第三行 case 0xeb: return 0x09; break; case 0xdb: return 0x0a; break; case 0xbb: return 0x0b; break; case 0x7b: return 0x0c; break; //第四行 case 0xe7: return 0x0d; break; case 0xd7: return 0x0e; break; case 0xb7: return 0x0f; break; case 0x77: return 0x10; break; default:return 0;break; } } |
|
|
|
刚刚买的板子,刚刚近的论坛,菜鸟一枚,希望大家多多指教。
|
|
|
|
|
|
|
|
程序 没写对,不能扫描是一定的
|
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2951 浏览 16 评论
3455 浏览 1 评论
8984 浏览 16 评论
4045 浏览 18 评论
1094浏览 3评论
567浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
564浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2299浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1855浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 09:33 , Processed in 1.335878 second(s), Total 116, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号