按键
独立按键
独立按键按照小蜜蜂的题来做。
首先还是先看看原理图需要用到Y4。
首先把跳帽接对,然后开始写程序
#include <STC15F2K60S2.H>
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
sbit key7=P3^0;
sbit key6=P3^1;
sbit key5=P3^2;
sbit key4=P3^3;
void Delay1ms() //@12.000MHz由isp生成的1ms延时代码
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void delayms(unsigned int ms)
{
unsigned int i;
for(i=0;i<ms;i++)
{
Delay1ms();
}
}
void hc38(unsigned int i)
{
if(i==4)
{
P2=(P2&0x1f)|0x80;
}
else if(i==5)//1010
{
P2=(P2&0x1f)|0xa0;
}
else if(i==6)//1100
{
P2=(P2&0x1f)|0xc0;
}
else if(i==7)//1110
{
P2=(P2&0x1f)|0xe0;
}
}
void key()
{
if(key4==0)
{
delayms(20);//消抖,时间按实际情况来定
if(key4==0)
{
led7=0;
while(key4==0);//等待松开
led7=1;
}
}
if(key5==0)
{
delayms(20);
if(key5==0)
{
led6=0;
while(key5==0);
led6=1;
}
}
if(key6==0)
{
delayms(20);
if(key6==0)
{
led5=0;
}
while(key6==0);
led5=1;
}
if(key7==0)
{
delayms(20);
if(key7==0)
{
led4=0;
}
while(key7==0);
led4=1;
}
}
void main()
{
hc38(4);
while(1)
{
key();
}
}
矩阵键盘
用led灯来显示键盘说按下的数字,先调整跳帽
#include <STC15F2K60S2.H>
void Delay1ms() //@12.000MHz
{
unsigned char i, j;
i = 12;
j = 169;
do
{
while (--j);
} while (--i);
}
void delay(unsigned int ms)
{
unsigned int i;
for(i=0;i<ms;i++)
{
Delay1ms();
}
}
void hc38(unsigned int num)
{
if(num==4)
{
P2=(P2&0x1f)|0x80;
}
else if(num==5)
{
P2=(P2&0x1f)|0xa0;
}
else if(num==6)
{
P2=(P2&0x1f)|0xc0;
}
else if(num==7)
{
P2=(P2&0x1f)|0xe0;
}
}
int sqkey()//仿照江科大写的,矩阵键盘
{
P3=0xff;
P30=0;
if(P37==0){delay(20);while(P37==0);return 1;}
if(P36==0){delay(20);while(P36==0);return 2;}
if(P35==0){delay(20);while(P35==0);return 3;}
if(P34==0){delay(20);while(P34==0);return 4;}
P3=0xff;
P31=0;
if(P37==0){delay(20);while(P37==0);return 5;}
if(P36==0){delay(20);while(P36==0);return 6;}
if(P35==0){delay(20);while(P35==0);return 7;}
if(P34==0){delay(20);while(P34==0);return 8;}
P3=0xff;
P32=0;
if(P37==0){delay(20);while(P37==0);return 9;}
if(P36==0){delay(20);while(P36==0);return 10;}
if(P35==0){delay(20);while(P35==0);return 11;}
if(P34==0){delay(20);while(P34==0);return 12;}
P3=0xff;
P33=0;
if(P37==0){delay(20);while(P37==0);return 13;}
if(P36==0){delay(20);while(P36==0);return 14;}
if(P35==0){delay(20);while(P35==0);return 15;}
if(P34==0){delay(20);while(P34==0);return 16;}
}
void main()
{
unsigned int number;
number=0;
hc38(4);
while(1)
{
number=sqkey();
P0=~number;//用led来显示数字
}
}