矿物棉厂家
免费服务热线

Free service

hotline

010-00000000
矿物棉厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

单片机8255键盘扫描c51程序

发布时间:2020-07-21 17:41:55 阅读: 来源:矿物棉厂家

51单片机+8255芯片的键盘扫描函数,只做了简单的输入输出,利用P1口控制发光二极管亮,键值为7的话键码是0x07;

本文引用地址:源程序:

#includereg51.h>#includeabsacc.h>#define uchar unsigned char#define uint unsigned int#define LScan XBYTE[0x7f00] //列扫描地址#define HScan XBYTE[0x7f02] //行扫描地址

//延时函数void delay(uint i){uint j; for(j=i;j>0;j--) { ; }}

//检测有无按键按下的函数uchar CheckKey() //有按键按下返回0xff,无则返回0{ uchar i;LScan =0x00; i=(HScan 0x0f); if(i==0x0f) return(0); else return(0xff);}//********键盘扫描子函数***********uchar KeyScan() { //无按键返回oxff,有则返回键码 uchar ScanCode;uchar CodeValue;uchar k;uchar i,j;if(CheckKey()==0) return(0xff); //无按键,返回0xffelse { delay(200); //延时 if(CheckKey()==0) return(0xff); //无按键,返回0xff else { ScanCode=0x01; //设置列扫描码,初始值最低位为0 for(i=0;i8;i++) //逐列扫描8次 { k=0x01; //行扫描码赋初值 LScan=~ScanCode; //送列扫描码 CodeValue=i; //键码就是i的值,第零行的每列键码为0,1,2,……7,和i值一致 for(j=0;j4;j++) { if((HScan k) ==0) //是否在当前列, { while(CheckKey()!=0); //若是,则等待按键释放 return(CodeValue); //返回键码 } else //否则,键码加8,同一列的每一行上的键码恰好相差8 { //列扫描码k右移一位,扫描下一行 CodeValue+=8; k=1; } } ScanCode=1; //每一行都扫描完,列扫描码右移一位,扫描下一列 } } }}

main(){ uchar Key; P1=0x00; //初始,先关闭数码管 XBYTE[0x7f03]=0x81; //8255初始化,设置A口输出,C口低4位输入 while(1) { Key=KeyScan(); if(Key!=0xff) P1=Key; }}

DIY机械键盘相关社区:机械键盘DIY

郑州隆胸

海口隆胸价格

石家庄吸脂价格