基于51单片机的矩阵键盘

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
case 3:wei_1=1;wei_2=0;wei_3=1;wei_4=1;break;
case 4:wei_1=0;wei_2=1;wei_3=1;wei_4=1;break;
}
delay_ms(2)
P0=0x00;
//每次显示完后都要消隐,这非常重要!这句一缺数码管就会闪屏
wei_1=1;wei_2=1;wei_3=1;wei_4=1;
if(temp==1)key=key+0;
else if(temp==2)key=key+1;
if(temp==4)key=key+2;
else if(temp==8)key=key+3;
}
void led_init()
{
wei_1=1;wei_2=1;wei_3=1;wei_4=1;
P0=0x00;
break;
}
if(key_putdown())//这个if是转到第一个while的必要条件
break;
}
}
}
}
void main()
{
wei=1;
control=0;
led_init();
if(key_putdown())
while(1)
//这里用了两个while(1)嵌套
{
key_scan();
key_tem[control++]=key;
if(control==5){led_init();control=0;}
}
void led_disp(uchar wei2,uchar num)
{
P0=table[num];
switch(wei2)
//这个switch用来控制数码管的位选
{
case 1:wei_1=1;wei_2=1;wei_3=1;wei_4=0;break
case 2:wei_1=1;wei_2=1;wei_3=0;wei_4=1;break;
sbit wei_1=P2^0;
sbit wei_2=P2^1;
sbit wei_3=P2^2;
sbit wei_4=P2^3;
uchar
code
table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0x9c,0xf0,0xee,0x9e,0x8e,0x6e};
void led_init();
uchar key_putdown();
void int z)
{ uint i;
while(z--)
for(i=110;i>0;i--);
}
uchar key_putdown()
{
P1=0xf0;
if(P1==0xf0)
if(temp==1)key=0;
else if(temp==2)key=4;
if(temp==4)key=8;
else if(temp==8)key=12;
P1=0xff;
//P1口本来是置0xf0,若要再次赋值则必须先把P1口置高,否则它会变成0x00
P1=0x0f;
temp=P1;
temp=~(temp|0xf0); //这里不需要右移4位了
while(1)
{
switch(control)
//这个switch用来控制数码管显示矩阵键盘已经输入过的值,因为数码管的结构问题,要让它显示已经输入过的值有点麻烦
{
case 1:led_disp(1,key_tem[0]);break;
case 2:led_disp(1,key_tem[0]);led_disp(2,key_tem[1]);break;
_nop_0;
Delay_ms(15);
while(P1==0xf0)
{
_nop_0;
return0;
}
renturn 1;
}
void key_scan()
{
key=0;
temp=0;//temp用来临时存放P1口的两次扫描结果
P1=0xf0;
temp=P1;
temp=~((temp>>4)|0xf0);//temp右移4位再跟0xf0按位或再取反即可得到1,2,4,8中的任一个数,每个数代表一行或一列
基于51单片机的矩阵键盘+数码管电路及c代码(qin)
矩阵键盘+数码管+51单片机+c代码+proteus
调试图(designed by qin)
2014.8.18
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned char
case 3:led_disp(1,key_tem[0]);led_disp(2,key_tem[1]);led_disp(3,key_tem[2]);break;
case4:led_disp(1,key_tem[0]);led_disp(2,key_tem[1]);led_disp(3,key_tem[2]);led_disp(4,key_tem[3]);
//这里是0到9的专门给共阴数码管用的16进制编码还有几个我自己定义的字符
uchar key_tem[4];
//这个数组用来保存矩阵键盘输入的4个键
uchar temp,zi,wei,control;
void delay_ms(uint z);
void led_disp(uchar wei2,uchar num);
相关文档
最新文档