不辜负每个朝阳,不荒废每个深夜,因平凡而奋斗,因奋斗而不平凡
专接本电子信息二班你超哥
#include <reg52.h> //51头文件
#include <intrins.h>//包含循环右移函数_cror头文件
#define uchar unsigned char //宏定义
#define uint unsigned int //宏定义
sbit kai_shi = P1^0;//S0开始
sbit guan_bi = P1^1;//S1关闭
sbit zuo_yi_key = P1^2;//下移
sbit you_yi_key = P1^3;//上移
sbit flag = P3^2; //外部中断信号产生脚
unsigned char temp;//P1口状态暂存变量
unsigned char k;
void key();
//毫秒级延时函数
void delay(uint z)
{
uint x,y;
for(x = z; x > 0; x--)
for(y = 120; y > 0 ; y--);
}
//主函数
void main()
{
while(1)
{
key();
switch(k) //判断那一列被按下
{
case 1: temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P0 = temp; //赋值给P1,点亮LED8
delay(500); //延时1000毫秒
temp = _crol_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=1) break;
}
; break;//第一列被按下
case 2: temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P0 = temp; //赋值给P1,点亮LED8
delay(500); //延时1000毫秒
temp = _crol_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=2) break;
}
; break;//第二列被按下
case 3: temp = 0xfe; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P0 = temp; //赋值给P1,点亮LED8
delay(500); //延时1000毫秒
temp = _cror_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=3) break;
}
; break;//第三列被按下
case 4: P0=0xff; break;//第四列被按下
}
}
}
void key()
{
if(kai_shi == 0)//判断S2是否被按下
{
delay(20);//按键消抖
if(kai_shi == 0)
{
k=1;
while(!kai_shi);//松手检测
}
}
if(zuo_yi_key == 0)//判断S2是否被按下
{
delay(20);//按键消抖
if(zuo_yi_key == 0)
{
k=2;
while(!zuo_yi_key);//松手检测
}
}
if(you_yi_key == 0)//判断S2是否被按下
{
delay(20);//按键消抖
if(you_yi_key == 0)
{
k=3;
while(!you_yi_key);//松手检测
}
}
if(guan_bi == 0)//判断S2是否被按下
{
delay(20);//按键消抖
if(guan_bi == 0)
{
k=4;
while(!guan_bi);//松手检测
}
}
}