新手一枚,單片機獨立按鍵接口設計
電路原理圖如下:
仿真圖
k1 流水燈正向點亮
k2 流水燈反向點亮
k3 高低4個交替點亮
k4 8個閃爍
程序:
#include <reg51.h>
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
unsigned char keyval;
void delay10ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<100;j++);
}
void keyscan(void)
{
P1=0xff;
if((P1&0x0f)!=0x0f)
{
delay10ms();
if(K1==0) keyval=1;
if(K2==0) keyval=2;
if(K3==0) keyval=3;
if(K4==0) keyval=4;
}
}
void delay(void)
{
unsigned char i,j;
for(j=0;j<220;j++)
for(i=0;i<220;i++);
}
void forward(void)
{
P3=0xfe;
delay();
P3=0xfd;
delay();
P3=0xfb;
delay();
P3=0xf7;
delay();
P3=0xef;
delay();
P3=0xdf;
delay();
P3=0xbf;
delay();
P3=0x7f;
delay();
}
void backward(void)
{
P3=0x7f;
delay();
P3=0xbf;
delay();
P3=0xdf;
delay();
P3=0xef;
delay();
P3=0xf7;
delay();
P3=0xfb;
delay();
P3=0xfd;
delay();
P3=0xfe;
delay();
}
void alter()
{
P3=0xf0;
delay();
P3=0x0f;
delay();
}
void blink(void)
{
P3=0x00;
delay();
P3=0Xff;
delay();
}
void main(void)
{
keyval=0;
while(1)
{
keyscan();
switch(keyval)
{
case 1:forward();break;
case 2:backward();break;
case 3:alter();break;
case 4:blink();break;
}
}
}
|