中断扫描工作方式键盘程序

上传人:kms****20 文档编号:40202687 上传时间:2018-05-24 格式:DOC 页数:4 大小:34KB
返回 下载 相关 举报
中断扫描工作方式键盘程序_第1页
第1页 / 共4页
中断扫描工作方式键盘程序_第2页
第2页 / 共4页
中断扫描工作方式键盘程序_第3页
第3页 / 共4页
中断扫描工作方式键盘程序_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《中断扫描工作方式键盘程序》由会员分享,可在线阅读,更多相关《中断扫描工作方式键盘程序(4页珍藏版)》请在金锄头文库上搜索。

1、中断扫描工作方式键盘程序中断扫描工作方式键盘程序#include /*定义定义 09,AF 十六个字符的字型码表十六个字符的字型码表*/unsigned char table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71;/*10ms 延时程序延时程序*/void delay10ms(void) unsigned char i,j; for(i=20;i0;i-) for(j=248;j0;j-); /*键盘扫描子程序键盘扫描子程序*/unsigned char scan_key(

2、void) unsigned char n,scan,col,rol,tmp;bit flag=0; /设有键按下标志位设有键按下标志位scan=0xef;P0=0x0f; /P0 口低四位做输入口,先输出全口低四位做输入口,先输出全 1for(n=0;n4;n+) /循环扫描循环扫描 4 列,从列,从 0 列开始列开始P0=scan; /逐列送出低电平逐列送出低电平tmp=P0; /读行值,并取反读行值,并取反tmp=tmpcol=n; /保存列号到保存列号到 colflag=1; /*判断哪一行有键按下,并保存行号到判断哪一行有键按下,并保存行号到 rol*/if(tmp=0x01) ro

3、l=0; break; /第第 0 行有键按下行有键按下else if(tmp=0x02) rol=1; break; /第第 1 行有键按下行有键按下else if(tmp=0x04) rol=2; break; /第第 2 行有键按下行有键按下else if(tmp=0x08) rol=3; break; /第第 3 行有键按下行有键按下elseflag=0;scan=(scan1)+1; if(flag=0)return -1;else return(rol*4+col);void main() P1=0x00;EA=1; /开总中断开总中断EX0=1; /开外部中断开外部中断 0 中断

4、中断IT0=1; /设定外部中断设定外部中断 0 为边沿触发方式为边沿触发方式P0=0x0f; /P0 口高四位为口高四位为 0,用于检测是否有键按下,用于检测是否有键按下while(1); /等待外部中断等待外部中断 0 中断中断/*外部中断外部中断 0 中断服务函数中断服务函数*/void scan_key_led(void) interrupt 0 char k;unsigned char key,tmp;delay10ms(); /延时延时 10ms 去抖去抖P0=0x0f; /所有列输出低电平所有列输出低电平tmp=P0; /再次读键盘状态再次读键盘状态if(tmp!=0x0f)key=scan_key( ); /有键按下,调用键盘扫描程序,并把键有键按下,调用键盘扫描程序,并把键值送值送 keywhile(k!=-1) /判断闭合键是否释放,直到其释放判断闭合键是否释放,直到其释放delay10ms(); /延时等待延时等待k=scan_key( );P1=tablekey; /字型码送字型码送 P1 口,数码管显示被按下键对应口,数码管显示被按下键对应的字符的字符P0=0x0f;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号