赞
踩
提示:可能写的不是特别好,请大家原谅。
随着学习的不断发展,为了将这些功能集成到一起,通过矩阵键盘实现13种功能。
led,可以看原理图:
大家可以看图可知为共阳极的电路,所以我们只需要给P2口附一个低电平,就会让led灯亮。
然后给大家看一下其他的原理图:
代码如下(示例):
void delay(unsigned int i) { while(--i!=0); }
void init60s()
{
TMOD = 0X01;
TH0= (65536-10000)/256;
TL0= (65536-10000)%256;
TR0=1;
ET0=1;
EA=0;
}
void init_60s() interrupt 1
{
TR0=0;
TH0= (65536-10000)/256;
TL0= (65536-10000)%256;
coun1++;
if(coun1==100)
{
if(KeyNum==9){unx++;if(unx==61)unx=0;}
if(KeyNum==10){unx1--;if(unx1<0)unx1=60;}
coun1=0;
}
TR0=1;
}
void ScanSMG(unsigned char n,unsigned char m) //数码管显示
{
switch(n)
{
case 0:P2_4=1;P2_3=1;P2_2=1;break;
case 1:P2_4=1;P2_3=1;P2_2=0;break;
case 2:P2_4=1;P2_3=0;P2_2=1;break;
case 3:P2_4=1;P2_3=0;P2_2=0;break;
case 4:P2_4=0;P2_3=1;P2_2=1;break;
case 5:P2_4=0;P2_3=1;P2_2=0;break;
case 6:P2_4=0;P2_3=0;P2_2=1;break;
case 7:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=smg[m];
delay(5);
P0=0x00;
}
void key() //矩阵键盘
{
P1=0xf0; //IO口全部初始化为高电平
R1=0;R2=1;R3=1;R4=1;
if(C1==0){while(C1==0);KeyNum=1;}
if(C2==0){while(C2==0);KeyNum=5;}
if(C3==0){while(C3==0);KeyNum=9;}
if(C4==0){while(C4==0);KeyNum=13;}
P1=0xF0; //IO口全部初始化为高电平
R1=1;R2=0;R3=1;R4=1;
if(C1==0){while(C1==0);KeyNum=2;}
if(C2==0){while(C2==0);KeyNum=6;}
if(C3==0){while(C3==0);KeyNum=10;}
if(C4==0){while(C4==0);KeyNum=14;}
P1=0xF0; //IO口全部初始化为高电平
R1=1;R2=1;R3=0;R4=1;
if(C1==0){while(C1==0);KeyNum=3;}
if(C2==0){while(C2==0);KeyNum=7;}
if(C3==0){while(C3==0);KeyNum=11;}
if(C4==0){while(C4==0);KeyNum=15;}
P1=0xF0; //IO口全部初始化为高电平
R1=1;R2=1;R3=1;R4=0;
if(C1==0){while(C1==0);KeyNum=4;}
if(C2==0){while(C2==0);KeyNum=8;}
if(C3==0){while(C3==0);KeyNum=12;}
if(C4==0){while(C4==0);KeyNum=16;}
}
代码如下(示例):
void panduan() { key(); switch(KeyNum) { case 1:for(i=0;i<8;i++){P2=~(0x01<<i);key();delay(20000);}break; case 2:for(i=0;i<8;i++){P2=~(0x80>>i);key();delay(20000);}break; case 3:for(i=0;i<4;i++){P2=(~(0x01<<i))&(~(0x80>>i));key();delay(20000);};break; case 4:for(i=0;i<=4;i++){P2=(~(0x08<<i))&(~(0x10>>i));key();delay(20000);}break; case 5:P2=0xaa;delay(20000);P2=~0xaa;delay(20000);key();break; case 6:P2=0x0f;delay(20000);P2=~0x0f;delay(20000);key();break; case 7:ScanSMG(1,max);key();break; case 8:ScanSMG(0,1);ScanSMG(1,4);ScanSMG(2,4);ScanSMG(3,2);ScanSMG(4,0);ScanSMG(5,5);ScanSMG(6,0);ScanSMG(7,7);break; case 9:unx1=60;EA=1;ScanSMG(0,unx/10);ScanSMG(1,unx%10);break; case 10:unx=0;EA=1;ScanSMG(0,unx1/10);ScanSMG(1,unx1%10);break; case 11: P1_0=1;delay(99);P1_0=0;delay(1);break; case 12: P1_0=1;delay(50);P1_0=0;delay(50);break; case 13: P1_0=1;delay(30);P1_0=0;delay(70);break; } }
这就是封装好的一些函数,大部分函数。望大家可以给我提一点建议。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。