仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#include<reg51.h>
sbit S1=P1^0;
sbit S2=P1^1;
sbit S3=P1^2;
sbit S4=P1^3;
unsigned char keyval; //定义键值储存变量单元
void key_scan(void); //函数:键盘扫描
void forward(void); //函数:正向流水点亮LED
void backward(void); //函数:反向流水点亮LED
void Alter(void); //函数:交替点亮高4位与低4位LED
void blink(void); //函数:闪烁点亮LED
void led_delay(void); //函数:延时
void delay10ms(void); //函数:软件消抖延时10ms
void main(void)
{
keyval=0;
while(1)
{
key_scan(); //调用键盘扫描函数
switch(keyval)
{
case 1:
forward(); //键值为1,调用正向流水点亮函数
break;
case 2:
backward(); //键值为2,调用反向流水点亮函数
break;
case 3:
Alter(); //键值为3,调用高、低4位交替点亮函数
break;
case 4:
blink (); //键值为4,调用闪烁点亮函数
break;
}
}
}
void key_scan(void) //函数功能:键盘扫描
{
P1=0xff;
if((P1&0x0f)!=0x0f) //检测是否有键按下
{
delay10ms(); //延时10ms再去检测
if(S1==0)
keyval=1;
if(S2==0)
keyval=2;
if(S3==0)
keyval=3;
if(S4==0)
keyval=4;
}
}
全部资料51hei下载地址:
升级流水灯-四个独立按键中断方式.zip
(65 KB, 下载次数: 54)
|