独立按键简单操作(嘿嘿,有点花里胡哨)(keil5)

刚刚简单了解
sbit是定义***一个引脚***
sfr 是定义***一个并行口***(如P2算一个并行口,有8个引脚)
#define是相当于换名之类的,(当然是自我理解,我不知道专业术语怎么说)就比如这串代码***P2=0X8f&(P2|0xe0);//打开y4锁存器***,如果你不想接下来都打这么长,那你可以***#define Y4 P2=0X8f&(P2|0xe0);***这样,接下来要用时可以写***Y4;***就好了。总之#define不能定义引脚和并行口。

#include <STC15F2K60S2.H>
sbit s7 = P3^0;//定义P30引脚,也可以直接使用P30
sbit s6 = P3^1;//定义P31引脚,也可以直接使用P31
/***************************************************/
void initsystem(unsigned char i)//初始化
{
	switch(i)
	{
		case 4:
			P2=0X8f&(P2|0xe0);//打开y4锁存器
		break;
		case 5:
			P2=0xbf&(P2|0xe0);//打开y5锁存器
		break;
		case 6:
			P2=0xdf&(P2|0xe0);//打开y6锁存器
		break;
		case 7:
			P2=0xff&(P2|0xe0);//打开y7锁存器
		break;
		case 0:
		P2=0x1f&(P2|0xe0);//关闭锁存器(y4,y5,y6,y7)
		break;
	}
}
/***********************************************/

void led_control(unsigned char n,unsigned char q)//控制灯(p0端,锁存器)
{
	initsystem(q);
	P0 = n;
}
/*******************************************/

void Delay (unsigned int t)//延时
{
	while(t--);
	while(t--);
}
/********************************************/

void LED_Running ()//跑马灯
{
	unsigned char i;
	for (i=0;i<3;i++)//灯全亮灭3次
	{
		led_control(0x00,4);
		Delay (60000);
		led_control(0xff,4);
		Delay (60000);

	}
	for(i=1;i<8;i++)//灯依次亮
	{
		led_control(0xff<<i,4);
		Delay(60000);

	} 
	for(i=1;i<8;i++)//灯依次灭
	{
		led_control(~(0xff<<i),4);
		Delay(60000);

	}
}
/**********************************************/
void LED_1()//间隔闪灯
{
	led_control(0xaa,4);
	Delay (10000);
	led_control(0x55,4);
	Delay (10000);
}
/*********************************************************/
void key_alone()//按s7执行跑马灯,按s6执行间隔闪灯
{
	if(s7==0)//或P30==0
	Delay(60000);
	if(s7==0)//或P30==0
	{
		LED_Running ();
	}
	if(s7==1)//或P30==1
	{
		led_control(0xff,4);
	}
/**********************************************/
	if(s6==0)//或P31==0
		Delay(60000);
	if(P31==0)//或P31==0
	{
		LED_1();
	}
	if(s6==1)//或P31==1
	{
		led_control(0xff,4);
	}

	}
	/***************************************************/
void main()//主函数
{
	led_control(0Xff,4);initsystem(0);//初始化
	led_control(0x00,5);initsystem(0);//初始化
	while(1)
	{
		key_alone();
	}
}


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值