目录
1.现象
2.代码
3.LED模块原理图
4.线性键盘原理图
1.现象
程序下载完成后: 首先,由最右边的 LED1 点亮。当按下线性按键 S1 后,LED1 熄灭,LED2 点亮。其次,每按下一次 S1,当前的 LED 熄灭,相邻的左边第一个 LED 灯 点亮(视觉效果:每按一次按键,LED向左位移一位)。最后,当LED点亮至第八个(LED8)后,再按一次按键 S1,LED8 熄灭,LED1 重新点亮,即完成一次循环。这便是手动流水灯的程序效果,代码如下:
2.代码
main.c
#include "stc15f2k60s2.h"
#include "tim.h"
#include "intrins.h"
unsigned char keyval;
bit flag10ms;
sbit k1=P3^2;//定义按键k1
//定时器0
void timer0() interrupt 1
{
static unsigned char i;
i++;
if(i>=2)
{
flag10ms = 1;
i = 0;
}
}
//中断0
void intr0(void) interrupt 0
{
flag10ms = 0;//按键消抖
if(k1 == 0)
{
unsigned char i;
switch(i)//判断按键键值
{
case 0:keyval=0;break;
case 1:keyval=1;break;
case 2:keyval=2;break;
case 3:keyval=3;break;
case 4:keyval=4;break;
case 5:keyval=5;break;
case 6:keyval=6;break;
case 7:keyval=7;break;
}
i++;
if(i==8)i=0;
}
}
//主函数
void main(void)
{
Timer0Init();//定时器0
EX0 = 1;//边沿触发方式(下降沿)
IT0 = 1;
EX1 = 1;//边沿触发方式(下降沿)
IT1 = 1;
EA =1;//开启总中断
while(1)
{
P0=~(0x01<<keyval);//按一下流水灯移动一位,方向为LED1~LED8
}
}
3.LED模块原理图
4.线性键盘原理图
注意: 此处 S1、S2 分别连接 INT0(外部中断0)、INT1(外部中断1)