基于51单片机的联合控制开关LED小灯proteus仿真

硬件设计

链接:https://pan.baidu.com/s/1mxe_B9dwjn2SDjha5Pmpzg
提取码:psmi
在这里插入图片描述

#include"reg52.h"
 sbit C1=P3^0; //定义数码管四个引脚
 sbit C2=P3^1;
 sbit C3=P3^2;
 sbit C4=P3^3;

 unsigned char F=0;	  //定义系统是否开启
 unsigned char A=0;	  //定义D3灯开关次数

 sbit D1=P1^0;		  //LED引脚
 sbit D2=P1^1;
 sbit D3=P1^2;
 
 sbit SW1=P2^0;		   //开关引脚
 sbit SW2=P2^1;
 unsigned char s1=0,s2=0;  //数显管开关次数
 unsigned char SMG[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
 void SMGDelay(unsigned char t)	   //此处为延时函数定义
   {
   while(t--);
   } 
 void SMGPLAY(unsigned char P,unsigned char D)	 //四个数显管的显示位置
   {
    P0=0xff; //消隐
  	  switch(P)
	  {
	  case 1:C1=1;C2=0;C3=0;C4=0;break;
	  case 2:C1=0;C2=1;C3=0;C4=0;break;
	  case 3:C1=0;C2=0;C3=1;C4=0;break;
	  case 4:C1=0;C2=0;C3=0;C4=1;break;
	  }
	  P0=D;
   }
  
  void PUT4SMG()  //定义四个数显管显示内容
  {
   SMGPLAY(1,SMG[s1]);
   SMGDelay(100);
   SMGPLAY(2,0xbf);
   SMGDelay(100);
   SMGPLAY(3,0xbf);
   SMGDelay(100);
   SMGPLAY(4,SMG[s2]);
   SMGDelay(100);
  }
  void KEYS()	   //定义开关按下次数和系统开关和小灯泡亮灭
  {
  if(SW1==0)
   {
  SMGDelay(100);
  if(SW1==0)
    {
  while(SW1==0)
     {
   PUT4SMG();
     }
	 s1++;
	 if(s1==10)
	 {
	  s1=0;
	 } 
	if(F==0) 
	  {
	  F=1;
	  D1=0;
	  }
	  else
	  {
	  F=0;
	  D1=1;
	  D2=1;
	  D3=1;
	  A=0;
	  }
	 
    }
   }
if(SW2==0)
   {
  SMGDelay(100);
  if(SW2==0)
    {
  while(SW2==0)
     {
   PUT4SMG();
     }
	 s2++;
	 if(s2==10)
	  {
	  s2=0;
	  }
	  if(F==1)
	  {
	  A++;
	  switch(A)
	  {
	  case 1:D2=0;break;
	  case 2:D3=0;break;
	  case 3:D2=1;D3=1;A=0;break;
	  }
	  }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值