不辜负每个朝阳,不荒废每个深夜,因平凡而奋斗,因奋斗而不平凡
----------夜色的繁星
QQ:
1207868880
#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 = 0xfe; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P2 = temp; //赋值给P1,点亮LED8
delay(250); //延时250毫秒,延时不易过长,最好不要超过300
temp = _crol_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=1) break;
}
; break;//第一列被按下
case 2: temp = 0xfe; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P2 = temp; //赋值给P1,点亮LED8
delay(250); //延时1000毫秒
temp = _crol_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=2) break;
}
; break;//第二列被按下
case 3: temp = 0x7f ; //定义LED灯初始状态,从LED8开始亮
while(1)
{
P2 = temp; //赋值给P1,点亮LED8
delay(250); //延时1000毫秒
temp = _cror_(temp,1);//循环右移,LED从左至右点亮
key();
if(k!=3) break;
}
; break;//第三列被按下
case 4: P2=0xff; break;//第四列被按下
}
}
}
void key()
{
if(kai_shi == 0)//判断S2是否被按下
{
delay(5);//按键消抖
if(kai_shi == 0)
{
k=1;
while(!kai_shi);//松手检测
}
}
if(zuo_yi_key == 0)//判断S2是否被按下
{
delay(5);//按键消抖
if(zuo_yi_key == 0)
{
k=2;
while(!zuo_yi_key);//松手检测
}
}
if(you_yi_key == 0)//判断S2是否被按下
{
delay(5);//按键消抖
if(you_yi_key == 0)
{
k=3;
while(!you_yi_key);//松手检测
}
}
if(guan_bi == 0)//判断S2是否被按下
{
delay(5);//按键消抖
if(guan_bi == 0)
{
k=4;
while(!guan_bi);//松手检测
}
}
}
第二版本
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void san();
void wu();
void delay(uint);
sbit key2=P1^0;//关闭彩灯的开关
sbit key1=P1^1;//启动彩灯的开关
sbit key3=P1^2;//控制彩灯右移的开关
sbit key4=P1^3;//控制彩灯左移的开关
uchar temp;//定义一个无符号字符型数据变量
uchar temp1;//定义一个无符号字符型数据变量
uchar temp2;//定义一个无符号字符型数据变量
uint a;
int c;
void main()//主程序
{
while(1)//判断哪个开关被按下
{
if(key1==0)
{
san();
}
if(key2==0)
{
P2=0xff;
}
if(key3==0)
{
san();
}
if(key4==0)
{
wu();
}
}
}
void san()
{
uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义一个数组
for(a=0;a<8;a++)
{
temp=table[a];//将数组赋值给变量temp
P2=temp;
delay(300);//延时
}
}
void delay(uint z)//延时程序
{
uint x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
void wu()
{
uchar table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义一个数组
for(c=7;c>-1;c--)
{
temp1=table1[c];//将数组赋值给变量temp1
P2=temp1;
delay(300);//延时
}
}