矩阵流水灯点亮--基于89c52

一 功能介绍

        点击S2左侧矩阵灯依次点亮再次点击反序关闭,点击S3右侧矩阵灯依次点亮再次点击反序关闭,S4负责总开总关,若左/右一侧矩阵灯点击则另一侧打开,若全开情况下则全部关闭,反之亦然.

使用工具:清翔电子开发板,电和脑子

二 视频效果

        效果如功能介绍所示,分别点击S2,S3,S4,当点击S4时检测右侧矩阵灯未亮所以将其点亮,再次点击发现矩阵灯全亮则将其关闭.

流水灯效果

 三 代码展示

#include<reg51.h>
sbit JVZHEN3_OUT =P1^1;
sbit JVZHEN4_OUT =P1^2;
sbit JVZHEN5_OUT =P1^3;
sbit JVZHEN6_OUT =P1^4;
sbit JVZHEN7_OUT =P1^5;
sbit JVZHEN8_OUT =P1^6;
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
unsigned int K1_state=0;
unsigned int K2_state=0;
unsigned int K3_state=0;
unsigned int pp1,pp2;
void delay(unsigned char i)
{
	unsigned char m,n;
	for(m=i;m>0;m--)
	for(n=125;n>0;n--);
}

void main()
{		
	TMOD=0x01;		 //模式设置,00000001,可见采用的是定时器0,工作与模式1(M1=0,M0=1)。
	TR0=1;			 //打开定时器
	TH0=0Xff;		 //定时器设置,每隔100微秒发起一次中断。
	TL0=0Xa4;
	ET0=1;			 //开定时器0中断
	EA=1;			 //开总中断

    while(1)
    {
		if(K1==0){
			delay(100);
			pp1=0;
			K1_state=!K1_state;
		}

		if(K2==0){
			delay(100);
			pp2=0;
			K2_state=!K2_state;
		}

		if(K3==0){
			delay(100);
			pp1=0;
			pp2=0;
			
			K3_state=!K3_state;
		}

    }
}
void time0() interrupt 1
{	TH0=0Xff;
	TL0=0Xa4;
	pp1++;
	pp2++;

		if(K1_state==1){
			JVZHEN3_OUT=0;
			if(pp1==3000){
				JVZHEN4_OUT=0;
			}
			if(pp1==6000){
				JVZHEN5_OUT=0;
				pp1=0;
			}
		}else{
			JVZHEN5_OUT=1;
			if(pp1==3000){
				JVZHEN4_OUT=1;
			}
			if(pp1==6000){
				JVZHEN3_OUT=1;
				pp1=0;
			}
		}


		if(K2_state==1){
			JVZHEN8_OUT=0;
			if(pp2==3000){
				JVZHEN7_OUT=0;
			}
			if(pp2==6000){
				JVZHEN6_OUT=0;
				pp2=0;
			}
		}else{
			JVZHEN6_OUT=1;
			if(pp2==3000){
				JVZHEN7_OUT=1;
			}
			if(pp2==6000){
				JVZHEN8_OUT=1;
				pp2=0;
			}
		}

		if(K3_state==1){
			

			if(K1_state==0&&K2_state==0){
				K1_state=1;	
				K2_state=1;
			}else if (K1_state==0)
			{
				K1_state=1;	
			}else if (K2_state==0)
			{
				K2_state=1;
			}
			
			else if(K1_state==1&&K2_state==1){
				K1_state=0;
				K2_state=0;
			}
			
			K3_state=0;
		}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值