单片机键盘扫描程序与原理图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void keyscan(void) { temp = 0; P1=0xF0; //高四位输入 行为高电平 列为低电 delay(1); //延时 temp=P1; //读P1口 temp=temp&0xF0; //屏蔽低四位 temp=~((temp>>4)|0xF0); if(temp==1) // p1.4 被拉低 h=1; else if(temp==2) // p1.5 被拉低 h=2; else if(temp==4) // p1.6 被拉低 h=3; else if(temp==8) // p1.7 被拉低 h=4; dis_buf = h; dis_buf = dis_buf & 0x0f; // else // key=16; P1=0x0F; //低四位输入 列为高电平 行为低电平 delay(1); //延时 temp=P1; //读P1口 temp=temp&0x0F; temp=~(temp|0xF0); if(temp==1) //p1.0 被拉低 l=1; else if(temp==2) //p1.1 被拉低 l=2; else if(temp==4) //p1.2 被拉低 l=3; else if(temp==8) //p1.3 被拉低 l=4; //else // key=16;
// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0 /************************************************************* * * * 延时子程序 * * * *************************************************************/ void delay(uchar x) { uchar j; while((x--)!=0) //CPU执行x*12次,x=10 { for(j=0;j<125;j++) {;} } } /************************************************************* * * * 键扫描子程序 (4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行 * * P1.1 P1.2 P1.3为列 * * * *************************************************************/
#include <reg51.h> #define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char #define uint unsigned int //宏的定义变量类型 uint 代替 unsigned int uchar dis_buf,dis_buf1; //显示缓存 uchar temp; uchar l,h; //键顺序吗 void delay0(uchar x); //x*0.14MS
dis_buf1= l; //键值入显示缓存 dis_buf1= dis_buf1 & 0x0f; } /************************************************************* * * *判断键是否按下 * * * *************************************************************/ void keydown(void) { P2=0xF0; P3=0xf0; //将高4位全部置1 低四位全部置0 if(P1!=0xF0) //判断按键是否按下 如果按钮按下 会拉低P1其中的一 个端口 { keyscan(); //调用按键扫描程序 } } /************************************************************* * * * 主程序 * * * *************************************************************/ main() { P1=0xFF; //置P0口 P2=0xFF; P3=0xff; //置P1口 delay(10); //延时 while(1) {
keydown(); //调用按键判断检测程序 P2 = LED7Code[dis_buf%16]&0x7f; P3= LED7Code[dis_buf1%16]&0x7f; //LED7 0x7f为小数点 和共阳此处也是不一样; %16表示输出16进制 delay(150); } }
共阴
Leabharlann Baidu