矩阵键盘单个数码管显示C语言程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code_h,code_l; //定义行扫描码,列检测数据
uchar tmp,keyvalue; //定义接收键值
/*函数说明*/
void delay(void);
if((P1&0XF0)!=0XF0) //如果P1.4~P1.7不全为1,该行有按键按下
{code_l=(P1&0XF0|0X0F); //保留P1口高4位,低4位变为1,作为列值
keyvalue=(~code_h)+(~code_l); //键编码=行扫描值+列扫描值,返回主程序
return (keyvalue) ;
{delay(); //延时消抖动
if((P1&0XF0)!=0XF0) //重读高4位,若还是不全为1,定有键按下
{code_h=0XFE; //P1.0置为0,开始行扫描
while ((code_h&0X10)!=0XF0) //判断是否为最后一行,否则继续扫描
{P1=code_h; //P1口输出行扫描值
{uchar i;
for(i=0;i<200;i++){}
}
/*键盘扫描函数*/
uchar keyscan(void)
{uchar code_h; //行扫描
uchar code_l; //列扫描
P1=0XF0; //P1.0~P1.3置0,准备读列状态
if((P1&0XF0)!=0XF0) //如果P1.4~P1.7不全为1,可能有键按下
case 0x18: P0=0x4f; break; //3
case 0x21: P0=0x66; break; //4
casHale Waihona Puke Baidu 0x22: P0=0x6d; break; //5
case 0x24: P0=0x7d; break; //6
case 0x28: P0=0x07; break; //7
case 0x41: P0=0x7f; break; //8
case 0x42: P0=0x67; break; //9
case 0x44: P0=0x77; break; //a
case 0x48: P0=0x7c; break; //b
case 0x81: P0=0x39; break; //c
uchar keyscan();
/*主函数*/
void main () //键值处理
{
while(1)
{
tmp=keyscan();//调用键盘扫描程序
switch(tmp)
{ case 0x11: P0=0x3f; break; //0
case 0x12: P0=0x06; break; //1
case 0x14: P0=0x5b; break; //2
case 0x82: P0=0x5c; break; //d
case 0x84: P0=0x79; break; //e
case 0x88: P0=0x71; break; //f
case 0x00: ; break;
default:P0=0x00;
}
delay();
}
}
/*延时函数*/
void delay(void)
while((P1&0XF0)!=0XF0); //等待按键释放
}
else //该行没按键按下,左移,扫描下一行
code_h=(code_h<<1)|0X01;
}
}
}
return(0x00); //无按键按下,返回0
}
相关文档
最新文档