矩阵键盘 陕科大单片机课设 何攀.docx
《矩阵键盘 陕科大单片机课设 何攀.docx》由会员分享,可在线阅读,更多相关《矩阵键盘 陕科大单片机课设 何攀.docx(14页珍藏版)》请在冰豆网上搜索。
![矩阵键盘 陕科大单片机课设 何攀.docx](https://file1.bdocx.com/fileroot1/2023-1/21/00608395-2725-453a-87ad-f18c351405e3/00608395-2725-453a-87ad-f18c351405e31.gif)
矩阵键盘陕科大单片机课设何攀
主函数
有问题联系qq158936174
#include
#include"zihan.h"
voidmain()
{
while
(1)
{
num=17;
azhi();
bzhi();
gzhi();
while(g==12)
{
if(a==0)
zhishu0();
g==1;
}
num=17;
while(g==13)
{
display0();
}
}
}
封装函数(与主函数放在一个文件夹中即可)
#ifndef__zihan_H
#define__zihan_H
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineweiP2
#defineduanP0
ucharxdatashuju0[10][5]={0};
ucharxdatashuju1[10][5]={0};
ucharnum=17,temp,a=0,b=0,g,bian,t,bian,i,flag0;
ucharcodetable1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xc0,0xbf,0x90
0xc9,0xc7,};
/*h(20)l*/
/*0123456789abcdef-g*/
ucharcodetable2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/*¶¨ÒåÐèÒªµãÁÁµÄÊýÂë¹Ü*/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)//ÑÓ³Ùº¯Êý
for(y=50;y>0;y--);
}
voiddisplay(ucharweil,ucharduanl,bitdp)//ÏÔʾº¯Êý£¨Î»Öã¬Êý¾Ý£¬ÊÇ·ñÓеã¶ù£©
{
if(dp==1)
duan=(table1[duanl]&0x7f);
else
duan=table1[duanl];
wei=table2[weil-1];
delay
(1);
}
voiddisplayhello()//显示hello
{
display(1,20,0);
delay(3);
display(2,14,0);
delay(3);
display(3,21,0);
delay(3);
display(4,21,0);
delay(3);
display(5,0,0);
delay(3);
display(1,18,0);
delay(3);
}
voiddisplayab()//显示前两项
{
display(1,a,0);
delay
(1);
display(2,b,0);
delay
(1);
display(3,18,0);
delay
(1);
}
/*************************
键盘扫描函数
*************************/
ucharkeyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xee:
num=0;
break;
case0xde:
num=1;
break;
case0xbe:
num=2;
break;
case0x7e:
num=3;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xed:
num=4;
break;
case0xdd:
num=5;
break;
case0xbd:
num=6;
break;
case0x7d:
num=7;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xeb:
num=8;
break;
case0xdb:
num=9;
break;
case0xbb:
num=10;
break;
case0x7b:
num=11;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!
=0xf0)
{
temp=P1;
switch(temp)
{
case0xe7:
num=12;
break;
case0xd7:
num=13;
break;
case0xb7:
num=14;
break;
case0x77:
num=15;
break;
}
while(temp!
=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
if((num>=0)&&(num<17))
returnnum;
elsereturn17;
}
voidazhi()
{
while(keyscan()==17)
{
display(1,a,1);//Ñ¡ÔñÊ×λÊý×Öa
delay(5);
a=keyscan();
if(a<=1&&a>=0)
num=16;
elsenum=17;
}
num=17;
}
voidbzhi()
{
while(keyscan()==17)//Ñ¡ÔñµÚ¶þλb
{
display(1,a,0);
delay(5);
display(2,b,1);
b=keyscan();
if(b<=9&&b>=0)
num=16;
elsenum=17;
}
num=17;
}
voidgzhi()
{
while(keyscan()==17)//Ñ¡Ôñ¹¦ÄÜλg
{
displayab();
g=keyscan();
if(g==12||g==13)
num=16;
elsenum=17;
}
num=17;
}
voiddisplaygood()//完成置数显示good
{
displayab();
delay
(2);
display(4,18,0);
delay
(2);
display(5,19,0);
delay
(2);
display(6,0,0);
delay
(2);
display(7,0,0);
delay
(2);
display(8,13,0);
delay
(2);
}
voidzhishu0()//0功能的置数
{
flag0=0;
i=0;
while(flag0==0)
{
while(i==0)
{
bian=keyscan();
displayab();
delay(5);
display(4,bian,1);
delay(5);
shuju0[b][i]=bian;
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;
}
}
num=17;
while(i==1)
{
bian=keyscan();
displayab();
delay(5);
display(4,shuju0[b][0],0);
delay(5);
display(5,bian,1);
delay(5);
shuju0[b][i]=bian;
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;
}
}
num=17;
while(i==2)
{
bian=keyscan();
displayab();
delay(5);
display(4,shuju0[b][0],0);
delay(5);
display(5,shuju0[b][1],0);
delay(5);
display(6,bian,1);
delay(5);
shuju0[b][i]=bian;
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;
}
}
num=17;
while(i==3)
{
bian=keyscan();
displayab();
delay(5);
display(4,shuju0[b][0],0);
delay(5);
display(5,shuju0[b][1],0);
delay(5);
display(6,shuju0[b][2],0);
delay(5);
display(7,bian,1);
delay(5);
shuju0[b][i]=bian;
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;
}
;
}
num=17;
while(i==4)
{
bian=keyscan();
displayab();
delay(5);
display(4,shuju0[b][0],0);
delay(5);
display(5,shuju0[b][1],0);
delay(5);
display(6,shuju0[b][2],0);
delay(5);
display(7,shuju0[b][3],0);
delay(5);
display(8,bian,1);
delay(5);
shuju0[b][i]=bian;
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;num=17;
}
}
while(i==5)
{
displaygood();
if(keyscan()==14)
{
delay(10);
if(keyscan()==14)
i++;
}
}
num=17;
i=0;
flag0=1;
}
}
voiddisplay0()//零功能的显示
{
uchari;
for(i=0;i<5;i++)
{
displayab();
display(4+i,shuju0[b][i],0);
delay(3);
}
}
voiddisplay1()//一功能的显示
{
uchari;
for(i=0;i<5;i++)
{
if(i!
=2)
{
displayab();
display(4+i,shuju1[b][i],0);
delay(3);
}
else
{
displayab();
display(4+i,shuju1[b][i],1);
delay(3);
}
}
}
#endif